diff --git a/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle
+++ b/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActionBarCompat-Basic/README.md b/prebuilts/gradle/ActionBarCompat-Basic/README.md
index 95b573c..c1aebb5 100644
--- a/prebuilts/gradle/ActionBarCompat-Basic/README.md
+++ b/prebuilts/gradle/ActionBarCompat-Basic/README.md
@@ -36,7 +36,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ActionBarCompat-Basic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActionBarCompat-Basic/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ActionBarCompat-Basic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ActionBarCompat-Basic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle
+++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
index 0b1b1d8..c5357bf 100644
--- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
+++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
@@ -18,7 +18,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/Application/build.gradle
+++ b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
index d43849e..362ff31 100644
--- a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
+++ b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
@@ -23,7 +23,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle
+++ b/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActionBarCompat-Styled/README.md b/prebuilts/gradle/ActionBarCompat-Styled/README.md
index 88355b2..2c0a666 100644
--- a/prebuilts/gradle/ActionBarCompat-Styled/README.md
+++ b/prebuilts/gradle/ActionBarCompat-Styled/README.md
@@ -24,7 +24,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ActionBarCompat-Styled/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActionBarCompat-Styled/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ActionBarCompat-Styled/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ActionBarCompat-Styled/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ActiveNotifications/Application/build.gradle b/prebuilts/gradle/ActiveNotifications/Application/build.gradle
index ac3f7c0..51c1a47 100644
--- a/prebuilts/gradle/ActiveNotifications/Application/build.gradle
+++ b/prebuilts/gradle/ActiveNotifications/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 24
diff --git a/prebuilts/gradle/ActiveNotifications/README.md b/prebuilts/gradle/ActiveNotifications/README.md
index dcfa70e..36f8503 100644
--- a/prebuilts/gradle/ActiveNotifications/README.md
+++ b/prebuilts/gradle/ActiveNotifications/README.md
@@ -32,7 +32,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ActiveNotifications/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActiveNotifications/gradle/wrapper/gradle-wrapper.properties
index fdb8024..1081cc3 100644
--- a/prebuilts/gradle/ActiveNotifications/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ActiveNotifications/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle b/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle
+++ b/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActivityInstrumentation/README.md b/prebuilts/gradle/ActivityInstrumentation/README.md
index 09ec4e1..9e49674 100644
--- a/prebuilts/gradle/ActivityInstrumentation/README.md
+++ b/prebuilts/gradle/ActivityInstrumentation/README.md
@@ -9,7 +9,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/ActivityInstrumentation/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActivityInstrumentation/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ActivityInstrumentation/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ActivityInstrumentation/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ActivitySceneTransitionBasic/Application/build.gradle b/prebuilts/gradle/ActivitySceneTransitionBasic/Application/build.gradle
index a3a86e5..f63bd6e 100644
--- a/prebuilts/gradle/ActivitySceneTransitionBasic/Application/build.gradle
+++ b/prebuilts/gradle/ActivitySceneTransitionBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.squareup.picasso:picasso:2.4.0'
 }
 
@@ -33,7 +33,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ActivitySceneTransitionBasic/README.md b/prebuilts/gradle/ActivitySceneTransitionBasic/README.md
index bc6e631..90dba48 100644
--- a/prebuilts/gradle/ActivitySceneTransitionBasic/README.md
+++ b/prebuilts/gradle/ActivitySceneTransitionBasic/README.md
@@ -20,7 +20,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ActivitySceneTransitionBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActivitySceneTransitionBasic/gradle/wrapper/gradle-wrapper.properties
index 1534e1e..693f20f 100644
--- a/prebuilts/gradle/ActivitySceneTransitionBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ActivitySceneTransitionBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle b/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle
index ebbee86..28e75d6 100644
--- a/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle
+++ b/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/AdvancedImmersiveMode/README.md b/prebuilts/gradle/AdvancedImmersiveMode/README.md
index 1e1b793..895d62a 100644
--- a/prebuilts/gradle/AdvancedImmersiveMode/README.md
+++ b/prebuilts/gradle/AdvancedImmersiveMode/README.md
@@ -27,7 +27,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/AdvancedImmersiveMode/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AdvancedImmersiveMode/gradle/wrapper/gradle-wrapper.properties
index 27b249f..0e72654 100644
--- a/prebuilts/gradle/AdvancedImmersiveMode/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AdvancedImmersiveMode/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AgendaData/Application/build.gradle b/prebuilts/gradle/AgendaData/Application/build.gradle
index 947739f..d2bd9b8 100644
--- a/prebuilts/gradle/AgendaData/Application/build.gradle
+++ b/prebuilts/gradle/AgendaData/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,13 +16,13 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:design:24.0.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -36,7 +36,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/AgendaData/README.md b/prebuilts/gradle/AgendaData/README.md
index 9e63d20..4acf66f 100644
--- a/prebuilts/gradle/AgendaData/README.md
+++ b/prebuilts/gradle/AgendaData/README.md
@@ -23,7 +23,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/AgendaData/Wearable/build.gradle b/prebuilts/gradle/AgendaData/Wearable/build.gradle
index 6d32f80..841eb5a 100644
--- a/prebuilts/gradle/AgendaData/Wearable/build.gradle
+++ b/prebuilts/gradle/AgendaData/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/AgendaData/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AgendaData/gradle/wrapper/gradle-wrapper.properties
index f16d65d..21a31e1 100644
--- a/prebuilts/gradle/AgendaData/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AgendaData/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AlwaysOn/README.md b/prebuilts/gradle/AlwaysOn/README.md
index 993a631..821b1e4 100644
--- a/prebuilts/gradle/AlwaysOn/README.md
+++ b/prebuilts/gradle/AlwaysOn/README.md
@@ -25,7 +25,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/AlwaysOn/Wearable/build.gradle b/prebuilts/gradle/AlwaysOn/Wearable/build.gradle
index 180a1da..f573244 100644
--- a/prebuilts/gradle/AlwaysOn/Wearable/build.gradle
+++ b/prebuilts/gradle/AlwaysOn/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -19,8 +19,8 @@
 
     provided "com.google.android.wearable:wearable:1.0.0"
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -37,7 +37,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/AlwaysOn/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AlwaysOn/gradle/wrapper/gradle-wrapper.properties
index 4e239ca..c8203a8 100644
--- a/prebuilts/gradle/AlwaysOn/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AlwaysOn/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/Application/build.gradle b/prebuilts/gradle/AppRestrictionEnforcer/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/Application/build.gradle
+++ b/prebuilts/gradle/AppRestrictionEnforcer/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/AppRestrictionEnforcerFragment.java b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/AppRestrictionEnforcerFragment.java
index 361c4ac..908f904 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/AppRestrictionEnforcerFragment.java
+++ b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/AppRestrictionEnforcerFragment.java
@@ -90,13 +90,6 @@
     private static final String RESTRICTION_KEY_APPROVALS = "approvals";
 
     /**
-     * Key for the bundle restriction in AppRestrictionSchema.
-     */
-    private static final String RESTRICTION_KEY_PROFILE = "profile";
-    private static final String RESTRICTION_KEY_PROFILE_NAME = "name";
-    private static final String RESTRICTION_KEY_PROFILE_AGE = "age";
-
-    /**
      * Key for the bundle array restriction in AppRestrictionSchema.
      */
     private static final String RESTRICTION_KEY_ITEMS = "items";
@@ -119,8 +112,6 @@
     private EditText mEditNumber;
     private Spinner mSpinnerRank;
     private LinearLayout mLayoutApprovals;
-    private EditText mEditProfileName;
-    private EditText mEditProfileAge;
     private LinearLayout mLayoutItems;
 
     @Override
@@ -137,17 +128,12 @@
         mEditNumber = (EditText) view.findViewById(R.id.number);
         mSpinnerRank = (Spinner) view.findViewById(R.id.rank);
         mLayoutApprovals = (LinearLayout) view.findViewById(R.id.approvals);
-        mEditProfileName = (EditText) view.findViewById(R.id.profile_name);
-        mEditProfileAge = (EditText) view.findViewById(R.id.profile_age);
         mLayoutItems = (LinearLayout) view.findViewById(R.id.items);
         view.findViewById(R.id.item_add).setOnClickListener(this);
-        View bundleLayout = view.findViewById(R.id.bundle_layout);
         View bundleArrayLayout = view.findViewById(R.id.bundle_array_layout);
         if (BUNDLE_SUPPORTED) {
-            bundleLayout.setVisibility(View.VISIBLE);
             bundleArrayLayout.setVisibility(View.VISIBLE);
         } else {
-            bundleLayout.setVisibility(View.GONE);
             bundleArrayLayout.setVisibility(View.GONE);
         }
     }
@@ -197,21 +183,6 @@
         }
     };
 
-    private TextWatcher mWatcherProfile = new EasyTextWatcher() {
-        @Override
-        public void afterTextChanged(Editable s) {
-            try {
-                String name = mEditProfileName.getText().toString();
-                String ageString = mEditProfileAge.getText().toString();
-                if (!TextUtils.isEmpty(ageString)) {
-                    saveProfile(getActivity(), name, Integer.parseInt(ageString));
-                }
-            } catch (NumberFormatException e) {
-                Toast.makeText(getActivity(), "Not an integer!", Toast.LENGTH_SHORT).show();
-            }
-        }
-    };
-
     @Override
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
         switch (parent.getId()) {
@@ -292,20 +263,6 @@
                                         TextUtils.join(DELIMETER,
                                                 restriction.getAllSelectedStrings())),
                                 DELIMETER));
-            } else if (BUNDLE_SUPPORTED && RESTRICTION_KEY_PROFILE.equals(key)) {
-                String name = null;
-                int age = 0;
-                for (RestrictionEntry entry : restriction.getRestrictions()) {
-                    String profileKey = entry.getKey();
-                    if (RESTRICTION_KEY_PROFILE_NAME.equals(profileKey)) {
-                        name = entry.getSelectedString();
-                    } else if (RESTRICTION_KEY_PROFILE_AGE.equals(profileKey)) {
-                        age = entry.getIntValue();
-                    }
-                }
-                name = prefs.getString(RESTRICTION_KEY_PROFILE_NAME, name);
-                age = prefs.getInt(RESTRICTION_KEY_PROFILE_AGE, age);
-                updateProfile(name, age);
             } else if (BUNDLE_SUPPORTED && RESTRICTION_KEY_ITEMS.equals(key)) {
                 String itemsString = prefs.getString(RESTRICTION_KEY_ITEMS, "");
                 HashMap<String, String> items = new HashMap<>();
@@ -362,22 +319,6 @@
         }
     }
 
-    private void updateProfile(String name, int age) {
-        if (!BUNDLE_SUPPORTED) {
-            return;
-        }
-        Bundle profile = new Bundle();
-        profile.putString(RESTRICTION_KEY_PROFILE_NAME, name);
-        profile.putInt(RESTRICTION_KEY_PROFILE_AGE, age);
-        mCurrentRestrictions.putBundle(RESTRICTION_KEY_PROFILE, profile);
-        mEditProfileName.removeTextChangedListener(mWatcherProfile);
-        mEditProfileName.setText(name);
-        mEditProfileName.addTextChangedListener(mWatcherProfile);
-        mEditProfileAge.removeTextChangedListener(mWatcherProfile);
-        mEditProfileAge.setText(String.valueOf(age));
-        mEditProfileAge.addTextChangedListener((mWatcherProfile));
-    }
-
     private void updateItems(Context context, Map<String, String> items) {
         if (!BUNDLE_SUPPORTED) {
             return;
@@ -511,25 +452,6 @@
     }
 
     /**
-     * Saves the value for the "profile" restriction of AppRestrictionSchema.
-     *
-     * @param activity The activity
-     * @param name     The value to be set for the "name" field.
-     * @param age      The value to be set for the "age" field.
-     */
-    private void saveProfile(Activity activity, String name, int age) {
-        if (!BUNDLE_SUPPORTED) {
-            return;
-        }
-        Bundle profile = new Bundle();
-        profile.putString(RESTRICTION_KEY_PROFILE_NAME, name);
-        profile.putInt(RESTRICTION_KEY_PROFILE_AGE, age);
-        mCurrentRestrictions.putBundle(RESTRICTION_KEY_PROFILE, profile);
-        saveRestrictions(activity);
-        editPreferences(activity).putString(RESTRICTION_KEY_PROFILE_NAME, name).apply();
-    }
-
-    /**
      * Saves the value for the "items" restriction of AppRestrictionSchema.
      *
      * @param activity The activity.
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/ItemAddFragment.java b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/ItemAddFragment.java
index cda2726..091a0a8 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/ItemAddFragment.java
+++ b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/ItemAddFragment.java
@@ -17,6 +17,7 @@
 package com.example.android.apprestrictionenforcer;
 
 import android.app.Activity;
+import android.content.Context;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v4.app.DialogFragment;
@@ -42,10 +43,10 @@
     private EditText mEditValue;
 
     @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
+    public void onAttach(Context context) {
+        super.onAttach(context);
         Fragment parentFragment = getParentFragment();
-        mListener = (OnItemAddedListener) (parentFragment == null ? activity : parentFragment);
+        mListener = (OnItemAddedListener) (parentFragment == null ? context : parentFragment);
     }
 
     @Override
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/MainActivity.java b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/MainActivity.java
index c6b012b..85eace9 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/MainActivity.java
+++ b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/MainActivity.java
@@ -62,7 +62,7 @@
 
     private void showSetupProfile() {
         getSupportFragmentManager().beginTransaction()
-                .replace(R.id.container, new SetupProfileFragment())
+                .replace(R.id.container, SetupProfileFragment.newInstance())
                 .commit();
     }
 
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/SetupProfileFragment.java b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/SetupProfileFragment.java
index 4dbd930..29c36d4 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/SetupProfileFragment.java
+++ b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/java/com/example/android/apprestrictionenforcer/SetupProfileFragment.java
@@ -18,6 +18,7 @@
 
 import android.app.Activity;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
@@ -28,6 +29,7 @@
 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE;
 import static android.app.admin.DevicePolicyManager.EXTRA_DEVICE_ADMIN;
 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME;
+import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME;
 
 /**
  * This {@link Fragment} handles initiation of managed profile provisioning.
@@ -74,9 +76,14 @@
             return;
         }
         Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE);
-        intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
-                activity.getApplicationContext().getPackageName());
-        intent.putExtra(EXTRA_DEVICE_ADMIN, EnforcerDeviceAdminReceiver.getComponentName(activity));
+        if (Build.VERSION.SDK_INT >= 24) {
+            intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME,
+                    EnforcerDeviceAdminReceiver.getComponentName(activity));
+        } else {
+            intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
+                    activity.getApplicationContext().getPackageName());
+            intent.putExtra(EXTRA_DEVICE_ADMIN, EnforcerDeviceAdminReceiver.getComponentName(activity));
+        }
         if (intent.resolveActivity(activity.getPackageManager()) != null) {
             startActivityForResult(intent, REQUEST_PROVISION_MANAGED_PROFILE);
             activity.finish();
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/res/layout/fragment_app_restriction_enforcer.xml b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/res/layout/fragment_app_restriction_enforcer.xml
index b683989..95d605c 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/res/layout/fragment_app_restriction_enforcer.xml
+++ b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/res/layout/fragment_app_restriction_enforcer.xml
@@ -119,34 +119,6 @@
 
         </LinearLayout>
 
-        <LinearLayout
-            android:id="@+id/bundle_layout"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:text="@string/profile"/>
-
-            <EditText
-                android:id="@+id/profile_name"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="0.75"
-                android:hint="@string/name"/>
-
-            <EditText
-                android:id="@+id/profile_age"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="0.25"
-                android:hint="@string/age"
-                android:inputType="number"/>
-
-        </LinearLayout>
-
         <RelativeLayout
             android:id="@+id/bundle_array_layout"
             android:layout_width="match_parent"
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/res/values/strings.xml b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/res/values/strings.xml
index ead4152..07e1c85 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/res/values/strings.xml
+++ b/prebuilts/gradle/AppRestrictionEnforcer/Application/src/main/res/values/strings.xml
@@ -29,9 +29,6 @@
     <string name="number">Number: </string>
     <string name="rank">Rank: </string>
     <string name="approvals">Approvals: </string>
-    <string name="profile">Profile: </string>
-    <string name="name">Name</string>
-    <string name="age">Age</string>
     <string name="items">Items: </string>
     <string name="add">Add</string>
     <string name="key">Key</string>
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/README.md b/prebuilts/gradle/AppRestrictionEnforcer/README.md
index 455f86f..9b01a94 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/README.md
+++ b/prebuilts/gradle/AppRestrictionEnforcer/README.md
@@ -9,7 +9,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/AppRestrictionEnforcer/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppRestrictionEnforcer/gradle/wrapper/gradle-wrapper.properties
index 2139f4b..2d393d4 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AppRestrictionEnforcer/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Dec 01 16:00:44 JST 2014
+#Fri Sep 09 09:42:15 JST 2016
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/build.gradle b/prebuilts/gradle/AppRestrictionSchema/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/AppRestrictionSchema/Application/build.gradle
+++ b/prebuilts/gradle/AppRestrictionSchema/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/java/com/example/android/apprestrictionschema/AppRestrictionSchemaFragment.java b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/java/com/example/android/apprestrictionschema/AppRestrictionSchemaFragment.java
index bbb1ef8..f15bd9d 100644
--- a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/java/com/example/android/apprestrictionschema/AppRestrictionSchemaFragment.java
+++ b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/java/com/example/android/apprestrictionschema/AppRestrictionSchemaFragment.java
@@ -51,9 +51,6 @@
     private static final String KEY_NUMBER = "number";
     private static final String KEY_RANK = "rank";
     private static final String KEY_APPROVALS = "approvals";
-    private static final String KEY_PROFILE = "profile";
-    private static final String KEY_PROFILE_NAME = "name";
-    private static final String KEY_PROFILE_AGE = "age";
     private static final String KEY_ITEMS = "items";
     private static final String KEY_ITEM_KEY = "key";
     private static final String KEY_ITEM_VALUE = "value";
@@ -69,7 +66,6 @@
     private TextView mTextNumber;
     private TextView mTextRank;
     private TextView mTextApprovals;
-    private TextView mTextProfile;
     private TextView mTextItems;
 
     @Override
@@ -86,18 +82,15 @@
         mTextRank = (TextView) view.findViewById(R.id.your_rank);
         mTextApprovals = (TextView) view.findViewById(R.id.approvals_you_have);
         View bundleSeparator = view.findViewById(R.id.bundle_separator);
-        mTextProfile = (TextView) view.findViewById(R.id.your_profile);
         View bundleArraySeparator = view.findViewById(R.id.bundle_array_separator);
         mTextItems = (TextView) view.findViewById(R.id.your_items);
         mButtonSayHello.setOnClickListener(this);
         if (BUNDLE_SUPPORTED) {
             bundleSeparator.setVisibility(View.VISIBLE);
-            mTextProfile.setVisibility(View.VISIBLE);
             bundleArraySeparator.setVisibility(View.VISIBLE);
             mTextItems.setVisibility(View.VISIBLE);
         } else {
             bundleSeparator.setVisibility(View.GONE);
-            mTextProfile.setVisibility(View.GONE);
             bundleArraySeparator.setVisibility(View.GONE);
             mTextItems.setVisibility(View.GONE);
         }
@@ -128,10 +121,8 @@
                 updateRank(entry, restrictions);
             } else if (key.equals(KEY_APPROVALS)) {
                 updateApprovals(entry, restrictions);
-            } else if (key.equals(KEY_PROFILE)) {
-                updateProfile(entry, restrictions);
             } else if (key.equals(KEY_ITEMS)) {
-                updateItems(entry, restrictions);
+                updateItems(restrictions);
             }
         }
     }
@@ -193,33 +184,7 @@
         mTextApprovals.setText(getString(R.string.approvals_you_have, text));
     }
 
-    private void updateProfile(RestrictionEntry entry, Bundle restrictions) {
-        if (!BUNDLE_SUPPORTED) {
-            return;
-        }
-        String name = null;
-        int age = 0;
-        if (restrictions == null || !restrictions.containsKey(KEY_PROFILE)) {
-            RestrictionEntry[] entries = entry.getRestrictions();
-            for (RestrictionEntry profileEntry : entries) {
-                String key = profileEntry.getKey();
-                if (key.equals(KEY_PROFILE_NAME)) {
-                    name = profileEntry.getSelectedString();
-                } else if (key.equals(KEY_PROFILE_AGE)) {
-                    age = profileEntry.getIntValue();
-                }
-            }
-        } else {
-            Bundle profile = restrictions.getBundle(KEY_PROFILE);
-            if (profile != null) {
-                name = profile.getString(KEY_PROFILE_NAME);
-                age = profile.getInt(KEY_PROFILE_AGE);
-            }
-        }
-        mTextProfile.setText(getString(R.string.your_profile, name, age));
-    }
-
-    private void updateItems(RestrictionEntry entry, Bundle restrictions) {
+    private void updateItems(Bundle restrictions) {
         if (!BUNDLE_SUPPORTED) {
             return;
         }
diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/layout/fragment_app_restriction_schema.xml b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/layout/fragment_app_restriction_schema.xml
index 02d83e6..01bda92 100644
--- a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/layout/fragment_app_restriction_schema.xml
+++ b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/layout/fragment_app_restriction_schema.xml
@@ -68,15 +68,6 @@
             android:textAppearance="?android:attr/textAppearanceMedium"
             tools:text="@string/approvals_you_have"/>
 
-        <include layout="@layout/separator"/>
-
-        <TextView
-            android:id="@+id/your_profile"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            tools:text="@string/your_profile"/>
-
         <include layout="@layout/separator" android:id="@+id/bundle_array_separator" />
 
         <TextView
diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/values/restriction_values.xml b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/values/restriction_values.xml
index 53be746..5870d9c 100644
--- a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/values/restriction_values.xml
+++ b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/values/restriction_values.xml
@@ -34,36 +34,36 @@
     <!-- Choice restriction -->
     <string name="title_rank">Rank</string>
     <string name="description_rank">Rank of the user</string>
+    <string name="entry_rank_apprentice">Apprentice</string>
+    <string name="entry_rank_intermediate">Intermediate</string>
+    <string name="entry_rank_master">Master</string>
     <string-array name="entries_rank">
-        <item>Apprentice</item>
-        <item>Intermediate</item>
-        <item>Master</item>
+        <item>@string/entry_rank_apprentice</item>
+        <item>@string/entry_rank_intermediate</item>
+        <item>@string/entry_rank_master</item>
     </string-array>
-    <string name="entry_value_rank_apprentice">apprentice</string>
-    <string name="entry_value_rank_intermediate">intermediate</string>
-    <string name="entry_value_rank_master">master</string>
     <string-array name="entry_values_rank">
-        <item>@string/entry_value_rank_apprentice</item>
-        <item>@string/entry_value_rank_intermediate</item>
-        <item>@string/entry_value_rank_master</item>
+        <item>apprentice</item>
+        <item>intermediate</item>
+        <item>master</item>
     </string-array>
-    <string name="default_rank">@string/entry_value_rank_apprentice</string>
+    <string name="default_rank">apprentice</string>
 
     <!-- Multi-select restriction -->
     <string name="title_approvals">Approvals</string>
     <string name="description_approvals">Approvals</string>
+    <string name="entry_approvals_read">Read</string>
+    <string name="entry_approvals_write">Write</string>
+    <string name="entry_approvals_execute">Execute</string>
     <string-array name="entries_approvals">
-        <item>Read</item>
-        <item>Write</item>
-        <item>Execute</item>
+        <item>@string/entry_approvals_read</item>
+        <item>@string/entry_approvals_write</item>
+        <item>@string/entry_approvals_execute</item>
     </string-array>
-    <string name="entry_value_approvals_read">read</string>
-    <string name="entry_value_approvals_write">write</string>
-    <string name="entry_value_approvals_execute">execute</string>
     <string-array name="entry_values_approvals">
-        <item>@string/entry_value_approvals_read</item>
-        <item>@string/entry_value_approvals_write</item>
-        <item>@string/entry_value_approvals_execute</item>
+        <item>read</item>
+        <item>write</item>
+        <item>execute</item>
     </string-array>
     <string-array name="default_approvals">
         <!-- Empty -->
diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/values/strings.xml b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/values/strings.xml
index 1ec68d5..2fe6869 100644
--- a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/values/strings.xml
+++ b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/values/strings.xml
@@ -25,7 +25,6 @@
     <string name="your_rank">Your rank: %s</string>
     <string name="approvals_you_have">Approvals you have: %s</string>
     <string name="none">none</string>
-    <string name="your_profile">Your profile: %1$s (%2$d)</string>
     <string name="your_items">Your items: %s</string>
 
 </resources>
diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/xml/app_restrictions.xml b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/xml/app_restrictions.xml
index 1e2ea45..32ec8de 100644
--- a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/xml/app_restrictions.xml
+++ b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/xml/app_restrictions.xml
@@ -72,26 +72,6 @@
         android:restrictionType="hidden"
         android:title="@string/title_secret_code"/>
 
-    <!-- Bundle restriction; useful for grouping restrictions -->
-    <restriction
-        android:description="@string/description_profile"
-        android:key="profile"
-        android:restrictionType="bundle"
-        android:title="@string/title_profile">
-        <restriction
-            android:defaultValue="@string/default_profile_name"
-            android:description="@string/description_profile_name"
-            android:key="name"
-            android:restrictionType="string"
-            android:title="@string/title_profile_name"/>
-        <restriction
-            android:defaultValue="@integer/default_profile_age"
-            android:description="@string/description_profile_age"
-            android:key="age"
-            android:restrictionType="integer"
-            android:title="@string/title_profile_age"/>
-    </restriction>
-
     <!-- Bundle array restriction -->
     <restriction
         android:description="@string/description_items"
diff --git a/prebuilts/gradle/AppRestrictionSchema/README.md b/prebuilts/gradle/AppRestrictionSchema/README.md
index a988a33..7b812b6 100644
--- a/prebuilts/gradle/AppRestrictionSchema/README.md
+++ b/prebuilts/gradle/AppRestrictionSchema/README.md
@@ -55,7 +55,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/AppRestrictionSchema/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppRestrictionSchema/gradle/wrapper/gradle-wrapper.properties
index f1713fa..e03dde3 100644
--- a/prebuilts/gradle/AppRestrictionSchema/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AppRestrictionSchema/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Dec 01 11:44:58 JST 2014
+#Fri Sep 09 09:39:55 JST 2016
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AppRestrictions/Application/build.gradle b/prebuilts/gradle/AppRestrictions/Application/build.gradle
index f0ec485..270b83d 100644
--- a/prebuilts/gradle/AppRestrictions/Application/build.gradle
+++ b/prebuilts/gradle/AppRestrictions/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/AppRestrictions/README.md b/prebuilts/gradle/AppRestrictions/README.md
index e47dc77..64e84ea 100644
--- a/prebuilts/gradle/AppRestrictions/README.md
+++ b/prebuilts/gradle/AppRestrictions/README.md
@@ -13,7 +13,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/AppRestrictions/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppRestrictions/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/AppRestrictions/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AppRestrictions/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AppUsageStatistics/Application/build.gradle b/prebuilts/gradle/AppUsageStatistics/Application/build.gradle
index 14f2dfe..fedc20e 100644
--- a/prebuilts/gradle/AppUsageStatistics/Application/build.gradle
+++ b/prebuilts/gradle/AppUsageStatistics/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:recyclerview-v7:+'
     compile 'com.android.support:appcompat-v7:21.+'
 }
@@ -34,7 +34,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/AppUsageStatistics/README.md b/prebuilts/gradle/AppUsageStatistics/README.md
index 7ce28d9..118677b 100644
--- a/prebuilts/gradle/AppUsageStatistics/README.md
+++ b/prebuilts/gradle/AppUsageStatistics/README.md
@@ -50,7 +50,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/AppUsageStatistics/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppUsageStatistics/gradle/wrapper/gradle-wrapper.properties
index fdad773..6168899 100644
--- a/prebuilts/gradle/AppUsageStatistics/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AppUsageStatistics/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AsymmetricFingerprintDialog/Application/build.gradle b/prebuilts/gradle/AsymmetricFingerprintDialog/Application/build.gradle
index 81a4bcd..82899b6 100644
--- a/prebuilts/gradle/AsymmetricFingerprintDialog/Application/build.gradle
+++ b/prebuilts/gradle/AsymmetricFingerprintDialog/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.squareup.dagger:dagger:1.2.2'
     compile 'com.squareup.dagger:dagger-compiler:1.2.2'
     compile 'junit:junit:4.12'
@@ -36,7 +36,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/AsymmetricFingerprintDialog/README.md b/prebuilts/gradle/AsymmetricFingerprintDialog/README.md
index 79b9a1d..43f9f36 100644
--- a/prebuilts/gradle/AsymmetricFingerprintDialog/README.md
+++ b/prebuilts/gradle/AsymmetricFingerprintDialog/README.md
@@ -39,7 +39,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/AsymmetricFingerprintDialog/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AsymmetricFingerprintDialog/gradle/wrapper/gradle-wrapper.properties
index 3ebd0d1..f4b47ea 100644
--- a/prebuilts/gradle/AsymmetricFingerprintDialog/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AsymmetricFingerprintDialog/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/AutoBackupForApps/Application/build.gradle b/prebuilts/gradle/AutoBackupForApps/Application/build.gradle
index c626117..5494917 100644
--- a/prebuilts/gradle/AutoBackupForApps/Application/build.gradle
+++ b/prebuilts/gradle/AutoBackupForApps/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/AutoBackupForApps/README.md b/prebuilts/gradle/AutoBackupForApps/README.md
index 01c7d7c..cc9107e 100644
--- a/prebuilts/gradle/AutoBackupForApps/README.md
+++ b/prebuilts/gradle/AutoBackupForApps/README.md
@@ -27,7 +27,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/AutoBackupForApps/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AutoBackupForApps/gradle/wrapper/gradle-wrapper.properties
index 03c59c2..1081cc3 100644
--- a/prebuilts/gradle/AutoBackupForApps/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/AutoBackupForApps/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicAccessibility/Application/build.gradle b/prebuilts/gradle/BasicAccessibility/Application/build.gradle
index 906d12f..38bb285 100644
--- a/prebuilts/gradle/BasicAccessibility/Application/build.gradle
+++ b/prebuilts/gradle/BasicAccessibility/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/BasicAccessibility/README.md b/prebuilts/gradle/BasicAccessibility/README.md
index ce6a339..5b849a3 100644
--- a/prebuilts/gradle/BasicAccessibility/README.md
+++ b/prebuilts/gradle/BasicAccessibility/README.md
@@ -21,7 +21,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicAccessibility/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicAccessibility/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicAccessibility/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicAccessibility/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicAndroidKeyStore/Application/build.gradle b/prebuilts/gradle/BasicAndroidKeyStore/Application/build.gradle
index f0ec485..270b83d 100644
--- a/prebuilts/gradle/BasicAndroidKeyStore/Application/build.gradle
+++ b/prebuilts/gradle/BasicAndroidKeyStore/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/BasicAndroidKeyStore/README.md b/prebuilts/gradle/BasicAndroidKeyStore/README.md
index 37b2787..0d18552 100644
--- a/prebuilts/gradle/BasicAndroidKeyStore/README.md
+++ b/prebuilts/gradle/BasicAndroidKeyStore/README.md
@@ -24,7 +24,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicAndroidKeyStore/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicAndroidKeyStore/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicAndroidKeyStore/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicAndroidKeyStore/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicContactables/Application/build.gradle b/prebuilts/gradle/BasicContactables/Application/build.gradle
index 9a791df..8010caa 100644
--- a/prebuilts/gradle/BasicContactables/Application/build.gradle
+++ b/prebuilts/gradle/BasicContactables/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/BasicContactables/README.md b/prebuilts/gradle/BasicContactables/README.md
index 9e69f2c..2e26abb 100644
--- a/prebuilts/gradle/BasicContactables/README.md
+++ b/prebuilts/gradle/BasicContactables/README.md
@@ -26,7 +26,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicContactables/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicContactables/gradle/wrapper/gradle-wrapper.properties
index 6cce24a..3af5e29 100644
--- a/prebuilts/gradle/BasicContactables/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicContactables/gradle/wrapper/gradle-wrapper.properties
@@ -4,4 +4,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicGestureDetect/Application/build.gradle b/prebuilts/gradle/BasicGestureDetect/Application/build.gradle
index f0ec485..270b83d 100644
--- a/prebuilts/gradle/BasicGestureDetect/Application/build.gradle
+++ b/prebuilts/gradle/BasicGestureDetect/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/BasicGestureDetect/README.md b/prebuilts/gradle/BasicGestureDetect/README.md
index 64bfbda..d183142 100644
--- a/prebuilts/gradle/BasicGestureDetect/README.md
+++ b/prebuilts/gradle/BasicGestureDetect/README.md
@@ -25,7 +25,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicGestureDetect/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicGestureDetect/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicGestureDetect/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicGestureDetect/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicImmersiveMode/Application/build.gradle b/prebuilts/gradle/BasicImmersiveMode/Application/build.gradle
index ebbee86..28e75d6 100644
--- a/prebuilts/gradle/BasicImmersiveMode/Application/build.gradle
+++ b/prebuilts/gradle/BasicImmersiveMode/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/BasicImmersiveMode/README.md b/prebuilts/gradle/BasicImmersiveMode/README.md
index 593e72e..782ecc7 100644
--- a/prebuilts/gradle/BasicImmersiveMode/README.md
+++ b/prebuilts/gradle/BasicImmersiveMode/README.md
@@ -20,7 +20,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicImmersiveMode/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicImmersiveMode/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicImmersiveMode/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicImmersiveMode/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicManagedProfile/Application/build.gradle b/prebuilts/gradle/BasicManagedProfile/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/BasicManagedProfile/Application/build.gradle
+++ b/prebuilts/gradle/BasicManagedProfile/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/BasicManagedProfile/README.md b/prebuilts/gradle/BasicManagedProfile/README.md
index 5152a08..d2ff29b 100644
--- a/prebuilts/gradle/BasicManagedProfile/README.md
+++ b/prebuilts/gradle/BasicManagedProfile/README.md
@@ -39,7 +39,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicManagedProfile/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicManagedProfile/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicManagedProfile/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicManagedProfile/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicMediaDecoder/Application/build.gradle b/prebuilts/gradle/BasicMediaDecoder/Application/build.gradle
index b5bef69..04e9516 100644
--- a/prebuilts/gradle/BasicMediaDecoder/Application/build.gradle
+++ b/prebuilts/gradle/BasicMediaDecoder/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 17
diff --git a/prebuilts/gradle/BasicMediaDecoder/README.md b/prebuilts/gradle/BasicMediaDecoder/README.md
index ac4125e..837acd7 100644
--- a/prebuilts/gradle/BasicMediaDecoder/README.md
+++ b/prebuilts/gradle/BasicMediaDecoder/README.md
@@ -55,7 +55,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicMediaDecoder/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicMediaDecoder/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicMediaDecoder/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicMediaDecoder/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicMediaRouter/Application/build.gradle b/prebuilts/gradle/BasicMediaRouter/Application/build.gradle
index b5bef69..04e9516 100644
--- a/prebuilts/gradle/BasicMediaRouter/Application/build.gradle
+++ b/prebuilts/gradle/BasicMediaRouter/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 17
diff --git a/prebuilts/gradle/BasicMediaRouter/README.md b/prebuilts/gradle/BasicMediaRouter/README.md
index b4d711d..0eee9f5 100644
--- a/prebuilts/gradle/BasicMediaRouter/README.md
+++ b/prebuilts/gradle/BasicMediaRouter/README.md
@@ -15,7 +15,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/BasicMediaRouter/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicMediaRouter/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicMediaRouter/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicMediaRouter/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicMultitouch/Application/build.gradle b/prebuilts/gradle/BasicMultitouch/Application/build.gradle
index 43e0208..591fba1 100644
--- a/prebuilts/gradle/BasicMultitouch/Application/build.gradle
+++ b/prebuilts/gradle/BasicMultitouch/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 8
diff --git a/prebuilts/gradle/BasicMultitouch/README.md b/prebuilts/gradle/BasicMultitouch/README.md
index 6f99af4..9b1e8be 100644
--- a/prebuilts/gradle/BasicMultitouch/README.md
+++ b/prebuilts/gradle/BasicMultitouch/README.md
@@ -30,7 +30,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicMultitouch/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicMultitouch/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicMultitouch/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicMultitouch/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicNetworking/Application/build.gradle b/prebuilts/gradle/BasicNetworking/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/BasicNetworking/Application/build.gradle
+++ b/prebuilts/gradle/BasicNetworking/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/BasicNetworking/README.md b/prebuilts/gradle/BasicNetworking/README.md
index 5618f2a..a847f69 100644
--- a/prebuilts/gradle/BasicNetworking/README.md
+++ b/prebuilts/gradle/BasicNetworking/README.md
@@ -23,7 +23,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicNetworking/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicNetworking/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicNetworking/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicNetworking/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicNotifications/Application/build.gradle b/prebuilts/gradle/BasicNotifications/Application/build.gradle
index 43e0208..591fba1 100644
--- a/prebuilts/gradle/BasicNotifications/Application/build.gradle
+++ b/prebuilts/gradle/BasicNotifications/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 8
diff --git a/prebuilts/gradle/BasicNotifications/README.md b/prebuilts/gradle/BasicNotifications/README.md
index 8de79c6..3b0c28c 100644
--- a/prebuilts/gradle/BasicNotifications/README.md
+++ b/prebuilts/gradle/BasicNotifications/README.md
@@ -54,7 +54,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicNotifications/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicNotifications/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicNotifications/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicNotifications/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicRenderScript/Application/build.gradle b/prebuilts/gradle/BasicRenderScript/Application/build.gradle
index cf977ba..e51008f 100644
--- a/prebuilts/gradle/BasicRenderScript/Application/build.gradle
+++ b/prebuilts/gradle/BasicRenderScript/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile files('renderscript-v8.jar')
 }
 
@@ -33,7 +33,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/BasicRenderScript/Application/src/main/res/values/attrs.xml b/prebuilts/gradle/BasicRenderScript/Application/src/main/res/values/attrs.xml
deleted file mode 100644
index e67df0a..0000000
--- a/prebuilts/gradle/BasicRenderScript/Application/src/main/res/values/attrs.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<resources>
-
-    <!--
-         Declare custom theme attributes that allow changing which styles are
-         used for button bars depending on the API level.
-         ?android:attr/buttonBarStyle is new as of API 11 so this is
-         necessary to support previous API levels.
-    -->
-    <declare-styleable name="ButtonBarContainerTheme">
-        <attr name="buttonBarStyle" format="reference" />
-        <attr name="buttonBarButtonStyle" format="reference" />
-    </declare-styleable>
-
-</resources>
diff --git a/prebuilts/gradle/BasicRenderScript/README.md b/prebuilts/gradle/BasicRenderScript/README.md
index b12e948..cfffdc9 100644
--- a/prebuilts/gradle/BasicRenderScript/README.md
+++ b/prebuilts/gradle/BasicRenderScript/README.md
@@ -29,7 +29,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicRenderScript/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicRenderScript/gradle/wrapper/gradle-wrapper.properties
index 442968f..844a252 100644
--- a/prebuilts/gradle/BasicRenderScript/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicRenderScript/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicSyncAdapter/Application/build.gradle b/prebuilts/gradle/BasicSyncAdapter/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/BasicSyncAdapter/Application/build.gradle
+++ b/prebuilts/gradle/BasicSyncAdapter/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/BasicSyncAdapter/Application/src/main/res/values/attrs.xml b/prebuilts/gradle/BasicSyncAdapter/Application/src/main/res/values/attrs.xml
deleted file mode 100644
index 6c15504..0000000
--- a/prebuilts/gradle/BasicSyncAdapter/Application/src/main/res/values/attrs.xml
+++ /dev/null
@@ -1,21 +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.
--->
-
-<resources>
-    <!-- Specifies a style resource to use for an indeterminate progress spinner. -->
-    <attr name="indeterminateProgressStyle" format="reference"/>
-</resources>
\ No newline at end of file
diff --git a/prebuilts/gradle/BasicSyncAdapter/README.md b/prebuilts/gradle/BasicSyncAdapter/README.md
index 78969f6..6503a57 100644
--- a/prebuilts/gradle/BasicSyncAdapter/README.md
+++ b/prebuilts/gradle/BasicSyncAdapter/README.md
@@ -29,7 +29,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicSyncAdapter/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicSyncAdapter/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicSyncAdapter/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicSyncAdapter/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BasicTransition/Application/build.gradle b/prebuilts/gradle/BasicTransition/Application/build.gradle
index ebbee86..28e75d6 100644
--- a/prebuilts/gradle/BasicTransition/Application/build.gradle
+++ b/prebuilts/gradle/BasicTransition/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/BasicTransition/README.md b/prebuilts/gradle/BasicTransition/README.md
index cd9895c..2ed6ed2 100644
--- a/prebuilts/gradle/BasicTransition/README.md
+++ b/prebuilts/gradle/BasicTransition/README.md
@@ -34,7 +34,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BasicTransition/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BasicTransition/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BasicTransition/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BasicTransition/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BatchStepSensor/Application/build.gradle b/prebuilts/gradle/BatchStepSensor/Application/build.gradle
index ebbee86..28e75d6 100644
--- a/prebuilts/gradle/BatchStepSensor/Application/build.gradle
+++ b/prebuilts/gradle/BatchStepSensor/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/BatchStepSensor/README.md b/prebuilts/gradle/BatchStepSensor/README.md
index 3bded3d..7304957 100644
--- a/prebuilts/gradle/BatchStepSensor/README.md
+++ b/prebuilts/gradle/BatchStepSensor/README.md
@@ -32,7 +32,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BatchStepSensor/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BatchStepSensor/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BatchStepSensor/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BatchStepSensor/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BeamLargeFiles/Application/build.gradle b/prebuilts/gradle/BeamLargeFiles/Application/build.gradle
index 42aa199..55a227a 100644
--- a/prebuilts/gradle/BeamLargeFiles/Application/build.gradle
+++ b/prebuilts/gradle/BeamLargeFiles/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/BeamLargeFiles/README.md b/prebuilts/gradle/BeamLargeFiles/README.md
index 2c7d868..f4657f4 100644
--- a/prebuilts/gradle/BeamLargeFiles/README.md
+++ b/prebuilts/gradle/BeamLargeFiles/README.md
@@ -16,7 +16,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/BeamLargeFiles/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BeamLargeFiles/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BeamLargeFiles/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BeamLargeFiles/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BluetoothAdvertisements/Application/build.gradle b/prebuilts/gradle/BluetoothAdvertisements/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/BluetoothAdvertisements/Application/build.gradle
+++ b/prebuilts/gradle/BluetoothAdvertisements/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/BluetoothAdvertisements/README.md b/prebuilts/gradle/BluetoothAdvertisements/README.md
index c03289e..4ec13e7 100644
--- a/prebuilts/gradle/BluetoothAdvertisements/README.md
+++ b/prebuilts/gradle/BluetoothAdvertisements/README.md
@@ -30,7 +30,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BluetoothAdvertisements/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BluetoothAdvertisements/gradle/wrapper/gradle-wrapper.properties
index 134127f..1cb4a8a 100644
--- a/prebuilts/gradle/BluetoothAdvertisements/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BluetoothAdvertisements/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BluetoothChat/Application/build.gradle b/prebuilts/gradle/BluetoothChat/Application/build.gradle
index 906d12f..38bb285 100644
--- a/prebuilts/gradle/BluetoothChat/Application/build.gradle
+++ b/prebuilts/gradle/BluetoothChat/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/BluetoothChat/README.md b/prebuilts/gradle/BluetoothChat/README.md
index a4bdafa..fae67c6 100644
--- a/prebuilts/gradle/BluetoothChat/README.md
+++ b/prebuilts/gradle/BluetoothChat/README.md
@@ -33,7 +33,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BluetoothChat/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BluetoothChat/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BluetoothChat/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BluetoothChat/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BluetoothLeGatt/Application/build.gradle b/prebuilts/gradle/BluetoothLeGatt/Application/build.gradle
index f0ec485..270b83d 100644
--- a/prebuilts/gradle/BluetoothLeGatt/Application/build.gradle
+++ b/prebuilts/gradle/BluetoothLeGatt/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/BluetoothLeGatt/README.md b/prebuilts/gradle/BluetoothLeGatt/README.md
index 2519fec..324dd3d 100644
--- a/prebuilts/gradle/BluetoothLeGatt/README.md
+++ b/prebuilts/gradle/BluetoothLeGatt/README.md
@@ -24,7 +24,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BluetoothLeGatt/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BluetoothLeGatt/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BluetoothLeGatt/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BluetoothLeGatt/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/BorderlessButtons/Application/build.gradle b/prebuilts/gradle/BorderlessButtons/Application/build.gradle
index 2b32f6f..278f87d 100644
--- a/prebuilts/gradle/BorderlessButtons/Application/build.gradle
+++ b/prebuilts/gradle/BorderlessButtons/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/BorderlessButtons/README.md b/prebuilts/gradle/BorderlessButtons/README.md
index 1858191..679484a 100644
--- a/prebuilts/gradle/BorderlessButtons/README.md
+++ b/prebuilts/gradle/BorderlessButtons/README.md
@@ -25,7 +25,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/BorderlessButtons/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/BorderlessButtons/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/BorderlessButtons/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/BorderlessButtons/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Camera2Basic/Application/build.gradle b/prebuilts/gradle/Camera2Basic/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/Camera2Basic/Application/build.gradle
+++ b/prebuilts/gradle/Camera2Basic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/Camera2Basic/README.md b/prebuilts/gradle/Camera2Basic/README.md
index 858228a..cb8ca9f 100644
--- a/prebuilts/gradle/Camera2Basic/README.md
+++ b/prebuilts/gradle/Camera2Basic/README.md
@@ -43,7 +43,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/Camera2Basic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Camera2Basic/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Camera2Basic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Camera2Basic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Camera2Raw/Application/build.gradle b/prebuilts/gradle/Camera2Raw/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/Camera2Raw/Application/build.gradle
+++ b/prebuilts/gradle/Camera2Raw/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/Camera2Raw/README.md b/prebuilts/gradle/Camera2Raw/README.md
index 3db242c..120e107 100644
--- a/prebuilts/gradle/Camera2Raw/README.md
+++ b/prebuilts/gradle/Camera2Raw/README.md
@@ -27,7 +27,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/Camera2Raw/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Camera2Raw/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Camera2Raw/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Camera2Raw/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Camera2Video/Application/build.gradle b/prebuilts/gradle/Camera2Video/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/Camera2Video/Application/build.gradle
+++ b/prebuilts/gradle/Camera2Video/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/Camera2Video/README.md b/prebuilts/gradle/Camera2Video/README.md
index 191fad8..1a3ec5d 100644
--- a/prebuilts/gradle/Camera2Video/README.md
+++ b/prebuilts/gradle/Camera2Video/README.md
@@ -44,7 +44,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/Camera2Video/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Camera2Video/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Camera2Video/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Camera2Video/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/CardEmulation/Application/build.gradle b/prebuilts/gradle/CardEmulation/Application/build.gradle
index ebbee86..28e75d6 100644
--- a/prebuilts/gradle/CardEmulation/Application/build.gradle
+++ b/prebuilts/gradle/CardEmulation/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/CardEmulation/README.md b/prebuilts/gradle/CardEmulation/README.md
index c3f49b9..20dda5b 100644
--- a/prebuilts/gradle/CardEmulation/README.md
+++ b/prebuilts/gradle/CardEmulation/README.md
@@ -13,7 +13,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/CardEmulation/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/CardEmulation/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/CardEmulation/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/CardEmulation/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/CardReader/Application/build.gradle b/prebuilts/gradle/CardReader/Application/build.gradle
index ebbee86..28e75d6 100644
--- a/prebuilts/gradle/CardReader/Application/build.gradle
+++ b/prebuilts/gradle/CardReader/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/CardReader/README.md b/prebuilts/gradle/CardReader/README.md
index 2338f8a..43c8aab 100644
--- a/prebuilts/gradle/CardReader/README.md
+++ b/prebuilts/gradle/CardReader/README.md
@@ -14,7 +14,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/CardReader/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/CardReader/gradle/wrapper/gradle-wrapper.properties
index 1d0dd57..318e496 100644
--- a/prebuilts/gradle/CardReader/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/CardReader/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/CardView/Application/build.gradle b/prebuilts/gradle/CardView/Application/build.gradle
index 7726478..38481de 100644
--- a/prebuilts/gradle/CardView/Application/build.gradle
+++ b/prebuilts/gradle/CardView/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -29,7 +29,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/CardView/README.md b/prebuilts/gradle/CardView/README.md
index b8efe9e..c992a53 100644
--- a/prebuilts/gradle/CardView/README.md
+++ b/prebuilts/gradle/CardView/README.md
@@ -9,7 +9,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/CardView/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/CardView/gradle/wrapper/gradle-wrapper.properties
index 711c6e1..0b55d72 100644
--- a/prebuilts/gradle/CardView/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/CardView/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ClippingBasic/Application/build.gradle b/prebuilts/gradle/ClippingBasic/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/ClippingBasic/Application/build.gradle
+++ b/prebuilts/gradle/ClippingBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ClippingBasic/README.md b/prebuilts/gradle/ClippingBasic/README.md
index 8b223db..c68f5a8 100644
--- a/prebuilts/gradle/ClippingBasic/README.md
+++ b/prebuilts/gradle/ClippingBasic/README.md
@@ -48,7 +48,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ClippingBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ClippingBasic/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ClippingBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ClippingBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ConfirmCredential/Application/build.gradle b/prebuilts/gradle/ConfirmCredential/Application/build.gradle
index c626117..5494917 100644
--- a/prebuilts/gradle/ConfirmCredential/Application/build.gradle
+++ b/prebuilts/gradle/ConfirmCredential/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/ConfirmCredential/README.md b/prebuilts/gradle/ConfirmCredential/README.md
index bf202a1..a499e9c 100644
--- a/prebuilts/gradle/ConfirmCredential/README.md
+++ b/prebuilts/gradle/ConfirmCredential/README.md
@@ -31,7 +31,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ConfirmCredential/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ConfirmCredential/gradle/wrapper/gradle-wrapper.properties
index 03c59c2..1081cc3 100644
--- a/prebuilts/gradle/ConfirmCredential/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ConfirmCredential/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/CustomChoiceList/Application/build.gradle b/prebuilts/gradle/CustomChoiceList/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/CustomChoiceList/Application/build.gradle
+++ b/prebuilts/gradle/CustomChoiceList/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/CustomChoiceList/README.md b/prebuilts/gradle/CustomChoiceList/README.md
index 086fe57..df7b190 100644
--- a/prebuilts/gradle/CustomChoiceList/README.md
+++ b/prebuilts/gradle/CustomChoiceList/README.md
@@ -42,7 +42,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/CustomChoiceList/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/CustomChoiceList/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/CustomChoiceList/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/CustomChoiceList/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/CustomNotifications/Application/build.gradle b/prebuilts/gradle/CustomNotifications/Application/build.gradle
index 42aa199..55a227a 100644
--- a/prebuilts/gradle/CustomNotifications/Application/build.gradle
+++ b/prebuilts/gradle/CustomNotifications/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/CustomNotifications/README.md b/prebuilts/gradle/CustomNotifications/README.md
index a29823e..b9567ea 100644
--- a/prebuilts/gradle/CustomNotifications/README.md
+++ b/prebuilts/gradle/CustomNotifications/README.md
@@ -26,7 +26,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/CustomNotifications/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/CustomNotifications/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/CustomNotifications/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/CustomNotifications/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/CustomTransition/Application/build.gradle b/prebuilts/gradle/CustomTransition/Application/build.gradle
index ebbee86..28e75d6 100644
--- a/prebuilts/gradle/CustomTransition/Application/build.gradle
+++ b/prebuilts/gradle/CustomTransition/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/CustomTransition/README.md b/prebuilts/gradle/CustomTransition/README.md
index 323ee36..2b88dc1 100644
--- a/prebuilts/gradle/CustomTransition/README.md
+++ b/prebuilts/gradle/CustomTransition/README.md
@@ -33,7 +33,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/CustomTransition/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/CustomTransition/gradle/wrapper/gradle-wrapper.properties
index 5e85628..a0cbbdb 100644
--- a/prebuilts/gradle/CustomTransition/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/CustomTransition/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DataLayer/Application/build.gradle b/prebuilts/gradle/DataLayer/Application/build.gradle
index 6b3f748..31a1b84 100644
--- a/prebuilts/gradle/DataLayer/Application/build.gradle
+++ b/prebuilts/gradle/DataLayer/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,12 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -35,7 +35,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/DataLayer/README.md b/prebuilts/gradle/DataLayer/README.md
index da9bee2..d04aafd 100644
--- a/prebuilts/gradle/DataLayer/README.md
+++ b/prebuilts/gradle/DataLayer/README.md
@@ -28,7 +28,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/DataLayer/Wearable/build.gradle b/prebuilts/gradle/DataLayer/Wearable/build.gradle
index 9d85175..8d491a0 100644
--- a/prebuilts/gradle/DataLayer/Wearable/build.gradle
+++ b/prebuilts/gradle/DataLayer/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/DataLayer/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DataLayer/gradle/wrapper/gradle-wrapper.properties
index 69aad78..525a9c3 100644
--- a/prebuilts/gradle/DataLayer/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DataLayer/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DelayedConfirmation/Application/build.gradle b/prebuilts/gradle/DelayedConfirmation/Application/build.gradle
index 6b3f748..31a1b84 100644
--- a/prebuilts/gradle/DelayedConfirmation/Application/build.gradle
+++ b/prebuilts/gradle/DelayedConfirmation/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,12 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -35,7 +35,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/DelayedConfirmation/README.md b/prebuilts/gradle/DelayedConfirmation/README.md
index 6746c60..063a05a 100644
--- a/prebuilts/gradle/DelayedConfirmation/README.md
+++ b/prebuilts/gradle/DelayedConfirmation/README.md
@@ -13,7 +13,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/DelayedConfirmation/Wearable/build.gradle b/prebuilts/gradle/DelayedConfirmation/Wearable/build.gradle
index 9d85175..8d491a0 100644
--- a/prebuilts/gradle/DelayedConfirmation/Wearable/build.gradle
+++ b/prebuilts/gradle/DelayedConfirmation/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/DelayedConfirmation/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DelayedConfirmation/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/DelayedConfirmation/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DelayedConfirmation/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DeviceOwner/Application/build.gradle b/prebuilts/gradle/DeviceOwner/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/DeviceOwner/Application/build.gradle
+++ b/prebuilts/gradle/DeviceOwner/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DeviceOwner/README.md b/prebuilts/gradle/DeviceOwner/README.md
index d151813..75b4ea7 100644
--- a/prebuilts/gradle/DeviceOwner/README.md
+++ b/prebuilts/gradle/DeviceOwner/README.md
@@ -31,7 +31,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/DeviceOwner/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DeviceOwner/gradle/wrapper/gradle-wrapper.properties
index 6be9a46..a30af78 100644
--- a/prebuilts/gradle/DeviceOwner/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DeviceOwner/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DirectBoot/Application/build.gradle b/prebuilts/gradle/DirectBoot/Application/build.gradle
index e5f7d1b..edd1278 100644
--- a/prebuilts/gradle/DirectBoot/Application/build.gradle
+++ b/prebuilts/gradle/DirectBoot/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:recyclerview-v7:24.0.0'
     compile 'com.android.support:design:24.0.0'
 }
@@ -34,7 +34,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 24
diff --git a/prebuilts/gradle/DirectBoot/README.md b/prebuilts/gradle/DirectBoot/README.md
index fca4a4c..4ac8fb4 100644
--- a/prebuilts/gradle/DirectBoot/README.md
+++ b/prebuilts/gradle/DirectBoot/README.md
@@ -44,7 +44,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/DirectBoot/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DirectBoot/gradle/wrapper/gradle-wrapper.properties
index 36a3111..fd9bbad 100644
--- a/prebuilts/gradle/DirectBoot/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DirectBoot/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DirectShare/Application/build.gradle b/prebuilts/gradle/DirectShare/Application/build.gradle
index c626117..5494917 100644
--- a/prebuilts/gradle/DirectShare/Application/build.gradle
+++ b/prebuilts/gradle/DirectShare/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/DirectShare/README.md b/prebuilts/gradle/DirectShare/README.md
index 8aba290..4c524fe 100644
--- a/prebuilts/gradle/DirectShare/README.md
+++ b/prebuilts/gradle/DirectShare/README.md
@@ -29,7 +29,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/DirectShare/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DirectShare/gradle/wrapper/gradle-wrapper.properties
index 03c59c2..1081cc3 100644
--- a/prebuilts/gradle/DirectShare/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DirectShare/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DirectorySelection/Application/build.gradle b/prebuilts/gradle/DirectorySelection/Application/build.gradle
index a990aa3..bacf073 100644
--- a/prebuilts/gradle/DirectorySelection/Application/build.gradle
+++ b/prebuilts/gradle/DirectorySelection/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:recyclerview-v7:+'
 }
 
@@ -33,7 +33,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DirectorySelection/README.md b/prebuilts/gradle/DirectorySelection/README.md
index bb8aeff..f9f4194 100644
--- a/prebuilts/gradle/DirectorySelection/README.md
+++ b/prebuilts/gradle/DirectorySelection/README.md
@@ -108,7 +108,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/DirectorySelection/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DirectorySelection/gradle/wrapper/gradle-wrapper.properties
index 3e29ec9..04117e5 100644
--- a/prebuilts/gradle/DirectorySelection/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DirectorySelection/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DisplayingBitmaps/Application/build.gradle b/prebuilts/gradle/DisplayingBitmaps/Application/build.gradle
index a1dcf79..3130567 100644
--- a/prebuilts/gradle/DisplayingBitmaps/Application/build.gradle
+++ b/prebuilts/gradle/DisplayingBitmaps/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 9
diff --git a/prebuilts/gradle/DisplayingBitmaps/README.md b/prebuilts/gradle/DisplayingBitmaps/README.md
index 83e70a5..f9c0d74 100644
--- a/prebuilts/gradle/DisplayingBitmaps/README.md
+++ b/prebuilts/gradle/DisplayingBitmaps/README.md
@@ -21,7 +21,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/DisplayingBitmaps/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DisplayingBitmaps/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/DisplayingBitmaps/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DisplayingBitmaps/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DocumentCentricApps/Application/build.gradle b/prebuilts/gradle/DocumentCentricApps/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/DocumentCentricApps/Application/build.gradle
+++ b/prebuilts/gradle/DocumentCentricApps/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DocumentCentricApps/README.md b/prebuilts/gradle/DocumentCentricApps/README.md
index 92e44b7..5ac28c4 100644
--- a/prebuilts/gradle/DocumentCentricApps/README.md
+++ b/prebuilts/gradle/DocumentCentricApps/README.md
@@ -26,7 +26,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/DocumentCentricApps/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DocumentCentricApps/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/DocumentCentricApps/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DocumentCentricApps/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DocumentCentricRelinquishIdentity/Application/build.gradle b/prebuilts/gradle/DocumentCentricRelinquishIdentity/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/DocumentCentricRelinquishIdentity/Application/build.gradle
+++ b/prebuilts/gradle/DocumentCentricRelinquishIdentity/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md b/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
index f49e1e4..fa2545f 100644
--- a/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
+++ b/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
@@ -8,7 +8,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/DocumentCentricRelinquishIdentity/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DocumentCentricRelinquishIdentity/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/DocumentCentricRelinquishIdentity/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DocumentCentricRelinquishIdentity/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DoneBar/Application/build.gradle b/prebuilts/gradle/DoneBar/Application/build.gradle
index 2b32f6f..278f87d 100644
--- a/prebuilts/gradle/DoneBar/Application/build.gradle
+++ b/prebuilts/gradle/DoneBar/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/DoneBar/README.md b/prebuilts/gradle/DoneBar/README.md
index da3b2f8..3e635c3 100644
--- a/prebuilts/gradle/DoneBar/README.md
+++ b/prebuilts/gradle/DoneBar/README.md
@@ -32,7 +32,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/DoneBar/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DoneBar/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/DoneBar/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DoneBar/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/.google/packaging.yaml b/prebuilts/gradle/DragAndDropAcrossApps/.google/packaging.yaml
new file mode 100644
index 0000000..a0cdf4a
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/.google/packaging.yaml
@@ -0,0 +1,21 @@
+
+# GOOGLE SAMPLE PACKAGING DATA
+#
+# This file is used by Google as part of our samples packaging process.
+# End users may safely ignore this file. It has no relevance to other systems.
+---
+status:       DRAFT
+technologies: [Android]
+categories:   [Android N Preview]
+languages:    [Java]
+solutions:    [Mobile]
+github:       android-DragAndDropAcrossApps-new
+level:        ADVANCED
+icon:         screenshots/big_icon.png
+apiRefs:
+    - android:android.content.ClipDescription
+    - android:android.os.PersistableBundle
+    - android:android.view.DragEvent
+    - android:android.support.v13.view.DragAndDropPermissionsCompat
+    - android:android.support.v13.view.DragStartHelper
+license: apache2
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/CONTRIBUTING.md b/prebuilts/gradle/DragAndDropAcrossApps/CONTRIBUTING.md
new file mode 100644
index 0000000..faa8b5c
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/CONTRIBUTING.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://cla.developers.google.com).
+  * 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://cla.developers.google.com).
+
+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/prebuilts/gradle/DragAndDropAcrossApps/DragSource/build.gradle b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/build.gradle
new file mode 100644
index 0000000..91586b3
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/build.gradle
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+buildscript {
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.1.2'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 24
+    buildToolsVersion "23.0.2"
+
+    defaultConfig {
+        applicationId "com.example.android.dragsource"
+        minSdkVersion 24
+        targetSdkVersion 24
+        versionCode 1
+        versionName "1.0"
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    compile 'com.android.support:appcompat-v7:24.1.1'
+    compile 'com.android.support:support-v13:24.1.1'
+
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/proguard-rules.pro b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/proguard-rules.pro
new file mode 100644
index 0000000..fc7fcea
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /usr/local/google/home/rkc/Android/Sdk/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/AndroidManifest.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..453cd6c
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/AndroidManifest.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2015 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 package="com.example.android.dragsource"
+    xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+
+    <application
+        android:icon="@mipmap/ic_launcher"
+        android:label="DragSource Sample">
+        <activity android:name="com.example.android.dragsource.MainActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+        <!--
+        A content provider that serves selected files. Images are copied and added to this provider
+        in DragSourceFragment where they are displayed and made available for drag and drop. -->
+        <provider
+            android:name="android.support.v4.content.FileProvider"
+            android:authorities="com.example.android.dragsource.fileprovider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths" />
+        </provider>
+
+    </application>
+</manifest>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/activities/SampleActivityBase.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/activities/SampleActivityBase.java
new file mode 100644
index 0000000..db8962e
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/activities/SampleActivityBase.java
@@ -0,0 +1,52 @@
+/*
+* 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.
+*/
+
+package com.example.android.common.activities;
+
+import com.example.android.common.logger.Log;
+import com.example.android.common.logger.LogWrapper;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+
+/**
+ * Base launcher activity, to handle most of the common plumbing for samples.
+ */
+public class SampleActivityBase extends FragmentActivity {
+
+    public static final String TAG = "SampleActivityBase";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        initializeLogging();
+    }
+
+    /** Set up targets to receive log data */
+    public void initializeLogging() {
+        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
+        // Wraps Android's native log framework
+        LogWrapper logWrapper = new LogWrapper();
+        Log.setLogNode(logWrapper);
+
+        Log.i(TAG, "Ready");
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/Log.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/Log.java
new file mode 100644
index 0000000..56dc2a9
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/Log.java
@@ -0,0 +1,244 @@
+/*
+ * 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.common.logger;
+
+/**
+ * Helper class for a list (or tree) of LoggerNodes.
+ *
+ * <p>When this is set as the head of the list,
+ * an instance of it can function as a drop-in replacement for {@link android.util.Log}.
+ * Most of the methods in this class server only to map a method call in Log to its equivalent
+ * in LogNode.</p>
+ */
+public class Log {
+
+    // Grabbing the native values from Android's native logging facilities,
+    // to make for easy migration and interop.
+    public static final int NONE = -1;
+
+    public static final int VERBOSE = android.util.Log.VERBOSE;
+
+    public static final int DEBUG = android.util.Log.DEBUG;
+
+    public static final int INFO = android.util.Log.INFO;
+
+    public static final int WARN = android.util.Log.WARN;
+
+    public static final int ERROR = android.util.Log.ERROR;
+
+    public static final int ASSERT = android.util.Log.ASSERT;
+
+    // Stores the beginning of the LogNode topology.
+    private static LogNode mLogNode;
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public static LogNode getLogNode() {
+        return mLogNode;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to.
+     */
+    public static void setLogNode(LogNode node) {
+        mLogNode = node;
+    }
+
+    /**
+     * Instructs the LogNode to print the log data provided. Other LogNodes can
+     * be chained to the end of the LogNode as desired.
+     *
+     * @param priority Log level of the data being logged. Verbose, Error, etc.
+     * @param tag      Tag for for the log data. Can be used to organize log statements.
+     * @param msg      The actual message to be logged.
+     * @param tr       If an exception was thrown, this can be sent along for the logging
+     *                 facilities
+     *                 to extract and print useful information.
+     */
+    public static void println(int priority, String tag, String msg, Throwable tr) {
+        if (mLogNode != null) {
+            mLogNode.println(priority, tag, msg, tr);
+        }
+    }
+
+    /**
+     * Instructs the LogNode to print the log data provided. Other LogNodes can
+     * be chained to the end of the LogNode as desired.
+     *
+     * @param priority Log level of the data being logged. Verbose, Error, etc.
+     * @param tag      Tag for for the log data. Can be used to organize log statements.
+     * @param msg      The actual message to be logged. The actual message to be logged.
+     */
+    public static void println(int priority, String tag, String msg) {
+        println(priority, tag, msg, null);
+    }
+
+    /**
+     * Prints a message at VERBOSE priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr  If an exception was thrown, this can be sent along for the logging facilities
+     *            to extract and print useful information.
+     */
+    public static void v(String tag, String msg, Throwable tr) {
+        println(VERBOSE, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at VERBOSE priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void v(String tag, String msg) {
+        v(tag, msg, null);
+    }
+
+
+    /**
+     * Prints a message at DEBUG priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr  If an exception was thrown, this can be sent along for the logging facilities
+     *            to extract and print useful information.
+     */
+    public static void d(String tag, String msg, Throwable tr) {
+        println(DEBUG, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at DEBUG priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void d(String tag, String msg) {
+        d(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at INFO priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr  If an exception was thrown, this can be sent along for the logging facilities
+     *            to extract and print useful information.
+     */
+    public static void i(String tag, String msg, Throwable tr) {
+        println(INFO, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at INFO priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void i(String tag, String msg) {
+        i(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr  If an exception was thrown, this can be sent along for the logging facilities
+     *            to extract and print useful information.
+     */
+    public static void w(String tag, String msg, Throwable tr) {
+        println(WARN, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void w(String tag, String msg) {
+        w(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param tr  If an exception was thrown, this can be sent along for the logging facilities
+     *            to extract and print useful information.
+     */
+    public static void w(String tag, Throwable tr) {
+        w(tag, null, tr);
+    }
+
+    /**
+     * Prints a message at ERROR priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr  If an exception was thrown, this can be sent along for the logging facilities
+     *            to extract and print useful information.
+     */
+    public static void e(String tag, String msg, Throwable tr) {
+        println(ERROR, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at ERROR priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void e(String tag, String msg) {
+        e(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr  If an exception was thrown, this can be sent along for the logging facilities
+     *            to extract and print useful information.
+     */
+    public static void wtf(String tag, String msg, Throwable tr) {
+        println(ASSERT, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void wtf(String tag, String msg) {
+        wtf(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param tr  If an exception was thrown, this can be sent along for the logging facilities
+     *            to extract and print useful information.
+     */
+    public static void wtf(String tag, Throwable tr) {
+        wtf(tag, null, tr);
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogFragment.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogFragment.java
new file mode 100644
index 0000000..2b92506
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogFragment.java
@@ -0,0 +1,98 @@
+/*
+* 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.
+*/
+
+package com.example.android.common.logger;
+
+import android.graphics.Typeface;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ScrollView;
+
+/**
+ * Simple fragment which contains a LogView and uses is to output log data it receives
+ * through the LogNode interface.
+ */
+public class LogFragment extends Fragment {
+
+    private LogView mLogView;
+
+    private ScrollView mScrollView;
+
+    public LogFragment() {
+    }
+
+    public View inflateViews() {
+        mScrollView = new ScrollView(getActivity());
+        ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams(
+                ViewGroup.LayoutParams.MATCH_PARENT,
+                ViewGroup.LayoutParams.MATCH_PARENT);
+        mScrollView.setLayoutParams(scrollParams);
+
+        mLogView = new LogView(getActivity());
+        ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams);
+        logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
+        mLogView.setLayoutParams(logParams);
+        mLogView.setClickable(true);
+        mLogView.setFocusable(true);
+        mLogView.setTypeface(Typeface.MONOSPACE);
+
+        // Want to set padding as 16 dips, setPadding takes pixels.  Hooray math!
+        int paddingDips = 16;
+        double scale = getResources().getDisplayMetrics().density;
+        int paddingPixels = (int) ((paddingDips * (scale)) + .5);
+        mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels);
+        mLogView.setCompoundDrawablePadding(paddingPixels);
+
+        mLogView.setGravity(Gravity.BOTTOM);
+        mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium);
+
+        mScrollView.addView(mLogView);
+        return mScrollView;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+
+        View result = inflateViews();
+
+        mLogView.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            }
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
+            }
+        });
+        return result;
+    }
+
+    public LogView getLogView() {
+        return mLogView;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogNode.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogNode.java
new file mode 100644
index 0000000..0c922e0
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogNode.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2012 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.common.logger;
+
+/**
+ * Basic interface for a logging system that can output to one or more targets.
+ * Note that in addition to classes that will output these logs in some format,
+ * one can also implement this interface over a filter and insert that in the chain,
+ * such that no targets further down see certain data, or see manipulated forms of the data.
+ * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data
+ * it received to HTML and sent it along to the next node in the chain, without printing it
+ * anywhere.
+ */
+public interface LogNode {
+
+    /**
+     * Instructs first LogNode in the list to print the log data provided.
+     *
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag      Tag for for the log data.  Can be used to organize log statements.
+     * @param msg      The actual message to be logged. The actual message to be logged.
+     * @param tr       If an exception was thrown, this can be sent along for the logging
+     *                 facilities
+     *                 to extract and print useful information.
+     */
+    public void println(int priority, String tag, String msg, Throwable tr);
+
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogView.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogView.java
new file mode 100644
index 0000000..f752f33
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogView.java
@@ -0,0 +1,149 @@
+/*
+ * 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.common.logger;
+
+import android.app.Activity;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+/**
+ * Simple TextView which is used to output log data received through the LogNode interface.
+ */
+public class LogView extends TextView implements LogNode {
+
+    public LogView(Context context) {
+        super(context);
+    }
+
+    public LogView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public LogView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    /**
+     * Formats the log data and prints it out to the LogView.
+     *
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag      Tag for for the log data.  Can be used to organize log statements.
+     * @param msg      The actual message to be logged. The actual message to be logged.
+     * @param tr       If an exception was thrown, this can be sent along for the logging
+     *                 facilities
+     *                 to extract and print useful information.
+     */
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+
+        String priorityStr = null;
+
+        // For the purposes of this View, we want to print the priority as readable text.
+        switch (priority) {
+            case android.util.Log.VERBOSE:
+                priorityStr = "VERBOSE";
+                break;
+            case android.util.Log.DEBUG:
+                priorityStr = "DEBUG";
+                break;
+            case android.util.Log.INFO:
+                priorityStr = "INFO";
+                break;
+            case android.util.Log.WARN:
+                priorityStr = "WARN";
+                break;
+            case android.util.Log.ERROR:
+                priorityStr = "ERROR";
+                break;
+            case android.util.Log.ASSERT:
+                priorityStr = "ASSERT";
+                break;
+            default:
+                break;
+        }
+
+        // Handily, the Log class has a facility for converting a stack trace into a usable string.
+        String exceptionStr = null;
+        if (tr != null) {
+            exceptionStr = android.util.Log.getStackTraceString(tr);
+        }
+
+        // Take the priority, tag, message, and exception, and concatenate as necessary
+        // into one usable line of text.
+        final StringBuilder outputBuilder = new StringBuilder();
+
+        String delimiter = "\t";
+        appendIfNotNull(outputBuilder, priorityStr, delimiter);
+        appendIfNotNull(outputBuilder, tag, delimiter);
+        appendIfNotNull(outputBuilder, msg, delimiter);
+        appendIfNotNull(outputBuilder, exceptionStr, delimiter);
+
+        // In case this was originally called from an AsyncTask or some other off-UI thread,
+        // make sure the update occurs within the UI thread.
+        ((Activity) getContext()).runOnUiThread((new Thread(new Runnable() {
+            @Override
+            public void run() {
+                // Display the text we just generated within the LogView.
+                appendToLog(outputBuilder.toString());
+            }
+        })));
+
+        if (mNext != null) {
+            mNext.println(priority, tag, msg, tr);
+        }
+    }
+
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+    /**
+     * Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since
+     * the logger takes so many arguments that might be null, this method helps cut out some of the
+     * agonizing tedium of writing the same 3 lines over and over.
+     *
+     * @param source    StringBuilder containing the text to append to.
+     * @param addStr    The String to append
+     * @param delimiter The String to separate the source and appended strings. A tab or comma,
+     *                  for instance.
+     * @return The fully concatenated String as a StringBuilder
+     */
+    private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) {
+        if (addStr != null) {
+            if (addStr.length() == 0) {
+                delimiter = "";
+            }
+
+            return source.append(addStr).append(delimiter);
+        }
+        return source;
+    }
+
+    // The next LogNode in the chain.
+    LogNode mNext;
+
+    /** Outputs the string as a new line of log data in the LogView. */
+    public void appendToLog(String s) {
+        append("\n" + s);
+    }
+
+
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogWrapper.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogWrapper.java
new file mode 100644
index 0000000..cacf162
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/LogWrapper.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2012 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.common.logger;
+
+import android.util.Log;
+
+/**
+ * Helper class which wraps Android's native Log utility in the Logger interface.  This way
+ * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously.
+ */
+public class LogWrapper implements LogNode {
+
+    // For piping:  The next node to receive Log data after this one has done its work.
+    private LogNode mNext;
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to..
+     */
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+    /**
+     * Prints data out to the console using Android's native log mechanism.
+     *
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag      Tag for for the log data.  Can be used to organize log statements.
+     * @param msg      The actual message to be logged. The actual message to be logged.
+     * @param tr       If an exception was thrown, this can be sent along for the logging
+     *                 facilities
+     *                 to extract and print useful information.
+     */
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        // There actually are log methods that don't take a msg parameter.  For now,
+        // if that's the case, just convert null to the empty string and move on.
+        String useMsg = msg;
+        if (useMsg == null) {
+            useMsg = "";
+        }
+
+        // If an exeption was provided, convert that exception to a usable string and attach
+        // it to the end of the msg method.
+        if (tr != null) {
+            msg += "\n" + Log.getStackTraceString(tr);
+        }
+
+        // This is functionally identical to Log.x(tag, useMsg);
+        // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg)
+        Log.println(priority, tag, useMsg);
+
+        // If this isn't the last node in the chain, move things along.
+        if (mNext != null) {
+            mNext.println(priority, tag, msg, tr);
+        }
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
new file mode 100644
index 0000000..bc38174
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
@@ -0,0 +1,61 @@
+/*
+ * 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.common.logger;
+
+/**
+ * Simple {@link LogNode} filter, removes everything except the message.
+ * Useful for situations like on-screen log output where you don't want a lot of metadata
+ * displayed,
+ * just easy-to-read message updates as they're happening.
+ */
+public class MessageOnlyLogFilter implements LogNode {
+
+    LogNode mNext;
+
+    /**
+     * Takes the "next" LogNode as a parameter, to simplify chaining.
+     *
+     * @param next The next LogNode in the pipeline.
+     */
+    public MessageOnlyLogFilter(LogNode next) {
+        mNext = next;
+    }
+
+    public MessageOnlyLogFilter() {
+    }
+
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        if (mNext != null) {
+            getNext().println(Log.NONE, null, msg, null);
+        }
+    }
+
+    /**
+     * Returns the next LogNode in the chain.
+     */
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to..
+     */
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/DragSourceFragment.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/DragSourceFragment.java
new file mode 100644
index 0000000..5b92fc9
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/DragSourceFragment.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright 2015, 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.dragsource;
+
+import com.example.android.common.logger.Log;
+
+import android.content.ClipData;
+import android.content.ClipDescription;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Point;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.support.annotation.Nullable;
+import android.support.v13.view.DragStartHelper;
+import android.support.v4.app.Fragment;
+import android.support.v4.content.FileProvider;
+import android.view.DragEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Date;
+
+
+/**
+ * This sample demonstrates data can be moved between views within the app or between different
+ * apps via drag and drop.
+ * <p>This is the source app for the drag and drop sample. This app contains several
+ * {@link android.widget.ImageView} widgets which can be a drag source. Images can be dropped
+ * to a drop target area within the same app or in the DropTarget app (a separate app in this
+ * sample).
+ * <p>
+ * There is also one {@link android.widget.EditText} widget that can be a drag source (no extra
+ * setup is necessary).
+ * <p/>
+ * To enable cross application drag and drop, the {@link android.view.View#DRAG_FLAG_GLOBAL}
+ * permission needs to be passed to the {@link android.view.View#startDragAndDrop(ClipData,
+ * View.DragShadowBuilder, Object, int)} method. If a Uri
+ * requiring permission grants is being sent, then the
+ * {@link android.view.View#DRAG_FLAG_GLOBAL_URI_READ} and/or the
+ * {@link android.view.View#DRAG_FLAG_GLOBAL_URI_WRITE} flags must be used also.
+ */
+public class DragSourceFragment extends Fragment {
+
+    /**
+     * Name of saved data that stores the dropped image URI on the local ImageView when set.
+     */
+    private static final String IMAGE_URI = "IMAGE_URI";
+
+    /**
+     * Name of the parameter for a {@link ClipData} extra that stores a text describing the dragged
+     * image.
+     */
+    public static final String EXTRA_IMAGE_INFO = "IMAGE_INFO";
+
+    /**
+     * Uri of the ImageView source when set.
+     */
+    private Uri mLocalImageUri;
+
+    private static final String TAG = "DragSourceFragment";
+
+    private static final String CONTENT_AUTHORITY = "com.example.android.dragsource.fileprovider";
+
+    @Nullable
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+            @Nullable Bundle savedInstanceState) {
+
+        View view = inflater.inflate(R.layout.fragment_dragsource, null);
+
+        // Set up two image views for global drag and drop with a permission grant.
+        Uri imageUri = getFileUri(R.drawable.image1, "image1.png");
+        ImageView imageView = (ImageView) view.findViewById(R.id.image_one);
+        setUpDraggableImage(imageView, imageUri);
+        imageView.setImageURI(imageUri);
+
+        imageUri = getFileUri(R.drawable.image2, "image2.png");
+        imageView = (ImageView) view.findViewById(R.id.image_two);
+        setUpDraggableImage(imageView, imageUri);
+        imageView.setImageURI(imageUri);
+
+        // Set up the local drop target area.
+        final ImageView localImageTarget = (ImageView) view.findViewById(R.id.local_target);
+        localImageTarget.setOnDragListener(new ImageDragListener() {
+            @Override
+            protected boolean setImageUri(View view, DragEvent event, Uri uri) {
+                mLocalImageUri = uri;
+                Log.d(TAG, "Setting local image to: " + uri);
+                return super.setImageUri(view, event, uri);
+            }
+        });
+
+        if (savedInstanceState != null) {
+            final String uriString = savedInstanceState.getString(IMAGE_URI);
+            if (uriString != null) {
+                mLocalImageUri = Uri.parse(uriString);
+                Log.d(TAG, "Restoring local image to: " + mLocalImageUri);
+                localImageTarget.setImageURI(mLocalImageUri);
+            }
+        }
+        return view;
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle savedInstanceState) {
+        if (mLocalImageUri != null) {
+            savedInstanceState.putString(IMAGE_URI, mLocalImageUri.toString());
+        }
+        super.onSaveInstanceState(savedInstanceState);
+    }
+
+    private void setUpDraggableImage(ImageView imageView, final Uri imageUri) {
+
+        // Set up a listener that starts the drag and drop event with flags and extra data.
+        DragStartHelper.OnDragStartListener listener = new DragStartHelper.OnDragStartListener() {
+            @Override
+            public boolean onDragStart(View view, final DragStartHelper helper) {
+                Log.d(TAG, "Drag start event received from helper.");
+
+                // Use a DragShadowBuilder
+                View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view) {
+                    @Override
+                    public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
+                        super.onProvideShadowMetrics(shadowSize, shadowTouchPoint);
+                        // Notify the DragStartHelper of point where the view was touched.
+                        helper.getTouchPosition(shadowTouchPoint);
+                        Log.d(TAG, "View was touched at: " + shadowTouchPoint);
+                    }
+                };
+
+                // Set up the flags for the drag event.
+                // Enable drag and drop across apps (global)
+                // and require read permissions for this URI.
+                int flags = View.DRAG_FLAG_GLOBAL | View.DRAG_FLAG_GLOBAL_URI_READ;
+
+                // Add an optional clip description that that contains an extra String that is
+                // read out by the target app.
+                final ClipDescription clipDescription = new ClipDescription("", new String[]{
+                        getContext().getContentResolver().getType(imageUri)});
+                // Extras are stored within a PersistableBundle.
+                PersistableBundle extras = new PersistableBundle(1);
+                // Add a String that the target app will display.
+                extras.putString(EXTRA_IMAGE_INFO,
+                        "Drag Started at " + new Date());
+                clipDescription.setExtras(extras);
+
+                // The ClipData object describes the object that is being dragged and dropped.
+                final ClipData clipData =
+                        new ClipData(clipDescription, new ClipData.Item(imageUri));
+
+                Log.d(TAG, "Created ClipDescription. Starting drag and drop.");
+                // Start the drag and drop event.
+                return view.startDragAndDrop(clipData, shadowBuilder, null, flags);
+
+            }
+
+        };
+
+        // Use the DragStartHelper to detect drag and drop events and use the OnDragStartListener
+        // defined above to start the event when it has been detected.
+        DragStartHelper helper = new DragStartHelper(imageView, listener);
+        helper.attach();
+        Log.d(TAG, "DragStartHelper attached to view.");
+    }
+
+    /**
+     * Copy a drawable resource into local storage and makes it available via the
+     * {@link FileProvider}.
+     *
+     * @see Context#getFilesDir()
+     * @see FileProvider
+     * @see FileProvider#getUriForFile(Context, String, File)
+     */
+    private Uri getFileUri(int sourceResourceId, String targetName) {
+        // Create the images/ sub directory if it does not exist yet.
+        File filePath = new File(getContext().getFilesDir(), "images");
+        if (!filePath.exists() && !filePath.mkdir()) {
+            return null;
+        }
+
+        // Copy a drawable from resources to the internal directory.
+        File newFile = new File(filePath, targetName);
+        if (!newFile.exists()) {
+            copyImageResourceToFile(sourceResourceId, newFile);
+        }
+
+        // Make the file accessible via the FileProvider and retrieve its URI.
+        return FileProvider.getUriForFile(getContext(), CONTENT_AUTHORITY, newFile);
+    }
+
+
+    /**
+     * Copy a PNG resource drawable to a {@File}.
+     */
+    private void copyImageResourceToFile(int resourceId, File filePath) {
+        Bitmap image = BitmapFactory.decodeResource(getResources(), resourceId);
+
+        FileOutputStream out = null;
+        try {
+            out = new FileOutputStream(filePath);
+            image.compress(Bitmap.CompressFormat.PNG, 100, out);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/ImageDragListener.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/ImageDragListener.java
new file mode 100644
index 0000000..8ad2864
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/ImageDragListener.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016, 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.dragsource;
+
+import android.content.ClipData;
+import android.net.Uri;
+import android.view.DragEvent;
+import android.view.View;
+import android.widget.ImageView;
+
+/**
+ * OnDragListener for ImageViews.
+ * Sets colors of the target when DragEvents fire. When a drop is received, the {@link Uri} backing
+ * the first {@link android.content.ClipData.Item} in the {@link DragEvent} is set as the image
+ * resource of the ImageView.
+ */
+public class ImageDragListener implements View.OnDragListener {
+
+    private static final int COLOR_INACTIVE = 0xFF888888;
+
+    private static final int COLOR_ACTIVE = 0xFFCCCCCC;
+
+    private static final int COLOR_HOVER = 0xFFEEEEEE;
+
+    @Override
+    public boolean onDrag(View view, DragEvent event) {
+        // Change the color of the target for all events.
+        // For the drop action, set the view to the dropped image.
+        switch (event.getAction()) {
+            case DragEvent.ACTION_DRAG_STARTED:
+                setTargetColor(view, COLOR_ACTIVE);
+                return true;
+
+            case DragEvent.ACTION_DRAG_ENTERED:
+                setTargetColor(view, COLOR_HOVER);
+                return true;
+
+            case DragEvent.ACTION_DRAG_LOCATION:
+                processLocation(event.getX(), event.getY());
+                return true;
+
+            case DragEvent.ACTION_DRAG_EXITED:
+                setTargetColor(view, COLOR_ACTIVE);
+                return true;
+
+            case DragEvent.ACTION_DROP:
+                return processDrop(view, event);
+
+            case DragEvent.ACTION_DRAG_ENDED:
+                setTargetColor(view, COLOR_INACTIVE);
+                return true;
+
+            default:
+                break;
+        }
+
+        return false;
+    }
+
+    private void setTargetColor(View view, int color) {
+        view.setBackgroundColor(color);
+    }
+
+    private boolean processDrop(View view, DragEvent event) {
+        ClipData clipData = event.getClipData();
+        if (clipData == null || clipData.getItemCount() == 0) {
+            return false;
+        }
+        ClipData.Item item = clipData.getItemAt(0);
+        if (item == null) {
+            return false;
+        }
+        Uri uri = item.getUri();
+        if (uri == null) {
+            return false;
+        }
+        return setImageUri(view, event, uri);
+    }
+
+    protected void processLocation(float x, float y) {
+    }
+
+    protected boolean setImageUri(View view, DragEvent event, Uri uri) {
+        if (!(view instanceof ImageView)) {
+            return false;
+        }
+        ((ImageView) view).setImageURI(uri);
+        return true;
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/MainActivity.java b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/MainActivity.java
new file mode 100644
index 0000000..67bbb6c
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/java/com/example/android/dragsource/MainActivity.java
@@ -0,0 +1,110 @@
+/*
+* 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.
+*/
+
+
+package com.example.android.dragsource;
+
+import com.example.android.common.activities.SampleActivityBase;
+import com.example.android.common.logger.Log;
+import com.example.android.common.logger.LogFragment;
+import com.example.android.common.logger.LogWrapper;
+import com.example.android.common.logger.MessageOnlyLogFilter;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentTransaction;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.ViewAnimator;
+
+/**
+ * A simple launcher activity containing a summary sample description, sample log and a custom
+ * {@link android.support.v4.app.Fragment} which can display a view.
+ * <p>
+ * For devices with displays with a width of 720dp or greater, the sample log is always visible,
+ * on other devices it's visibility is controlled by an item on the Action Bar.
+ */
+public class MainActivity extends SampleActivityBase {
+
+    public static final String TAG = "MainActivity";
+
+    // Whether the Log Fragment is currently shown
+    private boolean mLogShown;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        if (savedInstanceState == null) {
+            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+            DragSourceFragment fragment = new DragSourceFragment();
+            transaction.replace(R.id.sample_content_fragment, fragment);
+            transaction.commit();
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.main, menu);
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        MenuItem logToggle = menu.findItem(R.id.menu_toggle_log);
+        logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator);
+        logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log);
+
+        return super.onPrepareOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case R.id.menu_toggle_log:
+                mLogShown = !mLogShown;
+                ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output);
+                if (mLogShown) {
+                    output.setDisplayedChild(1);
+                } else {
+                    output.setDisplayedChild(0);
+                }
+                supportInvalidateOptionsMenu();
+                return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    /** Create a chain of targets that will receive log data */
+    @Override
+    public void initializeLogging() {
+        // Wraps Android's native log framework.
+        LogWrapper logWrapper = new LogWrapper();
+        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
+        Log.setLogNode(logWrapper);
+
+        // Filter strips out everything except the message text.
+        MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter();
+        logWrapper.setNext(msgFilter);
+
+        // On screen logging via a fragment with a TextView.
+        LogFragment logFragment = (LogFragment) getSupportFragmentManager()
+                .findFragmentById(R.id.log_fragment);
+        msgFilter.setNext(logFragment.getLogView());
+
+        Log.i(TAG, "Ready");
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable-hdpi/tile.9.png b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable-hdpi/tile.9.png
new file mode 100644
index 0000000..1358628
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable-hdpi/tile.9.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable/image1.png b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable/image1.png
new file mode 100644
index 0000000..c460737
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable/image1.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable/image2.png b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable/image2.png
new file mode 100644
index 0000000..9d07a1b
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/drawable/image2.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout-w720dp/activity_main.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout-w720dp/activity_main.xml
new file mode 100755
index 0000000..efc54b7
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout-w720dp/activity_main.xml
@@ -0,0 +1,72 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<LinearLayout android:id="@+id/sample_main_layout"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal">
+
+    <LinearLayout
+        android:id="@+id/sample_output"
+        android:layout_width="0px"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:orientation="vertical">
+
+        <FrameLayout
+            style="@style/Widget.SampleMessageTile"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <TextView
+                style="@style/Widget.SampleMessage"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingBottom="@dimen/margin_large"
+                android:paddingLeft="@dimen/margin_medium"
+                android:paddingRight="@dimen/margin_medium"
+                android:paddingTop="@dimen/margin_large"
+                android:text="@string/intro_message" />
+        </FrameLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:background="@android:color/darker_gray" />
+
+        <fragment
+            android:id="@+id/log_fragment"
+            android:name="com.example.android.common.logger.LogFragment"
+            android:layout_width="match_parent"
+            android:layout_height="0px"
+            android:layout_weight="1" />
+
+    </LinearLayout>
+
+    <View
+        android:layout_width="1dp"
+        android:layout_height="match_parent"
+        android:background="@android:color/darker_gray" />
+
+    <FrameLayout
+        android:id="@+id/sample_content_fragment"
+        android:layout_width="0px"
+        android:layout_height="match_parent"
+        android:layout_weight="2" />
+
+</LinearLayout>
+
+
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout/activity_main.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout/activity_main.xml
new file mode 100755
index 0000000..17bc911
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout/activity_main.xml
@@ -0,0 +1,64 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:id="@+id/sample_main_layout">
+
+    <ViewAnimator
+        android:id="@+id/sample_output"
+        android:layout_width="match_parent"
+        android:layout_height="0px"
+        android:layout_weight="1">
+
+        <ScrollView
+            style="@style/Widget.SampleMessageTile"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <TextView
+                style="@style/Widget.SampleMessage"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingLeft="@dimen/horizontal_page_margin"
+                android:paddingRight="@dimen/horizontal_page_margin"
+                android:paddingTop="@dimen/vertical_page_margin"
+                android:paddingBottom="@dimen/vertical_page_margin"
+                android:text="@string/intro_message" />
+        </ScrollView>
+
+        <fragment
+            android:name="com.example.android.common.logger.LogFragment"
+            android:id="@+id/log_fragment"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+    </ViewAnimator>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@android:color/darker_gray" />
+
+    <FrameLayout
+        android:id="@+id/sample_content_fragment"
+        android:layout_weight="2"
+        android:layout_width="match_parent"
+        android:layout_height="0px" />
+
+</LinearLayout>
+
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout/fragment_dragsource.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout/fragment_dragsource.xml
new file mode 100644
index 0000000..a46ba0a
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/layout/fragment_dragsource.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2016 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.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="@dimen/section_marginBottom"
+            android:layout_marginLeft="@dimen/section_marginLeft"
+            android:layout_marginRight="@dimen/section_marginRight"
+            android:layout_marginTop="@dimen/section_marginTop"
+            android:gravity="center"
+            android:orientation="horizontal">
+
+            <ImageView
+                android:id="@+id/image_one"
+                android:layout_width="@dimen/image_size"
+                android:layout_height="@dimen/image_size"
+                android:layout_margin="@dimen/image_margin"
+                android:background="@color/drag_inactive"
+                android:scaleType="centerCrop"
+                />
+
+            <ImageView
+                android:id="@+id/image_two"
+                android:layout_width="@dimen/image_size"
+                android:layout_height="@dimen/image_size"
+                android:layout_margin="@dimen/image_margin"
+                android:background="@color/drag_inactive"
+                android:scaleType="centerCrop"
+                 />
+
+        </LinearLayout>
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_margin="@dimen/text_margin"
+            android:layout_marginBottom="@dimen/section_marginBottom"
+            android:text="@string/drag_instruction" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="@dimen/section_marginBottom"
+            android:layout_marginLeft="@dimen/section_marginLeft"
+            android:layout_marginRight="@dimen/section_marginRight"
+            android:layout_marginTop="@dimen/section_marginTop"
+            android:gravity="center"
+            android:orientation="horizontal">
+
+            <ImageView
+                android:id="@+id/local_target"
+                android:layout_width="@dimen/image_size"
+                android:layout_height="@dimen/image_size"
+                android:layout_margin="@dimen/image_margin"
+                android:background="@color/drag_inactive"
+                android:pointerIcon="crosshair"
+                android:scaleType="centerCrop" />
+
+            <TextView
+                android:layout_width="@dimen/text_size"
+                android:layout_height="wrap_content"
+                android:layout_margin="@dimen/text_margin"
+                android:layout_weight="1"
+                android:text="Drop your image here." />
+
+        </LinearLayout>
+
+
+    </LinearLayout>
+</ScrollView>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/menu/main.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/menu/main.xml
new file mode 100644
index 0000000..480cafe
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/menu/main.xml
@@ -0,0 +1,22 @@
+<!--
+  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.
+  -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/menu_toggle_log"
+        android:showAsAction="always"
+        android:title="@string/sample_show_log" />
+</menu>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-hdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..125edc6
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-mdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..00e2d79
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xhdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..0d0d8ee
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xxhdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..a387e3c
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..f33d5bb
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-sw600dp/template-dimens.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-sw600dp/template-dimens.xml
new file mode 100644
index 0000000..22074a2
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-sw600dp/template-dimens.xml
@@ -0,0 +1,24 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_huge</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-sw600dp/template-styles.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-sw600dp/template-styles.xml
new file mode 100644
index 0000000..03d1974
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-sw600dp/template-styles.xml
@@ -0,0 +1,25 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceLarge</item>
+        <item name="android:lineSpacingMultiplier">1.2</item>
+        <item name="android:shadowDy">-6.5</item>
+    </style>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v11/template-styles.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v11/template-styles.xml
new file mode 100644
index 0000000..8c1ea66
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v11/template-styles.xml
@@ -0,0 +1,22 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v21/base-colors.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v21/base-colors.xml
new file mode 100644
index 0000000..b662ae2
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v21/base-colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v21/base-template-styles.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v21/base-template-styles.xml
new file mode 100644
index 0000000..d95b9b7
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values-v21/base-template-styles.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light"></style>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/colors.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/colors.xml
new file mode 100644
index 0000000..801e292
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <color name="drag_inactive">#ff888888</color>
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/dimen.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/dimen.xml
new file mode 100644
index 0000000..220d1b8
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/dimen.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <dimen name="section_marginTop">16dp</dimen>
+    <dimen name="section_marginBottom">0dp</dimen>
+    <dimen name="section_marginLeft">16dp</dimen>
+    <dimen name="section_marginRight">16dp</dimen>
+
+    <dimen name="image_size">80dp</dimen>
+    <dimen name="image_margin">16dp</dimen>
+
+    <dimen name="text_size">0dp</dimen>
+    <dimen name="text_margin">10dp</dimen>
+    <dimen name="checkbox_margin">6dp</dimen>
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/fragmentview_strings.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/fragmentview_strings.xml
new file mode 100755
index 0000000..7b9d9ec
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/fragmentview_strings.xml
@@ -0,0 +1,19 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<resources>
+    <string name="sample_show_log">Show Log</string>
+    <string name="sample_hide_log">Hide Log</string>
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/strings.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/strings.xml
new file mode 100644
index 0000000..f2ab092
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2015 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="drag_instruction">These images can be dragged to any app.\nTry dragging it to the area below.</string>
+    <string name="intro_message">This sample demonstrates drag and drop functionality and is the \'source\' app for this sample. It shows how data can be moved between views within an app or between different apps.\nTry dragging one of the images to the highlighted target in this app.\nOpen the \'DropTarget\' sample app next to this app and try dragging an image between the two apps.\nImages are served through a content provider. The target app must request permission to access the dropped content.</string>
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/template-dimens.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/template-dimens.xml
new file mode 100644
index 0000000..39e710b
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/template-dimens.xml
@@ -0,0 +1,32 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
+
+    <dimen name="margin_tiny">4dp</dimen>
+    <dimen name="margin_small">8dp</dimen>
+    <dimen name="margin_medium">16dp</dimen>
+    <dimen name="margin_large">32dp</dimen>
+    <dimen name="margin_huge">64dp</dimen>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_medium</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/template-styles.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/template-styles.xml
new file mode 100644
index 0000000..6e7d593
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/values/template-styles.xml
@@ -0,0 +1,42 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Activity themes -->
+
+    <style name="Theme.Base" parent="android:Theme.Light" />
+
+    <style name="Theme.Sample" parent="Theme.Base" />
+
+    <style name="AppTheme" parent="Theme.Sample" />
+    <!-- Widget styling -->
+
+    <style name="Widget" />
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceMedium</item>
+        <item name="android:lineSpacingMultiplier">1.1</item>
+    </style>
+
+    <style name="Widget.SampleMessageTile">
+        <item name="android:background">@drawable/tile</item>
+        <item name="android:shadowColor">#7F000000</item>
+        <item name="android:shadowDy">-3.5</item>
+        <item name="android:shadowRadius">2</item>
+    </style>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/xml/file_paths.xml b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/xml/file_paths.xml
new file mode 100644
index 0000000..53c0887
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DragSource/src/main/res/xml/file_paths.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2016 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.
+-->
+
+<paths>
+    <files-path name="my_images" path="images" />
+</paths>
\ No newline at end of file
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/build.gradle b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/build.gradle
new file mode 100644
index 0000000..f487522
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/build.gradle
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+buildscript {
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.1.2'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 24
+    buildToolsVersion "23.0.2"
+
+    defaultConfig {
+        applicationId "com.example.android.droptarget"
+        minSdkVersion 24
+        targetSdkVersion 24
+        versionCode 1
+        versionName "1.0"
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    compile 'com.android.support:appcompat-v7:24.0.0'
+    compile 'com.android.support:support-v13:24.0.0'
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/proguard-rules.pro b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/proguard-rules.pro
new file mode 100644
index 0000000..06d280f
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /usr/local/google/home/rkc/work/android/master/out/host/linux-x86/sdk/sdk/android-sdk_eng.rkc_linux-x86/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/AndroidManifest.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..02f39b2
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2015 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.droptarget">
+
+    <application android:label="DropTarget Sample"
+        android:icon="@mipmap/ic_launcher">
+        <activity android:name=".MainActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/activities/SampleActivityBase.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/activities/SampleActivityBase.java
new file mode 100644
index 0000000..3228927
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/activities/SampleActivityBase.java
@@ -0,0 +1,52 @@
+/*
+* 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.
+*/
+
+package com.example.android.common.activities;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentActivity;
+
+import com.example.android.common.logger.Log;
+import com.example.android.common.logger.LogWrapper;
+
+/**
+ * Base launcher activity, to handle most of the common plumbing for samples.
+ */
+public class SampleActivityBase extends FragmentActivity {
+
+    public static final String TAG = "SampleActivityBase";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+    }
+
+    @Override
+    protected  void onStart() {
+        super.onStart();
+        initializeLogging();
+    }
+
+    /** Set up targets to receive log data */
+    public void initializeLogging() {
+        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
+        // Wraps Android's native log framework
+        LogWrapper logWrapper = new LogWrapper();
+        Log.setLogNode(logWrapper);
+
+        Log.i(TAG, "Ready");
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/Log.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/Log.java
new file mode 100644
index 0000000..17503c5
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/Log.java
@@ -0,0 +1,236 @@
+/*
+ * 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.common.logger;
+
+/**
+ * Helper class for a list (or tree) of LoggerNodes.
+ *
+ * <p>When this is set as the head of the list,
+ * an instance of it can function as a drop-in replacement for {@link android.util.Log}.
+ * Most of the methods in this class server only to map a method call in Log to its equivalent
+ * in LogNode.</p>
+ */
+public class Log {
+    // Grabbing the native values from Android's native logging facilities,
+    // to make for easy migration and interop.
+    public static final int NONE = -1;
+    public static final int VERBOSE = android.util.Log.VERBOSE;
+    public static final int DEBUG = android.util.Log.DEBUG;
+    public static final int INFO = android.util.Log.INFO;
+    public static final int WARN = android.util.Log.WARN;
+    public static final int ERROR = android.util.Log.ERROR;
+    public static final int ASSERT = android.util.Log.ASSERT;
+
+    // Stores the beginning of the LogNode topology.
+    private static LogNode mLogNode;
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public static LogNode getLogNode() {
+        return mLogNode;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to.
+     */
+    public static void setLogNode(LogNode node) {
+        mLogNode = node;
+    }
+
+    /**
+     * Instructs the LogNode to print the log data provided. Other LogNodes can
+     * be chained to the end of the LogNode as desired.
+     *
+     * @param priority Log level of the data being logged. Verbose, Error, etc.
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void println(int priority, String tag, String msg, Throwable tr) {
+        if (mLogNode != null) {
+            mLogNode.println(priority, tag, msg, tr);
+        }
+    }
+
+    /**
+     * Instructs the LogNode to print the log data provided. Other LogNodes can
+     * be chained to the end of the LogNode as desired.
+     *
+     * @param priority Log level of the data being logged. Verbose, Error, etc.
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     */
+    public static void println(int priority, String tag, String msg) {
+        println(priority, tag, msg, null);
+    }
+
+   /**
+     * Prints a message at VERBOSE priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void v(String tag, String msg, Throwable tr) {
+        println(VERBOSE, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at VERBOSE priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void v(String tag, String msg) {
+        v(tag, msg, null);
+    }
+
+
+    /**
+     * Prints a message at DEBUG priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void d(String tag, String msg, Throwable tr) {
+        println(DEBUG, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at DEBUG priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void d(String tag, String msg) {
+        d(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at INFO priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void i(String tag, String msg, Throwable tr) {
+        println(INFO, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at INFO priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void i(String tag, String msg) {
+        i(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void w(String tag, String msg, Throwable tr) {
+        println(WARN, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void w(String tag, String msg) {
+        w(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at WARN priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void w(String tag, Throwable tr) {
+        w(tag, null, tr);
+    }
+
+    /**
+     * Prints a message at ERROR priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void e(String tag, String msg, Throwable tr) {
+        println(ERROR, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at ERROR priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void e(String tag, String msg) {
+        e(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void wtf(String tag, String msg, Throwable tr) {
+        println(ASSERT, tag, msg, tr);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param msg The actual message to be logged.
+     */
+    public static void wtf(String tag, String msg) {
+        wtf(tag, msg, null);
+    }
+
+    /**
+     * Prints a message at ASSERT priority.
+     *
+     * @param tag Tag for for the log data. Can be used to organize log statements.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public static void wtf(String tag, Throwable tr) {
+        wtf(tag, null, tr);
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogFragment.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogFragment.java
new file mode 100644
index 0000000..c1f369a
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogFragment.java
@@ -0,0 +1,94 @@
+/*
+* 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.
+*/
+
+package com.example.android.common.logger;
+
+import android.graphics.Typeface;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ScrollView;
+
+/**
+ * Simple fragment which contains a LogView and uses is to output log data it receives
+ * through the LogNode interface.
+ */
+public class LogFragment extends Fragment {
+
+    private LogView mLogView;
+    private ScrollView mScrollView;
+
+    public LogFragment() {}
+
+    public View inflateViews() {
+        mScrollView = new ScrollView(getActivity());
+        ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams(
+                ViewGroup.LayoutParams.MATCH_PARENT,
+                ViewGroup.LayoutParams.MATCH_PARENT);
+        mScrollView.setLayoutParams(scrollParams);
+
+        mLogView = new LogView(getActivity());
+        ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams);
+        logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
+        mLogView.setLayoutParams(logParams);
+        mLogView.setClickable(true);
+        mLogView.setFocusable(true);
+        mLogView.setTypeface(Typeface.MONOSPACE);
+
+        // Want to set padding as 16 dips, setPadding takes pixels.  Hooray math!
+        int paddingDips = 16;
+        double scale = getResources().getDisplayMetrics().density;
+        int paddingPixels = (int) ((paddingDips * (scale)) + .5);
+        mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels);
+        mLogView.setCompoundDrawablePadding(paddingPixels);
+
+        mLogView.setGravity(Gravity.BOTTOM);
+        mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium);
+
+        mScrollView.addView(mLogView);
+        return mScrollView;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+
+        View result = inflateViews();
+
+        mLogView.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {}
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                mScrollView.fullScroll(ScrollView.FOCUS_DOWN);
+            }
+        });
+        return result;
+    }
+
+    public LogView getLogView() {
+        return mLogView;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogNode.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogNode.java
new file mode 100644
index 0000000..bc37cab
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogNode.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2012 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.common.logger;
+
+/**
+ * Basic interface for a logging system that can output to one or more targets.
+ * Note that in addition to classes that will output these logs in some format,
+ * one can also implement this interface over a filter and insert that in the chain,
+ * such that no targets further down see certain data, or see manipulated forms of the data.
+ * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data
+ * it received to HTML and sent it along to the next node in the chain, without printing it
+ * anywhere.
+ */
+public interface LogNode {
+
+    /**
+     * Instructs first LogNode in the list to print the log data provided.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    public void println(int priority, String tag, String msg, Throwable tr);
+
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogView.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogView.java
new file mode 100644
index 0000000..c01542b
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogView.java
@@ -0,0 +1,145 @@
+/*
+ * 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.common.logger;
+
+import android.app.Activity;
+import android.content.Context;
+import android.util.*;
+import android.widget.TextView;
+
+/** Simple TextView which is used to output log data received through the LogNode interface.
+*/
+public class LogView extends TextView implements LogNode {
+
+    public LogView(Context context) {
+        super(context);
+    }
+
+    public LogView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public LogView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    /**
+     * Formats the log data and prints it out to the LogView.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+
+        
+        String priorityStr = null;
+
+        // For the purposes of this View, we want to print the priority as readable text.
+        switch(priority) {
+            case android.util.Log.VERBOSE:
+                priorityStr = "VERBOSE";
+                break;
+            case android.util.Log.DEBUG:
+                priorityStr = "DEBUG";
+                break;
+            case android.util.Log.INFO:
+                priorityStr = "INFO";
+                break;
+            case android.util.Log.WARN:
+                priorityStr = "WARN";
+                break;
+            case android.util.Log.ERROR:
+                priorityStr = "ERROR";
+                break;
+            case android.util.Log.ASSERT:
+                priorityStr = "ASSERT";
+                break;
+            default:
+                break;
+        }
+
+        // Handily, the Log class has a facility for converting a stack trace into a usable string.
+        String exceptionStr = null;
+        if (tr != null) {
+            exceptionStr = android.util.Log.getStackTraceString(tr);
+        }
+
+        // Take the priority, tag, message, and exception, and concatenate as necessary
+        // into one usable line of text.
+        final StringBuilder outputBuilder = new StringBuilder();
+
+        String delimiter = "\t";
+        appendIfNotNull(outputBuilder, priorityStr, delimiter);
+        appendIfNotNull(outputBuilder, tag, delimiter);
+        appendIfNotNull(outputBuilder, msg, delimiter);
+        appendIfNotNull(outputBuilder, exceptionStr, delimiter);
+
+        // In case this was originally called from an AsyncTask or some other off-UI thread,
+        // make sure the update occurs within the UI thread.
+        ((Activity) getContext()).runOnUiThread( (new Thread(new Runnable() {
+            @Override
+            public void run() {
+                // Display the text we just generated within the LogView.
+                appendToLog(outputBuilder.toString());
+            }
+        })));
+
+        if (mNext != null) {
+            mNext.println(priority, tag, msg, tr);
+        }
+    }
+
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+    /** Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since
+     * the logger takes so many arguments that might be null, this method helps cut out some of the
+     * agonizing tedium of writing the same 3 lines over and over.
+     * @param source StringBuilder containing the text to append to.
+     * @param addStr The String to append
+     * @param delimiter The String to separate the source and appended strings. A tab or comma,
+     *                  for instance.
+     * @return The fully concatenated String as a StringBuilder
+     */
+    private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) {
+        if (addStr != null) {
+            if (addStr.length() == 0) {
+                delimiter = "";
+            }
+
+            return source.append(addStr).append(delimiter);
+        }
+        return source;
+    }
+
+    // The next LogNode in the chain.
+    LogNode mNext;
+
+    /** Outputs the string as a new line of log data in the LogView. */
+    public void appendToLog(String s) {
+        append("\n" + s);
+    }
+
+
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogWrapper.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogWrapper.java
new file mode 100644
index 0000000..16a9e7b
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/LogWrapper.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2012 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.common.logger;
+
+import android.util.Log;
+
+/**
+ * Helper class which wraps Android's native Log utility in the Logger interface.  This way
+ * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously.
+ */
+public class LogWrapper implements LogNode {
+
+    // For piping:  The next node to receive Log data after this one has done its work.
+    private LogNode mNext;
+
+    /**
+     * Returns the next LogNode in the linked list.
+     */
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to..
+     */
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+    /**
+     * Prints data out to the console using Android's native log mechanism.
+     * @param priority Log level of the data being logged.  Verbose, Error, etc.
+     * @param tag Tag for for the log data.  Can be used to organize log statements.
+     * @param msg The actual message to be logged. The actual message to be logged.
+     * @param tr If an exception was thrown, this can be sent along for the logging facilities
+     *           to extract and print useful information.
+     */
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        // There actually are log methods that don't take a msg parameter.  For now,
+        // if that's the case, just convert null to the empty string and move on.
+        String useMsg = msg;
+        if (useMsg == null) {
+            useMsg = "";
+        }
+
+        // If an exeption was provided, convert that exception to a usable string and attach
+        // it to the end of the msg method.
+        if (tr != null) {
+            msg += "\n" + Log.getStackTraceString(tr);
+        }
+
+        // This is functionally identical to Log.x(tag, useMsg);
+        // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg)
+        Log.println(priority, tag, useMsg);
+
+        // If this isn't the last node in the chain, move things along.
+        if (mNext != null) {
+            mNext.println(priority, tag, msg, tr);
+        }
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
new file mode 100644
index 0000000..19967dc
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java
@@ -0,0 +1,60 @@
+/*
+ * 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.common.logger;
+
+/**
+ * Simple {@link LogNode} filter, removes everything except the message.
+ * Useful for situations like on-screen log output where you don't want a lot of metadata displayed,
+ * just easy-to-read message updates as they're happening.
+ */
+public class MessageOnlyLogFilter implements LogNode {
+
+    LogNode mNext;
+
+    /**
+     * Takes the "next" LogNode as a parameter, to simplify chaining.
+     *
+     * @param next The next LogNode in the pipeline.
+     */
+    public MessageOnlyLogFilter(LogNode next) {
+        mNext = next;
+    }
+
+    public MessageOnlyLogFilter() {
+    }
+
+    @Override
+    public void println(int priority, String tag, String msg, Throwable tr) {
+        if (mNext != null) {
+            getNext().println(Log.NONE, null, msg, null);
+        }
+    }
+
+    /**
+     * Returns the next LogNode in the chain.
+     */
+    public LogNode getNext() {
+        return mNext;
+    }
+
+    /**
+     * Sets the LogNode data will be sent to..
+     */
+    public void setNext(LogNode node) {
+        mNext = node;
+    }
+
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/DropTargetFragment.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/DropTargetFragment.java
new file mode 100644
index 0000000..9705e2b
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/DropTargetFragment.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2016 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.droptarget;
+
+import com.example.android.common.logger.Log;
+
+import android.app.Activity;
+import android.content.ClipDescription;
+import android.content.ContentResolver;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.support.annotation.Nullable;
+import android.support.v13.app.ActivityCompat;
+import android.support.v13.view.DragAndDropPermissionsCompat;
+import android.support.v4.app.Fragment;
+import android.view.DragEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+import android.widget.ImageView;
+
+/**
+ * This sample demonstrates data can be moved between views in different applications via
+ * drag and drop.
+ * <p>This is the Target app for the drag and drop process. This app uses a
+ * {@link android.widget.ImageView} as the drop target. Images onto this
+ * view from the DragSource app that is also part of this sample.
+ * <p>
+ * There is also a {@link android.widget.EditText} widget that can accept dropped text (no
+ * extra setup is necessary).
+ * To access content URIs requiring permissions, the target app needs to request the
+ * {@link android.view.DragAndDropPermissions} from the Activity via
+ * {@link ActivityCompat#requestDragAndDropPermissions(Activity, DragEvent)}. This permission will
+ * stay either as long as the activity is alive, or until the release() method is called on the
+ * {@link android.view.DragAndDropPermissions} object.
+ */
+public class DropTargetFragment extends Fragment {
+
+    private static final String IMAGE_URI = "IMAGE_URI";
+
+    public static final String EXTRA_IMAGE_INFO = "IMAGE_INFO";
+
+    private static final String TAG = "DropTargetFragment";
+
+    private Uri mImageUri;
+
+    private CheckBox mReleasePermissionCheckBox;
+
+    @Nullable
+    @Override
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+            @Nullable Bundle savedInstanceState) {
+
+        View rootView = inflater.inflate(R.layout.fragment_droptarget, container, false);
+        final ImageView imageView = (ImageView) rootView.findViewById(R.id.image_target);
+
+        ImageDragListener imageDragListener = new PermissionAwareImageDragListener();
+
+        imageView.setOnDragListener(imageDragListener);
+
+        // Restore the application state if an image was being displayed.
+        if (savedInstanceState != null) {
+            final String uriString = savedInstanceState.getString(IMAGE_URI);
+            if (uriString != null) {
+                mImageUri = Uri.parse(uriString);
+                imageView.setImageURI(mImageUri);
+            }
+        }
+
+        mReleasePermissionCheckBox = (CheckBox) rootView.findViewById(R.id.release_checkbox);
+
+        return rootView;
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle savedInstanceState) {
+        if (mImageUri != null) {
+            savedInstanceState.putString(IMAGE_URI, mImageUri.toString());
+        }
+        super.onSaveInstanceState(savedInstanceState);
+    }
+
+    private class PermissionAwareImageDragListener extends ImageDragListener {
+
+        @Override
+        protected void processLocation(float x, float y) {
+            // Callback is received when the dragged image enters the drop area.
+        }
+
+        @Override
+        protected boolean setImageUri(View view, DragEvent event, Uri uri) {
+            // Read the string from the clip description extras.
+            Log.d(TAG, "ClipDescription extra: " + getExtra(event));
+
+            Log.d(TAG, "Setting image source to: " + uri.toString());
+            mImageUri = uri;
+
+            if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
+                // Accessing a "content" scheme Uri requires a permission grant.
+                DragAndDropPermissionsCompat dropPermissions = ActivityCompat
+                        .requestDragAndDropPermissions(getActivity(), event);
+                Log.d(TAG, "Requesting permissions.");
+
+                if (dropPermissions == null) {
+                    // Permission could not be obtained.
+                    Log.d(TAG, "Drop permission request failed.");
+                    return false;
+                }
+
+                final boolean result = super.setImageUri(view, event, uri);
+
+                if (mReleasePermissionCheckBox.isChecked()) {
+                    /* Release the permissions if you are done with the URI.
+                     Note that you may need to hold onto the permission until later if other
+                     operations are performed on the content. For instance, releasing the
+                     permissions here will prevent onCreateView from properly restoring the
+                     ImageView state.
+                     If permissions are not explicitly released, the permission grant will be
+                     revoked when the activity is destroyed.
+                     */
+                    dropPermissions.release();
+                    Log.d(TAG, "Permissions released.");
+                }
+
+                return result;
+            } else {
+                // Other schemes (such as "android.resource") do not require a permission grant.
+                return super.setImageUri(view, event, uri);
+            }
+        }
+
+        @Override
+        public boolean onDrag(View view, DragEvent event) {
+            // DragTarget is peeking into the MIME types of the dragged event in order to ignore
+            // non-image drags completely.
+            // DragSource does not do that but rejects non-image content once a drop has happened.
+            ClipDescription clipDescription = event.getClipDescription();
+            if (clipDescription != null && !clipDescription.hasMimeType("image/*")) {
+                return false;
+            }
+            // Callback received when image is being dragged.
+            return super.onDrag(view, event);
+        }
+    }
+
+    /**
+     * DragEvents can contain additional data packaged in a {@link PersistableBundle}.
+     * Extract the extras from the event and return the String stored for the
+     * {@link #EXTRA_IMAGE_INFO} entry.
+     */
+    private String getExtra(DragEvent event) {
+        // The extras are contained in the ClipDescription in the DragEvent.
+        ClipDescription clipDescription = event.getClipDescription();
+        if (clipDescription != null) {
+            PersistableBundle extras = clipDescription.getExtras();
+            if (extras != null) {
+                return extras.getString(EXTRA_IMAGE_INFO);
+            }
+        }
+        return null;
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/ImageDragListener.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/ImageDragListener.java
new file mode 100644
index 0000000..84a8b25
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/ImageDragListener.java
@@ -0,0 +1,96 @@
+/*
+* Copyright 2016, 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.droptarget;
+
+import android.content.ClipData;
+import android.net.Uri;
+import android.view.DragEvent;
+import android.view.View;
+import android.widget.ImageView;
+
+public class ImageDragListener implements View.OnDragListener {
+
+    private static final int COLOR_INACTIVE = 0xFF888888;
+
+    private static final int COLOR_ACTIVE = 0xFFCCCCCC;
+
+    private static final int COLOR_HOVER = 0xFFEEEEEE;
+
+    @Override
+    public boolean onDrag(View view, DragEvent event) {
+        switch (event.getAction()) {
+            case DragEvent.ACTION_DRAG_STARTED:
+                setTargetColor(view, COLOR_ACTIVE);
+                return true;
+
+            case DragEvent.ACTION_DRAG_ENTERED:
+                setTargetColor(view, COLOR_HOVER);
+                return true;
+
+            case DragEvent.ACTION_DRAG_LOCATION:
+                processLocation(event.getX(), event.getY());
+                return true;
+
+            case DragEvent.ACTION_DRAG_EXITED:
+                setTargetColor(view, COLOR_ACTIVE);
+                return true;
+
+            case DragEvent.ACTION_DROP:
+                return processDrop(view, event);
+
+            case DragEvent.ACTION_DRAG_ENDED:
+                setTargetColor(view, COLOR_INACTIVE);
+                return true;
+
+            default:
+                break;
+        }
+
+        return false;
+    }
+
+    private void setTargetColor(View view, int color) {
+        view.setBackgroundColor(color);
+    }
+
+    private boolean processDrop(View view, DragEvent event) {
+        ClipData clipData = event.getClipData();
+        if (clipData == null || clipData.getItemCount() == 0) {
+            return false;
+        }
+        ClipData.Item item = clipData.getItemAt(0);
+        if (item == null) {
+            return false;
+        }
+        Uri uri = item.getUri();
+        if (uri == null) {
+            return false;
+        }
+        return setImageUri(view, event, uri);
+    }
+
+    protected void processLocation(float x, float y) {
+    }
+
+    protected boolean setImageUri(View view, DragEvent event, Uri uri) {
+        if (!(view instanceof ImageView)) {
+            return false;
+        }
+        ((ImageView) view).setImageURI(uri);
+        return true;
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/MainActivity.java b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/MainActivity.java
new file mode 100644
index 0000000..462f49b
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/java/com/example/android/droptarget/MainActivity.java
@@ -0,0 +1,110 @@
+/*
+* 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.
+*/
+
+
+package com.example.android.droptarget;
+
+import android.os.Bundle;
+import android.support.v4.app.FragmentTransaction;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.ViewAnimator;
+
+import com.example.android.common.activities.SampleActivityBase;
+import com.example.android.common.logger.Log;
+import com.example.android.common.logger.LogFragment;
+import com.example.android.common.logger.LogWrapper;
+import com.example.android.common.logger.MessageOnlyLogFilter;
+
+/**
+ * A simple launcher activity containing a summary sample description, sample log and a custom
+ * {@link android.support.v4.app.Fragment} which can display a view.
+ * <p>
+ * For devices with displays with a width of 720dp or greater, the sample log is always visible,
+ * on other devices it's visibility is controlled by an item on the Action Bar.
+ */
+public class MainActivity extends SampleActivityBase {
+
+    public static final String TAG = "MainActivity";
+
+    // Whether the Log Fragment is currently shown
+    private boolean mLogShown;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        if (savedInstanceState == null) {
+            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
+            DropTargetFragment fragment = new DropTargetFragment();
+            transaction.replace(R.id.sample_content_fragment, fragment);
+            transaction.commit();
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(R.menu.main, menu);
+        return true;
+    }
+
+    @Override
+    public boolean onPrepareOptionsMenu(Menu menu) {
+        MenuItem logToggle = menu.findItem(R.id.menu_toggle_log);
+        logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator);
+        logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log);
+
+        return super.onPrepareOptionsMenu(menu);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch(item.getItemId()) {
+            case R.id.menu_toggle_log:
+                mLogShown = !mLogShown;
+                ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output);
+                if (mLogShown) {
+                    output.setDisplayedChild(1);
+                } else {
+                    output.setDisplayedChild(0);
+                }
+                supportInvalidateOptionsMenu();
+                return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    /** Create a chain of targets that will receive log data */
+    @Override
+    public void initializeLogging() {
+        // Wraps Android's native log framework.
+        LogWrapper logWrapper = new LogWrapper();
+        // Using Log, front-end to the logging chain, emulates android.util.log method signatures.
+        Log.setLogNode(logWrapper);
+
+        // Filter strips out everything except the message text.
+        MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter();
+        logWrapper.setNext(msgFilter);
+
+        // On screen logging via a fragment with a TextView.
+        LogFragment logFragment = (LogFragment) getSupportFragmentManager()
+                .findFragmentById(R.id.log_fragment);
+        msgFilter.setNext(logFragment.getLogView());
+
+        Log.i(TAG, "Ready");
+    }
+}
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/drawable-hdpi/tile.9.png b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/drawable-hdpi/tile.9.png
new file mode 100644
index 0000000..1358628
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/drawable-hdpi/tile.9.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout-w720dp/activity_main.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout-w720dp/activity_main.xml
new file mode 100755
index 0000000..efc54b7
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout-w720dp/activity_main.xml
@@ -0,0 +1,72 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<LinearLayout android:id="@+id/sample_main_layout"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="horizontal">
+
+    <LinearLayout
+        android:id="@+id/sample_output"
+        android:layout_width="0px"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:orientation="vertical">
+
+        <FrameLayout
+            style="@style/Widget.SampleMessageTile"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <TextView
+                style="@style/Widget.SampleMessage"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingBottom="@dimen/margin_large"
+                android:paddingLeft="@dimen/margin_medium"
+                android:paddingRight="@dimen/margin_medium"
+                android:paddingTop="@dimen/margin_large"
+                android:text="@string/intro_message" />
+        </FrameLayout>
+
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:background="@android:color/darker_gray" />
+
+        <fragment
+            android:id="@+id/log_fragment"
+            android:name="com.example.android.common.logger.LogFragment"
+            android:layout_width="match_parent"
+            android:layout_height="0px"
+            android:layout_weight="1" />
+
+    </LinearLayout>
+
+    <View
+        android:layout_width="1dp"
+        android:layout_height="match_parent"
+        android:background="@android:color/darker_gray" />
+
+    <FrameLayout
+        android:id="@+id/sample_content_fragment"
+        android:layout_width="0px"
+        android:layout_height="match_parent"
+        android:layout_weight="2" />
+
+</LinearLayout>
+
+
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout/activity_main.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout/activity_main.xml
new file mode 100755
index 0000000..17bc911
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout/activity_main.xml
@@ -0,0 +1,64 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:id="@+id/sample_main_layout">
+
+    <ViewAnimator
+        android:id="@+id/sample_output"
+        android:layout_width="match_parent"
+        android:layout_height="0px"
+        android:layout_weight="1">
+
+        <ScrollView
+            style="@style/Widget.SampleMessageTile"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <TextView
+                style="@style/Widget.SampleMessage"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingLeft="@dimen/horizontal_page_margin"
+                android:paddingRight="@dimen/horizontal_page_margin"
+                android:paddingTop="@dimen/vertical_page_margin"
+                android:paddingBottom="@dimen/vertical_page_margin"
+                android:text="@string/intro_message" />
+        </ScrollView>
+
+        <fragment
+            android:name="com.example.android.common.logger.LogFragment"
+            android:id="@+id/log_fragment"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+    </ViewAnimator>
+
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="@android:color/darker_gray" />
+
+    <FrameLayout
+        android:id="@+id/sample_content_fragment"
+        android:layout_weight="2"
+        android:layout_width="match_parent"
+        android:layout_height="0px" />
+
+</LinearLayout>
+
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout/fragment_droptarget.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout/fragment_droptarget.xml
new file mode 100644
index 0000000..6721171
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/layout/fragment_droptarget.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2016 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.
+-->
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_margin="@dimen/section_margin"
+        android:gravity="center"
+        android:orientation="horizontal">
+
+        <ImageView
+            android:id="@+id/image_target"
+            android:layout_width="@dimen/image_size"
+            android:layout_height="@dimen/image_size"
+            android:background="@color/drag_inactive"
+            android:pointerIcon="crosshair"
+            android:scaleType="centerCrop" />
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="@dimen/section_margin"
+            android:gravity="center"
+            android:orientation="vertical">
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_margin="@dimen/text_margin"
+                android:text="@string/image_target_prompt" />
+            <CheckBox
+                android:id="@+id/release_checkbox"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/release_checkbox_text"/>
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/text_margin"
+                android:layout_marginRight="@dimen/text_margin"
+                android:text="@string/release_checkbox_note" />
+        </LinearLayout>
+    </LinearLayout>
+</ScrollView>
\ No newline at end of file
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/menu/main.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/menu/main.xml
new file mode 100644
index 0000000..480cafe
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/menu/main.xml
@@ -0,0 +1,22 @@
+<!--
+  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.
+  -->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/menu_toggle_log"
+        android:showAsAction="always"
+        android:title="@string/sample_show_log" />
+</menu>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-hdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..0732a10
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-mdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..6f8f369
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xhdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..01f2b2e
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xxhdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..48899e6
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..6d4a7c5
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-sw600dp/template-dimens.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-sw600dp/template-dimens.xml
new file mode 100644
index 0000000..22074a2
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-sw600dp/template-dimens.xml
@@ -0,0 +1,24 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_huge</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-sw600dp/template-styles.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-sw600dp/template-styles.xml
new file mode 100644
index 0000000..03d1974
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-sw600dp/template-styles.xml
@@ -0,0 +1,25 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceLarge</item>
+        <item name="android:lineSpacingMultiplier">1.2</item>
+        <item name="android:shadowDy">-6.5</item>
+    </style>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v11/template-styles.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v11/template-styles.xml
new file mode 100644
index 0000000..8c1ea66
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v11/template-styles.xml
@@ -0,0 +1,22 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v21/base-colors.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v21/base-colors.xml
new file mode 100644
index 0000000..b662ae2
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v21/base-colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v21/base-template-styles.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v21/base-template-styles.xml
new file mode 100644
index 0000000..d95b9b7
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values-v21/base-template-styles.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?><!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light"></style>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/colors.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/colors.xml
new file mode 100644
index 0000000..801e292
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <color name="drag_inactive">#ff888888</color>
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/dimen.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/dimen.xml
new file mode 100644
index 0000000..1efd96e
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/dimen.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources>
+    <dimen name="section_margin">16dp</dimen>
+
+    <dimen name="image_size">150dp</dimen>
+
+    <dimen name="text_size">0dp</dimen>
+    <dimen name="text_margin">10dp</dimen>
+    <dimen name="checkbox_margin">6dp</dimen>
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/fragmentview_strings.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/fragmentview_strings.xml
new file mode 100755
index 0000000..7b9d9ec
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/fragmentview_strings.xml
@@ -0,0 +1,19 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<resources>
+    <string name="sample_show_log">Show Log</string>
+    <string name="sample_hide_log">Hide Log</string>
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/strings.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/strings.xml
new file mode 100644
index 0000000..585a789
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/strings.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+     Copyright 2015 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="image_target_prompt">Drop image here.\nThe app will request permission from the source app before displaying the image.</string>
+
+    <string name="intro_message">This sample demonstrates drag and drop functionality and is the \'target\' app for this sample. It shows how data can be received when dragged from another app.\nOpen the \'DragSource\' sample app next to this one and try dragging an image into the space below.</string>
+
+    <string name="release_checkbox_text">Release permissions immediately after a drop</string>
+
+    <string name="release_checkbox_note">Releasing permissions will prevent the image from being properly restored after the activity has been resized.</string>
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/template-dimens.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/template-dimens.xml
new file mode 100644
index 0000000..39e710b
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/template-dimens.xml
@@ -0,0 +1,32 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
+
+    <dimen name="margin_tiny">4dp</dimen>
+    <dimen name="margin_small">8dp</dimen>
+    <dimen name="margin_medium">16dp</dimen>
+    <dimen name="margin_large">32dp</dimen>
+    <dimen name="margin_huge">64dp</dimen>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_medium</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/template-styles.xml b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/template-styles.xml
new file mode 100644
index 0000000..6e7d593
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/DropTarget/src/main/res/values/template-styles.xml
@@ -0,0 +1,42 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Activity themes -->
+
+    <style name="Theme.Base" parent="android:Theme.Light" />
+
+    <style name="Theme.Sample" parent="Theme.Base" />
+
+    <style name="AppTheme" parent="Theme.Sample" />
+    <!-- Widget styling -->
+
+    <style name="Widget" />
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceMedium</item>
+        <item name="android:lineSpacingMultiplier">1.1</item>
+    </style>
+
+    <style name="Widget.SampleMessageTile">
+        <item name="android:background">@drawable/tile</item>
+        <item name="android:shadowColor">#7F000000</item>
+        <item name="android:shadowDy">-3.5</item>
+        <item name="android:shadowRadius">2</item>
+    </style>
+
+</resources>
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/LICENSE b/prebuilts/gradle/DragAndDropAcrossApps/LICENSE
new file mode 100644
index 0000000..4f22946
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/LICENSE
@@ -0,0 +1,647 @@
+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 {yyyy} {name of copyright owner}
+
+   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.
+
+All image and audio files (including *.png, *.jpg, *.svg, *.mp3, *.wav 
+and *.ogg) are licensed under the CC-BY-NC license. All other files are 
+licensed under the Apache 2 license.
+
+CC-BY-NC License
+----------------
+
+Attribution-NonCommercial-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+     Considerations for licensors: Our public licenses are
+     intended for use by those authorized to give the public
+     permission to use material in ways otherwise restricted by
+     copyright and certain other rights. Our licenses are
+     irrevocable. Licensors should read and understand the terms
+     and conditions of the license they choose before applying it.
+     Licensors should also secure all rights necessary before
+     applying our licenses so that the public can reuse the
+     material as expected. Licensors should clearly mark any
+     material not subject to the license. This includes other CC-
+     licensed material, or material used under an exception or
+     limitation to copyright. More considerations for licensors:
+	wiki.creativecommons.org/Considerations_for_licensors
+
+     Considerations for the public: By using one of our public
+     licenses, a licensor grants the public permission to use the
+     licensed material under specified terms and conditions. If
+     the licensor's permission is not necessary for any reason--for
+     example, because of any applicable exception or limitation to
+     copyright--then that use is not regulated by the license. Our
+     licenses grant only permissions under copyright and certain
+     other rights that a licensor has authority to grant. Use of
+     the licensed material may still be restricted for other
+     reasons, including because others have copyright or other
+     rights in the material. A licensor may make special requests,
+     such as asking that all changes be marked or described.
+     Although not required by our licenses, you are encouraged to
+     respect those requests where reasonable. More_considerations
+     for the public: 
+	wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
+Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution-NonCommercial-ShareAlike 4.0 International Public License
+("Public License"). To the extent this Public License may be
+interpreted as a contract, You are granted the Licensed Rights in
+consideration of Your acceptance of these terms and conditions, and the
+Licensor grants You such rights in consideration of benefits the
+Licensor receives from making the Licensed Material available under
+these terms and conditions.
+
+
+Section 1 -- Definitions.
+
+  a. Adapted Material means material subject to Copyright and Similar
+     Rights that is derived from or based upon the Licensed Material
+     and in which the Licensed Material is translated, altered,
+     arranged, transformed, or otherwise modified in a manner requiring
+     permission under the Copyright and Similar Rights held by the
+     Licensor. For purposes of this Public License, where the Licensed
+     Material is a musical work, performance, or sound recording,
+     Adapted Material is always produced where the Licensed Material is
+     synched in timed relation with a moving image.
+
+  b. Adapter's License means the license You apply to Your Copyright
+     and Similar Rights in Your contributions to Adapted Material in
+     accordance with the terms and conditions of this Public License.
+
+  c. BY-NC-SA Compatible License means a license listed at
+     creativecommons.org/compatiblelicenses, approved by Creative
+     Commons as essentially the equivalent of this Public License.
+
+  d. Copyright and Similar Rights means copyright and/or similar rights
+     closely related to copyright including, without limitation,
+     performance, broadcast, sound recording, and Sui Generis Database
+     Rights, without regard to how the rights are labeled or
+     categorized. For purposes of this Public License, the rights
+     specified in Section 2(b)(1)-(2) are not Copyright and Similar
+     Rights.
+
+  e. Effective Technological Measures means those measures that, in the
+     absence of proper authority, may not be circumvented under laws
+     fulfilling obligations under Article 11 of the WIPO Copyright
+     Treaty adopted on December 20, 1996, and/or similar international
+     agreements.
+
+  f. Exceptions and Limitations means fair use, fair dealing, and/or
+     any other exception or limitation to Copyright and Similar Rights
+     that applies to Your use of the Licensed Material.
+
+  g. License Elements means the license attributes listed in the name
+     of a Creative Commons Public License. The License Elements of this
+     Public License are Attribution, NonCommercial, and ShareAlike.
+
+  h. Licensed Material means the artistic or literary work, database,
+     or other material to which the Licensor applied this Public
+     License.
+
+  i. Licensed Rights means the rights granted to You subject to the
+     terms and conditions of this Public License, which are limited to
+     all Copyright and Similar Rights that apply to Your use of the
+     Licensed Material and that the Licensor has authority to license.
+
+  j. Licensor means the individual(s) or entity(ies) granting rights
+     under this Public License.
+
+  k. NonCommercial means not primarily intended for or directed towards
+     commercial advantage or monetary compensation. For purposes of
+     this Public License, the exchange of the Licensed Material for
+     other material subject to Copyright and Similar Rights by digital
+     file-sharing or similar means is NonCommercial provided there is
+     no payment of monetary compensation in connection with the
+     exchange.
+
+  l. Share means to provide material to the public by any means or
+     process that requires permission under the Licensed Rights, such
+     as reproduction, public display, public performance, distribution,
+     dissemination, communication, or importation, and to make material
+     available to the public including in ways that members of the
+     public may access the material from a place and at a time
+     individually chosen by them.
+
+  m. Sui Generis Database Rights means rights other than copyright
+     resulting from Directive 96/9/EC of the European Parliament and of
+     the Council of 11 March 1996 on the legal protection of databases,
+     as amended and/or succeeded, as well as other essentially
+     equivalent rights anywhere in the world.
+
+  n. You means the individual or entity exercising the Licensed Rights
+     under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+  a. License grant.
+
+       1. Subject to the terms and conditions of this Public License,
+          the Licensor hereby grants You a worldwide, royalty-free,
+          non-sublicensable, non-exclusive, irrevocable license to
+          exercise the Licensed Rights in the Licensed Material to:
+
+            a. reproduce and Share the Licensed Material, in whole or
+               in part, for NonCommercial purposes only; and
+
+            b. produce, reproduce, and Share Adapted Material for
+               NonCommercial purposes only.
+
+       2. Exceptions and Limitations. For the avoidance of doubt, where
+          Exceptions and Limitations apply to Your use, this Public
+          License does not apply, and You do not need to comply with
+          its terms and conditions.
+
+       3. Term. The term of this Public License is specified in Section
+          6(a).
+
+       4. Media and formats; technical modifications allowed. The
+          Licensor authorizes You to exercise the Licensed Rights in
+          all media and formats whether now known or hereafter created,
+          and to make technical modifications necessary to do so. The
+          Licensor waives and/or agrees not to assert any right or
+          authority to forbid You from making technical modifications
+          necessary to exercise the Licensed Rights, including
+          technical modifications necessary to circumvent Effective
+          Technological Measures. For purposes of this Public License,
+          simply making modifications authorized by this Section 2(a)
+          (4) never produces Adapted Material.
+
+       5. Downstream recipients.
+
+            a. Offer from the Licensor -- Licensed Material. Every
+               recipient of the Licensed Material automatically
+               receives an offer from the Licensor to exercise the
+               Licensed Rights under the terms and conditions of this
+               Public License.
+
+            b. Additional offer from the Licensor -- Adapted Material.
+               Every recipient of Adapted Material from You
+               automatically receives an offer from the Licensor to
+               exercise the Licensed Rights in the Adapted Material
+               under the conditions of the Adapter's License You apply.
+
+            c. No downstream restrictions. You may not offer or impose
+               any additional or different terms or conditions on, or
+               apply any Effective Technological Measures to, the
+               Licensed Material if doing so restricts exercise of the
+               Licensed Rights by any recipient of the Licensed
+               Material.
+
+       6. No endorsement. Nothing in this Public License constitutes or
+          may be construed as permission to assert or imply that You
+          are, or that Your use of the Licensed Material is, connected
+          with, or sponsored, endorsed, or granted official status by,
+          the Licensor or others designated to receive attribution as
+          provided in Section 3(a)(1)(A)(i).
+
+  b. Other rights.
+
+       1. Moral rights, such as the right of integrity, are not
+          licensed under this Public License, nor are publicity,
+          privacy, and/or other similar personality rights; however, to
+          the extent possible, the Licensor waives and/or agrees not to
+          assert any such rights held by the Licensor to the limited
+          extent necessary to allow You to exercise the Licensed
+          Rights, but not otherwise.
+
+       2. Patent and trademark rights are not licensed under this
+          Public License.
+
+       3. To the extent possible, the Licensor waives any right to
+          collect royalties from You for the exercise of the Licensed
+          Rights, whether directly or through a collecting society
+          under any voluntary or waivable statutory or compulsory
+          licensing scheme. In all other cases the Licensor expressly
+          reserves any right to collect such royalties, including when
+          the Licensed Material is used other than for NonCommercial
+          purposes.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+  a. Attribution.
+
+       1. If You Share the Licensed Material (including in modified
+          form), You must:
+
+            a. retain the following if it is supplied by the Licensor
+               with the Licensed Material:
+
+                 i. identification of the creator(s) of the Licensed
+                    Material and any others designated to receive
+                    attribution, in any reasonable manner requested by
+                    the Licensor (including by pseudonym if
+                    designated);
+
+                ii. a copyright notice;
+
+               iii. a notice that refers to this Public License;
+
+                iv. a notice that refers to the disclaimer of
+                    warranties;
+
+                 v. a URI or hyperlink to the Licensed Material to the
+                    extent reasonably practicable;
+
+            b. indicate if You modified the Licensed Material and
+               retain an indication of any previous modifications; and
+
+            c. indicate the Licensed Material is licensed under this
+               Public License, and include the text of, or the URI or
+               hyperlink to, this Public License.
+
+       2. You may satisfy the conditions in Section 3(a)(1) in any
+          reasonable manner based on the medium, means, and context in
+          which You Share the Licensed Material. For example, it may be
+          reasonable to satisfy the conditions by providing a URI or
+          hyperlink to a resource that includes the required
+          information.
+       3. If requested by the Licensor, You must remove any of the
+          information required by Section 3(a)(1)(A) to the extent
+          reasonably practicable.
+
+  b. ShareAlike.
+
+     In addition to the conditions in Section 3(a), if You Share
+     Adapted Material You produce, the following conditions also apply.
+
+       1. The Adapter's License You apply must be a Creative Commons
+          license with the same License Elements, this version or
+          later, or a BY-NC-SA Compatible License.
+
+       2. You must include the text of, or the URI or hyperlink to, the
+          Adapter's License You apply. You may satisfy this condition
+          in any reasonable manner based on the medium, means, and
+          context in which You Share Adapted Material.
+
+       3. You may not offer or impose any additional or different terms
+          or conditions on, or apply any Effective Technological
+          Measures to, Adapted Material that restrict exercise of the
+          rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+  a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+     to extract, reuse, reproduce, and Share all or a substantial
+     portion of the contents of the database for NonCommercial purposes
+     only;
+
+  b. if You include all or a substantial portion of the database
+     contents in a database in which You have Sui Generis Database
+     Rights, then the database in which You have Sui Generis Database
+     Rights (but not its individual contents) is Adapted Material,
+     including for purposes of Section 3(b); and
+
+  c. You must comply with the conditions in Section 3(a) if You Share
+     all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+  c. The disclaimer of warranties and limitation of liability provided
+     above shall be interpreted in a manner that, to the extent
+     possible, most closely approximates an absolute disclaimer and
+     waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+  a. This Public License applies for the term of the Copyright and
+     Similar Rights licensed here. However, if You fail to comply with
+     this Public License, then Your rights under this Public License
+     terminate automatically.
+
+  b. Where Your right to use the Licensed Material has terminated under
+     Section 6(a), it reinstates:
+
+       1. automatically as of the date the violation is cured, provided
+          it is cured within 30 days of Your discovery of the
+          violation; or
+
+       2. upon express reinstatement by the Licensor.
+
+     For the avoidance of doubt, this Section 6(b) does not affect any
+     right the Licensor may have to seek remedies for Your violations
+     of this Public License.
+
+  c. For the avoidance of doubt, the Licensor may also offer the
+     Licensed Material under separate terms or conditions or stop
+     distributing the Licensed Material at any time; however, doing so
+     will not terminate this Public License.
+
+  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+     License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+  a. The Licensor shall not be bound by any additional or different
+     terms or conditions communicated by You unless expressly agreed.
+
+  b. Any arrangements, understandings, or agreements regarding the
+     Licensed Material not stated herein are separate from and
+     independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+  a. For the avoidance of doubt, this Public License does not, and
+     shall not be interpreted to, reduce, limit, restrict, or impose
+     conditions on any use of the Licensed Material that could lawfully
+     be made without permission under this Public License.
+
+  b. To the extent possible, if any provision of this Public License is
+     deemed unenforceable, it shall be automatically reformed to the
+     minimum extent necessary to make it enforceable. If the provision
+     cannot be reformed, it shall be severed from this Public License
+     without affecting the enforceability of the remaining terms and
+     conditions.
+
+  c. No term or condition of this Public License will be waived and no
+     failure to comply consented to unless expressly agreed to by the
+     Licensor.
+
+  d. Nothing in this Public License constitutes or may be interpreted
+     as a limitation upon, or waiver of, any privileges and immunities
+     that apply to the Licensor or You, including from the legal
+     processes of any jurisdiction or authority.
+
+=======================================================================
+
+Creative Commons is not a party to its public licenses.
+Notwithstanding, Creative Commons may elect to apply one of its public
+licenses to material it publishes and in those instances will be
+considered the "Licensor." Except for the limited purpose of indicating
+that material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the public
+licenses.
+
+Creative Commons may be contacted at creativecommons.org.
+
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/NOTICE b/prebuilts/gradle/DragAndDropAcrossApps/NOTICE
new file mode 100644
index 0000000..29ea77b
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/NOTICE
@@ -0,0 +1,16 @@
+
+This sample uses the following software:
+
+Copyright 2016 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/prebuilts/gradle/DragAndDropAcrossApps/README.md b/prebuilts/gradle/DragAndDropAcrossApps/README.md
new file mode 100644
index 0000000..4c49eeb
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/README.md
@@ -0,0 +1,98 @@
+
+Android DragAndDropAcrossApps-new Sample
+===================================
+
+This sample contains two separate Android applications: DragSource and
+DropTarget. DragSource contains images and text that can be dropped into the DropTarget
+app. Images are shared between the two apps through a URI for which the receiving app
+must request permission first, before it can be used.
+
+It also demonstrates the use of the DragStartHelper from the v13 support library to easily
+handle drag and drop events.
+
+Introduction
+------------
+
+Android N introduces support for drag and drop between applications,
+augmenting the existing APIs that have enabled this within a single 
+window before.
+
+To start a drag operation you need to call `View.startDragAndDrop`. 
+Which gesture or action triggers this is up to you as an app developer.
+The API guide recommends doing this from 
+`View.OnLongClickListener.onLongClick` and this seems to be the de-facto
+standard, but you are free to use other gestures (single tap, tap and drag 
+etc). 
+However, if you go for a unconventional drag start gesture, note that
+the framework implementation assumes that the pointer (touch or mouse)
+is down while the drag is starting, and the most recent touch/click
+position is used as the original position of the drag shadow.
+
+See also `android.support.v13.view.DragStartHelper` which uses different
+gestures for touch and mouse (click and drag works better for mouse
+than a long click).
+
+By default a drag and drop operation is constrained by the window
+containing the view that started the drag.
+To enable cross-window and cross-app drag and drop add 
+`View.DRAG_FLAG_GLOBAL` to the flags passed to the `View.startDragAndDrop`
+call. 
+
+If a Uri requiring permission grants is being sent, then the 
+`android.view.View.DRAG_FLAG_GLOBAL_URI_READ` and/or the 
+`android.view.View.DRAG_FLAG_GLOBAL_URI_WRITE` flags must be used also.
+To access content URIs requiring permissions on the receiving side, the target
+app needs to request the `android.view.DropPermissions` from the activity via
+`android.app.Activity.requestDropPermissions`. This permission will stay either 
+until the activity is alive, or until the `release()` method is called on the
+`android.view.DropPermissions` object.
+
+Pre-requisites
+--------------
+
+- Android SDK 24
+- Android Build Tools v24.0.2
+- Android Support Repository
+
+Screenshots
+-------------
+
+<img src="screenshots/phone.png" height="400" alt="Screenshot"/> <img src="screenshots/tablet.png" height="400" alt="Screenshot"/> 
+
+Getting Started
+---------------
+
+This sample uses the Gradle build system. To build this project, use the
+"gradlew build" command or use "Import Project" in Android Studio.
+
+Support
+-------
+
+- Google+ Community: https://plus.google.com/communities/105153134372062985968
+- Stack Overflow: http://stackoverflow.com/questions/tagged/android
+
+If you've found an error in this sample, please file an issue:
+https://github.com/googlesamples/android-DragAndDropAcrossApps-new
+
+Patches are encouraged, and may be submitted by forking this project and
+submitting a pull request through GitHub. Please see CONTRIBUTING.md for more details.
+
+License
+-------
+
+Copyright 2016 The Android Open Source Project, Inc.
+
+Licensed to the Apache Software Foundation (ASF) under one or more contributor
+license agreements.  See the NOTICE file distributed with this work for
+additional information regarding copyright ownership.  The ASF licenses this
+file to you 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/prebuilts/gradle/DragAndDropAcrossApps/build.gradle b/prebuilts/gradle/DragAndDropAcrossApps/build.gradle
new file mode 100644
index 0000000..cd82bf9
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/build.gradle
@@ -0,0 +1,28 @@
+
+
+/*
+ * Copyright 2016, 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/prebuilts/gradle/DragAndDropAcrossApps/gradle/wrapper/gradle-wrapper.jar b/prebuilts/gradle/DragAndDropAcrossApps/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..8c0fb64
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DragAndDropAcrossApps/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..de1fbf8
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon May 02 14:15:55 AEST 2016
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/gradlew b/prebuilts/gradle/DragAndDropAcrossApps/gradlew
new file mode 100755
index 0000000..91a7e26
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/gradlew.bat b/prebuilts/gradle/DragAndDropAcrossApps/gradlew.bat
new file mode 100644
index 0000000..aec9973
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/screenshots/big_icon.png b/prebuilts/gradle/DragAndDropAcrossApps/screenshots/big_icon.png
new file mode 100644
index 0000000..77f6e62
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/screenshots/big_icon.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/screenshots/phone.png b/prebuilts/gradle/DragAndDropAcrossApps/screenshots/phone.png
new file mode 100644
index 0000000..37e0bfb
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/screenshots/phone.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/screenshots/tablet.png b/prebuilts/gradle/DragAndDropAcrossApps/screenshots/tablet.png
new file mode 100644
index 0000000..5230f3a
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/screenshots/tablet.png
Binary files differ
diff --git a/prebuilts/gradle/DragAndDropAcrossApps/settings.gradle b/prebuilts/gradle/DragAndDropAcrossApps/settings.gradle
new file mode 100644
index 0000000..c670b21
--- /dev/null
+++ b/prebuilts/gradle/DragAndDropAcrossApps/settings.gradle
@@ -0,0 +1,17 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+include ':DragSource', ':DropTarget'
diff --git a/prebuilts/gradle/DrawableTinting/Application/build.gradle b/prebuilts/gradle/DrawableTinting/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/DrawableTinting/Application/build.gradle
+++ b/prebuilts/gradle/DrawableTinting/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DrawableTinting/README.md b/prebuilts/gradle/DrawableTinting/README.md
index bfc7f93..671b384 100644
--- a/prebuilts/gradle/DrawableTinting/README.md
+++ b/prebuilts/gradle/DrawableTinting/README.md
@@ -17,7 +17,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/DrawableTinting/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/DrawableTinting/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/DrawableTinting/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/DrawableTinting/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ElevationBasic/Application/build.gradle b/prebuilts/gradle/ElevationBasic/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/ElevationBasic/Application/build.gradle
+++ b/prebuilts/gradle/ElevationBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ElevationBasic/README.md b/prebuilts/gradle/ElevationBasic/README.md
index b698143..1405d71 100644
--- a/prebuilts/gradle/ElevationBasic/README.md
+++ b/prebuilts/gradle/ElevationBasic/README.md
@@ -42,7 +42,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ElevationBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ElevationBasic/gradle/wrapper/gradle-wrapper.properties
index 32af84e..5b8f1a5 100644
--- a/prebuilts/gradle/ElevationBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ElevationBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ElevationDrag/Application/build.gradle b/prebuilts/gradle/ElevationDrag/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/ElevationDrag/Application/build.gradle
+++ b/prebuilts/gradle/ElevationDrag/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ElevationDrag/README.md b/prebuilts/gradle/ElevationDrag/README.md
index 84fa9e6..6cad94a 100644
--- a/prebuilts/gradle/ElevationDrag/README.md
+++ b/prebuilts/gradle/ElevationDrag/README.md
@@ -25,7 +25,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ElevationDrag/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ElevationDrag/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ElevationDrag/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ElevationDrag/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ElizaChat/Application/build.gradle b/prebuilts/gradle/ElizaChat/Application/build.gradle
index f683f73..4ba6338 100644
--- a/prebuilts/gradle/ElizaChat/Application/build.gradle
+++ b/prebuilts/gradle/ElizaChat/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/ElizaChat/README.md b/prebuilts/gradle/ElizaChat/README.md
index 6c86035..9975bea 100644
--- a/prebuilts/gradle/ElizaChat/README.md
+++ b/prebuilts/gradle/ElizaChat/README.md
@@ -68,7 +68,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ElizaChat/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ElizaChat/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ElizaChat/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ElizaChat/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/FindMyPhone/Application/build.gradle b/prebuilts/gradle/FindMyPhone/Application/build.gradle
index 6b3f748..31a1b84 100644
--- a/prebuilts/gradle/FindMyPhone/Application/build.gradle
+++ b/prebuilts/gradle/FindMyPhone/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,12 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -35,7 +35,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/FindMyPhone/README.md b/prebuilts/gradle/FindMyPhone/README.md
index c7e1cf3..0b2db9c 100644
--- a/prebuilts/gradle/FindMyPhone/README.md
+++ b/prebuilts/gradle/FindMyPhone/README.md
@@ -11,7 +11,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/FindMyPhone/Wearable/build.gradle b/prebuilts/gradle/FindMyPhone/Wearable/build.gradle
index 9d85175..8d491a0 100644
--- a/prebuilts/gradle/FindMyPhone/Wearable/build.gradle
+++ b/prebuilts/gradle/FindMyPhone/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/FindMyPhone/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/FindMyPhone/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/FindMyPhone/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/FindMyPhone/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/FingerprintDialog/Application/build.gradle b/prebuilts/gradle/FingerprintDialog/Application/build.gradle
index c626117..5494917 100644
--- a/prebuilts/gradle/FingerprintDialog/Application/build.gradle
+++ b/prebuilts/gradle/FingerprintDialog/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/FingerprintDialog/README.md b/prebuilts/gradle/FingerprintDialog/README.md
index 3471ef6..2a3b67d 100644
--- a/prebuilts/gradle/FingerprintDialog/README.md
+++ b/prebuilts/gradle/FingerprintDialog/README.md
@@ -36,7 +36,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/FingerprintDialog/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/FingerprintDialog/gradle/wrapper/gradle-wrapper.properties
index 13b1b48..b5c3b1f 100644
--- a/prebuilts/gradle/FingerprintDialog/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/FingerprintDialog/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Flashlight/README.md b/prebuilts/gradle/Flashlight/README.md
index b62d85f..ab447ea 100644
--- a/prebuilts/gradle/Flashlight/README.md
+++ b/prebuilts/gradle/Flashlight/README.md
@@ -19,7 +19,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/Flashlight/Wearable/build.gradle b/prebuilts/gradle/Flashlight/Wearable/build.gradle
index 9d85175..8d491a0 100644
--- a/prebuilts/gradle/Flashlight/Wearable/build.gradle
+++ b/prebuilts/gradle/Flashlight/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/Flashlight/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Flashlight/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Flashlight/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Flashlight/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/FloatingActionButtonBasic/Application/build.gradle b/prebuilts/gradle/FloatingActionButtonBasic/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/FloatingActionButtonBasic/Application/build.gradle
+++ b/prebuilts/gradle/FloatingActionButtonBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/FloatingActionButtonBasic/README.md b/prebuilts/gradle/FloatingActionButtonBasic/README.md
index 6de17f9..ef2bf38 100644
--- a/prebuilts/gradle/FloatingActionButtonBasic/README.md
+++ b/prebuilts/gradle/FloatingActionButtonBasic/README.md
@@ -26,7 +26,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/FloatingActionButtonBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/FloatingActionButtonBasic/gradle/wrapper/gradle-wrapper.properties
index 9b778a3..dc17209 100644
--- a/prebuilts/gradle/FloatingActionButtonBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/FloatingActionButtonBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Geofencing/Application/build.gradle b/prebuilts/gradle/Geofencing/Application/build.gradle
index b281746..ddaca28 100644
--- a/prebuilts/gradle/Geofencing/Application/build.gradle
+++ b/prebuilts/gradle/Geofencing/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,13 +16,13 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
-    compile 'com.google.android.gms:play-services-location:8.4.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
+    compile 'com.google.android.gms:play-services-location:9.4.0'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -36,7 +36,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/Geofencing/README.md b/prebuilts/gradle/Geofencing/README.md
index 667c87a..93d4c0c 100644
--- a/prebuilts/gradle/Geofencing/README.md
+++ b/prebuilts/gradle/Geofencing/README.md
@@ -37,7 +37,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/Geofencing/Wearable/build.gradle b/prebuilts/gradle/Geofencing/Wearable/build.gradle
index 9d85175..8d491a0 100644
--- a/prebuilts/gradle/Geofencing/Wearable/build.gradle
+++ b/prebuilts/gradle/Geofencing/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/Geofencing/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Geofencing/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Geofencing/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Geofencing/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/GridViewPager/README.md b/prebuilts/gradle/GridViewPager/README.md
index 804ff0e..db72334 100644
--- a/prebuilts/gradle/GridViewPager/README.md
+++ b/prebuilts/gradle/GridViewPager/README.md
@@ -8,7 +8,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/GridViewPager/Wearable/build.gradle b/prebuilts/gradle/GridViewPager/Wearable/build.gradle
index 6d83eed..7377cac 100644
--- a/prebuilts/gradle/GridViewPager/Wearable/build.gradle
+++ b/prebuilts/gradle/GridViewPager/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/GridViewPager/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/GridViewPager/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/GridViewPager/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/GridViewPager/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/HdrViewfinder/Application/build.gradle b/prebuilts/gradle/HdrViewfinder/Application/build.gradle
index 6af7e90..ecd3721 100644
--- a/prebuilts/gradle/HdrViewfinder/Application/build.gradle
+++ b/prebuilts/gradle/HdrViewfinder/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:design:24.0.0'
 }
 
@@ -33,7 +33,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/HdrViewfinder/README.md b/prebuilts/gradle/HdrViewfinder/README.md
index 0e8d0a9..ca266b7 100644
--- a/prebuilts/gradle/HdrViewfinder/README.md
+++ b/prebuilts/gradle/HdrViewfinder/README.md
@@ -44,7 +44,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/HdrViewfinder/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/HdrViewfinder/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/HdrViewfinder/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/HdrViewfinder/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/HorizontalPaging/Application/build.gradle b/prebuilts/gradle/HorizontalPaging/Application/build.gradle
index 906d12f..38bb285 100644
--- a/prebuilts/gradle/HorizontalPaging/Application/build.gradle
+++ b/prebuilts/gradle/HorizontalPaging/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/HorizontalPaging/README.md b/prebuilts/gradle/HorizontalPaging/README.md
index c03ba9a..3a14904 100644
--- a/prebuilts/gradle/HorizontalPaging/README.md
+++ b/prebuilts/gradle/HorizontalPaging/README.md
@@ -31,7 +31,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/HorizontalPaging/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/HorizontalPaging/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/HorizontalPaging/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/HorizontalPaging/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ImmersiveMode/Application/build.gradle b/prebuilts/gradle/ImmersiveMode/Application/build.gradle
index 906d12f..38bb285 100644
--- a/prebuilts/gradle/ImmersiveMode/Application/build.gradle
+++ b/prebuilts/gradle/ImmersiveMode/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/ImmersiveMode/README.md b/prebuilts/gradle/ImmersiveMode/README.md
index f9c0bd9..a457243 100644
--- a/prebuilts/gradle/ImmersiveMode/README.md
+++ b/prebuilts/gradle/ImmersiveMode/README.md
@@ -10,7 +10,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/ImmersiveMode/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ImmersiveMode/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ImmersiveMode/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ImmersiveMode/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Interpolator/Application/build.gradle b/prebuilts/gradle/Interpolator/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/Interpolator/Application/build.gradle
+++ b/prebuilts/gradle/Interpolator/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/Interpolator/README.md b/prebuilts/gradle/Interpolator/README.md
index 69a3366..d98b19a 100644
--- a/prebuilts/gradle/Interpolator/README.md
+++ b/prebuilts/gradle/Interpolator/README.md
@@ -24,7 +24,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/Interpolator/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Interpolator/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Interpolator/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Interpolator/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/JobScheduler/Application/build.gradle b/prebuilts/gradle/JobScheduler/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/JobScheduler/Application/build.gradle
+++ b/prebuilts/gradle/JobScheduler/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/JobScheduler/README.md b/prebuilts/gradle/JobScheduler/README.md
index 84862c0..f7bcbac 100644
--- a/prebuilts/gradle/JobScheduler/README.md
+++ b/prebuilts/gradle/JobScheduler/README.md
@@ -9,7 +9,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/JobScheduler/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/JobScheduler/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/JobScheduler/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/JobScheduler/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/JumpingJack/README.md b/prebuilts/gradle/JumpingJack/README.md
index e0e594e..bcf134b 100644
--- a/prebuilts/gradle/JumpingJack/README.md
+++ b/prebuilts/gradle/JumpingJack/README.md
@@ -45,7 +45,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/JumpingJack/Wearable/build.gradle b/prebuilts/gradle/JumpingJack/Wearable/build.gradle
index 6d83eed..7377cac 100644
--- a/prebuilts/gradle/JumpingJack/Wearable/build.gradle
+++ b/prebuilts/gradle/JumpingJack/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/JumpingJack/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/JumpingJack/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/JumpingJack/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/JumpingJack/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/LNotifications/Application/build.gradle b/prebuilts/gradle/LNotifications/Application/build.gradle
index 8d45e32..a605bdf 100644
--- a/prebuilts/gradle/LNotifications/Application/build.gradle
+++ b/prebuilts/gradle/LNotifications/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/LNotifications/README.md b/prebuilts/gradle/LNotifications/README.md
index d5a34fa..605a514 100644
--- a/prebuilts/gradle/LNotifications/README.md
+++ b/prebuilts/gradle/LNotifications/README.md
@@ -27,7 +27,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/LNotifications/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/LNotifications/gradle/wrapper/gradle-wrapper.properties
index 2fa0ecc..2b47bd3 100644
--- a/prebuilts/gradle/LNotifications/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/LNotifications/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/MediaBrowserService/Application/build.gradle b/prebuilts/gradle/MediaBrowserService/Application/build.gradle
index aef04e5..6f25791 100644
--- a/prebuilts/gradle/MediaBrowserService/Application/build.gradle
+++ b/prebuilts/gradle/MediaBrowserService/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -14,9 +14,9 @@
 
 dependencies {
 
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
 
 }
 
@@ -30,7 +30,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/MediaBrowserService/README.md b/prebuilts/gradle/MediaBrowserService/README.md
index 3835a23..d2f34f4 100644
--- a/prebuilts/gradle/MediaBrowserService/README.md
+++ b/prebuilts/gradle/MediaBrowserService/README.md
@@ -73,7 +73,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/MediaBrowserService/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/MediaBrowserService/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/MediaBrowserService/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/MediaBrowserService/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/MediaEffects/Application/build.gradle b/prebuilts/gradle/MediaEffects/Application/build.gradle
index 2b32f6f..278f87d 100644
--- a/prebuilts/gradle/MediaEffects/Application/build.gradle
+++ b/prebuilts/gradle/MediaEffects/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/MediaEffects/README.md b/prebuilts/gradle/MediaEffects/README.md
index a03bd99..8307e3d 100644
--- a/prebuilts/gradle/MediaEffects/README.md
+++ b/prebuilts/gradle/MediaEffects/README.md
@@ -22,7 +22,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/MediaEffects/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/MediaEffects/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/MediaEffects/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/MediaEffects/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/MediaRecorder/Application/build.gradle b/prebuilts/gradle/MediaRecorder/Application/build.gradle
index d1c5f91..61c6d14 100644
--- a/prebuilts/gradle/MediaRecorder/Application/build.gradle
+++ b/prebuilts/gradle/MediaRecorder/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/MediaRecorder/README.md b/prebuilts/gradle/MediaRecorder/README.md
index cb13b4a..8f4519e 100644
--- a/prebuilts/gradle/MediaRecorder/README.md
+++ b/prebuilts/gradle/MediaRecorder/README.md
@@ -26,7 +26,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/MediaRecorder/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/MediaRecorder/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/MediaRecorder/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/MediaRecorder/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/MediaRouter/Application/build.gradle b/prebuilts/gradle/MediaRouter/Application/build.gradle
index 31cc738..a62e696 100644
--- a/prebuilts/gradle/MediaRouter/Application/build.gradle
+++ b/prebuilts/gradle/MediaRouter/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:mediarouter-v7:24.0.0'
 }
 
@@ -33,7 +33,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 13
diff --git a/prebuilts/gradle/MediaRouter/README.md b/prebuilts/gradle/MediaRouter/README.md
index ad0103f..6e4f1d2 100644
--- a/prebuilts/gradle/MediaRouter/README.md
+++ b/prebuilts/gradle/MediaRouter/README.md
@@ -8,7 +8,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/MediaRouter/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/MediaRouter/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/MediaRouter/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/MediaRouter/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/MessagingService/Application/build.gradle b/prebuilts/gradle/MessagingService/Application/build.gradle
index aef04e5..6f25791 100644
--- a/prebuilts/gradle/MessagingService/Application/build.gradle
+++ b/prebuilts/gradle/MessagingService/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -14,9 +14,9 @@
 
 dependencies {
 
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
 
 }
 
@@ -30,7 +30,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/MessagingService/README.md b/prebuilts/gradle/MessagingService/README.md
index 19fb65d..f5f8448 100644
--- a/prebuilts/gradle/MessagingService/README.md
+++ b/prebuilts/gradle/MessagingService/README.md
@@ -51,7 +51,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/MessagingService/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/MessagingService/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/MessagingService/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/MessagingService/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/MidiScope/Application/build.gradle b/prebuilts/gradle/MidiScope/Application/build.gradle
index c626117..5494917 100644
--- a/prebuilts/gradle/MidiScope/Application/build.gradle
+++ b/prebuilts/gradle/MidiScope/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/MidiScope/README.md b/prebuilts/gradle/MidiScope/README.md
index 045831c..b563951 100644
--- a/prebuilts/gradle/MidiScope/README.md
+++ b/prebuilts/gradle/MidiScope/README.md
@@ -20,7 +20,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/MidiScope/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/MidiScope/gradle/wrapper/gradle-wrapper.properties
index 03c59c2..1081cc3 100644
--- a/prebuilts/gradle/MidiScope/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/MidiScope/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/MidiSynth/Application/build.gradle b/prebuilts/gradle/MidiSynth/Application/build.gradle
index c626117..5494917 100644
--- a/prebuilts/gradle/MidiSynth/Application/build.gradle
+++ b/prebuilts/gradle/MidiSynth/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/MidiSynth/README.md b/prebuilts/gradle/MidiSynth/README.md
index d564bc1..df10fa2 100644
--- a/prebuilts/gradle/MidiSynth/README.md
+++ b/prebuilts/gradle/MidiSynth/README.md
@@ -25,7 +25,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/MidiSynth/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/MidiSynth/gradle/wrapper/gradle-wrapper.properties
index 03c59c2..1081cc3 100644
--- a/prebuilts/gradle/MidiSynth/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/MidiSynth/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-2.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/MultiWindowPlayground/README.md b/prebuilts/gradle/MultiWindowPlayground/README.md
index 1dd616f..dbe200a 100644
--- a/prebuilts/gradle/MultiWindowPlayground/README.md
+++ b/prebuilts/gradle/MultiWindowPlayground/README.md
@@ -49,7 +49,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/MultiWindowPlayground/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/MultiWindowPlayground/gradle/wrapper/gradle-wrapper.properties
index 122a0dc..04e285f 100644
--- a/prebuilts/gradle/MultiWindowPlayground/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/MultiWindowPlayground/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/NavigationDrawer/Application/build.gradle b/prebuilts/gradle/NavigationDrawer/Application/build.gradle
index 57a5a84..233ba59 100644
--- a/prebuilts/gradle/NavigationDrawer/Application/build.gradle
+++ b/prebuilts/gradle/NavigationDrawer/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/NavigationDrawer/README.md b/prebuilts/gradle/NavigationDrawer/README.md
index 59bd29e..991513b 100644
--- a/prebuilts/gradle/NavigationDrawer/README.md
+++ b/prebuilts/gradle/NavigationDrawer/README.md
@@ -9,7 +9,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/NavigationDrawer/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/NavigationDrawer/gradle/wrapper/gradle-wrapper.properties
index d9a65b6..91f0cd9 100644
--- a/prebuilts/gradle/NavigationDrawer/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/NavigationDrawer/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/NetworkConnect/Application/build.gradle b/prebuilts/gradle/NetworkConnect/Application/build.gradle
index 43e0208..591fba1 100644
--- a/prebuilts/gradle/NetworkConnect/Application/build.gradle
+++ b/prebuilts/gradle/NetworkConnect/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 8
diff --git a/prebuilts/gradle/NetworkConnect/README.md b/prebuilts/gradle/NetworkConnect/README.md
index bd6d992..fc706bd 100644
--- a/prebuilts/gradle/NetworkConnect/README.md
+++ b/prebuilts/gradle/NetworkConnect/README.md
@@ -18,7 +18,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/NetworkConnect/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/NetworkConnect/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/NetworkConnect/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/NetworkConnect/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/NfcProvisioning/Application/build.gradle b/prebuilts/gradle/NfcProvisioning/Application/build.gradle
index 8d45e32..a605bdf 100644
--- a/prebuilts/gradle/NfcProvisioning/Application/build.gradle
+++ b/prebuilts/gradle/NfcProvisioning/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/NfcProvisioning/README.md b/prebuilts/gradle/NfcProvisioning/README.md
index 20fea65..724f467 100644
--- a/prebuilts/gradle/NfcProvisioning/README.md
+++ b/prebuilts/gradle/NfcProvisioning/README.md
@@ -34,7 +34,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/NfcProvisioning/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/NfcProvisioning/gradle/wrapper/gradle-wrapper.properties
index ee35487..e2d9868 100644
--- a/prebuilts/gradle/NfcProvisioning/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/NfcProvisioning/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Notifications/Application/build.gradle b/prebuilts/gradle/Notifications/Application/build.gradle
index 6b3f748..31a1b84 100644
--- a/prebuilts/gradle/Notifications/Application/build.gradle
+++ b/prebuilts/gradle/Notifications/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,12 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -35,7 +35,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/Notifications/README.md b/prebuilts/gradle/Notifications/README.md
index 395df4e..18df612 100644
--- a/prebuilts/gradle/Notifications/README.md
+++ b/prebuilts/gradle/Notifications/README.md
@@ -24,7 +24,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/Notifications/Wearable/build.gradle b/prebuilts/gradle/Notifications/Wearable/build.gradle
index 9d85175..8d491a0 100644
--- a/prebuilts/gradle/Notifications/Wearable/build.gradle
+++ b/prebuilts/gradle/Notifications/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/Notifications/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Notifications/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Notifications/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Notifications/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/PdfRendererBasic/Application/build.gradle b/prebuilts/gradle/PdfRendererBasic/Application/build.gradle
index b679c89..1b73ccf 100644
--- a/prebuilts/gradle/PdfRendererBasic/Application/build.gradle
+++ b/prebuilts/gradle/PdfRendererBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/PdfRendererBasic/README.md b/prebuilts/gradle/PdfRendererBasic/README.md
index ce2b67f..d70c95c 100644
--- a/prebuilts/gradle/PdfRendererBasic/README.md
+++ b/prebuilts/gradle/PdfRendererBasic/README.md
@@ -36,7 +36,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/PdfRendererBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/PdfRendererBasic/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/PdfRendererBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/PdfRendererBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/PermissionRequest/Application/build.gradle b/prebuilts/gradle/PermissionRequest/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/PermissionRequest/Application/build.gradle
+++ b/prebuilts/gradle/PermissionRequest/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/PermissionRequest/README.md b/prebuilts/gradle/PermissionRequest/README.md
index 2964dc6..9f3ee5b 100644
--- a/prebuilts/gradle/PermissionRequest/README.md
+++ b/prebuilts/gradle/PermissionRequest/README.md
@@ -47,7 +47,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/PermissionRequest/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/PermissionRequest/gradle/wrapper/gradle-wrapper.properties
index e0de4e6..9d0fdc6 100644
--- a/prebuilts/gradle/PermissionRequest/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/PermissionRequest/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Quiz/Application/build.gradle b/prebuilts/gradle/Quiz/Application/build.gradle
index 6b3f748..31a1b84 100644
--- a/prebuilts/gradle/Quiz/Application/build.gradle
+++ b/prebuilts/gradle/Quiz/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,12 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -35,7 +35,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/Quiz/README.md b/prebuilts/gradle/Quiz/README.md
index 649eede..88c0ca6 100644
--- a/prebuilts/gradle/Quiz/README.md
+++ b/prebuilts/gradle/Quiz/README.md
@@ -14,7 +14,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/Quiz/Wearable/build.gradle b/prebuilts/gradle/Quiz/Wearable/build.gradle
index 9d85175..8d491a0 100644
--- a/prebuilts/gradle/Quiz/Wearable/build.gradle
+++ b/prebuilts/gradle/Quiz/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/Quiz/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Quiz/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Quiz/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Quiz/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/RecipeAssistant/Application/build.gradle b/prebuilts/gradle/RecipeAssistant/Application/build.gradle
index f683f73..4ba6338 100644
--- a/prebuilts/gradle/RecipeAssistant/Application/build.gradle
+++ b/prebuilts/gradle/RecipeAssistant/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/RecipeAssistant/README.md b/prebuilts/gradle/RecipeAssistant/README.md
index 1d989f1..d92c959 100644
--- a/prebuilts/gradle/RecipeAssistant/README.md
+++ b/prebuilts/gradle/RecipeAssistant/README.md
@@ -13,7 +13,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/RecipeAssistant/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/RecipeAssistant/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/RecipeAssistant/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/RecipeAssistant/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/RecyclerView/Application/build.gradle b/prebuilts/gradle/RecyclerView/Application/build.gradle
index 617a940..a1444cd 100644
--- a/prebuilts/gradle/RecyclerView/Application/build.gradle
+++ b/prebuilts/gradle/RecyclerView/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:recyclerview-v7:24.0.0'
 }
 
@@ -33,7 +33,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/RecyclerView/README.md b/prebuilts/gradle/RecyclerView/README.md
index 0b8dd9d..7360951 100644
--- a/prebuilts/gradle/RecyclerView/README.md
+++ b/prebuilts/gradle/RecyclerView/README.md
@@ -30,7 +30,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/RecyclerView/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/RecyclerView/gradle/wrapper/gradle-wrapper.properties
index b87c376..3bf7fcb 100644
--- a/prebuilts/gradle/RecyclerView/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/RecyclerView/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/RenderScriptIntrinsic/Application/build.gradle b/prebuilts/gradle/RenderScriptIntrinsic/Application/build.gradle
index d3858be..2295421 100644
--- a/prebuilts/gradle/RenderScriptIntrinsic/Application/build.gradle
+++ b/prebuilts/gradle/RenderScriptIntrinsic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile files('renderscript-v8.jar')
 }
 
@@ -33,7 +33,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 13
diff --git a/prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/values/attrs.xml b/prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/values/attrs.xml
deleted file mode 100644
index e67df0a..0000000
--- a/prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/values/attrs.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<resources>
-
-    <!--
-         Declare custom theme attributes that allow changing which styles are
-         used for button bars depending on the API level.
-         ?android:attr/buttonBarStyle is new as of API 11 so this is
-         necessary to support previous API levels.
-    -->
-    <declare-styleable name="ButtonBarContainerTheme">
-        <attr name="buttonBarStyle" format="reference" />
-        <attr name="buttonBarButtonStyle" format="reference" />
-    </declare-styleable>
-
-</resources>
diff --git a/prebuilts/gradle/RenderScriptIntrinsic/README.md b/prebuilts/gradle/RenderScriptIntrinsic/README.md
index f3641c8..225cb56 100644
--- a/prebuilts/gradle/RenderScriptIntrinsic/README.md
+++ b/prebuilts/gradle/RenderScriptIntrinsic/README.md
@@ -37,7 +37,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/RenderScriptIntrinsic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/RenderScriptIntrinsic/gradle/wrapper/gradle-wrapper.properties
index 6d297b3..95feb49 100644
--- a/prebuilts/gradle/RenderScriptIntrinsic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/RenderScriptIntrinsic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/RepeatingAlarm/Application/build.gradle b/prebuilts/gradle/RepeatingAlarm/Application/build.gradle
index 906d12f..38bb285 100644
--- a/prebuilts/gradle/RepeatingAlarm/Application/build.gradle
+++ b/prebuilts/gradle/RepeatingAlarm/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/RepeatingAlarm/README.md b/prebuilts/gradle/RepeatingAlarm/README.md
index 752f8dd..744e76d 100644
--- a/prebuilts/gradle/RepeatingAlarm/README.md
+++ b/prebuilts/gradle/RepeatingAlarm/README.md
@@ -9,7 +9,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/RepeatingAlarm/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/RepeatingAlarm/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/RepeatingAlarm/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/RepeatingAlarm/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/RevealEffectBasic/Application/build.gradle b/prebuilts/gradle/RevealEffectBasic/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/RevealEffectBasic/Application/build.gradle
+++ b/prebuilts/gradle/RevealEffectBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/RevealEffectBasic/README.md b/prebuilts/gradle/RevealEffectBasic/README.md
index 2ffdf1c..d0bc2fd 100644
--- a/prebuilts/gradle/RevealEffectBasic/README.md
+++ b/prebuilts/gradle/RevealEffectBasic/README.md
@@ -28,7 +28,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/RevealEffectBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/RevealEffectBasic/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/RevealEffectBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/RevealEffectBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/RuntimePermissions/Application/build.gradle b/prebuilts/gradle/RuntimePermissions/Application/build.gradle
index 4caa395..4e69bba 100644
--- a/prebuilts/gradle/RuntimePermissions/Application/build.gradle
+++ b/prebuilts/gradle/RuntimePermissions/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:support-v4:24.0.0'
     compile 'com.android.support:design:24.0.0'
 }
@@ -34,7 +34,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 15
diff --git a/prebuilts/gradle/RuntimePermissions/README.md b/prebuilts/gradle/RuntimePermissions/README.md
index 99fef23..65107a9 100644
--- a/prebuilts/gradle/RuntimePermissions/README.md
+++ b/prebuilts/gradle/RuntimePermissions/README.md
@@ -32,7 +32,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/RuntimePermissions/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/RuntimePermissions/gradle/wrapper/gradle-wrapper.properties
index fdad773..6168899 100644
--- a/prebuilts/gradle/RuntimePermissions/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/RuntimePermissions/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/RuntimePermissionsBasic/Application/build.gradle b/prebuilts/gradle/RuntimePermissionsBasic/Application/build.gradle
index 4caa395..4e69bba 100644
--- a/prebuilts/gradle/RuntimePermissionsBasic/Application/build.gradle
+++ b/prebuilts/gradle/RuntimePermissionsBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:support-v4:24.0.0'
     compile 'com.android.support:design:24.0.0'
 }
@@ -34,7 +34,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 15
diff --git a/prebuilts/gradle/RuntimePermissionsBasic/README.md b/prebuilts/gradle/RuntimePermissionsBasic/README.md
index ee7f783..0f9f963 100644
--- a/prebuilts/gradle/RuntimePermissionsBasic/README.md
+++ b/prebuilts/gradle/RuntimePermissionsBasic/README.md
@@ -23,7 +23,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/RuntimePermissionsBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/RuntimePermissionsBasic/gradle/wrapper/gradle-wrapper.properties
index fdad773..6168899 100644
--- a/prebuilts/gradle/RuntimePermissionsBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/RuntimePermissionsBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/RuntimePermissionsWear/Application/build.gradle b/prebuilts/gradle/RuntimePermissionsWear/Application/build.gradle
index b7c1af9..87f53c8 100644
--- a/prebuilts/gradle/RuntimePermissionsWear/Application/build.gradle
+++ b/prebuilts/gradle/RuntimePermissionsWear/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -19,8 +19,8 @@
 dependencies {
     compile 'com.android.support:appcompat-v7:24.0.0'
     compile 'com.android.support:design:24.0.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     compile project(':Shared')
     wearApp project(':Wearable')
 }
@@ -36,7 +36,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/RuntimePermissionsWear/README.md b/prebuilts/gradle/RuntimePermissionsWear/README.md
index a8a679b..24f2d95 100644
--- a/prebuilts/gradle/RuntimePermissionsWear/README.md
+++ b/prebuilts/gradle/RuntimePermissionsWear/README.md
@@ -38,7 +38,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/RuntimePermissionsWear/Shared/build.gradle b/prebuilts/gradle/RuntimePermissionsWear/Shared/build.gradle
index 6ce65a4..02f507d 100644
--- a/prebuilts/gradle/RuntimePermissionsWear/Shared/build.gradle
+++ b/prebuilts/gradle/RuntimePermissionsWear/Shared/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -28,7 +28,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/RuntimePermissionsWear/Wearable/build.gradle b/prebuilts/gradle/RuntimePermissionsWear/Wearable/build.gradle
index fa6a673..ca2b54e 100644
--- a/prebuilts/gradle/RuntimePermissionsWear/Wearable/build.gradle
+++ b/prebuilts/gradle/RuntimePermissionsWear/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -18,8 +18,8 @@
 }
 
 dependencies {
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -37,7 +37,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/RuntimePermissionsWear/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/RuntimePermissionsWear/gradle/wrapper/gradle-wrapper.properties
index b034583..0d2c558 100644
--- a/prebuilts/gradle/RuntimePermissionsWear/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/RuntimePermissionsWear/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ScopedDirectoryAccess/Application/build.gradle b/prebuilts/gradle/ScopedDirectoryAccess/Application/build.gradle
index 9b7b5d0..4011cbd 100644
--- a/prebuilts/gradle/ScopedDirectoryAccess/Application/build.gradle
+++ b/prebuilts/gradle/ScopedDirectoryAccess/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.android.support:recyclerview-v7:24.0.0'
     compile 'com.android.support:support-v4:24.0.0'
 }
@@ -34,7 +34,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 24
diff --git a/prebuilts/gradle/ScopedDirectoryAccess/README.md b/prebuilts/gradle/ScopedDirectoryAccess/README.md
index cf08f37..81cdda2 100644
--- a/prebuilts/gradle/ScopedDirectoryAccess/README.md
+++ b/prebuilts/gradle/ScopedDirectoryAccess/README.md
@@ -37,7 +37,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ScopedDirectoryAccess/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ScopedDirectoryAccess/gradle/wrapper/gradle-wrapper.properties
index 2e7b370..d9611c7 100644
--- a/prebuilts/gradle/ScopedDirectoryAccess/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ScopedDirectoryAccess/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/ScreenCapture/Application/build.gradle b/prebuilts/gradle/ScreenCapture/Application/build.gradle
index e2f773f..8ef1bbc 100644
--- a/prebuilts/gradle/ScreenCapture/Application/build.gradle
+++ b/prebuilts/gradle/ScreenCapture/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ScreenCapture/README.md b/prebuilts/gradle/ScreenCapture/README.md
index 90694a6..c3ecae9 100644
--- a/prebuilts/gradle/ScreenCapture/README.md
+++ b/prebuilts/gradle/ScreenCapture/README.md
@@ -27,7 +27,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/ScreenCapture/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ScreenCapture/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/ScreenCapture/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/ScreenCapture/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/SkeletonWearableApp/README.md b/prebuilts/gradle/SkeletonWearableApp/README.md
index 9502772..1fd6410 100644
--- a/prebuilts/gradle/SkeletonWearableApp/README.md
+++ b/prebuilts/gradle/SkeletonWearableApp/README.md
@@ -22,7 +22,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/SkeletonWearableApp/Wearable/build.gradle b/prebuilts/gradle/SkeletonWearableApp/Wearable/build.gradle
index 6d83eed..7377cac 100644
--- a/prebuilts/gradle/SkeletonWearableApp/Wearable/build.gradle
+++ b/prebuilts/gradle/SkeletonWearableApp/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/SlidingTabsBasic/Application/build.gradle b/prebuilts/gradle/SlidingTabsBasic/Application/build.gradle
index 2b32f6f..278f87d 100644
--- a/prebuilts/gradle/SlidingTabsBasic/Application/build.gradle
+++ b/prebuilts/gradle/SlidingTabsBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SlidingTabsBasic/README.md b/prebuilts/gradle/SlidingTabsBasic/README.md
index 644233f..4830f0c 100644
--- a/prebuilts/gradle/SlidingTabsBasic/README.md
+++ b/prebuilts/gradle/SlidingTabsBasic/README.md
@@ -9,7 +9,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/SlidingTabsBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/SlidingTabsBasic/gradle/wrapper/gradle-wrapper.properties
index faca0a5..e306ebc 100644
--- a/prebuilts/gradle/SlidingTabsBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/SlidingTabsBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,5 +3,5 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
 
diff --git a/prebuilts/gradle/SlidingTabsColors/Application/build.gradle b/prebuilts/gradle/SlidingTabsColors/Application/build.gradle
index 2b32f6f..278f87d 100644
--- a/prebuilts/gradle/SlidingTabsColors/Application/build.gradle
+++ b/prebuilts/gradle/SlidingTabsColors/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SlidingTabsColors/README.md b/prebuilts/gradle/SlidingTabsColors/README.md
index b8059c8..5cc3ca9 100644
--- a/prebuilts/gradle/SlidingTabsColors/README.md
+++ b/prebuilts/gradle/SlidingTabsColors/README.md
@@ -26,7 +26,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/SlidingTabsColors/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/SlidingTabsColors/gradle/wrapper/gradle-wrapper.properties
index 8808285..c01da7f 100644
--- a/prebuilts/gradle/SlidingTabsColors/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/SlidingTabsColors/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/SpeedTracker/Application/build.gradle b/prebuilts/gradle/SpeedTracker/Application/build.gradle
index c14e245..5bb3c26 100644
--- a/prebuilts/gradle/SpeedTracker/Application/build.gradle
+++ b/prebuilts/gradle/SpeedTracker/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -18,9 +18,9 @@
 
 dependencies {
     compile 'com.android.support:design:24.0.0'
-    compile 'com.google.android.gms:play-services-location:8.4.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-location:9.4.0'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     compile project(':Shared')
     wearApp project(':Wearable')
 }
@@ -36,7 +36,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/SpeedTracker/README.md b/prebuilts/gradle/SpeedTracker/README.md
index db38b14..9a6bfcc 100644
--- a/prebuilts/gradle/SpeedTracker/README.md
+++ b/prebuilts/gradle/SpeedTracker/README.md
@@ -17,7 +17,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/SpeedTracker/Shared/build.gradle b/prebuilts/gradle/SpeedTracker/Shared/build.gradle
index 6ce65a4..02f507d 100644
--- a/prebuilts/gradle/SpeedTracker/Shared/build.gradle
+++ b/prebuilts/gradle/SpeedTracker/Shared/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -28,7 +28,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/SpeedTracker/Wearable/build.gradle b/prebuilts/gradle/SpeedTracker/Wearable/build.gradle
index 48bbfd5..5c750ef 100644
--- a/prebuilts/gradle/SpeedTracker/Wearable/build.gradle
+++ b/prebuilts/gradle/SpeedTracker/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -18,9 +18,9 @@
 }
 
 dependencies {
-    compile 'com.google.android.gms:play-services-location:8.4.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-location:9.4.0'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -38,7 +38,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/SpeedTracker/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/SpeedTracker/gradle/wrapper/gradle-wrapper.properties
index 39c7c09..913dea9 100644
--- a/prebuilts/gradle/SpeedTracker/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/SpeedTracker/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Fri Apr 15 16:28:53 PDT 2016
+#Wed Aug 24 17:23:26 PDT 2016
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/StorageClient/Application/build.gradle b/prebuilts/gradle/StorageClient/Application/build.gradle
index 42aa199..55a227a 100644
--- a/prebuilts/gradle/StorageClient/Application/build.gradle
+++ b/prebuilts/gradle/StorageClient/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/StorageClient/README.md b/prebuilts/gradle/StorageClient/README.md
index ffe5f2f..88a72f5 100644
--- a/prebuilts/gradle/StorageClient/README.md
+++ b/prebuilts/gradle/StorageClient/README.md
@@ -24,7 +24,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/StorageClient/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/StorageClient/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/StorageClient/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/StorageClient/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/StorageProvider/Application/build.gradle b/prebuilts/gradle/StorageProvider/Application/build.gradle
index 3e66227..abcafdf 100644
--- a/prebuilts/gradle/StorageProvider/Application/build.gradle
+++ b/prebuilts/gradle/StorageProvider/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/StorageProvider/Application/src/main/res/values/base-strings.xml b/prebuilts/gradle/StorageProvider/Application/src/main/res/values/base-strings.xml
index 5fd804c..d80a40a 100644
--- a/prebuilts/gradle/StorageProvider/Application/src/main/res/values/base-strings.xml
+++ b/prebuilts/gradle/StorageProvider/Application/src/main/res/values/base-strings.xml
@@ -21,8 +21,8 @@
         <![CDATA[
         
             
-            \nA simple implementation of a documents provider using the storage access framework in
-            Android 4.4.
+A simple implementation of a documents provider using the storage access framework in
+Android 4.4.
             
         
         ]]>
diff --git a/prebuilts/gradle/StorageProvider/README.md b/prebuilts/gradle/StorageProvider/README.md
index 0b91b25..4894ed0 100644
--- a/prebuilts/gradle/StorageProvider/README.md
+++ b/prebuilts/gradle/StorageProvider/README.md
@@ -21,7 +21,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/StorageProvider/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/StorageProvider/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/StorageProvider/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/StorageProvider/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/SwipeRefreshLayoutBasic/Application/build.gradle b/prebuilts/gradle/SwipeRefreshLayoutBasic/Application/build.gradle
index 2b32f6f..278f87d 100644
--- a/prebuilts/gradle/SwipeRefreshLayoutBasic/Application/build.gradle
+++ b/prebuilts/gradle/SwipeRefreshLayoutBasic/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md b/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
index 9dab784..9fa2f5a 100644
--- a/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
+++ b/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
@@ -10,7 +10,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/SwipeRefreshLayoutBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/SwipeRefreshLayoutBasic/gradle/wrapper/gradle-wrapper.properties
index b1cff39..feb6861 100644
--- a/prebuilts/gradle/SwipeRefreshLayoutBasic/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/SwipeRefreshLayoutBasic/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/SwipeRefreshListFragment/Application/build.gradle b/prebuilts/gradle/SwipeRefreshListFragment/Application/build.gradle
index 2b32f6f..278f87d 100644
--- a/prebuilts/gradle/SwipeRefreshListFragment/Application/build.gradle
+++ b/prebuilts/gradle/SwipeRefreshListFragment/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SwipeRefreshListFragment/README.md b/prebuilts/gradle/SwipeRefreshListFragment/README.md
index fadc7f5..85840ea 100644
--- a/prebuilts/gradle/SwipeRefreshListFragment/README.md
+++ b/prebuilts/gradle/SwipeRefreshListFragment/README.md
@@ -24,7 +24,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/SwipeRefreshListFragment/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/SwipeRefreshListFragment/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/SwipeRefreshListFragment/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/SwipeRefreshListFragment/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/SwipeRefreshMultipleViews/Application/build.gradle b/prebuilts/gradle/SwipeRefreshMultipleViews/Application/build.gradle
index 2b32f6f..278f87d 100644
--- a/prebuilts/gradle/SwipeRefreshMultipleViews/Application/build.gradle
+++ b/prebuilts/gradle/SwipeRefreshMultipleViews/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SwipeRefreshMultipleViews/README.md b/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
index 8630de3..f57a8ab 100644
--- a/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
+++ b/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
@@ -11,7 +11,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/SwipeRefreshMultipleViews/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/SwipeRefreshMultipleViews/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/SwipeRefreshMultipleViews/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/SwipeRefreshMultipleViews/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/SynchronizedNotifications/Application/build.gradle b/prebuilts/gradle/SynchronizedNotifications/Application/build.gradle
index 20b8efa..8753e98 100644
--- a/prebuilts/gradle/SynchronizedNotifications/Application/build.gradle
+++ b/prebuilts/gradle/SynchronizedNotifications/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 }
 
 dependencies {
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     compile project(':Shared')
     wearApp project(':Wearable')
 }
@@ -34,7 +34,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/SynchronizedNotifications/README.md b/prebuilts/gradle/SynchronizedNotifications/README.md
index d34fbfc..8f7e498 100644
--- a/prebuilts/gradle/SynchronizedNotifications/README.md
+++ b/prebuilts/gradle/SynchronizedNotifications/README.md
@@ -52,7 +52,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/SynchronizedNotifications/Shared/build.gradle b/prebuilts/gradle/SynchronizedNotifications/Shared/build.gradle
index 6ce65a4..02f507d 100644
--- a/prebuilts/gradle/SynchronizedNotifications/Shared/build.gradle
+++ b/prebuilts/gradle/SynchronizedNotifications/Shared/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -28,7 +28,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle b/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle
index a6095f3..1b295d8 100644
--- a/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle
+++ b/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -18,8 +18,8 @@
 }
 
 dependencies {
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -37,7 +37,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.properties
index 44447c8..d04a93a 100644
--- a/prebuilts/gradle/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/TextLinkify/Application/build.gradle b/prebuilts/gradle/TextLinkify/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/TextLinkify/Application/build.gradle
+++ b/prebuilts/gradle/TextLinkify/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/TextLinkify/README.md b/prebuilts/gradle/TextLinkify/README.md
index 0776c9f..a97e401 100644
--- a/prebuilts/gradle/TextLinkify/README.md
+++ b/prebuilts/gradle/TextLinkify/README.md
@@ -33,7 +33,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/TextLinkify/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/TextLinkify/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/TextLinkify/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/TextLinkify/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/TextSwitcher/Application/build.gradle b/prebuilts/gradle/TextSwitcher/Application/build.gradle
index b5d5f59..881af33 100644
--- a/prebuilts/gradle/TextSwitcher/Application/build.gradle
+++ b/prebuilts/gradle/TextSwitcher/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,10 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:gridlayout-v7:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:gridlayout-v7:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
 }
 
 // The sample build uses multiple directories to
@@ -32,7 +32,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/TextSwitcher/README.md b/prebuilts/gradle/TextSwitcher/README.md
index e2d239a..ec1af64 100644
--- a/prebuilts/gradle/TextSwitcher/README.md
+++ b/prebuilts/gradle/TextSwitcher/README.md
@@ -23,7 +23,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/TextSwitcher/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/TextSwitcher/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/TextSwitcher/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/TextSwitcher/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/Timer/README.md b/prebuilts/gradle/Timer/README.md
index 6e05b3f..825814a 100644
--- a/prebuilts/gradle/Timer/README.md
+++ b/prebuilts/gradle/Timer/README.md
@@ -9,7 +9,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/Timer/Wearable/build.gradle b/prebuilts/gradle/Timer/Wearable/build.gradle
index 6d83eed..7377cac 100644
--- a/prebuilts/gradle/Timer/Wearable/build.gradle
+++ b/prebuilts/gradle/Timer/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/Timer/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/Timer/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/Timer/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/Timer/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/WatchFace/Application/build.gradle b/prebuilts/gradle/WatchFace/Application/build.gradle
index 1104fa6..806ea56 100644
--- a/prebuilts/gradle/WatchFace/Application/build.gradle
+++ b/prebuilts/gradle/WatchFace/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -16,14 +16,14 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.1.1"
-    compile "com.android.support:support-v13:24.1.1"
-    compile "com.android.support:cardview-v7:24.1.1"
-    compile "com.android.support:appcompat-v7:24.1.1"
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
     compile 'com.google.android.support:wearable:1.4.0'
-    compile 'com.google.android.gms:play-services-fitness:8.4.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-fitness:9.4.0'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -37,7 +37,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/WatchFace/README.md b/prebuilts/gradle/WatchFace/README.md
index a790952..9bf7427 100644
--- a/prebuilts/gradle/WatchFace/README.md
+++ b/prebuilts/gradle/WatchFace/README.md
@@ -16,7 +16,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/WatchFace/Wearable/build.gradle b/prebuilts/gradle/WatchFace/Wearable/build.gradle
index 5562c7c..e6d979b 100644
--- a/prebuilts/gradle/WatchFace/Wearable/build.gradle
+++ b/prebuilts/gradle/WatchFace/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -15,14 +15,14 @@
 
 dependencies {
 
-    compile 'com.android.support:palette-v7:23.3.0'
-    compile 'com.google.android.gms:play-services-fitness:8.4.0'
+    compile 'com.android.support:palette-v7:24.1.1'
+    compile 'com.google.android.gms:play-services-fitness:9.4.0'
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
-    compile 'com.google.android.support:wearable:2.0.0-alpha1'
+    compile 'com.google.android.support:wearable:2.0.0-alpha3'
 
 }
 
@@ -37,7 +37,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/WatchFace/Wearable/src/main/AndroidManifest.xml b/prebuilts/gradle/WatchFace/Wearable/src/main/AndroidManifest.xml
index a922297..7dd5b69 100644
--- a/prebuilts/gradle/WatchFace/Wearable/src/main/AndroidManifest.xml
+++ b/prebuilts/gradle/WatchFace/Wearable/src/main/AndroidManifest.xml
@@ -14,125 +14,132 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.watchface" >
+<manifest package="com.example.android.wearable.watchface"
+          xmlns:android="http://schemas.android.com/apk/res/android">
 
     <uses-sdk
         android:minSdkVersion="21"
-        android:targetSdkVersion="23" />
+        android:targetSdkVersion="23"/>
 
-    <uses-feature android:name="android.hardware.type.watch" />
+    <uses-feature android:name="android.hardware.type.watch"/>
 
     <!-- Required to act as a custom watch face. -->
-    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+
+    <!-- Required for complications to receive complication data and open the provider chooser. -->
+    <uses-permission android:name="com.google.android.wearable.permission.RECEIVE_COMPLICATION_DATA"/>
 
     <!-- Calendar permission used by CalendarWatchFaceService -->
-    <uses-permission android:name="android.permission.READ_CALENDAR" />
+    <uses-permission android:name="android.permission.READ_CALENDAR"/>
 
     <!-- Location permission used by FitDistanceWatchFaceService -->
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+
+    <android:uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <android:uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+    <android:uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 
     <application
         android:allowBackup="true"
         android:icon="@drawable/ic_launcher"
-        android:label="@string/app_name" >
-
+        android:label="@string/app_name">
         <meta-data
             android:name="com.google.android.gms.version"
-            android:value="@integer/google_play_services_version" />
+            android:value="@integer/google_play_services_version"/>
 
-        <uses-library android:name="com.google.android.wearable" android:required="false" />
+        <uses-library
+            android:name="com.google.android.wearable"
+            android:required="false"/>
 
         <service
             android:name=".AnalogWatchFaceService"
             android:label="@string/analog_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_analog" />
+                android:resource="@drawable/preview_analog"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_analog_circular" />
+                android:resource="@drawable/preview_analog_circular"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.companionConfigurationAction"
-                android:value="com.example.android.wearable.watchface.CONFIG_ANALOG" />
+                android:value="com.example.android.wearable.watchface.CONFIG_ANALOG"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
         <service
             android:name=".SweepWatchFaceService"
             android:label="@string/sweep_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_analog" />
+                android:resource="@drawable/preview_analog"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_analog_circular" />
+                android:resource="@drawable/preview_analog_circular"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
         <service
             android:name=".OpenGLWatchFaceService"
             android:label="@string/opengl_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_opengl" />
+                android:resource="@drawable/preview_opengl"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_opengl_circular" />
+                android:resource="@drawable/preview_opengl_circular"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.companionConfigurationAction"
-                android:value="com.example.android.wearable.watchface.CONFIG_OPENGL" />
+                android:value="com.example.android.wearable.watchface.CONFIG_OPENGL"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
         <service
             android:name=".CardBoundsWatchFaceService"
             android:label="@string/card_bounds_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_card_bounds" />
+                android:resource="@drawable/preview_card_bounds"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_card_bounds_circular" />
+                android:resource="@drawable/preview_card_bounds_circular"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.companionConfigurationAction"
-                android:value="com.example.android.wearable.watchface.CONFIG_CARD_BOUNDS" />
+                android:value="com.example.android.wearable.watchface.CONFIG_CARD_BOUNDS"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
-
         <service
             android:name=".ComplicationSimpleWatchFaceService"
             android:enabled="true"
@@ -157,6 +164,8 @@
                 <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
+
+        <activity android:name="android.support.wearable.complications.ComplicationHelperActivity"/>
         <activity
             android:name=".ComplicationSimpleConfigActivity"
             android:label="@string/complication_simple">
@@ -171,47 +180,47 @@
         <service
             android:name=".InteractiveWatchFaceService"
             android:label="@string/interactive_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_interactive" />
+                android:resource="@drawable/preview_interactive"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_interactive_circular" />
+                android:resource="@drawable/preview_interactive_circular"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
         <service
             android:name=".DigitalWatchFaceService"
             android:label="@string/digital_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_digital" />
+                android:resource="@drawable/preview_digital"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_digital_circular" />
+                android:resource="@drawable/preview_digital_circular"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.companionConfigurationAction"
-                android:value="com.example.android.wearable.watchface.CONFIG_DIGITAL" />
+                android:value="com.example.android.wearable.watchface.CONFIG_DIGITAL"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.wearableConfigurationAction"
-                android:value="com.example.android.wearable.watchface.CONFIG_DIGITAL" />
+                android:value="com.example.android.wearable.watchface.CONFIG_DIGITAL"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
 
@@ -223,95 +232,99 @@
 
         <activity
             android:name=".DigitalWatchFaceWearableConfigActivity"
-            android:label="@string/digital_config_name" >
+            android:label="@string/digital_config_name">
             <intent-filter>
-                <action android:name="com.example.android.wearable.watchface.CONFIG_DIGITAL" />
+                <action android:name="com.example.android.wearable.watchface.CONFIG_DIGITAL"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WEARABLE_CONFIGURATION" />
-                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="com.google.android.wearable.watchface.category.WEARABLE_CONFIGURATION"/>
+                <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
         </activity>
 
         <service
             android:name=".CalendarWatchFaceService"
             android:label="@string/calendar_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_calendar" />
+                android:resource="@drawable/preview_calendar"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_calendar_circular" />
+                android:resource="@drawable/preview_calendar_circular"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
-        <service android:name=".DigitalWatchFaceConfigListenerService" >
+        <service android:name=".DigitalWatchFaceConfigListenerService">
             <intent-filter>
-                <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" />
-                <data android:scheme="wear" android:host="*" android:pathPrefix="/"/>
+                <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED"/>
+
+                <data
+                    android:host="*"
+                    android:pathPrefix="/"
+                    android:scheme="wear"/>
             </intent-filter>
         </service>
         <service
             android:name=".FitDistanceWatchFaceService"
             android:label="@string/fit_distance_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_distance" />
+                android:resource="@drawable/preview_distance"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_distance_circular" />
+                android:resource="@drawable/preview_distance_circular"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.companionConfigurationAction"
-                android:value="com.example.android.wearable.watchface.CONFIG_FIT_DISTANCE" />
+                android:value="com.example.android.wearable.watchface.CONFIG_FIT_DISTANCE"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
         <service
             android:name=".FitStepsWatchFaceService"
             android:label="@string/fit_steps_name"
-            android:permission="android.permission.BIND_WALLPAPER" >
+            android:permission="android.permission.BIND_WALLPAPER">
             <meta-data
                 android:name="android.service.wallpaper"
-                android:resource="@xml/watch_face" />
+                android:resource="@xml/watch_face"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview"
-                android:resource="@drawable/preview_fit" />
+                android:resource="@drawable/preview_fit"/>
             <meta-data
                 android:name="com.google.android.wearable.watchface.preview_circular"
-                android:resource="@drawable/preview_fit_circular" />
+                android:resource="@drawable/preview_fit_circular"/>
 
             <intent-filter>
-                <action android:name="android.service.wallpaper.WallpaperService" />
+                <action android:name="android.service.wallpaper.WallpaperService"/>
 
-                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE"/>
             </intent-filter>
         </service>
 
         <activity
             android:name=".CalendarWatchFacePermissionActivity"
-            android:label="@string/title_activity_calendar_watch_face_permission" >
+            android:label="@string/title_activity_calendar_watch_face_permission">
         </activity>
 
         <service
             android:name=".provider.RandomNumberProviderService"
+            android:icon="@drawable/ic_launcher"
             android:label="@string/complications_provider_random_number"
-            android:icon="@drawable/ic_launcher">
-
+            android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER">
             <intent-filter>
                 <action android:name="android.support.wearable.complications.ACTION_COMPLICATION_UPDATE_REQUEST"/>
             </intent-filter>
@@ -322,19 +335,24 @@
             <!--
             When your complication data provider is active, UPDATE_PERIOD_SECONDS specifies how
             often you want the system to check for updates to the data. In this case, the time is
-            specified to a relatively short 120 seconds, so we can observe the result of this code
-            lab. In everyday use, developers should consider intervals in the order of minutes.
+            specified to 600 seconds (10 minutes).
+
+            In general, you want to set this value high and manually trigger updates only when your
+            complication data actually changes via ProviderUpdateRequester (check
+            UpdateComplicationDataService.java for an example).
+
+            In everyday use, developers should consider intervals in the order of minutes.
             Also, remember that this is only a guidance for the system. Android Wear may update less
             frequently.
-
-            If your app needs to push updates instead of updating on a regular schedule, you should
-            set this value to 0 and use ProviderUpdateRequester.requestUpdate() to trigger an update
-            request when you need one.
             -->
             <meta-data
                 android:name="android.support.wearable.complications.UPDATE_PERIOD_SECONDS"
-                android:value="120"/>
+                android:value="600"/>
+        </service>
+        <service
+            android:name=".provider.UpdateComplicationDataService"
+            android:exported="false">
         </service>
     </application>
 
-</manifest>
+</manifest>
\ No newline at end of file
diff --git a/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleConfigActivity.java b/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleConfigActivity.java
index 66e208c..6d4e521 100644
--- a/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleConfigActivity.java
+++ b/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleConfigActivity.java
@@ -22,6 +22,8 @@
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.support.wearable.complications.ComplicationHelperActivity;
+import android.support.wearable.complications.ComplicationProviderInfo;
 import android.support.wearable.complications.ProviderChooserIntent;
 import android.support.wearable.view.WearableListView;
 import android.util.Log;
@@ -64,6 +66,13 @@
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == PROVIDER_CHOOSER_REQUEST_CODE
                 && resultCode == RESULT_OK) {
+
+            // Retrieves information for selected Complication provider.
+            ComplicationProviderInfo complicationProviderInfo =
+                    data.getParcelableExtra(ProviderChooserIntent.EXTRA_PROVIDER_INFO);
+
+            Log.d(TAG, "Selected Provider: " + complicationProviderInfo);
+
             finish();
         }
     }
@@ -77,10 +86,16 @@
         Integer tag = (Integer) viewHolder.itemView.getTag();
         ComplicationItem complicationItem = mAdapter.getItem(tag);
 
-        startActivityForResult(ProviderChooserIntent.createProviderChooserIntent(
-                complicationItem.watchFace,
-                complicationItem.complicationId,
-                complicationItem.supportedTypes), PROVIDER_CHOOSER_REQUEST_CODE);
+        // Note: If you were previously using ProviderChooserIntent.createProviderChooserIntent()
+        // (now deprecated), you will want to switch to
+        // ComplicationHelperActivity.createProviderChooserHelperIntent()
+        startActivityForResult(
+                ComplicationHelperActivity.createProviderChooserHelperIntent(
+                        getApplicationContext(),
+                        complicationItem.watchFace,
+                        complicationItem.complicationId,
+                        complicationItem.supportedTypes),
+                PROVIDER_CHOOSER_REQUEST_CODE);
     }
 
     private List<ComplicationItem> getComplicationItems() {
@@ -187,5 +202,4 @@
             return mItems.get(position);
         }
     }
-
 }
\ No newline at end of file
diff --git a/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleWatchFaceService.java b/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleWatchFaceService.java
index 9eca2c3..4905293 100644
--- a/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleWatchFaceService.java
+++ b/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleWatchFaceService.java
@@ -18,6 +18,7 @@
 
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -35,6 +36,7 @@
 import android.os.Message;
 import android.support.v7.graphics.Palette;
 import android.support.wearable.complications.ComplicationData;
+import android.support.wearable.complications.ComplicationHelperActivity;
 import android.support.wearable.complications.ComplicationText;
 import android.support.wearable.watchface.CanvasWatchFaceService;
 import android.support.wearable.watchface.WatchFaceService;
@@ -362,16 +364,34 @@
             if (Log.isLoggable(TAG, Log.DEBUG)) {
                 Log.d(TAG, "onComplicationTap()");
             }
+
             ComplicationData complicationData =
                     mActiveComplicationDataSparseArray.get(complicationId);
 
-            if ((complicationData != null) && (complicationData.getTapAction() != null)) {
-                try {
-                    complicationData.getTapAction().send();
-                } catch (PendingIntent.CanceledException e) {
-                    Log.e(TAG, "On complication tap action error " + e);
+            if (complicationData != null) {
+
+                if (complicationData.getTapAction() != null) {
+                    try {
+                        complicationData.getTapAction().send();
+                    } catch (PendingIntent.CanceledException e) {
+                        Log.e(TAG, "On complication tap action error " + e);
+                    }
+
+                } else if (complicationData.getType() == ComplicationData.TYPE_NO_PERMISSION) {
+
+                    // Watch face does not have permission to receive complication data, so launch
+                    // permission request.
+                    ComponentName componentName = new ComponentName(
+                            getApplicationContext(),
+                            ComplicationSimpleWatchFaceService.class);
+
+                    Intent permissionRequestIntent =
+                            ComplicationHelperActivity.createPermissionRequestHelperIntent(
+                                    getApplicationContext(), componentName);
+
+                    startActivity(permissionRequestIntent);
                 }
-                invalidate();
+
             } else {
                 if (Log.isLoggable(TAG, Log.DEBUG)) {
                     Log.d(TAG, "No PendingIntent for complication " + complicationId + ".");
@@ -551,50 +571,57 @@
                 complicationData = mActiveComplicationDataSparseArray.get(COMPLICATION_IDS[i]);
 
                 if ((complicationData != null)
-                        && (complicationData.isActive(currentTimeMillis))
-                        && (complicationData.getType() == ComplicationData.TYPE_SHORT_TEXT)) {
+                        && (complicationData.isActive(currentTimeMillis))) {
 
-                    ComplicationText mainText = complicationData.getShortText();
-                    ComplicationText subText = complicationData.getShortTitle();
+                    // Both Short Text and No Permission Types can be rendered with the same code.
+                    // No Permission will display "--" with an Intent to launch a permission prompt.
+                    // If you want to support more types, just add a "else if" below with your
+                    // rendering code inside.
+                    if (complicationData.getType() == ComplicationData.TYPE_SHORT_TEXT
+                            || complicationData.getType() == ComplicationData.TYPE_NO_PERMISSION) {
 
-                    CharSequence complicationMessage =
-                            mainText.getText(getApplicationContext(), currentTimeMillis);
+                        ComplicationText mainText = complicationData.getShortText();
+                        ComplicationText subText = complicationData.getShortTitle();
 
-                    /* In most cases you would want the subText (Title) under the mainText (Text),
-                     * but to keep it simple for the code lab, we are concatenating them all on one
-                     * line.
-                     */
-                    if (subText != null) {
-                        complicationMessage = TextUtils.concat(
-                                complicationMessage,
-                                " ",
-                                subText.getText(getApplicationContext(), currentTimeMillis));
-                    }
+                        CharSequence complicationMessage =
+                                mainText.getText(getApplicationContext(), currentTimeMillis);
 
-                    //Log.d(TAG, "Comp id: " + COMPLICATION_IDS[i] + "\t" + complicationMessage);
-                    double textWidth =
-                            mComplicationPaint.measureText(
+                        /* In most cases you would want the subText (Title) under the
+                         * mainText (Text), but to keep it simple for the code lab, we are
+                         * concatenating them all on one line.
+                         */
+                        if (subText != null) {
+                            complicationMessage = TextUtils.concat(
                                     complicationMessage,
-                                    0,
-                                    complicationMessage.length());
+                                    " ",
+                                    subText.getText(getApplicationContext(), currentTimeMillis));
+                        }
 
-                    int complicationsX;
+                        //Log.d(TAG, "Com id: " + COMPLICATION_IDS[i] + "\t" + complicationMessage);
+                        double textWidth =
+                                mComplicationPaint.measureText(
+                                        complicationMessage,
+                                        0,
+                                        complicationMessage.length());
 
-                    if (COMPLICATION_IDS[i] == LEFT_DIAL_COMPLICATION) {
-                        complicationsX = (int) ((mWidth / 2) - textWidth) / 2;
-                    } else {
-                        // RIGHT_DIAL_COMPLICATION calculations
-                        int offset = (int) ((mWidth / 2) - textWidth) / 2;
-                        complicationsX = (mWidth / 2) + offset;
+                        int complicationsX;
+
+                        if (COMPLICATION_IDS[i] == LEFT_DIAL_COMPLICATION) {
+                            complicationsX = (int) ((mWidth / 2) - textWidth) / 2;
+                        } else {
+                            // RIGHT_DIAL_COMPLICATION calculations
+                            int offset = (int) ((mWidth / 2) - textWidth) / 2;
+                            complicationsX = (mWidth / 2) + offset;
+                        }
+
+                        canvas.drawText(
+                                complicationMessage,
+                                0,
+                                complicationMessage.length(),
+                                complicationsX,
+                                mComplicationsY,
+                                mComplicationPaint);
                     }
-
-                    canvas.drawText(
-                            complicationMessage,
-                            0,
-                            complicationMessage.length(),
-                            complicationsX,
-                            mComplicationsY,
-                            mComplicationPaint);
                 }
             }
         }
diff --git a/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/RandomNumberProviderService.java b/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/RandomNumberProviderService.java
index 916f90f..17d03c2 100644
--- a/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/RandomNumberProviderService.java
+++ b/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/RandomNumberProviderService.java
@@ -1,5 +1,7 @@
 package com.example.android.wearable.watchface.provider;
 
+import android.app.PendingIntent;
+import android.content.Intent;
 import android.support.wearable.complications.ComplicationData;
 import android.support.wearable.complications.ComplicationManager;
 import android.support.wearable.complications.ComplicationProviderService;
@@ -42,7 +44,7 @@
     @Override
     public void onComplicationUpdate(
             int complicationId, int dataType, ComplicationManager complicationManager) {
-        Log.d(TAG, "onComplicationUpdate()");
+        Log.d(TAG, "onComplicationUpdate() id: " + complicationId);
 
 
         // Retrieve your data, in this case, we simply create a random number to display.
@@ -51,6 +53,24 @@
         String randomNumberText =
                 String.format(Locale.getDefault(), "%d!", randomNumber);
 
+        // Create Tap Action so that the user can trigger an update by tapping the complication.
+        Intent updateIntent =
+                new Intent(getApplicationContext(), UpdateComplicationDataService.class);
+        updateIntent.setAction(UpdateComplicationDataService.ACTION_UPDATE_COMPLICATION);
+        // We pass the complication id, so we can only update the specific complication tapped.
+        updateIntent.putExtra(UpdateComplicationDataService.EXTRA_COMPLICATION_ID, complicationId);
+
+        PendingIntent pendingIntent = PendingIntent.getService(
+                getApplicationContext(),
+                // Set the requestCode to the complication id. This ensures the system doesn't
+                // combine other PendingIntents with the same context with this one (basically it
+                // would then reuse the Extra you set in the initial PendingIntent). If you don't
+                // do this and multiple complications with your data are active, every PendingIntent
+                // assigned for tap, would use the same complication id (first one created).
+                complicationId,
+                updateIntent,
+                0);
+
         ComplicationData complicationData = null;
 
         switch (dataType) {
@@ -60,17 +80,20 @@
                         .setMinValue(0)
                         .setMaxValue(10)
                         .setShortText(ComplicationText.plainText(randomNumberText))
+                        .setTapAction(pendingIntent)
                         .build();
                 break;
             case ComplicationData.TYPE_SHORT_TEXT:
                 complicationData = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT)
                         .setShortText(ComplicationText.plainText(randomNumberText))
+                        .setTapAction(pendingIntent)
                         .build();
                 break;
             case ComplicationData.TYPE_LONG_TEXT:
                 complicationData = new ComplicationData.Builder(ComplicationData.TYPE_LONG_TEXT)
                         .setLongText(
                                 ComplicationText.plainText("Random Number: " + randomNumberText))
+                        .setTapAction(pendingIntent)
                         .build();
                 break;
             default:
diff --git a/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/UpdateComplicationDataService.java b/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/UpdateComplicationDataService.java
new file mode 100644
index 0000000..203e491
--- /dev/null
+++ b/prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/UpdateComplicationDataService.java
@@ -0,0 +1,63 @@
+package com.example.android.wearable.watchface.provider;
+
+import android.app.IntentService;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.support.wearable.complications.ProviderUpdateRequester;
+import android.util.Log;
+
+/**
+ * Simple {@link IntentService} subclass for asynchronously requesting an update for the random
+ * number complication (triggered via TapAction on complication).
+ */
+public class UpdateComplicationDataService extends IntentService {
+
+    private static final String TAG = "UpdateCompService";
+
+    public static final String ACTION_UPDATE_COMPLICATION =
+            "com.example.android.wearable.watchface.provider.action.UPDATE_COMPLICATION";
+
+    public static final String EXTRA_COMPLICATION_ID =
+            "com.example.android.wearable.watchface.provider.action.COMPLICATION_ID";
+
+    public UpdateComplicationDataService() {
+        super("UpdateComplicationDataService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+
+        if (intent != null) {
+
+            final String action = intent.getAction();
+
+            if (ACTION_UPDATE_COMPLICATION.equals(action)) {
+
+                int complicationId = intent.getIntExtra(EXTRA_COMPLICATION_ID, -1);
+                handleActionUpdateComplicationData(complicationId);
+            }
+        }
+    }
+
+    /**
+     * Handle action UpdateComplicationData in the provided background thread with the provided
+     * parameters.
+     */
+    private void handleActionUpdateComplicationData(int complicationId) {
+
+        Log.d(TAG, "Complication id to update via service: " + complicationId);
+
+        ComponentName componentName =
+                new ComponentName(getApplicationContext(), RandomNumberProviderService.class);
+
+        ProviderUpdateRequester providerUpdateRequester =
+                new ProviderUpdateRequester(getApplicationContext(), componentName);
+
+        if (complicationId > 0) {
+            // This method only updates the specific complication tapped on the watch, if you
+            // wanted to update all active complications associated with your data, you would
+            // call providerUpdateRequester.requestUpdateAll().
+            providerUpdateRequester.requestUpdate(complicationId);
+        }
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WatchFace/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/WatchFace/gradle/wrapper/gradle-wrapper.properties
index 128405e..95524ef 100644
--- a/prebuilts/gradle/WatchFace/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/WatchFace/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Thu May 12 20:18:40 PDT 2016
+#Wed Aug 24 16:01:26 PDT 2016
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/WatchViewStub/README.md b/prebuilts/gradle/WatchViewStub/README.md
index fef03d4..9230e95 100644
--- a/prebuilts/gradle/WatchViewStub/README.md
+++ b/prebuilts/gradle/WatchViewStub/README.md
@@ -17,7 +17,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/WatchViewStub/Wearable/build.gradle b/prebuilts/gradle/WatchViewStub/Wearable/build.gradle
index 6d83eed..7377cac 100644
--- a/prebuilts/gradle/WatchViewStub/Wearable/build.gradle
+++ b/prebuilts/gradle/WatchViewStub/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -35,7 +35,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/WatchViewStub/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/WatchViewStub/gradle/wrapper/gradle-wrapper.properties
index d570517..1081cc3 100644
--- a/prebuilts/gradle/WatchViewStub/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/WatchViewStub/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/WearDrawers/README.md b/prebuilts/gradle/WearDrawers/README.md
index 6dff6ff..5b70bb8 100644
--- a/prebuilts/gradle/WearDrawers/README.md
+++ b/prebuilts/gradle/WearDrawers/README.md
@@ -29,7 +29,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/WearDrawers/Wearable/build.gradle b/prebuilts/gradle/WearDrawers/Wearable/build.gradle
index 394ab5d..29a7a0c 100644
--- a/prebuilts/gradle/WearDrawers/Wearable/build.gradle
+++ b/prebuilts/gradle/WearDrawers/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -18,8 +18,8 @@
 
     provided "com.google.android.wearable:wearable:1.0.0"
 
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:2.0.0-alpha1'
 
@@ -36,7 +36,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/WearDrawers/Wearable/src/main/AndroidManifest.xml b/prebuilts/gradle/WearDrawers/Wearable/src/main/AndroidManifest.xml
index 3044d19..eaf9dbd 100644
--- a/prebuilts/gradle/WearDrawers/Wearable/src/main/AndroidManifest.xml
+++ b/prebuilts/gradle/WearDrawers/Wearable/src/main/AndroidManifest.xml
@@ -21,7 +21,6 @@
             android:label="@string/app_name">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
-
                 <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
         </activity>
diff --git a/prebuilts/gradle/WearDrawers/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/WearDrawers/gradle/wrapper/gradle-wrapper.properties
index 369e8ad..c66febd 100644
--- a/prebuilts/gradle/WearDrawers/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/WearDrawers/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/WearNotifications/.google/packaging.yaml b/prebuilts/gradle/WearNotifications/.google/packaging.yaml
new file mode 100644
index 0000000..c80384c
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/.google/packaging.yaml
@@ -0,0 +1,26 @@
+
+# GOOGLE SAMPLE PACKAGING DATA
+#
+# This file is used by Google as part of our samples packaging process.
+# End users may safely ignore this file. It has no relevance to other systems.
+---
+status:       PUBLISHED
+technologies: [Android]
+categories:   [Notifications, Wear]
+languages:    [Java]
+solutions:    [Mobile]
+github:       android-Wear Notifications
+level:        INTERMEDIATE
+icon:         screenshots/icon-web.png
+apiRefs:
+    - android:android.app.Notification
+    - android:android.support.v4.app.NotificationCompat.BigPictureStyle
+    - android:android.support.v4.app.NotificationCompat.BigTextStyle
+    - android:android.support.v4.app.NotificationCompat.InboxStyle
+    - android:android.support.v4.app.NotificationCompat.MessagingStyle
+    - android:android.support.v4.app.NotificationManagerCompat
+    - android:android.support.v4.app.RemoteInput
+    - android:android.support.v4.app.TaskStackBuilder
+    - android:android.support.v7.app.AppCompatActivity
+    - android:android.support.v7.app.NotificationCompat
+license: apache2
diff --git a/prebuilts/gradle/WearNotifications/Application/build.gradle b/prebuilts/gradle/WearNotifications/Application/build.gradle
new file mode 100644
index 0000000..cbc4852
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/build.gradle
@@ -0,0 +1,65 @@
+
+buildscript {
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.1.3'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+repositories {
+    jcenter()
+}
+
+dependencies {
+    compile "com.android.support:support-v4:24.2.1"
+    compile "com.android.support:support-v13:24.2.1"
+    compile "com.android.support:cardview-v7:24.2.1"
+    compile "com.android.support:appcompat-v7:24.2.1"
+    compile 'com.android.support:appcompat-v7:24.0.0'
+    compile 'com.android.support:cardview-v7:24.0.0'
+    compile 'com.android.support:design:24.0.0'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
+    wearApp project(':Wearable')
+}
+
+// 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 24
+    buildToolsVersion "24.0.2"
+
+    defaultConfig {
+        minSdkVersion 18
+        targetSdkVersion 24
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }
+
+    sourceSets {
+        main {
+            dirs.each { dir ->
+                java.srcDirs "src/${dir}/java"
+                res.srcDirs "src/${dir}/res"
+            }
+        }
+        androidTest.setRoot('tests')
+        androidTest.java.srcDirs = ['tests/src']
+
+    }
+
+}
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/AndroidManifest.xml b/prebuilts/gradle/WearNotifications/Application/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..20c44cc
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/AndroidManifest.xml
@@ -0,0 +1,83 @@
+<?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.wear.wearnotifications"
+          android:versionCode="1"
+          android:versionName="1.0">
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:supportsRtl="true"
+        android:theme="@style/AppThemeOverride">
+
+        <activity android:name=".MainActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <activity
+            android:name=".handlers.BigTextMainActivity"
+            android:excludeFromRecents="true"
+            android:label="@string/title_activity_big_text_main"
+            android:taskAffinity="">
+        </activity>
+
+        <activity
+            android:name=".handlers.BigPictureSocialMainActivity"
+            android:label="@string/title_activity_big_picture_main">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value=".MainActivity"/>
+        </activity>
+
+
+        <activity
+            android:name=".handlers.InboxMainActivity"
+            android:label="@string/title_activity_inbox_main">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value=".MainActivity"/>
+        </activity>
+
+        <activity
+            android:name=".handlers.MessagingMainActivity"
+            android:label="@string/title_activity_messaging_main">
+            <meta-data
+                android:name="android.support.PARENT_ACTIVITY"
+                android:value=".MainActivity"/>
+        </activity>
+
+        <service
+            android:name=".handlers.BigTextIntentService"
+            android:exported="false">
+        </service>
+
+        <service
+            android:name=".handlers.MessagingIntentService"
+            android:exported="false">
+        </service>
+
+        <service
+            android:name=".handlers.BigPictureSocialIntentService"
+            android:exported="false">
+        </service>
+    </application>
+</manifest>
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
new file mode 100644
index 0000000..1b1743f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
@@ -0,0 +1,60 @@
+/*
+Copyright 2016 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.wear.wearnotifications;
+
+import android.support.v7.app.NotificationCompat;
+
+/**
+ * We use a Singleton for a global copy of the NotificationCompat.Builder to update active
+ * Notifications from other Services/Activities.
+ *
+ * You have two options for updating your notifications:
+ *
+ *  1. Use a new NotificationCompatBuilder to create the Notification. This approach requires you
+ *  to get *ALL* the information and pass it to the builder. We get all the information from a Mock
+ *  Database and this is the approach used in the MainActivity.
+ *
+ *  2. Use an existing NotificationCompatBuilder to create a Notification. This approach requires
+ *  you to store a reference to the original builder. The benefit is you only need the new/updated
+ *  information for an existing notification. We use this approach in the IntentService handlers to
+ *  update existing notifications.
+ *
+ *  IMPORTANT NOTE 1: You shouldn't save/modify the resulting Notification object using
+ *  its member variables and/or legacy APIs. If you want to retain anything from update
+ *  to update, retain the Builder as option 2 outlines.
+ *
+ *  IMPORTANT NOTE 2: If the global Notification Builder is lost because the process is killed, you
+ *  should have a way to recreate the Notification Builder from a persistent state. (We do this as
+ *  well in the sample, check the IntentServices.)
+ */
+public final class GlobalNotificationBuilder {
+
+    private static NotificationCompat.Builder sGlobalNotificationCompatBuilder = null;
+
+    /*
+     * Empty constructor - We don't initialize builder because we rely on a null state to let us
+     * know the Application's process was killed.
+     */
+    private GlobalNotificationBuilder () { }
+
+    public static void setNotificationCompatBuilderInstance (NotificationCompat.Builder builder) {
+        sGlobalNotificationCompatBuilder = builder;
+    }
+
+    public static NotificationCompat.Builder getNotificationCompatBuilderInstance(){
+        return sGlobalNotificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
new file mode 100644
index 0000000..65b0f7f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
@@ -0,0 +1,828 @@
+/*
+Copyright 2016 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.wear.wearnotifications;
+
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.design.widget.Snackbar;
+import android.support.v4.app.NotificationCompat.BigPictureStyle;
+import android.support.v4.app.NotificationCompat.BigTextStyle;
+import android.support.v4.app.NotificationCompat.InboxStyle;
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v4.app.TaskStackBuilder;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.RelativeLayout;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+
+
+import com.example.android.wearable.wear.wearnotifications.handlers.BigPictureSocialIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigPictureSocialMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigTextIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigTextMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.InboxMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.MessagingIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.MessagingMainActivity;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * The Activity demonstrates several popular Notification.Style examples along with their best
+ * practices (include proper Android Wear support when you don't have a dedicated Android Wear
+ * app).
+ */
+public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
+
+    public static final String TAG = "MainActivity";
+
+    public static final int NOTIFICATION_ID = 888;
+
+    // Used for Notification Style array and switch statement for Spinner selection
+    private static final String BIG_TEXT_STYLE = "BIG_TEXT_STYLE";
+    private static final String BIG_PICTURE_STYLE = "BIG_PICTURE_STYLE";
+    private static final String INBOX_STYLE = "INBOX_STYLE";
+    private static final String MESSAGING_STYLE = "MESSAGING_STYLE";
+
+    // Collection of notification styles to back ArrayAdapter for Spinner
+    private static final String[] NOTIFICATION_STYLES =
+            {BIG_TEXT_STYLE, BIG_PICTURE_STYLE, INBOX_STYLE, MESSAGING_STYLE};
+
+    private static final String[] NOTIFICATION_STYLES_DESCRIPTION =
+            {
+                    "Demos reminder type app using BIG_TEXT_STYLE",
+                    "Demos social type app using BIG_PICTURE_STYLE + inline notification response",
+                    "Demos email type app using INBOX_STYLE",
+                    "Demos messaging app using MESSAGING_STYLE + inline notification responses"
+            };
+
+    private NotificationManagerCompat mNotificationManagerCompat;
+
+    private int mSelectedNotification = 0;
+
+    // RelativeLayout is needed for SnackBars to alert users when Notifications are disabled for app
+    private RelativeLayout mMainRelativeLayout;
+    private Spinner mSpinner;
+    private TextView mNotificationDetailsTextView;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+
+        mMainRelativeLayout = (RelativeLayout) findViewById(R.id.mainRelativeLayout);
+        mNotificationDetailsTextView = (TextView) findViewById(R.id.notificationDetails);
+        mSpinner = (Spinner) findViewById(R.id.spinner);
+
+        mNotificationManagerCompat = NotificationManagerCompat.from(getApplicationContext());
+
+        // Create an ArrayAdapter using the string array and a default spinner layout
+        ArrayAdapter<CharSequence> adapter =
+                new ArrayAdapter(
+                        this,
+                        android.R.layout.simple_spinner_item,
+                        NOTIFICATION_STYLES);
+        // Specify the layout to use when the list of choices appears
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        // Apply the adapter to the spinner
+        mSpinner.setAdapter(adapter);
+        mSpinner.setOnItemSelectedListener(this);
+    }
+
+    @Override
+    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+        Log.d(TAG, "onItemSelected(): position: " + position + " id: " + id);
+
+        mSelectedNotification = position;
+
+        mNotificationDetailsTextView.setText(
+                NOTIFICATION_STYLES_DESCRIPTION[mSelectedNotification]);
+    }
+    @Override
+    public void onNothingSelected(AdapterView<?> parent) {
+        // Required
+    }
+
+    public void onClick(View view) {
+
+        Log.d(TAG, "onClick()");
+
+        boolean areNotificationsEnabled = mNotificationManagerCompat.areNotificationsEnabled();
+
+        if (!areNotificationsEnabled) {
+            // Because the user took an action to create a notification, we create a prompt to let
+            // the user re-enable notifications for this application again.
+            Snackbar snackbar = Snackbar
+                    .make(
+                            mMainRelativeLayout,
+                            "You need to enable notifications for this app",
+                            Snackbar.LENGTH_LONG)
+                    .setAction("ENABLE", new View.OnClickListener() {
+                        @Override
+                        public void onClick(View view) {
+                            // Links to this app's notification settings
+                            openNotificationSettingsForApp();
+                        }
+                    });
+            snackbar.show();
+            return;
+        }
+
+        String notificationStyle = NOTIFICATION_STYLES[mSelectedNotification];
+
+        switch (notificationStyle) {
+            case BIG_TEXT_STYLE:
+                generateBigTextStyleNotification();
+                break;
+
+            case BIG_PICTURE_STYLE:
+                generateBigPictureStyleNotification();
+                break;
+
+            case INBOX_STYLE:
+                generateInboxStyleNotification();
+                break;
+
+            case MESSAGING_STYLE:
+                generateMessagingStyleNotification();
+                break;
+
+            default:
+                // continue below
+        }
+    }
+
+    /*
+     * Generates a BIG_TEXT_STYLE Notification that supports both phone/tablet and wear. For devices
+     * on API level 16 (4.1.x - Jelly Bean) and after, displays BIG_TEXT_STYLE. Otherwise, displays
+     * a basic notification.
+     */
+    private void generateBigTextStyleNotification() {
+
+        Log.d(TAG, "generateBigTextStyleNotification()");
+
+        // Main steps for building a BIG_TEXT_STYLE notification:
+        //      0. Get your data
+        //      1. Build the BIG_TEXT_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Create additional Actions for the Notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigTextStyleReminderAppData bigTextStyleReminderAppData =
+                MockDatabase.getBigTextStyleData();
+
+        // 1. Build the BIG_TEXT_STYLE
+        BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle()
+                // Overrides ContentText in the big form of the template
+                .bigText(bigTextStyleReminderAppData.getBigText())
+                // Overrides ContentTitle in the big form of the template
+                .setBigContentTitle(bigTextStyleReminderAppData.getBigContentTitle())
+                // Summary line after the detail section in the big form of the template
+                // Note: To improve readability, don't overload the user with info. If Summary Text
+                // doesn't add critical information, you should skip it.
+                .setSummaryText(bigTextStyleReminderAppData.getSummaryText());
+
+
+        // 2. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, BigTextMainActivity.class);
+
+        // When creating your Intent, you need to take into account the back state, i.e., what
+        // happens after your Activity launches and the user presses the back button.
+
+        // There are two options:
+        //      1. Regular activity - You're starting an Activity that's part of the application's
+        //      normal workflow.
+
+        //      2. Special activity - The user only sees this Activity if it's started from a
+        //      notification. In a sense, the Activity extends the notification by providing
+        //      information that would be hard to display in the notification itself.
+
+        // For the BIG_TEXT_STYLE notification, we will consider the activity launched by the main
+        // Intent as a special activity, so we will follow option 2.
+
+        // For an example of option 1, check either the MESSAGING_STYLE or BIG_PICTURE_STYLE
+        // examples.
+
+        // For more information, check out our dev article:
+        // https://developer.android.com/training/notify-user/navigation.html
+
+        // Sets the Activity to start in a new, empty task
+        notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+
+        PendingIntent notifyPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 3. Create additional Actions (Intents) for the Notification
+
+        // In our case, we create two additional actions: a Snooze action and a Dismiss action
+        // Snooze Action
+        Intent snoozeIntent = new Intent(this, BigTextIntentService.class);
+        snoozeIntent.setAction(BigTextIntentService.ACTION_SNOOZE);
+
+        PendingIntent snoozePendingIntent = PendingIntent.getService(this, 0, snoozeIntent, 0);
+        NotificationCompat.Action snoozeAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_alarm_white_48dp,
+                        "Snooze",
+                        snoozePendingIntent)
+                        .build();
+
+
+        // Dismiss Action
+        Intent dismissIntent = new Intent(this, BigTextIntentService.class);
+        dismissIntent.setAction(BigTextIntentService.ACTION_DISMISS);
+
+        PendingIntent dismissPendingIntent = PendingIntent.getService(this, 0, dismissIntent, 0);
+        NotificationCompat.Action dismissAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_cancel_white_48dp,
+                        "Dismiss",
+                        dismissPendingIntent)
+                        .build();
+
+
+        // 4. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. Later, we use the same global builder to get back the notification
+        // we built here for the snooze action, that is, canceling the notification and relaunching
+        // it several seconds later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        Notification notification = notificationCompatBuilder
+                // BIG_TEXT_STYLE sets title and content for API 16 (4.1 and after)
+                .setStyle(bigTextStyle)
+                // Title for API <16 (4.0 and below) devices
+                .setContentTitle(bigTextStyleReminderAppData.getContentTitle())
+                // Content for API <24 (7.0 and below) devices
+                .setContentText(bigTextStyleReminderAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_alarm_white_48dp))
+                .setContentIntent(notifyPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all Android Wear devices. If you have more than one notification and
+                // you prefer a different summary notification, set a group key and create a
+                // summary notification via
+                // .setGroupSummary(true)
+                // .setGroup(GROUP_KEY_YOUR_NAME_HERE)
+
+                .setCategory(Notification.CATEGORY_REMINDER)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Shows content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PUBLIC)
+
+                // Adds additional actions specified above
+                .addAction(snoozeAction)
+                .addAction(dismissAction)
+
+                .build();
+
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+    }
+
+    /*
+     * Generates a BIG_PICTURE_STYLE Notification that supports both phone/tablet and wear. For
+     * devices on API level 16 (4.1.x - Jelly Bean) and after, displays BIG_PICTURE_STYLE.
+     * Otherwise, displays a basic notification.
+     *
+     * This example Notification is a social post. It allows updating the notification with
+     * comments/responses via RemoteInput and the BigPictureSocialIntentService on 24+ (N+) and
+     * Android Wear devices.
+     */
+    private void generateBigPictureStyleNotification() {
+
+        Log.d(TAG, "generateBigPictureStyleNotification()");
+
+        // Main steps for building a BIG_PICTURE_STYLE notification:
+        //      0. Get your data
+        //      1. Build the BIG_PICTURE_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigPictureStyleSocialAppData bigPictureStyleSocialAppData =
+                MockDatabase.getBigPictureStyleData();
+
+        // 1. Build the BIG_PICTURE_STYLE
+        BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle()
+                // Provides the bitmap for the BigPicture notification
+                .bigPicture(
+                        BitmapFactory.decodeResource(
+                                getResources(),
+                                bigPictureStyleSocialAppData.getBigImage()))
+                // Overrides ContentTitle in the big form of the template
+                .setBigContentTitle(bigPictureStyleSocialAppData.getBigContentTitle())
+                // Summary line after the detail section in the big form of the template
+                .setSummaryText(bigPictureStyleSocialAppData.getSummaryText());
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, BigPictureSocialMainActivity.class);
+
+        // When creating your Intent, you need to take into account the back state, i.e., what
+        // happens after your Activity launches and the user presses the back button.
+
+        // There are two options:
+        //      1. Regular activity - You're starting an Activity that's part of the application's
+        //      normal workflow.
+
+        //      2. Special activity - The user only sees this Activity if it's started from a
+        //      notification. In a sense, the Activity extends the notification by providing
+        //      information that would be hard to display in the notification itself.
+
+        // Even though this sample's MainActivity doesn't link to the Activity this Notification
+        // launches directly, i.e., it isn't part of the normal workflow, a social app generally
+        // always links to individual posts as part of the app flow, so we will follow option 1.
+
+        // For an example of option 2, check out the BIG_TEXT_STYLE example.
+
+        // For more information, check out our dev article:
+        // https://developer.android.com/training/notify-user/navigation.html
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        // Adds the back stack
+        stackBuilder.addParentStack(BigPictureSocialMainActivity.class);
+        // Adds the Intent to the top of the stack
+        stackBuilder.addNextIntent(mainIntent);
+        // Gets a PendingIntent containing the entire back stack
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+
+        // Note: For API <24 (M and below) we need to use an Activity, so the lock-screen presents
+        // the auth challenge. For API 24+ (N and above), we use a Service (could be a
+        // BroadcastReceiver), so the user can input from Notification or lock-screen (they have
+        // choice to allow) without leaving the notification.
+
+        // Create the RemoteInput
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput =
+                new RemoteInput.Builder(BigPictureSocialIntentService.EXTRA_COMMENT)
+                        .setLabel(replyLabel)
+                        // List of quick response choices for any wearables paired with the phone
+                        .setChoices(bigPictureStyleSocialAppData.getPossiblePostResponses())
+                        .build();
+
+        // Pending intent =
+        //      API <24 (M and below): activity so the lock-screen presents the auth challenge
+        //      API 24+ (N and above): this should be a Service or BroadcastReceiver
+        PendingIntent replyActionPendingIntent;
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            Intent intent = new Intent(this, BigPictureSocialIntentService.class);
+            intent.setAction(BigPictureSocialIntentService.ACTION_COMMENT);
+            replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0);
+
+        } else {
+            replyActionPendingIntent = mainPendingIntent;
+        }
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_white_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        .build();
+
+        // 4. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. Later, we use the same global builder to get back the notification
+        // we built here for a comment on the post.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // 4. Build and issue the notification
+        notificationCompatBuilder
+                // BIG_PICTURE_STYLE sets title and content for API 16 (4.1 and after)
+                .setStyle(bigPictureStyle)
+                // Title for API <16 (4.0 and below) devices
+                .setContentTitle(bigPictureStyleSocialAppData.getContentTitle())
+                // Content for API <24 (7.0 and below) devices
+                .setContentText(bigPictureStyleSocialAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all Android Wear devices. If you have more than one notification and
+                // you prefer a different summary notification, set a group key and create a
+                // summary notification via
+                // .setGroupSummary(true)
+                // .setGroup(GROUP_KEY_YOUR_NAME_HERE)
+
+                .setSubText(Integer.toString(1))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_SOCIAL)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : bigPictureStyleSocialAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+    }
+
+    /*
+     * Generates a INBOX_STYLE Notification that supports both phone/tablet and wear. For devices
+     * on API level 16 (4.1.x - Jelly Bean) and after, displays INBOX_STYLE. Otherwise, displays a
+     * basic notification.
+     */
+    private void generateInboxStyleNotification() {
+
+        Log.d(TAG, "generateInboxStyleNotification()");
+
+
+        // Main steps for building a INBOX_STYLE notification:
+        //      0. Get your data
+        //      1. Build the INBOX_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.InboxStyleEmailAppData inboxStyleEmailAppData =
+                MockDatabase.getInboxStyleData();
+
+        // 1. Build the INBOX_STYLE
+        InboxStyle inboxStyle = new NotificationCompat.InboxStyle()
+                // This title is slightly different than regular title, since I know INBOX_STYLE is
+                // available.
+                .setBigContentTitle(inboxStyleEmailAppData.getBigContentTitle())
+                .setSummaryText(inboxStyleEmailAppData.getSummaryText());
+
+        // Add each summary line of the new emails, you can add up to 5
+        for (String summary : inboxStyleEmailAppData.getIndividualEmailSummary()) {
+            inboxStyle.addLine(summary);
+        }
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, InboxMainActivity.class);
+
+        // When creating your Intent, you need to take into account the back state, i.e., what
+        // happens after your Activity launches and the user presses the back button.
+
+        // There are two options:
+        //      1. Regular activity - You're starting an Activity that's part of the application's
+        //      normal workflow.
+
+        //      2. Special activity - The user only sees this Activity if it's started from a
+        //      notification. In a sense, the Activity extends the notification by providing
+        //      information that would be hard to display in the notification itself.
+
+        // Even though this sample's MainActivity doesn't link to the Activity this Notification
+        // launches directly, i.e., it isn't part of the normal workflow, a eamil app generally
+        // always links to individual emails as part of the app flow, so we will follow option 1.
+
+        // For an example of option 2, check out the BIG_TEXT_STYLE example.
+
+        // For more information, check out our dev article:
+        // https://developer.android.com/training/notify-user/navigation.html
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        // Adds the back stack
+        stackBuilder.addParentStack(InboxMainActivity.class);
+        // Adds the Intent to the top of the stack
+        stackBuilder.addNextIntent(mainIntent);
+        // Gets a PendingIntent containing the entire back stack
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. However, we don't need to update this notification later, so we
+        // will not need to set a global builder for access to the notification later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // 4. Build and issue the notification
+        notificationCompatBuilder
+
+                // INBOX_STYLE sets title and content for API 16+ (4.1 and after) when the
+                // notification is expanded
+                .setStyle(inboxStyle)
+
+                // Title for API <16 (4.0 and below) devices and API 16+ (4.1 and after) when the
+                // notification is collapsed
+                .setContentTitle(inboxStyleEmailAppData.getContentTitle())
+
+                // Content for API <24 (7.0 and below) devices and API 16+ (4.1 and after) when the
+                // notification is collapsed
+                .setContentText(inboxStyleEmailAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all Android Wear devices. If you have more than one notification and
+                // you prefer a different summary notification, set a group key and create a
+                // summary notification via
+                // .setGroupSummary(true)
+                // .setGroup(GROUP_KEY_YOUR_NAME_HERE)
+
+                // Sets large number at the right-hand side of the notification for API <24 devices
+                .setSubText(Integer.toString(inboxStyleEmailAppData.getNumberOfNewEmails()))
+
+                .setCategory(Notification.CATEGORY_EMAIL)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : inboxStyleEmailAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+    }
+
+    /*
+     * Generates a MESSAGING_STYLE Notification that supports both phone/tablet and wear. For
+     * devices on API level 24 (7.0 - Nougat) and after, displays MESSAGING_STYLE. Otherwise,
+     * displays a basic BIG_TEXT_STYLE.
+     */
+    private void generateMessagingStyleNotification() {
+
+        Log.d(TAG, "generateMessagingStyleNotification()");
+
+        // Main steps for building a MESSAGING_STYLE notification:
+        //      0. Get your data
+        //      1. Build the MESSAGING_STYLE
+        //      2. Add support for Wear 1.+
+        //      3. Set up main Intent for notification
+        //      4. Set up RemoteInput (users can input directly from notification)
+        //      5. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData =
+                MockDatabase.getMessagingStyleData();
+
+        // 1. Build the Notification.Style (MESSAGING_STYLE)
+        String contentTitle = messagingStyleCommsAppData.getContentTitle();
+
+        MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getReplayName())
+                        // You could set a different title to appear when the messaging style
+                        // is supported on device (24+) if you wish. In our case, we use the same
+                        // title.
+                        .setConversationTitle(contentTitle);
+
+        // Adds all Messages
+        // Note: Messages include the text, timestamp, and sender
+        for (MessagingStyle.Message message : messagingStyleCommsAppData.getMessages()) {
+            messagingStyle.addMessage(message);
+        }
+
+
+        // 2. Add support for Wear 1.+
+
+        // Since Wear 1.0 doesn't support the MESSAGING_STYLE, we use the BIG_TEXT_STYLE, so all the
+        // text is visible.
+
+        // This is basically a toString() of all the Messages above.
+        String fullMessageForWearVersion1 = messagingStyleCommsAppData.getFullConversation();
+
+        Notification chatHistoryForWearV1 = new NotificationCompat.Builder(getApplicationContext())
+                .setStyle(new BigTextStyle().bigText(fullMessageForWearVersion1))
+                .setContentTitle(contentTitle)
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setContentText(fullMessageForWearVersion1)
+                .build();
+
+        // Adds page with all text to support Wear 1.+.
+        NotificationCompat.WearableExtender wearableExtenderForWearVersion1 =
+                new NotificationCompat.WearableExtender()
+                        .addPage(chatHistoryForWearV1);
+
+
+
+        // 3. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, MessagingMainActivity.class);
+
+        // When creating your Intent, you need to take into account the back state, i.e., what
+        // happens after your Activity launches and the user presses the back button.
+
+        // There are two options:
+        //      1. Regular activity - You're starting an Activity that's part of the application's
+        //      normal workflow.
+
+        //      2. Special activity - The user only sees this Activity if it's started from a
+        //      notification. In a sense, the Activity extends the notification by providing
+        //      information that would be hard to display in the notification itself.
+
+        // Even though this sample's MainActivity doesn't link to the Activity this Notification
+        // launches directly, i.e., it isn't part of the normal workflow, a chat app generally
+        // always links to individual conversations as part of the app flow, so we will follow
+        // option 1.
+
+        // For an example of option 2, check out the BIG_TEXT_STYLE example.
+
+        // For more information, check out our dev article:
+        // https://developer.android.com/training/notify-user/navigation.html
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        // Adds the back stack
+        stackBuilder.addParentStack(MessagingMainActivity.class);
+        // Adds the Intent to the top of the stack
+        stackBuilder.addNextIntent(notifyIntent);
+        // Gets a PendingIntent containing the entire back stack
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 4. Set up RemoteInput, so users can input (keyboard and voice) from notification
+
+        // Note: For API <24 (M and below) we need to use an Activity, so the lock-screen present
+        // the auth challenge. For API 24+ (N and above), we use a Service (could be a
+        // BroadcastReceiver), so the user can input from Notification or lock-screen (they have
+        // choice to allow) without leaving the notification.
+
+        // Create the RemoteInput specifying this key
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
+                .setLabel(replyLabel)
+                .build();
+
+        // Pending intent =
+        //      API <24 (M and below): activity so the lock-screen presents the auth challenge
+        //      API 24+ (N and above): this should be a Service or BroadcastReceiver
+        PendingIntent replyActionPendingIntent;
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            Intent intent = new Intent(this, MessagingIntentService.class);
+            intent.setAction(MessagingIntentService.ACTION_REPLY);
+            replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0);
+
+        } else {
+            replyActionPendingIntent = mainPendingIntent;
+        }
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_white_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        // Allows system to generate replies by context of conversation
+                        .setAllowGeneratedReplies(true)
+                        .build();
+
+
+        // 5. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating current notification), we
+        // create a new Builder. Later, we update this same notification, so we need to save this
+        // Builder globally (as outlined earlier).
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // Builds and issues notification
+        notificationCompatBuilder
+                // MESSAGING_STYLE sets title and content for API 24+ (N and above) devices
+                .setStyle(messagingStyle)
+                // Title for API <24 (M and below) devices
+                .setContentTitle(contentTitle)
+                // Content for API <24 (M and below) devices
+                .setContentText(messagingStyleCommsAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all Android Wear devices. If you have more than one notification and
+                // you prefer a different summary notification, set a group key and create a
+                // summary notification via
+                // .setGroupSummary(true)
+                // .setGroup(GROUP_KEY_YOUR_NAME_HERE)
+
+                // Number of new notifications for API <24 (M and below) devices
+                .setSubText(Integer.toString(messagingStyleCommsAppData.getNumberOfNewMessages()))
+
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_MESSAGE)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+
+                // Adds multiple pages for easy consumption on a wear device.
+                .extend(wearableExtenderForWearVersion1);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : messagingStyleCommsAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+    }
+
+    /**
+     * Helper method for the SnackBar action, i.e., if the user has this application's notifications
+     * disabled, this opens up the dialog to turn them back on after the user requests a
+     * Notification launch.
+     *
+     * IMPORTANT NOTE: You should not do this action unless the user takes an action to see your
+     * Notifications like this sample demonstrates. Spamming users to re-enable your notifications
+     * is a bad idea.
+     */
+    private void openNotificationSettingsForApp() {
+        // Links to this app's notification settings
+        Intent intent = new Intent();
+        intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
+        intent.putExtra("app_package", getPackageName());
+        intent.putExtra("app_uid", getApplicationInfo().uid);
+        startActivity(intent);
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
new file mode 100644
index 0000000..470eedb
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
@@ -0,0 +1,228 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat.BigPictureStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v4.app.TaskStackBuilder;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * Asynchronously handles updating social app posts (and active Notification) with comments from
+ * user. Notification for social app use BigPictureStyle.
+ */
+public class BigPictureSocialIntentService extends IntentService {
+
+    private static final String TAG = "BigPictureService";
+
+    public static final String ACTION_COMMENT =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.COMMENT";
+
+    public static final String EXTRA_COMMENT =
+            "com.example.android.wearable.wear.wearnotifications.handlers.extra.COMMENT";
+
+    public BigPictureSocialIntentService() {
+        super("BigPictureSocialIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_COMMENT.equals(action)) {
+                handleActionComment(getMessage(intent));
+            }
+        }
+    }
+
+    /**
+     * Handles action for adding a comment from the notification.
+     */
+    private void handleActionComment(CharSequence comment) {
+        Log.d(TAG, "handleActionComment(): " + comment);
+
+        if (comment != null) {
+
+            // TODO: Asynchronously save your message to Database and servers.
+
+            /*
+             * You have two options for updating your notification (this class uses approach #2):
+             *
+             *  1. Use a new NotificationCompatBuilder to create the Notification. This approach
+             *  requires you to get *ALL* the information that existed in the previous
+             *  Notification (and updates) and pass it to the builder. This is the approach used in
+             *  the MainActivity.
+             *
+             *  2. Use the original NotificationCompatBuilder to create the Notification. This
+             *  approach requires you to store a reference to the original builder. The benefit is
+             *  you only need the new/updated information. In our case, the comment from the user
+             *  regarding the post (which we already have here).
+             *
+             *  IMPORTANT NOTE: You shouldn't save/modify the resulting Notification object using
+             *  its member variables and/or legacy APIs. If you want to retain anything from update
+             *  to update, retain the Builder as option 2 outlines.
+             */
+
+            // Retrieves NotificationCompat.Builder used to create initial Notification
+            NotificationCompat.Builder notificationCompatBuilder =
+                    GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+            // Recreate builder from persistent state if app process is killed
+            if (notificationCompatBuilder == null) {
+                // Note: New builder set globally in the method
+                notificationCompatBuilder = recreateBuilderWithBigPictureStyle();
+            }
+
+            // Updates active Notification
+            Notification updatedNotification = notificationCompatBuilder
+                    // Adds a line and comment below content in Notification
+                    .setRemoteInputHistory(new CharSequence[]{comment})
+                    .build();
+
+            // Pushes out the updated Notification
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+            notificationManagerCompat.notify(MainActivity.NOTIFICATION_ID, updatedNotification);
+        }
+    }
+
+    /*
+     * Extracts CharSequence created from the RemoteInput associated with the Notification.
+     */
+    private CharSequence getMessage(Intent intent) {
+        Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+        if (remoteInput != null) {
+            return remoteInput.getCharSequence(EXTRA_COMMENT);
+        }
+        return null;
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from MainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithBigPictureStyle() {
+
+        // Main steps for building a BIG_PICTURE_STYLE notification (for more detailed comments on
+        // building this notification, check MainActivity.java):
+        //      0. Get your data
+        //      1. Build the BIG_PICTURE_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigPictureStyleSocialAppData bigPictureStyleSocialAppData =
+                MockDatabase.getBigPictureStyleData();
+
+        // 1. Build the BIG_PICTURE_STYLE
+        BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle()
+                .bigPicture(
+                        BitmapFactory.decodeResource(
+                                getResources(),
+                                bigPictureStyleSocialAppData.getBigImage()))
+                .setBigContentTitle(bigPictureStyleSocialAppData.getBigContentTitle())
+                .setSummaryText(bigPictureStyleSocialAppData.getSummaryText());
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, BigPictureSocialMainActivity.class);
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        stackBuilder.addParentStack(BigPictureSocialMainActivity.class);
+        stackBuilder.addNextIntent(mainIntent);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput =
+                new RemoteInput.Builder(BigPictureSocialIntentService.EXTRA_COMMENT)
+                        .setLabel(replyLabel)
+                        .setChoices(bigPictureStyleSocialAppData.getPossiblePostResponses())
+                        .build();
+
+        PendingIntent replyActionPendingIntent;
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            Intent intent = new Intent(this, BigPictureSocialIntentService.class);
+            intent.setAction(BigPictureSocialIntentService.ACTION_COMMENT);
+            replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0);
+
+        } else {
+            replyActionPendingIntent = mainPendingIntent;
+        }
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_white_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        .build();
+
+        // 4. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        notificationCompatBuilder
+                .setStyle(bigPictureStyle)
+                .setContentTitle(bigPictureStyleSocialAppData.getContentTitle())
+                .setContentText(bigPictureStyleSocialAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setSubText(Integer.toString(1))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_SOCIAL)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PRIVATE);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : bigPictureStyleSocialAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java
new file mode 100644
index 0000000..f9e13c2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+
+/**
+ * Template class meant to include functionality for your Social App. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class BigPictureSocialMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_big_picture_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(MainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display social post from your database
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
new file mode 100644
index 0000000..8f6664d
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
@@ -0,0 +1,206 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.support.v4.app.NotificationCompat.BigTextStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Asynchronously handles snooze and dismiss actions for reminder app (and active Notification).
+ * Notification for for reminder app uses BigTextStyle.
+ */
+public class BigTextIntentService extends IntentService {
+
+    private static final String TAG = "BigTextService";
+
+    public static final String ACTION_DISMISS =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.DISMISS";
+    public static final String ACTION_SNOOZE =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.SNOOZE";
+
+    private static final long SNOOZE_TIME = TimeUnit.SECONDS.toMillis(5);
+
+    public BigTextIntentService() {
+        super("BigTextIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_DISMISS.equals(action)) {
+                handleActionDismiss();
+            } else if (ACTION_SNOOZE.equals(action)) {
+                handleActionSnooze();
+            }
+        }
+    }
+
+    /**
+     * Handles action Dismiss in the provided background thread.
+     */
+    private void handleActionDismiss() {
+        Log.d(TAG, "handleActionDismiss()");
+
+        NotificationManagerCompat notificationManagerCompat =
+                NotificationManagerCompat.from(getApplicationContext());
+        notificationManagerCompat.cancel(MainActivity.NOTIFICATION_ID);
+    }
+
+    /**
+     * Handles action Snooze in the provided background thread.
+     */
+    private void handleActionSnooze() {
+        Log.d(TAG, "handleActionSnooze()");
+
+        // You could use NotificationManager.getActiveNotifications() if you are targeting SDK 23
+        // and above, but we are targeting devices with lower SDK API numbers, so we saved the
+        // builder globally and get the notification back to recreate it later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+        // Recreate builder from persistent state if app process is killed
+        if (notificationCompatBuilder == null) {
+            // Note: New builder set globally in the method
+            notificationCompatBuilder = recreateBuilderWithBigTextStyle();
+        }
+
+        Notification notification;
+        notification = notificationCompatBuilder.build();
+
+
+        if (notification != null) {
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+
+            notificationManagerCompat.cancel(MainActivity.NOTIFICATION_ID);
+
+            try {
+                Thread.sleep(SNOOZE_TIME);
+            } catch (InterruptedException ex) {
+                Thread.currentThread().interrupt();
+            }
+            notificationManagerCompat.notify(MainActivity.NOTIFICATION_ID, notification);
+        }
+
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from MainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithBigTextStyle() {
+
+        // Main steps for building a BIG_TEXT_STYLE notification (for more detailed comments on
+        // building this notification, check MainActivity.java)::
+        //      0. Get your data
+        //      1. Build the BIG_TEXT_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Create additional Actions for the Notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data
+        MockDatabase.BigTextStyleReminderAppData bigTextData = MockDatabase.getBigTextStyleData();
+
+        // 1. Build the BIG_TEXT_STYLE
+        BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle()
+                .bigText(bigTextData.getBigText())
+                .setBigContentTitle(bigTextData.getBigContentTitle())
+                .setSummaryText(bigTextData.getSummaryText());
+
+
+        // 2. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, BigTextMainActivity.class);
+        notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+
+        PendingIntent notifyPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 3. Create additional Actions (Intents) for the Notification
+
+        // Snooze Action
+        Intent snoozeIntent = new Intent(this, BigTextIntentService.class);
+        snoozeIntent.setAction(BigTextIntentService.ACTION_SNOOZE);
+
+        PendingIntent snoozePendingIntent = PendingIntent.getService(this, 0, snoozeIntent, 0);
+        NotificationCompat.Action snoozeAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_alarm_white_48dp,
+                        "Snooze",
+                        snoozePendingIntent)
+                        .build();
+
+
+        // Dismiss Action
+        Intent dismissIntent = new Intent(this, BigTextIntentService.class);
+        dismissIntent.setAction(BigTextIntentService.ACTION_DISMISS);
+
+        PendingIntent dismissPendingIntent = PendingIntent.getService(this, 0, dismissIntent, 0);
+        NotificationCompat.Action dismissAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_cancel_white_48dp,
+                        "Dismiss",
+                        dismissPendingIntent)
+                        .build();
+
+        // 4. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        notificationCompatBuilder
+                .setStyle(bigTextStyle)
+                .setContentTitle(bigTextData.getContentTitle())
+                .setContentText(bigTextData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_alarm_white_48dp))
+                .setContentIntent(notifyPendingIntent)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setCategory(Notification.CATEGORY_REMINDER)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PUBLIC)
+                .addAction(snoozeAction)
+                .addAction(dismissAction);
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java
new file mode 100644
index 0000000..92ae257
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+
+/**
+ * Template class meant to include functionality for your Reminder/Alarm App. (This project's main
+ * focus is on Notification Styles.)
+ */
+public class BigTextMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_big_text_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(MainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display reminder from your database
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java
new file mode 100644
index 0000000..4038746
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+
+/**
+ * Template class meant to include functionality for your email app. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class InboxMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_inbox_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(MainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display email from your database
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
new file mode 100644
index 0000000..6d30c4f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
@@ -0,0 +1,262 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v4.app.TaskStackBuilder;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * Asynchronously handles updating messaging app posts (and active Notification) with replies from
+ * user in a conversation. Notification for social app use MessagingStyle.
+ */
+public class MessagingIntentService extends IntentService {
+
+    private static final String TAG = "MessagingIntentService";
+
+    public static final String ACTION_REPLY =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.REPLY";
+
+    public static final String EXTRA_REPLY =
+            "com.example.android.wearable.wear.wearnotifications.handlers.extra.REPLY";
+
+
+    public MessagingIntentService() {
+        super("MessagingIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_REPLY.equals(action)) {
+                handleActionReply(getMessage(intent));
+            }
+        }
+    }
+
+    /**
+     * Handles action for replying to messages from the notification.
+     */
+    private void handleActionReply(CharSequence replyCharSequence) {
+        Log.d(TAG, "handleActionReply(): " + replyCharSequence);
+
+        if (replyCharSequence != null) {
+
+            // TODO: Asynchronously save your message to Database and servers.
+
+            /*
+             * You have two options for updating your notification (this class uses approach #2):
+             *
+             *  1. Use a new NotificationCompatBuilder to create the Notification. This approach
+             *  requires you to get *ALL* the information that existed in the previous
+             *  Notification (and updates) and pass it to the builder. This is the approach used in
+             *  the MainActivity.
+             *
+             *  2. Use the original NotificationCompatBuilder to create the Notification. This
+             *  approach requires you to store a reference to the original builder. The benefit is
+             *  you only need the new/updated information. In our case, the reply from the user
+             *  which we already have here.
+             *
+             *  IMPORTANT NOTE: You shouldn't save/modify the resulting Notification object using
+             *  its member variables and/or legacy APIs. If you want to retain anything from update
+             *  to update, retain the Builder as option 2 outlines.
+             */
+
+            // Retrieves NotificationCompat.Builder used to create initial Notification
+            NotificationCompat.Builder notificationCompatBuilder =
+                    GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+            // Recreate builder from persistent state if app process is killed
+            if (notificationCompatBuilder == null) {
+                // Note: New builder set globally in the method
+                notificationCompatBuilder = recreateBuilderWithMessagingStyle();
+            }
+
+
+            // Since we are adding to the MessagingStyle, we need to first retrieve the
+            // current MessagingStyle from the Notification itself.
+            Notification notification = notificationCompatBuilder.build();
+            MessagingStyle messagingStyle =
+                    NotificationCompat.MessagingStyle
+                            .extractMessagingStyleFromNotification(notification);
+
+            // Add new message to the MessagingStyle
+            messagingStyle.addMessage(replyCharSequence, System.currentTimeMillis(), null);
+
+            // Updates the Notification
+            notification = notificationCompatBuilder
+                    .setStyle(messagingStyle)
+                    .build();
+
+            // Pushes out the updated Notification
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+            notificationManagerCompat.notify(MainActivity.NOTIFICATION_ID, notification);
+        }
+    }
+
+    /*
+     * Extracts CharSequence created from the RemoteInput associated with the Notification.
+     */
+    private CharSequence getMessage(Intent intent) {
+        Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+        if (remoteInput != null) {
+            return remoteInput.getCharSequence(EXTRA_REPLY);
+        }
+        return null;
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from MainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithMessagingStyle() {
+
+        // Main steps for building a MESSAGING_STYLE notification (for more detailed comments on
+        // building this notification, check MainActivity.java)::
+        //      0. Get your data
+        //      1. Build the MESSAGING_STYLE
+        //      2. Add support for Wear 1.+
+        //      3. Set up main Intent for notification
+        //      4. Set up RemoteInput (users can input directly from notification)
+        //      5. Build and issue the notification
+
+        // 0. Get your data
+        MockDatabase.MessagingStyleCommsAppData messagingData =
+                MockDatabase.getMessagingStyleData();
+
+        // 1. Build the Notification.Style (MESSAGING_STYLE)
+        String contentTitle = messagingData.getContentTitle();
+
+        MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle(messagingData.getReplayName())
+                        .setConversationTitle(contentTitle);
+
+        // Adds all Messages
+        // Note: Messages include the text, timestamp, and sender
+        for (MessagingStyle.Message message : messagingData.getMessages()) {
+            messagingStyle.addMessage(message);
+        }
+
+
+        // 2. Add support for Wear 1.+
+        String fullMessageForWearVersion1 = messagingData.getFullConversation();
+
+        Notification chatHistoryForWearV1 = new NotificationCompat.Builder(getApplicationContext())
+                .setStyle(new NotificationCompat.BigTextStyle().bigText(fullMessageForWearVersion1))
+                .setContentTitle(contentTitle)
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setContentText(fullMessageForWearVersion1)
+                .build();
+
+        NotificationCompat.WearableExtender wearableExtenderForWearVersion1 =
+                new NotificationCompat.WearableExtender()
+                        .addPage(chatHistoryForWearV1);
+
+
+
+        // 3. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, MessagingMainActivity.class);
+
+        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
+        stackBuilder.addParentStack(MessagingMainActivity.class);
+        stackBuilder.addNextIntent(notifyIntent);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 4. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
+                .setLabel(replyLabel)
+                .build();
+
+        PendingIntent replyActionPendingIntent;
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            Intent intent = new Intent(this, MessagingIntentService.class);
+            intent.setAction(MessagingIntentService.ACTION_REPLY);
+            replyActionPendingIntent = PendingIntent.getService(this, 0, intent, 0);
+
+        } else {
+            replyActionPendingIntent = mainPendingIntent;
+        }
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_white_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        // Allows system to generate replies by context of conversation
+                        .setAllowGeneratedReplies(true)
+                        .build();
+
+
+        // 5. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        notificationCompatBuilder
+                .setStyle(messagingStyle)
+                .setContentTitle(contentTitle)
+                .setContentText(messagingData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setSubText(Integer.toString(messagingData.getNumberOfNewMessages()))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_MESSAGE)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+                .extend(wearableExtenderForWearVersion1);
+
+        for (String name : messagingData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
new file mode 100644
index 0000000..77d9d0c
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
@@ -0,0 +1,47 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.MainActivity;
+import com.example.android.wearable.wear.wearnotifications.R;
+
+/**
+ * Template class meant to include functionality for your Messaging App. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class MessagingMainActivity extends Activity {
+
+    private static final String TAG = "MessagingMainActivity";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_messaging_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(MainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display message/conversation from your database
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java
new file mode 100644
index 0000000..b552f6d
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java
@@ -0,0 +1,400 @@
+package com.example.android.wearable.wear.wearnotifications.mock;
+
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+
+import com.example.android.wearable.wear.wearnotifications.R;
+
+import java.util.ArrayList;
+
+/**
+ * Mock data for each of the Notification Style Demos.
+ */
+public final class MockDatabase {
+
+    public static BigTextStyleReminderAppData getBigTextStyleData() {
+        return BigTextStyleReminderAppData.getInstance();
+    }
+
+    public static BigPictureStyleSocialAppData getBigPictureStyleData() {
+        return BigPictureStyleSocialAppData.getInstance();
+    }
+
+    public static InboxStyleEmailAppData getInboxStyleData() {
+        return InboxStyleEmailAppData.getInstance();
+    }
+
+    public static MessagingStyleCommsAppData getMessagingStyleData() {
+        return MessagingStyleCommsAppData.getInstance();
+    }
+
+    /**
+     * Represents data needed for BigTextStyle Notification.
+     */
+    public static class BigTextStyleReminderAppData {
+
+        private static BigTextStyleReminderAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private String mBigContentTitle;
+        private String mBigText;
+        private String mSummaryText;
+
+
+        public static BigTextStyleReminderAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+
+            return sInstance;
+        }
+
+        private static synchronized BigTextStyleReminderAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new BigTextStyleReminderAppData();
+            }
+
+            return sInstance;
+        }
+
+        private BigTextStyleReminderAppData() {
+            // Standard Notification values
+            // Title for API <16 (4.0 and below) devices
+            mContentTitle = "Don't forget to...";
+            // Content for API <24 (4.0 and below) devices
+            mContentText = "Feed Dogs and check garage!";
+
+            // BigText Style Notification values
+            mBigContentTitle = "Don't forget to...";
+            mBigText = "... feed the dogs before you leave for work, and check the garage to "
+                            + "make sure the door is closed.";
+            mSummaryText = "Dogs and Garage";
+        }
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getBigText() {
+            return mBigText;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        @Override
+        public String toString() {
+            return getBigContentTitle() + getBigText();
+        }
+    }
+
+    /**
+     * Represents data needed for BigPictureStyle Notification.
+     */
+    public static class BigPictureStyleSocialAppData {
+        private static BigPictureStyleSocialAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private int mBigImage;
+        private String mBigContentTitle;
+        private String mSummaryText;
+
+        private CharSequence[] mPossiblePostResponses;
+
+        private ArrayList<String> mParticipants;
+
+
+        public static BigPictureStyleSocialAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized BigPictureStyleSocialAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new BigPictureStyleSocialAppData();
+            }
+
+            return sInstance;
+        }
+
+        private BigPictureStyleSocialAppData() {
+            // Standard Notification values
+            // Title/Content for API <16 (4.0 and below) devices
+            mContentTitle = "Bob's Post";
+            mContentText = "[Picture] Like my shot of Earth?";
+
+            // Style notification values
+            mBigImage = R.drawable.earth;
+            mBigContentTitle = "Bob's Post";
+            mSummaryText = "Like my shot of Earth?";
+
+            // This would be possible responses based on the contents of the post
+            mPossiblePostResponses = new CharSequence[]{"Yes", "No", "Maybe?"};
+
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Bob Smith");
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public int getBigImage() {
+            return mBigImage;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        public CharSequence[] getPossiblePostResponses() {
+            return mPossiblePostResponses;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getContentTitle() + " - " + getContentText();
+        }
+    }
+
+    /**
+     * Represents data needed for InboxStyle Notification.
+     */
+    public static class InboxStyleEmailAppData {
+        private static InboxStyleEmailAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+        private int mNumberOfNewEmails;
+
+        // Style notification values
+        private String mBigContentTitle;
+        private String mSummaryText;
+        private ArrayList<String> mIndividualEmailSummary;
+
+        private ArrayList<String> mParticipants;
+
+        public static InboxStyleEmailAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized InboxStyleEmailAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new InboxStyleEmailAppData();
+            }
+
+            return sInstance;
+        }
+
+        private InboxStyleEmailAppData() {
+            // Standard Notification values
+            // Title/Content for API <16 (4.0 and below) devices
+            mContentTitle = "5 new emails";
+            mContentText = "from Jane, Jay, Alex +2 more";
+            mNumberOfNewEmails = 5;
+
+            // Style notification values
+            mBigContentTitle = "5 new emails from Jane, Jay, Alex +2";
+            mSummaryText = "New emails";
+
+            // Add each summary line of the new emails, you can add up to 5
+            mIndividualEmailSummary = new ArrayList<>();
+            mIndividualEmailSummary.add("Jane Faab  -   Launch Party is here...");
+            mIndividualEmailSummary.add("Jay Walker -   There's a turtle on the server!");
+            mIndividualEmailSummary.add("Alex Chang -   Check this out...");
+            mIndividualEmailSummary.add("Jane Johns -   Check in code?");
+            mIndividualEmailSummary.add("John Smith -   Movies later....");
+
+            // If the phone is in "Do not disturb mode, the user will still be notified if
+            // the user(s) is starred as a favorite.
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Jane Faab");
+            mParticipants.add("Jay Walker");
+            mParticipants.add("Alex Chang");
+            mParticipants.add("Jane Johns");
+            mParticipants.add("John Smith");
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public int getNumberOfNewEmails() {
+            return mNumberOfNewEmails;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        public ArrayList<String> getIndividualEmailSummary() {
+            return mIndividualEmailSummary;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getContentTitle() + " " + getContentText();
+        }
+    }
+
+    /**
+     * Represents data needed for MessagingStyle Notification.
+     */
+    public static class MessagingStyleCommsAppData {
+
+        private static MessagingStyleCommsAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private ArrayList<MessagingStyle.Message> mMessages;
+        // Basically, String of all mMessages
+        private String mFullConversation;
+        // Name preferred when replying to chat
+        private String mReplayName;
+        private int mNumberOfNewMessages;
+        private ArrayList<String> mParticipants;
+
+        public static MessagingStyleCommsAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized MessagingStyleCommsAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new MessagingStyleCommsAppData();
+            }
+
+            return sInstance;
+        }
+
+        private MessagingStyleCommsAppData() {
+            // Standard notification values
+            // Content for API <24 (M and below) devices
+            mContentTitle = "2 Messages w/ Famous McFamously";
+            mContentText = "Dude! ... You know I am a Pesce-pescetarian. :P";
+
+            // Style notification values
+
+            // For each message, you need the timestamp, in this case, we are using arbitrary ones.
+            long currentTime = System.currentTimeMillis();
+
+            mMessages = new ArrayList<>();
+            mMessages.add(new MessagingStyle.Message(
+                    "What are you doing tonight?", currentTime - 4000, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "I don't know, dinner maybe?", currentTime - 3000, null));
+            mMessages.add(new MessagingStyle.Message(
+                    "Sounds good.", currentTime - 2000, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "How about BBQ?", currentTime - 1000, null));
+            // Last two are the newest message (2) from friend
+            mMessages.add(new MessagingStyle.Message(
+                    "Dude!", currentTime, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "You know I am a Pesce-pescetarian. :P", currentTime, "Famous"));
+
+
+            // String version of the mMessages above
+            mFullConversation = "Famous: What are you doing tonight?\n\n"
+                    + "Me: I don't know, dinner maybe?\n\n"
+                    + "Famous: Sounds good.\n\n"
+                    + "Me: How about BBQ?\n\n"
+                    + "Famous: Dude!\n\n"
+                    + "Famous: You know I am a Pesce-pescetarian. :P\n\n";
+
+            mNumberOfNewMessages = 2;
+
+            // Name preferred when replying to chat
+            mReplayName = "Me";
+
+            // If the phone is in "Do not disturb mode, the user will still be notified if
+            // the user(s) is starred as a favorite.
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Famous McFamously");
+
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public ArrayList<MessagingStyle.Message> getMessages() {
+            return mMessages;
+        }
+
+        public String getFullConversation() {
+            return mFullConversation;
+        }
+
+        public String getReplayName() {
+            return mReplayName;
+        }
+
+        public int getNumberOfNewMessages() {
+            return mNumberOfNewMessages;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getFullConversation();
+        }
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/earth.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/earth.png
new file mode 100644
index 0000000..13abd77
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/earth.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..75e5a46
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..dc32a14
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..0ed1b5f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..d921ba2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..f1e1484
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..cc732ba
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/tile.9.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/tile.9.png
new file mode 100644
index 0000000..1358628
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-hdpi/tile.9.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..280e09d
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..6ebbc83
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..2b6948a
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..2156f16
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..360a32f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..b336e2f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-mdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..aa8102f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..dc775b2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..d9b1348
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..185d613
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..1ebc37b
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..0424c2b
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xhdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..f665286
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..cf2822a
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..cb4f56f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..e710dee
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..77e3a18
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..eeb5d49
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxhdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..419f4bb
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..8bea844
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..77c9929
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..5456c42
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..6be3e30
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..de0dad2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/drawable-xxxhdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_big_picture_main.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_big_picture_main.xml
new file mode 100644
index 0000000..e86c462
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_big_picture_main.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context=".handlers.BigPictureSocialMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_big_picture_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+</RelativeLayout>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_big_text_main.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_big_text_main.xml
new file mode 100644
index 0000000..5b37603
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_big_text_main.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context=".handlers.BigTextMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_big_text_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_inbox_main.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_inbox_main.xml
new file mode 100644
index 0000000..0377b4a
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_inbox_main.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context=".handlers.InboxMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_inbox_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_main.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..c18e102
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_main.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2016 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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/mainRelativeLayout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context="com.example.android.wearable.wear.wearnotifications.MainActivity">
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Pick your Notification Style:"
+        android:id="@+id/spinnerHeadertextView"/>
+
+    <Spinner
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/spinner"
+        android:layout_below="@+id/spinnerHeadertextView"
+        android:paddingTop="@dimen/activity_vertical_margin"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"/>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/notificationDetails"
+        android:layout_below="@+id/spinner"
+        android:layout_alignParentStart="true"
+        android:layout_above="@+id/submit"
+        android:layout_alignEnd="@+id/spinner"
+        android:paddingTop="@dimen/activity_vertical_margin"/>
+
+    <Button
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Launch!"
+        android:onClick="onClick"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentStart="true"
+        android:id="@+id/submit"/>
+</RelativeLayout>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_messaging_main.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_messaging_main.xml
new file mode 100644
index 0000000..205b428
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/layout/activity_messaging_main.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context=".handlers.MessagingMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_messaging_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values-sw600dp/template-dimens.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-sw600dp/template-dimens.xml
new file mode 100644
index 0000000..22074a2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-sw600dp/template-dimens.xml
@@ -0,0 +1,24 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_huge</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values-sw600dp/template-styles.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-sw600dp/template-styles.xml
new file mode 100644
index 0000000..03d1974
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-sw600dp/template-styles.xml
@@ -0,0 +1,25 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceLarge</item>
+        <item name="android:lineSpacingMultiplier">1.2</item>
+        <item name="android:shadowDy">-6.5</item>
+    </style>
+
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v11/template-styles.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v11/template-styles.xml
new file mode 100644
index 0000000..8c1ea66
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v11/template-styles.xml
@@ -0,0 +1,22 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
+
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v21/base-colors.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v21/base-colors.xml
new file mode 100644
index 0000000..8b6ec3f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v21/base-colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v21/base-template-styles.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v21/base-template-styles.xml
new file mode 100644
index 0000000..c778e4f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-v21/base-template-styles.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
+
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values-w820dp/dimens.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-w820dp/dimens.xml
new file mode 100644
index 0000000..2a45ed8
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values-w820dp/dimens.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <!-- Example customization of dimensions originally defined in res/values/dimens.xml
+         (such as screen margins) for screens with more than 820dp of available width. This
+         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
+    <dimen name="activity_horizontal_margin">64dp</dimen>
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values/base-strings.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/base-strings.xml
new file mode 100644
index 0000000..5544289
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/base-strings.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+    <string name="app_name">Wear Notifications</string>
+    <string name="intro_message">
+        <![CDATA[
+        
+            
+            Sample demonstrates best practices for Notification Styles that support Android
+            phone/tablets and Android Wear. The phone app demonstrates best practices if you do not
+            have a dedicated Android Wear app for Notifications. While the Android Wear app
+            demonstrates best practices for a standalone Wear Notification experience without
+            the Notifications showing on the phone/tablet.
+            
+        
+        ]]>
+    </string>
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values/colors.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/colors.xml
new file mode 100644
index 0000000..752b74f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values/dimens.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..fcb2a42
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/dimens.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values/strings.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/strings.xml
new file mode 100644
index 0000000..ddd1641
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/strings.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+
+    <string name="reply_label">Reply</string>
+    <string name="reply_name">Me</string>
+
+    <string name="title_activity_big_text_main">BigTextStyle Main Activity</string>
+    <string name="title_activity_big_picture_main">BigPictureStyle Main Activity</string>
+    <string name="title_activity_inbox_main">InboxStyle Main Activity</string>
+    <string name="title_activity_messaging_main">MessagingStyle Main Activity</string>
+
+    <string name="main_text_activity_big_text_main">
+        This Activity would handle the reminder app\'s functionality.
+        \n\nThe notification type for this example was the Big Text Style!
+    </string>
+    <string name="main_text_activity_big_picture_main">
+        This Activity would handle the social app\'s functionality for an individual post.
+        \n\nThe notification type for this example was the Big Picture Style!
+    </string>
+    <string name="main_text_activity_inbox_main">
+        This Activity would handle the email app\'s functionality for an email(s).
+        \n\nThe notification type for this example was the Inbox Style!
+    </string>
+    <string name="main_text_activity_messaging_main">
+        This Activity would handle the messaging app\'s functionality for a chat(s).
+        \n\nThe notification type for this example was the Messaging Style!
+    </string>
+</resources>
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values/styles.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/styles.xml
new file mode 100644
index 0000000..6ea59e0
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/styles.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+
+    <style name="AppThemeOverride" parent="Theme.AppCompat.Light" />
+
+</resources>
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values/template-dimens.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/template-dimens.xml
new file mode 100644
index 0000000..39e710b
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/template-dimens.xml
@@ -0,0 +1,32 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
+
+    <dimen name="margin_tiny">4dp</dimen>
+    <dimen name="margin_small">8dp</dimen>
+    <dimen name="margin_medium">16dp</dimen>
+    <dimen name="margin_large">32dp</dimen>
+    <dimen name="margin_huge">64dp</dimen>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_medium</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Application/src/main/res/values/template-styles.xml b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/template-styles.xml
new file mode 100644
index 0000000..6e7d593
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Application/src/main/res/values/template-styles.xml
@@ -0,0 +1,42 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Activity themes -->
+
+    <style name="Theme.Base" parent="android:Theme.Light" />
+
+    <style name="Theme.Sample" parent="Theme.Base" />
+
+    <style name="AppTheme" parent="Theme.Sample" />
+    <!-- Widget styling -->
+
+    <style name="Widget" />
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceMedium</item>
+        <item name="android:lineSpacingMultiplier">1.1</item>
+    </style>
+
+    <style name="Widget.SampleMessageTile">
+        <item name="android:background">@drawable/tile</item>
+        <item name="android:shadowColor">#7F000000</item>
+        <item name="android:shadowDy">-3.5</item>
+        <item name="android:shadowRadius">2</item>
+    </style>
+
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/CONTRIBUTING.md b/prebuilts/gradle/WearNotifications/CONTRIBUTING.md
new file mode 100644
index 0000000..faa8b5c
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/CONTRIBUTING.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://cla.developers.google.com).
+  * 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://cla.developers.google.com).
+
+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/prebuilts/gradle/WearNotifications/LICENSE b/prebuilts/gradle/WearNotifications/LICENSE
new file mode 100644
index 0000000..4f22946
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/LICENSE
@@ -0,0 +1,647 @@
+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 {yyyy} {name of copyright owner}
+
+   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.
+
+All image and audio files (including *.png, *.jpg, *.svg, *.mp3, *.wav 
+and *.ogg) are licensed under the CC-BY-NC license. All other files are 
+licensed under the Apache 2 license.
+
+CC-BY-NC License
+----------------
+
+Attribution-NonCommercial-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+     Considerations for licensors: Our public licenses are
+     intended for use by those authorized to give the public
+     permission to use material in ways otherwise restricted by
+     copyright and certain other rights. Our licenses are
+     irrevocable. Licensors should read and understand the terms
+     and conditions of the license they choose before applying it.
+     Licensors should also secure all rights necessary before
+     applying our licenses so that the public can reuse the
+     material as expected. Licensors should clearly mark any
+     material not subject to the license. This includes other CC-
+     licensed material, or material used under an exception or
+     limitation to copyright. More considerations for licensors:
+	wiki.creativecommons.org/Considerations_for_licensors
+
+     Considerations for the public: By using one of our public
+     licenses, a licensor grants the public permission to use the
+     licensed material under specified terms and conditions. If
+     the licensor's permission is not necessary for any reason--for
+     example, because of any applicable exception or limitation to
+     copyright--then that use is not regulated by the license. Our
+     licenses grant only permissions under copyright and certain
+     other rights that a licensor has authority to grant. Use of
+     the licensed material may still be restricted for other
+     reasons, including because others have copyright or other
+     rights in the material. A licensor may make special requests,
+     such as asking that all changes be marked or described.
+     Although not required by our licenses, you are encouraged to
+     respect those requests where reasonable. More_considerations
+     for the public: 
+	wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
+Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution-NonCommercial-ShareAlike 4.0 International Public License
+("Public License"). To the extent this Public License may be
+interpreted as a contract, You are granted the Licensed Rights in
+consideration of Your acceptance of these terms and conditions, and the
+Licensor grants You such rights in consideration of benefits the
+Licensor receives from making the Licensed Material available under
+these terms and conditions.
+
+
+Section 1 -- Definitions.
+
+  a. Adapted Material means material subject to Copyright and Similar
+     Rights that is derived from or based upon the Licensed Material
+     and in which the Licensed Material is translated, altered,
+     arranged, transformed, or otherwise modified in a manner requiring
+     permission under the Copyright and Similar Rights held by the
+     Licensor. For purposes of this Public License, where the Licensed
+     Material is a musical work, performance, or sound recording,
+     Adapted Material is always produced where the Licensed Material is
+     synched in timed relation with a moving image.
+
+  b. Adapter's License means the license You apply to Your Copyright
+     and Similar Rights in Your contributions to Adapted Material in
+     accordance with the terms and conditions of this Public License.
+
+  c. BY-NC-SA Compatible License means a license listed at
+     creativecommons.org/compatiblelicenses, approved by Creative
+     Commons as essentially the equivalent of this Public License.
+
+  d. Copyright and Similar Rights means copyright and/or similar rights
+     closely related to copyright including, without limitation,
+     performance, broadcast, sound recording, and Sui Generis Database
+     Rights, without regard to how the rights are labeled or
+     categorized. For purposes of this Public License, the rights
+     specified in Section 2(b)(1)-(2) are not Copyright and Similar
+     Rights.
+
+  e. Effective Technological Measures means those measures that, in the
+     absence of proper authority, may not be circumvented under laws
+     fulfilling obligations under Article 11 of the WIPO Copyright
+     Treaty adopted on December 20, 1996, and/or similar international
+     agreements.
+
+  f. Exceptions and Limitations means fair use, fair dealing, and/or
+     any other exception or limitation to Copyright and Similar Rights
+     that applies to Your use of the Licensed Material.
+
+  g. License Elements means the license attributes listed in the name
+     of a Creative Commons Public License. The License Elements of this
+     Public License are Attribution, NonCommercial, and ShareAlike.
+
+  h. Licensed Material means the artistic or literary work, database,
+     or other material to which the Licensor applied this Public
+     License.
+
+  i. Licensed Rights means the rights granted to You subject to the
+     terms and conditions of this Public License, which are limited to
+     all Copyright and Similar Rights that apply to Your use of the
+     Licensed Material and that the Licensor has authority to license.
+
+  j. Licensor means the individual(s) or entity(ies) granting rights
+     under this Public License.
+
+  k. NonCommercial means not primarily intended for or directed towards
+     commercial advantage or monetary compensation. For purposes of
+     this Public License, the exchange of the Licensed Material for
+     other material subject to Copyright and Similar Rights by digital
+     file-sharing or similar means is NonCommercial provided there is
+     no payment of monetary compensation in connection with the
+     exchange.
+
+  l. Share means to provide material to the public by any means or
+     process that requires permission under the Licensed Rights, such
+     as reproduction, public display, public performance, distribution,
+     dissemination, communication, or importation, and to make material
+     available to the public including in ways that members of the
+     public may access the material from a place and at a time
+     individually chosen by them.
+
+  m. Sui Generis Database Rights means rights other than copyright
+     resulting from Directive 96/9/EC of the European Parliament and of
+     the Council of 11 March 1996 on the legal protection of databases,
+     as amended and/or succeeded, as well as other essentially
+     equivalent rights anywhere in the world.
+
+  n. You means the individual or entity exercising the Licensed Rights
+     under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+  a. License grant.
+
+       1. Subject to the terms and conditions of this Public License,
+          the Licensor hereby grants You a worldwide, royalty-free,
+          non-sublicensable, non-exclusive, irrevocable license to
+          exercise the Licensed Rights in the Licensed Material to:
+
+            a. reproduce and Share the Licensed Material, in whole or
+               in part, for NonCommercial purposes only; and
+
+            b. produce, reproduce, and Share Adapted Material for
+               NonCommercial purposes only.
+
+       2. Exceptions and Limitations. For the avoidance of doubt, where
+          Exceptions and Limitations apply to Your use, this Public
+          License does not apply, and You do not need to comply with
+          its terms and conditions.
+
+       3. Term. The term of this Public License is specified in Section
+          6(a).
+
+       4. Media and formats; technical modifications allowed. The
+          Licensor authorizes You to exercise the Licensed Rights in
+          all media and formats whether now known or hereafter created,
+          and to make technical modifications necessary to do so. The
+          Licensor waives and/or agrees not to assert any right or
+          authority to forbid You from making technical modifications
+          necessary to exercise the Licensed Rights, including
+          technical modifications necessary to circumvent Effective
+          Technological Measures. For purposes of this Public License,
+          simply making modifications authorized by this Section 2(a)
+          (4) never produces Adapted Material.
+
+       5. Downstream recipients.
+
+            a. Offer from the Licensor -- Licensed Material. Every
+               recipient of the Licensed Material automatically
+               receives an offer from the Licensor to exercise the
+               Licensed Rights under the terms and conditions of this
+               Public License.
+
+            b. Additional offer from the Licensor -- Adapted Material.
+               Every recipient of Adapted Material from You
+               automatically receives an offer from the Licensor to
+               exercise the Licensed Rights in the Adapted Material
+               under the conditions of the Adapter's License You apply.
+
+            c. No downstream restrictions. You may not offer or impose
+               any additional or different terms or conditions on, or
+               apply any Effective Technological Measures to, the
+               Licensed Material if doing so restricts exercise of the
+               Licensed Rights by any recipient of the Licensed
+               Material.
+
+       6. No endorsement. Nothing in this Public License constitutes or
+          may be construed as permission to assert or imply that You
+          are, or that Your use of the Licensed Material is, connected
+          with, or sponsored, endorsed, or granted official status by,
+          the Licensor or others designated to receive attribution as
+          provided in Section 3(a)(1)(A)(i).
+
+  b. Other rights.
+
+       1. Moral rights, such as the right of integrity, are not
+          licensed under this Public License, nor are publicity,
+          privacy, and/or other similar personality rights; however, to
+          the extent possible, the Licensor waives and/or agrees not to
+          assert any such rights held by the Licensor to the limited
+          extent necessary to allow You to exercise the Licensed
+          Rights, but not otherwise.
+
+       2. Patent and trademark rights are not licensed under this
+          Public License.
+
+       3. To the extent possible, the Licensor waives any right to
+          collect royalties from You for the exercise of the Licensed
+          Rights, whether directly or through a collecting society
+          under any voluntary or waivable statutory or compulsory
+          licensing scheme. In all other cases the Licensor expressly
+          reserves any right to collect such royalties, including when
+          the Licensed Material is used other than for NonCommercial
+          purposes.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+  a. Attribution.
+
+       1. If You Share the Licensed Material (including in modified
+          form), You must:
+
+            a. retain the following if it is supplied by the Licensor
+               with the Licensed Material:
+
+                 i. identification of the creator(s) of the Licensed
+                    Material and any others designated to receive
+                    attribution, in any reasonable manner requested by
+                    the Licensor (including by pseudonym if
+                    designated);
+
+                ii. a copyright notice;
+
+               iii. a notice that refers to this Public License;
+
+                iv. a notice that refers to the disclaimer of
+                    warranties;
+
+                 v. a URI or hyperlink to the Licensed Material to the
+                    extent reasonably practicable;
+
+            b. indicate if You modified the Licensed Material and
+               retain an indication of any previous modifications; and
+
+            c. indicate the Licensed Material is licensed under this
+               Public License, and include the text of, or the URI or
+               hyperlink to, this Public License.
+
+       2. You may satisfy the conditions in Section 3(a)(1) in any
+          reasonable manner based on the medium, means, and context in
+          which You Share the Licensed Material. For example, it may be
+          reasonable to satisfy the conditions by providing a URI or
+          hyperlink to a resource that includes the required
+          information.
+       3. If requested by the Licensor, You must remove any of the
+          information required by Section 3(a)(1)(A) to the extent
+          reasonably practicable.
+
+  b. ShareAlike.
+
+     In addition to the conditions in Section 3(a), if You Share
+     Adapted Material You produce, the following conditions also apply.
+
+       1. The Adapter's License You apply must be a Creative Commons
+          license with the same License Elements, this version or
+          later, or a BY-NC-SA Compatible License.
+
+       2. You must include the text of, or the URI or hyperlink to, the
+          Adapter's License You apply. You may satisfy this condition
+          in any reasonable manner based on the medium, means, and
+          context in which You Share Adapted Material.
+
+       3. You may not offer or impose any additional or different terms
+          or conditions on, or apply any Effective Technological
+          Measures to, Adapted Material that restrict exercise of the
+          rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+  a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+     to extract, reuse, reproduce, and Share all or a substantial
+     portion of the contents of the database for NonCommercial purposes
+     only;
+
+  b. if You include all or a substantial portion of the database
+     contents in a database in which You have Sui Generis Database
+     Rights, then the database in which You have Sui Generis Database
+     Rights (but not its individual contents) is Adapted Material,
+     including for purposes of Section 3(b); and
+
+  c. You must comply with the conditions in Section 3(a) if You Share
+     all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+  c. The disclaimer of warranties and limitation of liability provided
+     above shall be interpreted in a manner that, to the extent
+     possible, most closely approximates an absolute disclaimer and
+     waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+  a. This Public License applies for the term of the Copyright and
+     Similar Rights licensed here. However, if You fail to comply with
+     this Public License, then Your rights under this Public License
+     terminate automatically.
+
+  b. Where Your right to use the Licensed Material has terminated under
+     Section 6(a), it reinstates:
+
+       1. automatically as of the date the violation is cured, provided
+          it is cured within 30 days of Your discovery of the
+          violation; or
+
+       2. upon express reinstatement by the Licensor.
+
+     For the avoidance of doubt, this Section 6(b) does not affect any
+     right the Licensor may have to seek remedies for Your violations
+     of this Public License.
+
+  c. For the avoidance of doubt, the Licensor may also offer the
+     Licensed Material under separate terms or conditions or stop
+     distributing the Licensed Material at any time; however, doing so
+     will not terminate this Public License.
+
+  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+     License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+  a. The Licensor shall not be bound by any additional or different
+     terms or conditions communicated by You unless expressly agreed.
+
+  b. Any arrangements, understandings, or agreements regarding the
+     Licensed Material not stated herein are separate from and
+     independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+  a. For the avoidance of doubt, this Public License does not, and
+     shall not be interpreted to, reduce, limit, restrict, or impose
+     conditions on any use of the Licensed Material that could lawfully
+     be made without permission under this Public License.
+
+  b. To the extent possible, if any provision of this Public License is
+     deemed unenforceable, it shall be automatically reformed to the
+     minimum extent necessary to make it enforceable. If the provision
+     cannot be reformed, it shall be severed from this Public License
+     without affecting the enforceability of the remaining terms and
+     conditions.
+
+  c. No term or condition of this Public License will be waived and no
+     failure to comply consented to unless expressly agreed to by the
+     Licensor.
+
+  d. Nothing in this Public License constitutes or may be interpreted
+     as a limitation upon, or waiver of, any privileges and immunities
+     that apply to the Licensor or You, including from the legal
+     processes of any jurisdiction or authority.
+
+=======================================================================
+
+Creative Commons is not a party to its public licenses.
+Notwithstanding, Creative Commons may elect to apply one of its public
+licenses to material it publishes and in those instances will be
+considered the "Licensor." Except for the limited purpose of indicating
+that material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the public
+licenses.
+
+Creative Commons may be contacted at creativecommons.org.
+
diff --git a/prebuilts/gradle/WearNotifications/README.md b/prebuilts/gradle/WearNotifications/README.md
new file mode 100644
index 0000000..6533416
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/README.md
@@ -0,0 +1,94 @@
+
+Android Wear Notifications Sample
+===================================
+
+Sample demonstrates best practices for using NotificationStyle Notifications (Inbox,
+            BigPicture, BigText, and Messaging) for both Mobile apps and native/local Android Wear
+            apps. It also covers Notifications on Wear 1.+ and Wear 2.0.
+
+Introduction
+------------
+
+Steps for trying out the sample:
+            * Compile and install the mobile app onto your mobile device or emulator (for mobile
+            scenario).
+            * Compile and install the wearable app onto your Wear device or emulator (for Wear
+            scenario).
+
+            This sample demonstrate best practices for using [NotificationStyle][1]
+            [Notifications][2] for two scenarios:
+
+            1. Launching Notifications from a Mobile app WITHOUT a native Android Wear app.
+            Notifications appear both on mobile and Wear (bridged to appear like a local/native
+            Wear app).
+
+            2. Launching Notifications from a Native/Local Android Wear app. Notifications only
+            appear on Wear device.
+
+            The Mobile and Wear apps demonstrate [BigTextStyle][3], [BigPictureStyle][4],
+            [InboxStyle][5], and [MessagingStyle][6] Notifications.
+
+            Although there are two apps (Mobile and Wear) running, each should be looked at as a
+            separate experience. That is, neither app uses nor relies on the other.
+
+            They are packaged together simply to show both scenarios in one easy sample.
+
+            Both apps also cover the Notifications being displayed on Wear 1.+ and/or Wear 2.0 and
+            using some of the new features of Wear 2.0 (inline actions).
+
+            [1]: https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Style.html
+            [2]: https://developer.android.com/reference/android/support/v4/app/NotificationCompat.html
+            [3]: https://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigTextStyle.html
+            [4]: https://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigPictureStyle.html
+            [5]: https://developer.android.com/reference/android/support/v4/app/NotificationCompat.InboxStyle.html
+            [6]: https://developer.android.com/reference/android/support/v4/app/NotificationCompat.MessagingStyle.html
+
+Pre-requisites
+--------------
+
+- Android SDK 24
+- Android Build Tools v24.0.2
+- Android Support Repository
+
+Screenshots
+-------------
+
+<img src="screenshots/mobile-1.png" height="400" alt="Screenshot"/> <img src="screenshots/mobile-2.png" height="400" alt="Screenshot"/> <img src="screenshots/wear-1.png" height="400" alt="Screenshot"/> <img src="screenshots/wear-2.png" height="400" alt="Screenshot"/> 
+
+Getting Started
+---------------
+
+This sample uses the Gradle build system. To build this project, use the
+"gradlew build" command or use "Import Project" in Android Studio.
+
+Support
+-------
+
+- Google+ Community: https://plus.google.com/communities/105153134372062985968
+- Stack Overflow: http://stackoverflow.com/questions/tagged/android
+
+If you've found an error in this sample, please file an issue:
+https://github.com/googlesamples/android-Wear Notifications
+
+Patches are encouraged, and may be submitted by forking this project and
+submitting a pull request through GitHub. Please see CONTRIBUTING.md for more details.
+
+License
+-------
+
+Copyright 2016 The Android Open Source Project, Inc.
+
+Licensed to the Apache Software Foundation (ASF) under one or more contributor
+license agreements.  See the NOTICE file distributed with this work for
+additional information regarding copyright ownership.  The ASF licenses this
+file to you 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/prebuilts/gradle/WearNotifications/Wearable/build.gradle b/prebuilts/gradle/WearNotifications/Wearable/build.gradle
new file mode 100644
index 0000000..f5f2d59
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/build.gradle
@@ -0,0 +1,68 @@
+
+buildscript {
+    repositories {
+        jcenter()
+    }
+
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.1.3'
+    }
+}
+
+apply plugin: 'com.android.application'
+
+
+
+dependencies {
+
+    compile 'com.android.support:appcompat-v7:24.0.0'
+    compile 'com.android.support:design:24.0.0'
+
+    provided "com.google.android.wearable:wearable:1.0.0"
+
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
+
+    compile 'com.google.android.support:wearable:2.0.0-alpha3'
+
+}
+
+// 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 24
+
+    buildToolsVersion "24.0.2"
+
+    defaultConfig {
+        versionCode 1
+        versionName "1.0"
+
+        minSdkVersion 18
+
+        targetSdkVersion 24
+    }
+
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_1_7
+        targetCompatibility JavaVersion.VERSION_1_7
+    }
+
+    sourceSets {
+        main {
+            dirs.each { dir ->
+                java.srcDirs "src/${dir}/java"
+                res.srcDirs "src/${dir}/res"
+            }
+        }
+        androidTest.setRoot('tests')
+        androidTest.java.srcDirs = ['tests/src']
+
+    }
+}
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/AndroidManifest.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..9517656
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/AndroidManifest.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="com.example.android.wearable.wear.wearnotifications"
+          android:versionCode="1"
+          android:versionName="1.0">
+
+    <uses-feature android:name="android.hardware.type.watch"/>
+    <!-- Required for Always-on. -->
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+
+    <application android:allowBackup="true"
+                 android:icon="@mipmap/ic_launcher"
+                 android:label="@string/app_name"
+                 android:supportsRtl="true"
+                 android:theme="@android:style/Theme.DeviceDefault">
+
+        <!--
+        Important Note: Usually, you will want to disable bridging if you have a local/native
+        Android Wear app creating Notifications. In our case, we don't, as our sample shows both
+        Notifications launched from a Phone app (that needed to be bridged) and a Wear app.
+
+        To disable, create a meta-data tag here:
+
+        meta-data
+            name: com.google.android.wearable.notificationBridgeMode
+            value: NO_BRIDGING
+        -->
+
+        <!--If you want your app to run on pre-22, then set required to false -->
+        <uses-library android:name="com.google.android.wearable" android:required="false" />
+
+        <activity android:name=".StandaloneMainActivity"
+                  android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+
+        <activity
+            android:name=".handlers.BigTextMainActivity"
+            android:label="@string/title_activity_big_text_main"
+            android:taskAffinity="">
+        </activity>
+
+        <activity
+            android:name=".handlers.BigPictureSocialMainActivity"
+            android:label="@string/title_activity_big_picture_main"
+            android:taskAffinity="">
+        </activity>
+
+
+        <activity
+            android:name=".handlers.InboxMainActivity"
+            android:label="@string/title_activity_inbox_main"
+            android:taskAffinity="">
+        </activity>
+
+        <activity
+            android:name=".handlers.MessagingMainActivity"
+            android:label="@string/title_activity_messaging_main"
+            android:taskAffinity="">
+        </activity>
+
+        <service
+            android:name=".handlers.BigTextIntentService"
+            android:exported="false">
+        </service>
+
+        <service
+            android:name=".handlers.MessagingIntentService"
+            android:exported="false">
+        </service>
+
+        <service
+            android:name=".handlers.BigPictureSocialIntentService"
+            android:exported="false">
+        </service>
+    </application>
+</manifest>
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
new file mode 100644
index 0000000..4023fbb
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
@@ -0,0 +1,60 @@
+/*
+Copyright 2016 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.wear.wearnotifications;
+
+import android.support.v7.app.NotificationCompat;
+
+/**
+ * We use a Singleton for a global copy of the NotificationCompat.Builder to update active
+ * Notifications from other Services/Activities.
+ *
+ * You have two options for updating your notifications:
+ *
+ *  1. Use a new NotificationCompatBuilder to create the Notification. This approach requires you
+ *  to get *ALL* the information and pass it to the builder. We get all the information from a Mock
+ *  Database and this is the approach used in the MainActivity.
+ *
+ *  2. Use an existing NotificationCompatBuilder to create a Notification. This approach requires
+ *  you to store a reference to the original builder. The benefit is you only need the new/updated
+ *  information for an existing notification. We use this approach in the IntentService handlers to
+ *  update existing notifications.
+ *
+ *  IMPORTANT NOTE 1: You shouldn't save/modify the resulting Notification object using
+ *  its member variables and/or legacy APIs. If you want to retain anything from update
+ *  to update, retain the Builder as option 2 outlines.
+ *
+ *  IMPORTANT NOTE 2: If the global Notification Builder is lost because the process is killed, you
+ *  should have a way to recreate the Notification Builder from a persistent state. (We do this as
+ *  well in the sample, check the IntentServices.)
+ */
+public final class GlobalNotificationBuilder {
+
+    private static NotificationCompat.Builder sGlobalNotificationCompatBuilder = null;
+
+    /*
+     * Empty constructor - We don't initialize builder because we rely on a null state to let us
+     * know the Application's process was killed.
+     */
+    private GlobalNotificationBuilder() { }
+
+    public static void setNotificationCompatBuilderInstance (NotificationCompat.Builder builder) {
+        sGlobalNotificationCompatBuilder = builder;
+    }
+
+    public static NotificationCompat.Builder getNotificationCompatBuilderInstance(){
+        return sGlobalNotificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/StandaloneMainActivity.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/StandaloneMainActivity.java
new file mode 100644
index 0000000..a390aca
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/StandaloneMainActivity.java
@@ -0,0 +1,738 @@
+/*
+Copyright 2016 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.wear.wearnotifications;
+
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.design.widget.Snackbar;
+import android.support.v4.app.NotificationCompat.BigPictureStyle;
+import android.support.v4.app.NotificationCompat.BigTextStyle;
+import android.support.v4.app.NotificationCompat.InboxStyle;
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v7.app.NotificationCompat;
+import android.support.wearable.activity.WearableActivity;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.RelativeLayout;
+import android.widget.Spinner;
+
+import com.example.android.wearable.wear.wearnotifications.handlers.BigPictureSocialIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigPictureSocialMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigTextIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.BigTextMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.InboxMainActivity;
+import com.example.android.wearable.wear.wearnotifications.handlers.MessagingIntentService;
+import com.example.android.wearable.wear.wearnotifications.handlers.MessagingMainActivity;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * Demonstrates best practice for Notifications created by local standalone Android Wear apps. All
+ * Notification examples use Notification Styles.
+ */
+public class StandaloneMainActivity extends WearableActivity
+        implements AdapterView.OnItemSelectedListener {
+
+    private static final String TAG = "StandaloneMainActivity";
+
+    public static final int NOTIFICATION_ID = 888;
+
+    // Used for Notification Style array and switch statement for Spinner selection
+    private static final String BIG_TEXT_STYLE = "BIG_TEXT_STYLE";
+    private static final String BIG_PICTURE_STYLE = "BIG_PICTURE_STYLE";
+    private static final String INBOX_STYLE = "INBOX_STYLE";
+    private static final String MESSAGING_STYLE = "MESSAGING_STYLE";
+
+    // Collection of notification styles to back ArrayAdapter for Spinner
+    private static final String[] NOTIFICATION_STYLES =
+            {BIG_TEXT_STYLE, BIG_PICTURE_STYLE, INBOX_STYLE, MESSAGING_STYLE};
+
+    private NotificationManagerCompat mNotificationManagerCompat;
+
+    private int mSelectedNotification = 0;
+
+    // RelativeLayout is needed for SnackBars to alert users when Notifications are disabled for app
+    private RelativeLayout mMainRelativeLayout;
+    // TODO (jewalker): convert Spinner to WearableRecyclerView
+    private Spinner mSpinner;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Log.d(TAG, "onCreate()");
+
+        setContentView(R.layout.activity_main);
+        setAmbientEnabled();
+
+
+        mMainRelativeLayout = (RelativeLayout) findViewById(R.id.mainRelativeLayout);
+        mSpinner = (Spinner) findViewById(R.id.spinner);
+
+        mNotificationManagerCompat = NotificationManagerCompat.from(getApplicationContext());
+
+        // Create an ArrayAdapter using the string array and a default spinner layout
+        ArrayAdapter<CharSequence> adapter =
+                new ArrayAdapter(
+                        this,
+                        android.R.layout.simple_spinner_item,
+                        NOTIFICATION_STYLES);
+        // Specify the layout to use when the list of choices appears
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        // Apply the adapter to the spinner
+        mSpinner.setAdapter(adapter);
+        mSpinner.setOnItemSelectedListener(this);
+
+    }
+
+    @Override
+    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+        Log.d(TAG, "onItemSelected(): position: " + position + " id: " + id);
+
+        mSelectedNotification = position;
+    }
+    @Override
+    public void onNothingSelected(AdapterView<?> parent) {
+        // Required
+    }
+
+    public void onClick(View view) {
+
+        Log.d(TAG, "onClick()");
+
+        boolean areNotificationsEnabled = mNotificationManagerCompat.areNotificationsEnabled();
+
+        // TODO (jewalker): Verify this is required, can't find way to disable in Wear 2.0.
+        if (!areNotificationsEnabled) {
+            // Because the user took an action to create a notification, we create a prompt to let
+            // the user re-enable notifications for this application again.
+            Snackbar snackbar = Snackbar
+                    .make(
+                            mMainRelativeLayout,
+                            "You need to enable notifications for this app",
+                            Snackbar.LENGTH_LONG)
+                    .setAction("ENABLE", new View.OnClickListener() {
+                        @Override
+                        public void onClick(View view) {
+                            // Links to this app's notification settings
+                            openNotificationSettingsForApp();
+                        }
+                    });
+            snackbar.show();
+            return;
+        }
+
+        String notificationStyle = NOTIFICATION_STYLES[mSelectedNotification];
+
+        switch (notificationStyle) {
+            case BIG_TEXT_STYLE:
+                generateBigTextStyleNotification();
+                break;
+
+            case BIG_PICTURE_STYLE:
+                generateBigPictureStyleNotification();
+                break;
+
+            case INBOX_STYLE:
+                generateInboxStyleNotification();
+                break;
+
+            case MESSAGING_STYLE:
+                generateMessagingStyleNotification();
+                break;
+
+            default:
+                // continue below
+        }
+    }
+
+    /*
+     * Generates a BIG_TEXT_STYLE Notification that supports both Wear 1.+ and Wear 2.0.
+     *
+     * IMPORTANT NOTE:
+     * This method includes extra code to replicate Notification Styles behavior from Wear 1.+ and
+     * phones on Wear 2.0, i.e., the notification expands on click. To see the specific code in the
+     * method, search for "REPLICATE_NOTIFICATION_STYLE_CODE".
+     *
+     * Notification Styles behave slightly different on Wear 2.0 when they are launched by a
+     * native/local Wear app, i.e., they will NOT expand when the user taps them but will instead
+     * take the user directly into the local app for the richest experience. In contrast, a bridged
+     * Notification launched from the phone will expand with the style details (whether there is a
+     * local app or not).
+     *
+     * If you want to see the new behavior, please review the generateBigPictureStyleNotification()
+     * and generateMessagingStyleNotification() methods.
+     */
+    private void generateBigTextStyleNotification() {
+
+        Log.d(TAG, "generateBigTextStyleNotification()");
+
+        // Main steps for building a BIG_TEXT_STYLE notification:
+        //      0. Get your data
+        //      1. Build the BIG_TEXT_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Create additional Actions for the Notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigTextStyleReminderAppData bigTextStyleReminderAppData =
+                MockDatabase.getBigTextStyleData();
+
+        // 1. Build the BIG_TEXT_STYLE
+        BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle()
+                // Overrides ContentText in the big form of the template
+                .bigText(bigTextStyleReminderAppData.getBigText())
+                // Overrides ContentTitle in the big form of the template
+                .setBigContentTitle(bigTextStyleReminderAppData.getBigContentTitle())
+                // Summary line after the detail section in the big form of the template
+                // Note: To improve readability, don't overload the user with info. If Summary Text
+                // doesn't add critical information, you should skip it.
+                .setSummaryText(bigTextStyleReminderAppData.getSummaryText());
+
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, BigTextMainActivity.class);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 3. Create additional Actions (Intents) for the Notification
+
+        // In our case, we create two additional actions: a Snooze action and a Dismiss action.
+
+        // Snooze Action
+        Intent snoozeIntent = new Intent(this, BigTextIntentService.class);
+        snoozeIntent.setAction(BigTextIntentService.ACTION_SNOOZE);
+
+        PendingIntent snoozePendingIntent = PendingIntent.getService(this, 0, snoozeIntent, 0);
+        NotificationCompat.Action snoozeAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_alarm_white_48dp,
+                        "Snooze",
+                        snoozePendingIntent)
+                        .build();
+
+        // Dismiss Action
+        Intent dismissIntent = new Intent(this, BigTextIntentService.class);
+        dismissIntent.setAction(BigTextIntentService.ACTION_DISMISS);
+
+        PendingIntent dismissPendingIntent = PendingIntent.getService(this, 0, dismissIntent, 0);
+        NotificationCompat.Action dismissAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_cancel_white_48dp,
+                        "Dismiss",
+                        dismissPendingIntent)
+                        .build();
+
+
+        // 4. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. Later, we use the same global builder to get back the notification
+        // we built here for the snooze action, that is, canceling the notification and relaunching
+        // it several seconds later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        notificationCompatBuilder
+                // BIG_TEXT_STYLE sets title and content
+                .setStyle(bigTextStyle)
+                .setContentTitle(bigTextStyleReminderAppData.getContentTitle())
+                .setContentText(bigTextStyleReminderAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_alarm_white_48dp))
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                .setCategory(Notification.CATEGORY_REMINDER)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Shows content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PUBLIC)
+
+                // Adds additional actions specified above
+                .addAction(snoozeAction)
+                .addAction(dismissAction);
+
+        /* REPLICATE_NOTIFICATION_STYLE_CODE:
+         * You can replicate Notification Style functionality on Wear 2.0 (24+) by not setting the
+         * main content intent, that is, skipping the call setContentIntent(). However, you need to
+         * still allow the user to open the native Wear app from the Notification itself, so you
+         * add an action to launch the app.
+         */
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+
+            // Enables launching app in Wear 2.0 while keeping the old Notification Style behavior.
+            NotificationCompat.Action mainAction = new NotificationCompat.Action.Builder(
+                    R.drawable.ic_launcher,
+                    "Open",
+                    mainPendingIntent)
+                    .build();
+
+            notificationCompatBuilder.addAction(mainAction);
+
+        } else {
+            // Wear 1.+ still functions the same, so we set the main content intent.
+            notificationCompatBuilder.setContentIntent(mainPendingIntent);
+        }
+
+
+        Notification notification = notificationCompatBuilder.build();
+
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+
+        // Close app to demonstrate notification in steam.
+        finish();
+    }
+
+    /*
+     * Generates a BIG_PICTURE_STYLE Notification that supports both Wear 1.+ and Wear 2.0.
+     *
+     * This example Notification is a social post. It allows updating the notification with
+     * comments/responses via RemoteInput and the BigPictureSocialIntentService on 24+ (N+) and
+     * Android Wear devices.
+     *
+     * IMPORTANT NOTE:
+     * Notification Styles behave slightly different on Wear 2.0 when they are launched by a
+     * native/local Wear app, i.e., they will NOT expand when the user taps them but will instead
+     * take the user directly into the local app for the richest experience. In contrast, a bridged
+     * Notification launched from the phone will expand with the style details (whether there is a
+     * local app or not).
+     *
+     * If you want to enable an action on your Notification without launching the app, you can do so
+     * with the setHintDisplayActionInline() feature (shown below), but this only allows one action.
+     *
+     * If you wish to replicate the original experience of a bridged notification, please review the
+     * generateBigTextStyleNotification() method above to see how.
+     */
+    private void generateBigPictureStyleNotification() {
+
+        Log.d(TAG, "generateBigPictureStyleNotification()");
+
+        // Main steps for building a BIG_PICTURE_STYLE notification:
+        //      0. Get your data
+        //      1. Build the BIG_PICTURE_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigPictureStyleSocialAppData bigPictureStyleSocialAppData =
+                MockDatabase.getBigPictureStyleData();
+
+        // 1. Build the BIG_PICTURE_STYLE
+        BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle()
+                // Provides the bitmap for the BigPicture notification
+                .bigPicture(
+                        BitmapFactory.decodeResource(
+                                getResources(),
+                                bigPictureStyleSocialAppData.getBigImage()))
+                // Overrides ContentTitle in the big form of the template
+                .setBigContentTitle(bigPictureStyleSocialAppData.getBigContentTitle())
+                // Summary line after the detail section in the big form of the template
+                .setSummaryText(bigPictureStyleSocialAppData.getSummaryText());
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, BigPictureSocialMainActivity.class);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Set up a RemoteInput Action, so users can input (keyboard, drawing, voice) directly
+        // from the notification without entering the app.
+
+        // Create the RemoteInput.
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput =
+                new RemoteInput.Builder(BigPictureSocialIntentService.EXTRA_COMMENT)
+                        .setLabel(replyLabel)
+                        // List of quick response choices for any wearables paired with the phone
+                        .setChoices(bigPictureStyleSocialAppData.getPossiblePostResponses())
+                        .build();
+
+        // Create PendingIntent for service that handles input.
+        Intent replyIntent = new Intent(this, BigPictureSocialIntentService.class);
+        replyIntent.setAction(BigPictureSocialIntentService.ACTION_COMMENT);
+        PendingIntent replyActionPendingIntent = PendingIntent.getService(this, 0, replyIntent, 0);
+
+        // Enable action to appear inline on Wear 2.0 (24+). This means it will appear over the
+        // lower portion of the Notification for easy action (only possible for one action).
+        final NotificationCompat.Action.WearableExtender inlineActionForWear2 =
+                new NotificationCompat.Action.WearableExtender()
+                        .setHintDisplayActionInline(true)
+                        .setHintLaunchesActivity(false);
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_white_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        // Add WearableExtender to enable inline actions
+                        .extend(inlineActionForWear2)
+                        .build();
+
+        // 4. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. Later, we use the same global builder to get back the notification
+        // we built here for a comment on the post.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // Build notification
+        notificationCompatBuilder
+                // BIG_PICTURE_STYLE sets title and content
+                .setStyle(bigPictureStyle)
+                .setContentTitle(bigPictureStyleSocialAppData.getContentTitle())
+                .setContentText(bigPictureStyleSocialAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                .setSubText(Integer.toString(1))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_SOCIAL)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+                // Notifies system that the main launch intent is an Activity.
+                .extend(new NotificationCompat.WearableExtender()
+                        .setHintContentIntentLaunchesActivity(true));
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : bigPictureStyleSocialAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+
+        // Close app to demonstrate notification in steam.
+        finish();
+    }
+
+    /*
+     * Generates a INBOX_STYLE Notification that supports both Wear 1.+ and Wear 2.0.
+     */
+    private void generateInboxStyleNotification() {
+
+        Log.d(TAG, "generateInboxStyleNotification()");
+
+
+        // Main steps for building a INBOX_STYLE notification:
+        //      0. Get your data
+        //      1. Build the INBOX_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.InboxStyleEmailAppData inboxStyleEmailAppData =
+                MockDatabase.getInboxStyleData();
+
+        // 1. Build the INBOX_STYLE
+        InboxStyle inboxStyle = new NotificationCompat.InboxStyle()
+                // This title is slightly different than regular title, since I know INBOX_STYLE is
+                // available.
+                .setBigContentTitle(inboxStyleEmailAppData.getBigContentTitle())
+                .setSummaryText(inboxStyleEmailAppData.getSummaryText());
+
+        // Add each summary line of the new emails, you can add up to 5
+        for (String summary : inboxStyleEmailAppData.getIndividualEmailSummary()) {
+            inboxStyle.addLine(summary);
+        }
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, InboxMainActivity.class);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating a previous notification), we
+        // create a new Builder. However, we don't need to update this notification later, so we
+        // will not need to set a global builder for access to the notification later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // 4. Build and issue the notification
+        notificationCompatBuilder
+                // INBOX_STYLE sets title and content
+                .setStyle(inboxStyle)
+                .setContentTitle(inboxStyleEmailAppData.getContentTitle())
+                .setContentText(inboxStyleEmailAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // Sets large number at the right-hand side of the notification for Wear 1.+.
+                .setSubText(Integer.toString(inboxStyleEmailAppData.getNumberOfNewEmails()))
+
+                .setCategory(Notification.CATEGORY_EMAIL)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+                // Notifies system that the main launch intent is an Activity.
+                .extend(new NotificationCompat.WearableExtender()
+                        .setHintContentIntentLaunchesActivity(true));
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : inboxStyleEmailAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+
+        // Close app to demonstrate notification in steam.
+        finish();
+    }
+
+    /*
+     * Generates a MESSAGING_STYLE Notification that supports both Wear 1.+ and Wear 2.0. For
+     * devices on API level 24 (Wear 2.0) and after, displays MESSAGING_STYLE. Otherwise, displays
+     * a basic BIG_TEXT_STYLE.
+     *
+     * IMPORTANT NOTE:
+     * Notification Styles behave slightly different on Wear 2.0 when they are launched by a
+     * native/local Wear app, i.e., they will NOT expand when the user taps them but will instead
+     * take the user directly into the local app for the richest experience. In contrast, a bridged
+     * Notification launched from the phone will expand with the style details (whether there is a
+     * local app or not).
+     *
+     * If you want to enable an action on your Notification without launching the app, you can do so
+     * with the setHintDisplayActionInline() feature (shown below), but this only allows one action.
+     *
+     * If you wish to replicate the original experience of a bridged notification, please review the
+     * generateBigTextStyleNotification() method above to see how.
+     */
+    private void generateMessagingStyleNotification() {
+
+        Log.d(TAG, "generateMessagingStyleNotification()");
+
+        // Main steps for building a MESSAGING_STYLE notification:
+        //      0. Get your data
+        //      1. Build the MESSAGING_STYLE
+        //      2. Add support for Wear 1.+
+        //      3. Set up main Intent for notification
+        //      4. Set up RemoteInput (users can input directly from notification)
+        //      5. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData =
+                MockDatabase.getMessagingStyleData();
+
+        // 1. Build the Notification.Style (MESSAGING_STYLE)
+        String contentTitle = messagingStyleCommsAppData.getContentTitle();
+
+        MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getReplayName())
+                        // You could set a different title to appear when the messaging style
+                        // is supported on device (24+) if you wish. In our case, we use the same
+                        // title.
+                        .setConversationTitle(contentTitle);
+
+        // Adds all Messages
+        // Note: Messages include the text, timestamp, and sender
+        for (MessagingStyle.Message message : messagingStyleCommsAppData.getMessages()) {
+            messagingStyle.addMessage(message);
+        }
+
+
+        // 2. Add support for Wear 1.+
+
+        // Since Wear 1.0 doesn't support the MESSAGING_STYLE, we use the BIG_TEXT_STYLE, so all the
+        // text is visible.
+
+        // This is basically a toString() of all the Messages above.
+        String fullMessageForWearVersion1 = messagingStyleCommsAppData.getFullConversation();
+
+        Notification chatHistoryForWearV1 = new NotificationCompat.Builder(getApplicationContext())
+                .setStyle(new BigTextStyle().bigText(fullMessageForWearVersion1))
+                .setContentTitle(contentTitle)
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setContentText(fullMessageForWearVersion1)
+                .build();
+
+        // Adds page with all text to support Wear 1.+.
+        NotificationCompat.WearableExtender wearableExtenderForWearVersion1 =
+                new NotificationCompat.WearableExtender()
+                        .setHintContentIntentLaunchesActivity(true)
+                        .addPage(chatHistoryForWearV1);
+
+        // 3. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, MessagingMainActivity.class);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 4. Set up a RemoteInput Action, so users can input (keyboard, drawing, voice) directly
+        // from the notification without entering the app.
+
+        // Create the RemoteInput specifying this key.
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
+                .setLabel(replyLabel)
+                .build();
+
+        // Create PendingIntent for service that handles input.
+        Intent replyIntent = new Intent(this, MessagingIntentService.class);
+        replyIntent.setAction(MessagingIntentService.ACTION_REPLY);
+        PendingIntent replyActionPendingIntent = PendingIntent.getService(this, 0, replyIntent, 0);
+
+        // Enable action to appear inline on Wear 2.0 (24+). This means it will appear over the
+        // lower portion of the Notification for easy action (only possible for one action).
+        final NotificationCompat.Action.WearableExtender inlineActionForWear2 =
+                new NotificationCompat.Action.WearableExtender()
+                        .setHintDisplayActionInline(true)
+                        .setHintLaunchesActivity(false);
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_white_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        // Allows system to generate replies by context of conversation
+                        .setAllowGeneratedReplies(true)
+                        // Add WearableExtender to enable inline actions
+                        .extend(inlineActionForWear2)
+                        .build();
+
+
+        // 5. Build and issue the notification
+
+        // Because we want this to be a new notification (not updating current notification), we
+        // create a new Builder. Later, we update this same notification, so we need to save this
+        // Builder globally (as outlined earlier).
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // Builds and issues notification
+        notificationCompatBuilder
+                // MESSAGING_STYLE sets title and content for API 24+ (Wear 2.0) devices
+                .setStyle(messagingStyle)
+                // Title for API <24 (Wear 1.+) devices
+                .setContentTitle(contentTitle)
+                // Content for API <24 (Wear 1.+) devices
+                .setContentText(messagingStyleCommsAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                // Set primary color (important for Wear 2.0 Notifications)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+
+                // Number of new notifications for API <24 (Wear 1.+) devices
+                .setSubText(Integer.toString(messagingStyleCommsAppData.getNumberOfNewMessages()))
+
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_MESSAGE)
+                .setPriority(Notification.PRIORITY_HIGH)
+
+                // Hides content on the lock-screen
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+
+                // Adds multiple pages for easy consumption on a wear device.
+                .extend(wearableExtenderForWearVersion1);
+
+        // If the phone is in "Do not disturb mode, the user will still be notified if
+        // the sender(s) is starred as a favorite.
+        for (String name : messagingStyleCommsAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        Notification notification = notificationCompatBuilder.build();
+        mNotificationManagerCompat.notify(NOTIFICATION_ID, notification);
+
+        // Close app to demonstrate notification in steam.
+        finish();
+    }
+
+    /**
+     * Helper method for the SnackBar action, i.e., if the user has this application's notifications
+     * disabled, this opens up the dialog to turn them back on after the user requests a
+     * Notification launch.
+     *
+     * IMPORTANT NOTE: You should not do this action unless the user takes an action to see your
+     * Notifications like this sample demonstrates. Spamming users to re-enable your notifications
+     * is a bad idea.
+     */
+    private void openNotificationSettingsForApp() {
+        // Links to this app's notification settings
+        Intent intent = new Intent();
+        intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
+        intent.putExtra("app_package", getPackageName());
+        intent.putExtra("app_uid", getApplicationInfo().uid);
+        startActivity(intent);
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
new file mode 100644
index 0000000..d49210c
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
@@ -0,0 +1,228 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat.BigPictureStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * Asynchronously handles updating social app posts (and active Notification) with comments from
+ * user. Notification for social app use BigPictureStyle.
+ */
+public class BigPictureSocialIntentService extends IntentService {
+
+    private static final String TAG = "BigPictureService";
+
+    public static final String ACTION_COMMENT =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.COMMENT";
+
+    public static final String EXTRA_COMMENT =
+            "com.example.android.wearable.wear.wearnotifications.handlers.extra.COMMENT";
+
+    public BigPictureSocialIntentService() {
+        super("BigPictureSocialIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_COMMENT.equals(action)) {
+                handleActionComment(getMessage(intent));
+            }
+        }
+    }
+
+    /**
+     * Handles action for adding a comment from the notification.
+     */
+    private void handleActionComment(CharSequence comment) {
+        Log.d(TAG, "handleActionComment(): " + comment);
+
+        if (comment != null) {
+
+            // TODO: Asynchronously save your message to Database and servers.
+
+            /*
+             * You have two options for updating your notification (this class uses approach #2):
+             *
+             *  1. Use a new NotificationCompatBuilder to create the Notification. This approach
+             *  requires you to get *ALL* the information that existed in the previous
+             *  Notification (and updates) and pass it to the builder. This is the approach used in
+             *  the MainActivity.
+             *
+             *  2. Use the original NotificationCompatBuilder to create the Notification. This
+             *  approach requires you to store a reference to the original builder. The benefit is
+             *  you only need the new/updated information. In our case, the comment from the user
+             *  regarding the post (which we already have here).
+             *
+             *  IMPORTANT NOTE: You shouldn't save/modify the resulting Notification object using
+             *  its member variables and/or legacy APIs. If you want to retain anything from update
+             *  to update, retain the Builder as option 2 outlines.
+             */
+
+            // Retrieves NotificationCompat.Builder used to create initial Notification
+            NotificationCompat.Builder notificationCompatBuilder =
+                    GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+            // Recreate builder from persistent state if app process is killed
+            if (notificationCompatBuilder == null) {
+                // Note: New builder set globally in the method
+                notificationCompatBuilder = recreateBuilderWithBigPictureStyle();
+            }
+
+            // Updates active Notification
+            Notification updatedNotification = notificationCompatBuilder
+                    // Adds a line and comment below content in Notification
+                    .setRemoteInputHistory(new CharSequence[]{comment})
+                    .build();
+
+            // Pushes out the updated Notification
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+            notificationManagerCompat.notify(
+                    StandaloneMainActivity.NOTIFICATION_ID,
+                    updatedNotification);
+        }
+    }
+
+    /*
+     * Extracts CharSequence created from the RemoteInput associated with the Notification.
+     */
+    private CharSequence getMessage(Intent intent) {
+        Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+        if (remoteInput != null) {
+            return remoteInput.getCharSequence(EXTRA_COMMENT);
+        }
+        return null;
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from StandaloneMainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithBigPictureStyle() {
+
+        // Main steps for building a BIG_PICTURE_STYLE notification (for more detailed comments on
+        // building this notification, check StandaloneMainActivity.java):
+        //      0. Get your data
+        //      1. Build the BIG_PICTURE_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Set up RemoteInput, so users can input (keyboard and voice) from notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigPictureStyleSocialAppData bigPictureStyleSocialAppData =
+                MockDatabase.getBigPictureStyleData();
+
+        // 1. Build the BIG_PICTURE_STYLE
+        BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle()
+                .bigPicture(
+                        BitmapFactory.decodeResource(
+                                getResources(),
+                                bigPictureStyleSocialAppData.getBigImage()))
+                .setBigContentTitle(bigPictureStyleSocialAppData.getBigContentTitle())
+                .setSummaryText(bigPictureStyleSocialAppData.getSummaryText());
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, BigPictureSocialMainActivity.class);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+        // 3. Set up a RemoteInput Action, so users can input (keyboard, drawing, voice) directly
+        // from the notification without entering the app.
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput =
+                new RemoteInput.Builder(BigPictureSocialIntentService.EXTRA_COMMENT)
+                        .setLabel(replyLabel)
+                        .setChoices(bigPictureStyleSocialAppData.getPossiblePostResponses())
+                        .build();
+
+        Intent replyIntent = new Intent(this, BigPictureSocialIntentService.class);
+        replyIntent.setAction(BigPictureSocialIntentService.ACTION_COMMENT);
+        PendingIntent replyActionPendingIntent = PendingIntent.getService(this, 0, replyIntent, 0);
+
+        // Enable action to appear inline on Wear 2.0 (24+). This means it will appear over the
+        // lower portion of the Notification for easy action (only possible for one action).
+        final NotificationCompat.Action.WearableExtender inlineActionForWear2 =
+                new NotificationCompat.Action.WearableExtender()
+                        .setHintDisplayActionInline(true)
+                        .setHintLaunchesActivity(false);
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_white_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        // Add WearableExtender to enable inline actions
+                        .extend(inlineActionForWear2)
+                        .build();
+
+        // 4. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // Build notification
+        notificationCompatBuilder
+                .setStyle(bigPictureStyle)
+                .setContentTitle(bigPictureStyleSocialAppData.getContentTitle())
+                .setContentText(bigPictureStyleSocialAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setSubText(Integer.toString(1))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_SOCIAL)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+                .extend(new NotificationCompat.WearableExtender()
+                        .setHintContentIntentLaunchesActivity(true));
+
+        for (String name : bigPictureStyleSocialAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java
new file mode 100644
index 0000000..27dae1e
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
+
+/**
+ * Template class meant to include functionality for your Social App. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class BigPictureSocialMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_big_picture_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(StandaloneMainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display social post from your database
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
new file mode 100644
index 0000000..67e92a7
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
@@ -0,0 +1,227 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Build;
+import android.support.v4.app.NotificationCompat.BigTextStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Asynchronously handles snooze and dismiss actions for reminder app (and active Notification).
+ * Notification for for reminder app uses BigTextStyle.
+ */
+public class BigTextIntentService extends IntentService {
+
+    private static final String TAG = "BigTextService";
+
+    public static final String ACTION_DISMISS =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.DISMISS";
+    public static final String ACTION_SNOOZE =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.SNOOZE";
+
+    private static final long SNOOZE_TIME = TimeUnit.SECONDS.toMillis(5);
+
+    public BigTextIntentService() {
+        super("BigTextIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_DISMISS.equals(action)) {
+                handleActionDismiss();
+            } else if (ACTION_SNOOZE.equals(action)) {
+                handleActionSnooze();
+            }
+        }
+    }
+
+    /**
+     * Handles action Dismiss in the provided background thread.
+     */
+    private void handleActionDismiss() {
+        Log.d(TAG, "handleActionDismiss()");
+
+        NotificationManagerCompat notificationManagerCompat =
+                NotificationManagerCompat.from(getApplicationContext());
+        notificationManagerCompat.cancel(StandaloneMainActivity.NOTIFICATION_ID);
+    }
+
+    /**
+     * Handles action Snooze in the provided background thread.
+     */
+    private void handleActionSnooze() {
+        Log.d(TAG, "handleActionSnooze()");
+
+        // You could use NotificationManager.getActiveNotifications() if you are targeting SDK 23
+        // and above, but we are targeting devices with lower SDK API numbers, so we saved the
+        // builder globally and get the notification back to recreate it later.
+
+        NotificationCompat.Builder notificationCompatBuilder =
+                GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+        // Recreate builder from persistent state if app process is killed
+        if (notificationCompatBuilder == null) {
+            // Note: New builder set globally in the method
+            notificationCompatBuilder = recreateBuilderWithBigTextStyle();
+        }
+
+        Notification notification;
+        notification = notificationCompatBuilder.build();
+
+
+        if (notification != null) {
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+
+            notificationManagerCompat.cancel(StandaloneMainActivity.NOTIFICATION_ID);
+
+            try {
+                Thread.sleep(SNOOZE_TIME);
+            } catch (InterruptedException ex) {
+                Thread.currentThread().interrupt();
+            }
+            notificationManagerCompat.notify(StandaloneMainActivity.NOTIFICATION_ID, notification);
+        }
+
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from StandaloneMainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithBigTextStyle() {
+
+        // Main steps for building a BIG_TEXT_STYLE notification (for more detailed comments on
+        // building this notification, check StandaloneMainActivity.java)::
+        //      0. Get your data
+        //      1. Build the BIG_TEXT_STYLE
+        //      2. Set up main Intent for notification
+        //      3. Create additional Actions for the Notification
+        //      4. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.BigTextStyleReminderAppData bigTextStyleReminderAppData =
+                MockDatabase.getBigTextStyleData();
+
+        // 1. Build the BIG_TEXT_STYLE
+        BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle()
+                .bigText(bigTextStyleReminderAppData.getBigText())
+                .setBigContentTitle(bigTextStyleReminderAppData.getBigContentTitle())
+                .setSummaryText(bigTextStyleReminderAppData.getSummaryText());
+
+
+        // 2. Set up main Intent for notification
+        Intent mainIntent = new Intent(this, BigTextMainActivity.class);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        mainIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 3. Create additional Actions (Intents) for the Notification
+        // Snooze Action
+        Intent snoozeIntent = new Intent(this, BigTextIntentService.class);
+        snoozeIntent.setAction(BigTextIntentService.ACTION_SNOOZE);
+
+        PendingIntent snoozePendingIntent = PendingIntent.getService(this, 0, snoozeIntent, 0);
+        NotificationCompat.Action snoozeAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_alarm_white_48dp,
+                        "Snooze",
+                        snoozePendingIntent)
+                        .build();
+
+        // Dismiss Action
+        Intent dismissIntent = new Intent(this, BigTextIntentService.class);
+        dismissIntent.setAction(BigTextIntentService.ACTION_DISMISS);
+
+        PendingIntent dismissPendingIntent = PendingIntent.getService(this, 0, dismissIntent, 0);
+        NotificationCompat.Action dismissAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_cancel_white_48dp,
+                        "Dismiss",
+                        dismissPendingIntent)
+                        .build();
+
+
+        // 4. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        notificationCompatBuilder
+                .setStyle(bigTextStyle)
+                .setContentTitle(bigTextStyleReminderAppData.getContentTitle())
+                .setContentText(bigTextStyleReminderAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_alarm_white_48dp))
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setCategory(Notification.CATEGORY_REMINDER)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PUBLIC)
+                .addAction(snoozeAction)
+                .addAction(dismissAction);
+
+        /* REPLICATE_NOTIFICATION_STYLE_CODE:
+         * You can replicate Notification Style functionality on Wear 2.0 (24+) by not setting the
+         * main content intent, that is, skipping the call setContentIntent(). However, you need to
+         * still allow the user to open the native Wear app from the Notification itself, so you
+         * add an action to launch the app.
+         */
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+
+            // Enables launching app in Wear 2.0 while keeping the old Notification Style behavior.
+            NotificationCompat.Action mainAction = new NotificationCompat.Action.Builder(
+                    R.drawable.ic_launcher,
+                    "Open",
+                    mainPendingIntent)
+                    .build();
+
+            notificationCompatBuilder.addAction(mainAction);
+
+        } else {
+            // Wear 1.+ still functions the same, so we set the main content intent.
+            notificationCompatBuilder.setContentIntent(mainPendingIntent);
+        }
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java
new file mode 100644
index 0000000..fb0b40e
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
+
+/**
+ * Template class meant to include functionality for your Reminder/Alarm App. (This project's main
+ * focus is on Notification Styles.)
+ */
+public class BigTextMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_big_text_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(StandaloneMainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display reminder from your database
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java
new file mode 100644
index 0000000..0724015
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/InboxMainActivity.java
@@ -0,0 +1,45 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
+
+/**
+ * Template class meant to include functionality for your email app. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class InboxMainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_inbox_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(StandaloneMainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display email from your database
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
new file mode 100644
index 0000000..2268cfc
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
@@ -0,0 +1,259 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.IntentService;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.Intent;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+import android.support.v4.app.NotificationManagerCompat;
+import android.support.v4.app.RemoteInput;
+import android.support.v7.app.NotificationCompat;
+import android.util.Log;
+
+import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
+import com.example.android.wearable.wear.wearnotifications.mock.MockDatabase;
+
+/**
+ * Asynchronously handles updating messaging app posts (and active Notification) with replies from
+ * user in a conversation. Notification for social app use MessagingStyle.
+ */
+public class MessagingIntentService extends IntentService {
+
+    private static final String TAG = "MessagingIntentService";
+
+    public static final String ACTION_REPLY =
+            "com.example.android.wearable.wear.wearnotifications.handlers.action.REPLY";
+
+    public static final String EXTRA_REPLY =
+            "com.example.android.wearable.wear.wearnotifications.handlers.extra.REPLY";
+
+
+    public MessagingIntentService() {
+        super("MessagingIntentService");
+    }
+
+    @Override
+    protected void onHandleIntent(Intent intent) {
+        Log.d(TAG, "onHandleIntent(): " + intent);
+
+        if (intent != null) {
+            final String action = intent.getAction();
+            if (ACTION_REPLY.equals(action)) {
+                handleActionReply(getMessage(intent));
+            }
+        }
+    }
+
+    /**
+     * Handles action for replying to messages from the notification.
+     */
+    private void handleActionReply(CharSequence replyCharSequence) {
+        Log.d(TAG, "handleActionReply(): " + replyCharSequence);
+
+        if (replyCharSequence != null) {
+
+            // TODO: Asynchronously save your message to Database and servers.
+
+            /*
+             * You have two options for updating your notification (this class uses approach #2):
+             *
+             *  1. Use a new NotificationCompatBuilder to create the Notification. This approach
+             *  requires you to get *ALL* the information that existed in the previous
+             *  Notification (and updates) and pass it to the builder. This is the approach used in
+             *  the MainActivity.
+             *
+             *  2. Use the original NotificationCompatBuilder to create the Notification. This
+             *  approach requires you to store a reference to the original builder. The benefit is
+             *  you only need the new/updated information. In our case, the reply from the user
+             *  which we already have here.
+             *
+             *  IMPORTANT NOTE: You shouldn't save/modify the resulting Notification object using
+             *  its member variables and/or legacy APIs. If you want to retain anything from update
+             *  to update, retain the Builder as option 2 outlines.
+             */
+
+            // Retrieves NotificationCompat.Builder used to create initial Notification
+            NotificationCompat.Builder notificationCompatBuilder =
+                    GlobalNotificationBuilder.getNotificationCompatBuilderInstance();
+
+            // Recreate builder from persistent state if app process is killed
+            if (notificationCompatBuilder == null) {
+                // Note: New builder set globally in the method
+                notificationCompatBuilder = recreateBuilderWithMessagingStyle();
+            }
+
+
+            // Since we are adding to the MessagingStyle, we need to first retrieve the
+            // current MessagingStyle from the Notification itself.
+            Notification notification = notificationCompatBuilder.build();
+            MessagingStyle messagingStyle =
+                    NotificationCompat.MessagingStyle
+                            .extractMessagingStyleFromNotification(notification);
+
+            // Add new message to the MessagingStyle
+            messagingStyle.addMessage(replyCharSequence, System.currentTimeMillis(), null);
+
+            // Updates the Notification
+            notification = notificationCompatBuilder
+                    .setStyle(messagingStyle)
+                    .build();
+
+            // Pushes out the updated Notification
+            NotificationManagerCompat notificationManagerCompat =
+                    NotificationManagerCompat.from(getApplicationContext());
+            notificationManagerCompat.notify(StandaloneMainActivity.NOTIFICATION_ID, notification);
+        }
+    }
+
+    /*
+     * Extracts CharSequence created from the RemoteInput associated with the Notification.
+     */
+    private CharSequence getMessage(Intent intent) {
+        Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
+        if (remoteInput != null) {
+            return remoteInput.getCharSequence(EXTRA_REPLY);
+        }
+        return null;
+    }
+
+    /*
+     * This recreates the notification from the persistent state in case the app process was killed.
+     * It is basically the same code for creating the Notification from MainActivity.
+     */
+    private NotificationCompat.Builder recreateBuilderWithMessagingStyle() {
+
+        // Main steps for building a MESSAGING_STYLE notification (for more detailed comments on
+        // building this notification, check StandaloneMainActivity.java)::
+        //      0. Get your data
+        //      1. Build the MESSAGING_STYLE
+        //      2. Add support for Wear 1.+
+        //      3. Set up main Intent for notification
+        //      4. Set up RemoteInput (users can input directly from notification)
+        //      5. Build and issue the notification
+
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData =
+                MockDatabase.getMessagingStyleData();
+
+        // 1. Build the Notification.Style (MESSAGING_STYLE)
+        String contentTitle = messagingStyleCommsAppData.getContentTitle();
+
+        MessagingStyle messagingStyle =
+                new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getReplayName())
+                        .setConversationTitle(contentTitle);
+
+        // Adds all Messages
+        for (MessagingStyle.Message message : messagingStyleCommsAppData.getMessages()) {
+            messagingStyle.addMessage(message);
+        }
+
+
+        // 2. Add support for Wear 1.+.
+        String fullMessageForWearVersion1 = messagingStyleCommsAppData.getFullConversation();
+
+        Notification chatHistoryForWearV1 = new NotificationCompat.Builder(getApplicationContext())
+                .setStyle(new NotificationCompat.BigTextStyle().bigText(fullMessageForWearVersion1))
+                .setContentTitle(contentTitle)
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setContentText(fullMessageForWearVersion1)
+                .build();
+
+        // Adds page with all text to support Wear 1.+.
+        NotificationCompat.WearableExtender wearableExtenderForWearVersion1 =
+                new NotificationCompat.WearableExtender()
+                        .setHintContentIntentLaunchesActivity(true)
+                        .addPage(chatHistoryForWearV1);
+
+        // 3. Set up main Intent for notification
+        Intent notifyIntent = new Intent(this, MessagingMainActivity.class);
+
+        PendingIntent mainPendingIntent =
+                PendingIntent.getActivity(
+                        this,
+                        0,
+                        notifyIntent,
+                        PendingIntent.FLAG_UPDATE_CURRENT
+                );
+
+
+        // 4. Set up a RemoteInput Action, so users can input (keyboard, drawing, voice) directly
+        // from the notification without entering the app.
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
+                .setLabel(replyLabel)
+                .build();
+
+        Intent replyIntent = new Intent(this, MessagingIntentService.class);
+        replyIntent.setAction(MessagingIntentService.ACTION_REPLY);
+        PendingIntent replyActionPendingIntent = PendingIntent.getService(this, 0, replyIntent, 0);
+
+        // Enable action to appear inline on Wear 2.0 (24+). This means it will appear over the
+        // lower portion of the Notification for easy action (only possible for one action).
+        final NotificationCompat.Action.WearableExtender inlineActionForWear2_0 =
+                new NotificationCompat.Action.WearableExtender()
+                        .setHintDisplayActionInline(true)
+                        .setHintLaunchesActivity(false);
+
+        NotificationCompat.Action replyAction =
+                new NotificationCompat.Action.Builder(
+                        R.drawable.ic_reply_white_18dp,
+                        replyLabel,
+                        replyActionPendingIntent)
+                        .addRemoteInput(remoteInput)
+                        // Allows system to generate replies by context of conversation
+                        .setAllowGeneratedReplies(true)
+                        // Add WearableExtender to enable inline actions
+                        .extend(inlineActionForWear2_0)
+                        .build();
+
+
+        // 5. Build and issue the notification
+        NotificationCompat.Builder notificationCompatBuilder =
+                new NotificationCompat.Builder(getApplicationContext());
+
+        GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
+
+        // Builds and issues notification
+        notificationCompatBuilder
+                .setStyle(messagingStyle)
+                .setContentTitle(contentTitle)
+                .setContentText(messagingStyleCommsAppData.getContentText())
+                .setSmallIcon(R.drawable.ic_launcher)
+                .setLargeIcon(BitmapFactory.decodeResource(
+                        getResources(),
+                        R.drawable.ic_person_black_48dp))
+                .setContentIntent(mainPendingIntent)
+                .setColor(getResources().getColor(R.color.colorPrimary))
+                .setSubText(Integer.toString(messagingStyleCommsAppData.getNumberOfNewMessages()))
+                .addAction(replyAction)
+                .setCategory(Notification.CATEGORY_MESSAGE)
+                .setPriority(Notification.PRIORITY_HIGH)
+                .setVisibility(Notification.VISIBILITY_PRIVATE)
+                .extend(wearableExtenderForWearVersion1);
+
+        for (String name : messagingStyleCommsAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name);
+        }
+
+        return notificationCompatBuilder;
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
new file mode 100644
index 0000000..5454c79
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
@@ -0,0 +1,47 @@
+/*
+Copyright 2016 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.wear.wearnotifications.handlers;
+
+import android.app.Activity;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.os.Bundle;
+
+import com.example.android.wearable.wear.wearnotifications.R;
+import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
+
+/**
+ * Template class meant to include functionality for your Messaging App. (This project's main focus
+ * is on Notification Styles.)
+ */
+public class MessagingMainActivity extends Activity {
+
+    private static final String TAG = "MessagingMainActivity";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_messaging_main);
+
+        // Cancel Notification
+        NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+        notificationManager.cancel(StandaloneMainActivity.NOTIFICATION_ID);
+
+        // TODO: Handle and display message/conversation from your database
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java
new file mode 100644
index 0000000..b552f6d
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/mock/MockDatabase.java
@@ -0,0 +1,400 @@
+package com.example.android.wearable.wear.wearnotifications.mock;
+
+import android.support.v4.app.NotificationCompat.MessagingStyle;
+
+import com.example.android.wearable.wear.wearnotifications.R;
+
+import java.util.ArrayList;
+
+/**
+ * Mock data for each of the Notification Style Demos.
+ */
+public final class MockDatabase {
+
+    public static BigTextStyleReminderAppData getBigTextStyleData() {
+        return BigTextStyleReminderAppData.getInstance();
+    }
+
+    public static BigPictureStyleSocialAppData getBigPictureStyleData() {
+        return BigPictureStyleSocialAppData.getInstance();
+    }
+
+    public static InboxStyleEmailAppData getInboxStyleData() {
+        return InboxStyleEmailAppData.getInstance();
+    }
+
+    public static MessagingStyleCommsAppData getMessagingStyleData() {
+        return MessagingStyleCommsAppData.getInstance();
+    }
+
+    /**
+     * Represents data needed for BigTextStyle Notification.
+     */
+    public static class BigTextStyleReminderAppData {
+
+        private static BigTextStyleReminderAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private String mBigContentTitle;
+        private String mBigText;
+        private String mSummaryText;
+
+
+        public static BigTextStyleReminderAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+
+            return sInstance;
+        }
+
+        private static synchronized BigTextStyleReminderAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new BigTextStyleReminderAppData();
+            }
+
+            return sInstance;
+        }
+
+        private BigTextStyleReminderAppData() {
+            // Standard Notification values
+            // Title for API <16 (4.0 and below) devices
+            mContentTitle = "Don't forget to...";
+            // Content for API <24 (4.0 and below) devices
+            mContentText = "Feed Dogs and check garage!";
+
+            // BigText Style Notification values
+            mBigContentTitle = "Don't forget to...";
+            mBigText = "... feed the dogs before you leave for work, and check the garage to "
+                            + "make sure the door is closed.";
+            mSummaryText = "Dogs and Garage";
+        }
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getBigText() {
+            return mBigText;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        @Override
+        public String toString() {
+            return getBigContentTitle() + getBigText();
+        }
+    }
+
+    /**
+     * Represents data needed for BigPictureStyle Notification.
+     */
+    public static class BigPictureStyleSocialAppData {
+        private static BigPictureStyleSocialAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private int mBigImage;
+        private String mBigContentTitle;
+        private String mSummaryText;
+
+        private CharSequence[] mPossiblePostResponses;
+
+        private ArrayList<String> mParticipants;
+
+
+        public static BigPictureStyleSocialAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized BigPictureStyleSocialAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new BigPictureStyleSocialAppData();
+            }
+
+            return sInstance;
+        }
+
+        private BigPictureStyleSocialAppData() {
+            // Standard Notification values
+            // Title/Content for API <16 (4.0 and below) devices
+            mContentTitle = "Bob's Post";
+            mContentText = "[Picture] Like my shot of Earth?";
+
+            // Style notification values
+            mBigImage = R.drawable.earth;
+            mBigContentTitle = "Bob's Post";
+            mSummaryText = "Like my shot of Earth?";
+
+            // This would be possible responses based on the contents of the post
+            mPossiblePostResponses = new CharSequence[]{"Yes", "No", "Maybe?"};
+
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Bob Smith");
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public int getBigImage() {
+            return mBigImage;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        public CharSequence[] getPossiblePostResponses() {
+            return mPossiblePostResponses;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getContentTitle() + " - " + getContentText();
+        }
+    }
+
+    /**
+     * Represents data needed for InboxStyle Notification.
+     */
+    public static class InboxStyleEmailAppData {
+        private static InboxStyleEmailAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+        private int mNumberOfNewEmails;
+
+        // Style notification values
+        private String mBigContentTitle;
+        private String mSummaryText;
+        private ArrayList<String> mIndividualEmailSummary;
+
+        private ArrayList<String> mParticipants;
+
+        public static InboxStyleEmailAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized InboxStyleEmailAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new InboxStyleEmailAppData();
+            }
+
+            return sInstance;
+        }
+
+        private InboxStyleEmailAppData() {
+            // Standard Notification values
+            // Title/Content for API <16 (4.0 and below) devices
+            mContentTitle = "5 new emails";
+            mContentText = "from Jane, Jay, Alex +2 more";
+            mNumberOfNewEmails = 5;
+
+            // Style notification values
+            mBigContentTitle = "5 new emails from Jane, Jay, Alex +2";
+            mSummaryText = "New emails";
+
+            // Add each summary line of the new emails, you can add up to 5
+            mIndividualEmailSummary = new ArrayList<>();
+            mIndividualEmailSummary.add("Jane Faab  -   Launch Party is here...");
+            mIndividualEmailSummary.add("Jay Walker -   There's a turtle on the server!");
+            mIndividualEmailSummary.add("Alex Chang -   Check this out...");
+            mIndividualEmailSummary.add("Jane Johns -   Check in code?");
+            mIndividualEmailSummary.add("John Smith -   Movies later....");
+
+            // If the phone is in "Do not disturb mode, the user will still be notified if
+            // the user(s) is starred as a favorite.
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Jane Faab");
+            mParticipants.add("Jay Walker");
+            mParticipants.add("Alex Chang");
+            mParticipants.add("Jane Johns");
+            mParticipants.add("John Smith");
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public int getNumberOfNewEmails() {
+            return mNumberOfNewEmails;
+        }
+
+        public String getBigContentTitle() {
+            return mBigContentTitle;
+        }
+
+        public String getSummaryText() {
+            return mSummaryText;
+        }
+
+        public ArrayList<String> getIndividualEmailSummary() {
+            return mIndividualEmailSummary;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getContentTitle() + " " + getContentText();
+        }
+    }
+
+    /**
+     * Represents data needed for MessagingStyle Notification.
+     */
+    public static class MessagingStyleCommsAppData {
+
+        private static MessagingStyleCommsAppData sInstance = null;
+
+        // Standard notification values
+        private String mContentTitle;
+        private String mContentText;
+
+        // Style notification values
+        private ArrayList<MessagingStyle.Message> mMessages;
+        // Basically, String of all mMessages
+        private String mFullConversation;
+        // Name preferred when replying to chat
+        private String mReplayName;
+        private int mNumberOfNewMessages;
+        private ArrayList<String> mParticipants;
+
+        public static MessagingStyleCommsAppData getInstance() {
+            if (sInstance == null) {
+                sInstance = getSync();
+            }
+            return sInstance;
+        }
+
+        private static synchronized MessagingStyleCommsAppData getSync() {
+            if (sInstance == null) {
+                sInstance = new MessagingStyleCommsAppData();
+            }
+
+            return sInstance;
+        }
+
+        private MessagingStyleCommsAppData() {
+            // Standard notification values
+            // Content for API <24 (M and below) devices
+            mContentTitle = "2 Messages w/ Famous McFamously";
+            mContentText = "Dude! ... You know I am a Pesce-pescetarian. :P";
+
+            // Style notification values
+
+            // For each message, you need the timestamp, in this case, we are using arbitrary ones.
+            long currentTime = System.currentTimeMillis();
+
+            mMessages = new ArrayList<>();
+            mMessages.add(new MessagingStyle.Message(
+                    "What are you doing tonight?", currentTime - 4000, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "I don't know, dinner maybe?", currentTime - 3000, null));
+            mMessages.add(new MessagingStyle.Message(
+                    "Sounds good.", currentTime - 2000, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "How about BBQ?", currentTime - 1000, null));
+            // Last two are the newest message (2) from friend
+            mMessages.add(new MessagingStyle.Message(
+                    "Dude!", currentTime, "Famous"));
+            mMessages.add(new MessagingStyle.Message(
+                    "You know I am a Pesce-pescetarian. :P", currentTime, "Famous"));
+
+
+            // String version of the mMessages above
+            mFullConversation = "Famous: What are you doing tonight?\n\n"
+                    + "Me: I don't know, dinner maybe?\n\n"
+                    + "Famous: Sounds good.\n\n"
+                    + "Me: How about BBQ?\n\n"
+                    + "Famous: Dude!\n\n"
+                    + "Famous: You know I am a Pesce-pescetarian. :P\n\n";
+
+            mNumberOfNewMessages = 2;
+
+            // Name preferred when replying to chat
+            mReplayName = "Me";
+
+            // If the phone is in "Do not disturb mode, the user will still be notified if
+            // the user(s) is starred as a favorite.
+            mParticipants = new ArrayList<>();
+            mParticipants.add("Famous McFamously");
+
+        }
+
+        public String getContentTitle() {
+            return mContentTitle;
+        }
+
+        public String getContentText() {
+            return mContentText;
+        }
+
+        public ArrayList<MessagingStyle.Message> getMessages() {
+            return mMessages;
+        }
+
+        public String getFullConversation() {
+            return mFullConversation;
+        }
+
+        public String getReplayName() {
+            return mReplayName;
+        }
+
+        public int getNumberOfNewMessages() {
+            return mNumberOfNewMessages;
+        }
+
+        public ArrayList<String> getParticipants() {
+            return mParticipants;
+        }
+
+        @Override
+        public String toString() {
+            return getFullConversation();
+        }
+    }
+}
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/earth.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/earth.png
new file mode 100644
index 0000000..13abd77
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/earth.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..75e5a46
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..dc32a14
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..0ed1b5f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..d921ba2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..f1e1484
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..cc732ba
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-hdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..280e09d
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..6ebbc83
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..2b6948a
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..2156f16
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..360a32f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..b336e2f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-mdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..aa8102f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..dc775b2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..d9b1348
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..185d613
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..1ebc37b
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..0424c2b
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xhdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..f665286
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..cf2822a
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..cb4f56f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..e710dee
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..77e3a18
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..eeb5d49
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxhdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png
new file mode 100644
index 0000000..419f4bb
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_alarm_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png
new file mode 100644
index 0000000..8bea844
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_cancel_white_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..77c9929
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png
new file mode 100644
index 0000000..5456c42
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_message_black_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png
new file mode 100644
index 0000000..6be3e30
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_person_black_48dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_reply_white_18dp.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_reply_white_18dp.png
new file mode 100644
index 0000000..de0dad2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/drawable-xxxhdpi/ic_reply_white_18dp.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_big_picture_main.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_big_picture_main.xml
new file mode 100644
index 0000000..c52cd05
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_big_picture_main.xml
@@ -0,0 +1,37 @@
+<?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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_header_end_padding"
+    android:paddingLeft="@dimen/list_start_padding"
+    android:paddingRight="@dimen/list_end_padding"
+    android:paddingTop="@dimen/activity_header_start_padding"
+    tools:context=".handlers.BigPictureSocialMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_big_picture_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+</RelativeLayout>
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_big_text_main.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_big_text_main.xml
new file mode 100644
index 0000000..9469426
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_big_text_main.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_header_end_padding"
+    android:paddingLeft="@dimen/list_start_padding"
+    android:paddingRight="@dimen/list_end_padding"
+    android:paddingTop="@dimen/activity_header_start_padding"
+    tools:context=".handlers.BigTextMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_big_text_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_inbox_main.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_inbox_main.xml
new file mode 100644
index 0000000..3123ecb
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_inbox_main.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_header_end_padding"
+    android:paddingLeft="@dimen/list_start_padding"
+    android:paddingRight="@dimen/list_end_padding"
+    android:paddingTop="@dimen/activity_header_start_padding"
+    tools:context=".handlers.InboxMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_inbox_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_main.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..467b461
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_main.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2016 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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/mainRelativeLayout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_header_end_padding"
+    android:paddingLeft="@dimen/list_start_padding"
+    android:paddingRight="@dimen/list_end_padding"
+    android:paddingTop="@dimen/activity_header_start_padding"
+    tools:context="com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity">
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Pick Notification Style:"
+        android:id="@+id/spinnerHeadertextView"/>
+
+    <!--
+     android:paddingTop="@dimen/activity_vertical_margin"
+    -->
+
+    <Spinner
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:id="@+id/spinner"
+        android:layout_below="@+id/spinnerHeadertextView"/>
+
+    <Button
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Launch!"
+        android:onClick="onClick"
+        android:layout_below="@+id/spinner"
+        android:id="@+id/submit"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_messaging_main.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_messaging_main.xml
new file mode 100644
index 0000000..0a710d0
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/layout/activity_messaging_main.xml
@@ -0,0 +1,38 @@
+<?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.
+-->
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_header_end_padding"
+    android:paddingLeft="@dimen/list_start_padding"
+    android:paddingRight="@dimen/list_end_padding"
+    android:paddingTop="@dimen/activity_header_start_padding"
+    tools:context=".handlers.MessagingMainActivity">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/main_text_activity_messaging_main"
+        android:id="@+id/mainTextView"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_alignParentEnd="true"
+        android:layout_alignParentBottom="true"/>
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..cde69bc
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..c133a0c
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..bfa42f0
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..324e72c
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values-round/dimens.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values-round/dimens.xml
new file mode 100644
index 0000000..0bfb8a0
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values-round/dimens.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <dimen name="activity_header_start_padding">36dp</dimen>
+    <dimen name="activity_header_end_padding">22dp</dimen>
+    <dimen name="list_start_padding">36dp</dimen>
+    <dimen name="list_end_padding">22dp</dimen>
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/colors.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/colors.xml
new file mode 100644
index 0000000..752b74f
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/dimens.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..05a0801
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/dimens.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <dimen name="activity_header_start_padding">16dp</dimen>
+    <dimen name="activity_header_end_padding">16dp</dimen>
+    <dimen name="list_start_padding">10dp</dimen>
+    <dimen name="list_end_padding">10dp</dimen>
+</resources>
diff --git a/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/strings.xml b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/strings.xml
new file mode 100644
index 0000000..ee3edc2
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/Wearable/src/main/res/values/strings.xml
@@ -0,0 +1,44 @@
+<!--
+  Copyright 2016 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">Wear Notifications</string>
+
+    <string name="reply_label">Reply</string>
+    <string name="reply_name">Me</string>
+
+    <string name="title_activity_big_text_main">BigTextStyle Main Activity</string>
+    <string name="title_activity_big_picture_main">BigPictureStyle Main Activity</string>
+    <string name="title_activity_inbox_main">InboxStyle Main Activity</string>
+    <string name="title_activity_messaging_main">MessagingStyle Main Activity</string>
+
+    <string name="main_text_activity_big_text_main">
+        This Activity would handle the reminder app\'s functionality.
+        \n\nThe notification type for this example was the Big Text Style!
+    </string>
+    <string name="main_text_activity_big_picture_main">
+        This Activity would handle the social app\'s functionality for an individual post.
+        \n\nThe notification type for this example was the Big Picture Style!
+    </string>
+    <string name="main_text_activity_inbox_main">
+        This Activity would handle the email app\'s functionality for an email(s).
+        \n\nThe notification type for this example was the Inbox Style!
+    </string>
+    <string name="main_text_activity_messaging_main">
+        This Activity would handle the messaging app\'s functionality for a chat(s).
+        \n\nThe notification type for this example was the Messaging Style!
+    </string>
+
+</resources>
\ No newline at end of file
diff --git a/prebuilts/gradle/WearNotifications/build.gradle b/prebuilts/gradle/WearNotifications/build.gradle
new file mode 100644
index 0000000..1901ba9
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/build.gradle
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/prebuilts/gradle/WearNotifications/gradle/wrapper/gradle-wrapper.jar b/prebuilts/gradle/WearNotifications/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..8c0fb64
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/WearNotifications/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..39f8d57
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Aug 18 11:31:37 PDT 2016
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/WearNotifications/gradlew b/prebuilts/gradle/WearNotifications/gradlew
new file mode 100755
index 0000000..91a7e26
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/gradlew
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/prebuilts/gradle/WearNotifications/gradlew.bat b/prebuilts/gradle/WearNotifications/gradlew.bat
new file mode 100644
index 0000000..aec9973
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/prebuilts/gradle/WearNotifications/screenshots/icon-web.png b/prebuilts/gradle/WearNotifications/screenshots/icon-web.png
new file mode 100644
index 0000000..77c9929
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/screenshots/icon-web.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/screenshots/mobile-1.png b/prebuilts/gradle/WearNotifications/screenshots/mobile-1.png
new file mode 100644
index 0000000..0adca49
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/screenshots/mobile-1.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/screenshots/mobile-2.png b/prebuilts/gradle/WearNotifications/screenshots/mobile-2.png
new file mode 100644
index 0000000..6573f51
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/screenshots/mobile-2.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/screenshots/wear-1.png b/prebuilts/gradle/WearNotifications/screenshots/wear-1.png
new file mode 100644
index 0000000..eaf38d1
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/screenshots/wear-1.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/screenshots/wear-2.png b/prebuilts/gradle/WearNotifications/screenshots/wear-2.png
new file mode 100644
index 0000000..74946d5
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/screenshots/wear-2.png
Binary files differ
diff --git a/prebuilts/gradle/WearNotifications/settings.gradle b/prebuilts/gradle/WearNotifications/settings.gradle
new file mode 100644
index 0000000..f35b8cc
--- /dev/null
+++ b/prebuilts/gradle/WearNotifications/settings.gradle
@@ -0,0 +1,2 @@
+
+include ':Application', ':Wearable'
diff --git a/prebuilts/gradle/WearSpeakerSample/README.md b/prebuilts/gradle/WearSpeakerSample/README.md
index e43a43a..03dfa70 100644
--- a/prebuilts/gradle/WearSpeakerSample/README.md
+++ b/prebuilts/gradle/WearSpeakerSample/README.md
@@ -12,7 +12,7 @@
 --------------
 
 - Android SDK v24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Getting Started
diff --git a/prebuilts/gradle/WearSpeakerSample/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/WearSpeakerSample/gradle/wrapper/gradle-wrapper.properties
index 43b9e1e..49b752f 100644
--- a/prebuilts/gradle/WearSpeakerSample/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/WearSpeakerSample/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
diff --git a/prebuilts/gradle/XYZTouristAttractions/Application/build.gradle b/prebuilts/gradle/XYZTouristAttractions/Application/build.gradle
index 4a9ee38..43ab410 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Application/build.gradle
+++ b/prebuilts/gradle/XYZTouristAttractions/Application/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,14 +17,14 @@
 }
 
 dependencies {
-    compile 'com.google.android.gms:play-services-location:8.4.0'
+    compile 'com.google.android.gms:play-services-location:9.4.0'
     compile 'com.google.maps.android:android-maps-utils:0.3.4'
     compile 'com.github.bumptech.glide:glide:3.6.1'
     compile 'com.android.support:appcompat-v7:24.0.0'
     compile 'com.android.support:recyclerview-v7:24.0.0'
     compile 'com.android.support:design:24.0.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     compile project(':Shared')
     wearApp project(':Wearable')
 }
@@ -40,7 +40,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/XYZTouristAttractions/README.md b/prebuilts/gradle/XYZTouristAttractions/README.md
index 5dddd71..83e5277 100644
--- a/prebuilts/gradle/XYZTouristAttractions/README.md
+++ b/prebuilts/gradle/XYZTouristAttractions/README.md
@@ -100,7 +100,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v24.0.1
+- Android Build Tools v24.0.2
 - Android Support Repository
 
 Screenshots
diff --git a/prebuilts/gradle/XYZTouristAttractions/Shared/build.gradle b/prebuilts/gradle/XYZTouristAttractions/Shared/build.gradle
index c4e5bf9..54548c0 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Shared/build.gradle
+++ b/prebuilts/gradle/XYZTouristAttractions/Shared/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -17,8 +17,8 @@
 
 dependencies {
     compile 'com.android.support:support-v13:23.0.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.google.android.gms:play-services-location:8.4.0'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.google.android.gms:play-services-location:9.4.0'
     compile 'com.google.maps.android:android-maps-utils:0.3.4'
 }
 
@@ -33,7 +33,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle b/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle
index 808ba27..d56e551 100644
--- a/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle
+++ b/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle
@@ -5,7 +5,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:2.1.2'
+        classpath 'com.android.tools.build:gradle:2.1.3'
     }
 }
 
@@ -18,9 +18,9 @@
 }
 
 dependencies {
-    compile 'com.google.android.gms:play-services-location:8.4.0'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.1.1'
+    compile 'com.google.android.gms:play-services-location:9.4.0'
+    compile 'com.google.android.gms:play-services-wearable:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
 
     compile 'com.google.android.support:wearable:1.4.0'
 
@@ -38,7 +38,7 @@
 android {
     compileSdkVersion 24
 
-    buildToolsVersion "24.0.1"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         versionCode 1
diff --git a/prebuilts/gradle/XYZTouristAttractions/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/XYZTouristAttractions/gradle/wrapper/gradle-wrapper.properties
index 7eeed2d..620bcdb 100644
--- a/prebuilts/gradle/XYZTouristAttractions/gradle/wrapper/gradle-wrapper.properties
+++ b/prebuilts/gradle/XYZTouristAttractions/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
