diff --git a/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle
index 91cbece..c7eea62 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,11 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
+    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,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActionBarCompat-Basic/README.md b/prebuilts/gradle/ActionBarCompat-Basic/README.md
index 42fe78c..c1aebb5 100644
--- a/prebuilts/gradle/ActionBarCompat-Basic/README.md
+++ b/prebuilts/gradle/ActionBarCompat-Basic/README.md
@@ -35,8 +35,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 91cbece..c7eea62 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,11 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
+    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,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
index 754e5f9..c5357bf 100644
--- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
+++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md
@@ -17,8 +17,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 91cbece..c7eea62 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,11 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
+    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,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
index d645328..362ff31 100644
--- a/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
+++ b/prebuilts/gradle/ActionBarCompat-ShareActionProvider/README.md
@@ -22,8 +22,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 91cbece..c7eea62 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,11 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
+    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,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/ActionBarCompat-Styled/README.md b/prebuilts/gradle/ActionBarCompat-Styled/README.md
index c6e597a..2c0a666 100644
--- a/prebuilts/gradle/ActionBarCompat-Styled/README.md
+++ b/prebuilts/gradle/ActionBarCompat-Styled/README.md
@@ -23,8 +23,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 750ef9c..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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 "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 24
diff --git a/prebuilts/gradle/ActiveNotifications/README.md b/prebuilts/gradle/ActiveNotifications/README.md
index 3a56e9a..36f8503 100644
--- a/prebuilts/gradle/ActiveNotifications/README.md
+++ b/prebuilts/gradle/ActiveNotifications/README.md
@@ -32,7 +32,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v23.0.3
+- 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 106dde3..3d79ea0 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,8 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -29,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 4
diff --git a/prebuilts/gradle/ActivityInstrumentation/README.md b/prebuilts/gradle/ActivityInstrumentation/README.md
index c5001fd..9e49674 100644
--- a/prebuilts/gradle/ActivityInstrumentation/README.md
+++ b/prebuilts/gradle/ActivityInstrumentation/README.md
@@ -8,8 +8,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f41c00d..a1ad8d6 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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'
 }
 
@@ -32,8 +32,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ActivitySceneTransitionBasic/README.md b/prebuilts/gradle/ActivitySceneTransitionBasic/README.md
index 4969b99..90dba48 100644
--- a/prebuilts/gradle/ActivitySceneTransitionBasic/README.md
+++ b/prebuilts/gradle/ActivitySceneTransitionBasic/README.md
@@ -19,8 +19,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 bff8131..848364c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/AdvancedImmersiveMode/README.md b/prebuilts/gradle/AdvancedImmersiveMode/README.md
index 9a945d2..895d62a 100644
--- a/prebuilts/gradle/AdvancedImmersiveMode/README.md
+++ b/prebuilts/gradle/AdvancedImmersiveMode/README.md
@@ -26,8 +26,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 cb3c823..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:design:24.0.0-beta1'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
+    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:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     wearApp project(':Wearable')
 }
 
@@ -35,8 +35,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/AgendaData/README.md b/prebuilts/gradle/AgendaData/README.md
index 2f376d4..4acf66f 100644
--- a/prebuilts/gradle/AgendaData/README.md
+++ b/prebuilts/gradle/AgendaData/README.md
@@ -22,8 +22,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 62f641a..4389732 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 aa24d8a..821b1e4 100644
--- a/prebuilts/gradle/AlwaysOn/README.md
+++ b/prebuilts/gradle/AlwaysOn/README.md
@@ -24,8 +24,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 3087eb1..b0c2e47 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    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 d8e4c29..9b01a94 100644
--- a/prebuilts/gradle/AppRestrictionEnforcer/README.md
+++ b/prebuilts/gradle/AppRestrictionEnforcer/README.md
@@ -8,8 +8,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    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 7e5a383..7b812b6 100644
--- a/prebuilts/gradle/AppRestrictionSchema/README.md
+++ b/prebuilts/gradle/AppRestrictionSchema/README.md
@@ -54,8 +54,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 b8072d1..4ba6338 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/AppRestrictions/README.md b/prebuilts/gradle/AppRestrictions/README.md
index c9ddbce..64e84ea 100644
--- a/prebuilts/gradle/AppRestrictions/README.md
+++ b/prebuilts/gradle/AppRestrictions/README.md
@@ -12,8 +12,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 44382b0..87557bf 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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.+'
 }
@@ -33,8 +33,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/AppUsageStatistics/README.md b/prebuilts/gradle/AppUsageStatistics/README.md
index 343673d..118677b 100644
--- a/prebuilts/gradle/AppUsageStatistics/README.md
+++ b/prebuilts/gradle/AppUsageStatistics/README.md
@@ -49,8 +49,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 addf706..dc4ff75 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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'
@@ -35,8 +35,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/AsymmetricFingerprintDialog/README.md b/prebuilts/gradle/AsymmetricFingerprintDialog/README.md
index e6f8d12..43f9f36 100644
--- a/prebuilts/gradle/AsymmetricFingerprintDialog/README.md
+++ b/prebuilts/gradle/AsymmetricFingerprintDialog/README.md
@@ -38,8 +38,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6a7bac7..003525d 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/AutoBackupForApps/README.md b/prebuilts/gradle/AutoBackupForApps/README.md
index 389ca6f..cc9107e 100644
--- a/prebuilts/gradle/AutoBackupForApps/README.md
+++ b/prebuilts/gradle/AutoBackupForApps/README.md
@@ -26,8 +26,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 2915ada..982467a 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/BasicAccessibility/README.md b/prebuilts/gradle/BasicAccessibility/README.md
index cf414d8..5b849a3 100644
--- a/prebuilts/gradle/BasicAccessibility/README.md
+++ b/prebuilts/gradle/BasicAccessibility/README.md
@@ -20,8 +20,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 b8072d1..4ba6338 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/BasicAndroidKeyStore/README.md b/prebuilts/gradle/BasicAndroidKeyStore/README.md
index bc84150..0d18552 100644
--- a/prebuilts/gradle/BasicAndroidKeyStore/README.md
+++ b/prebuilts/gradle/BasicAndroidKeyStore/README.md
@@ -23,8 +23,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 15104ca..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/BasicContactables/README.md b/prebuilts/gradle/BasicContactables/README.md
index 7531eca..2e26abb 100644
--- a/prebuilts/gradle/BasicContactables/README.md
+++ b/prebuilts/gradle/BasicContactables/README.md
@@ -25,8 +25,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 b8072d1..4ba6338 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/BasicGestureDetect/README.md b/prebuilts/gradle/BasicGestureDetect/README.md
index 19c04c0..d183142 100644
--- a/prebuilts/gradle/BasicGestureDetect/README.md
+++ b/prebuilts/gradle/BasicGestureDetect/README.md
@@ -24,8 +24,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 bff8131..848364c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/BasicImmersiveMode/README.md b/prebuilts/gradle/BasicImmersiveMode/README.md
index ac17abf..782ecc7 100644
--- a/prebuilts/gradle/BasicImmersiveMode/README.md
+++ b/prebuilts/gradle/BasicImmersiveMode/README.md
@@ -19,8 +19,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 aeece30..2e0c392 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/BasicManagedProfile/README.md b/prebuilts/gradle/BasicManagedProfile/README.md
index aed6afe..d2ff29b 100644
--- a/prebuilts/gradle/BasicManagedProfile/README.md
+++ b/prebuilts/gradle/BasicManagedProfile/README.md
@@ -38,8 +38,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c129007..c0bf93b 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 17
diff --git a/prebuilts/gradle/BasicMediaDecoder/README.md b/prebuilts/gradle/BasicMediaDecoder/README.md
index ce631f0..837acd7 100644
--- a/prebuilts/gradle/BasicMediaDecoder/README.md
+++ b/prebuilts/gradle/BasicMediaDecoder/README.md
@@ -54,8 +54,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c129007..c0bf93b 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 17
diff --git a/prebuilts/gradle/BasicMediaRouter/README.md b/prebuilts/gradle/BasicMediaRouter/README.md
index 6d209e5..0eee9f5 100644
--- a/prebuilts/gradle/BasicMediaRouter/README.md
+++ b/prebuilts/gradle/BasicMediaRouter/README.md
@@ -14,8 +14,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 1fd5c2c..a70e03a 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 8
diff --git a/prebuilts/gradle/BasicMultitouch/README.md b/prebuilts/gradle/BasicMultitouch/README.md
index 64ff348..9b1e8be 100644
--- a/prebuilts/gradle/BasicMultitouch/README.md
+++ b/prebuilts/gradle/BasicMultitouch/README.md
@@ -29,8 +29,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 106dde3..3d79ea0 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,8 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -29,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 4
diff --git a/prebuilts/gradle/BasicNetworking/README.md b/prebuilts/gradle/BasicNetworking/README.md
index dd5db18..a847f69 100644
--- a/prebuilts/gradle/BasicNetworking/README.md
+++ b/prebuilts/gradle/BasicNetworking/README.md
@@ -22,8 +22,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 1fd5c2c..a70e03a 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 8
diff --git a/prebuilts/gradle/BasicNotifications/README.md b/prebuilts/gradle/BasicNotifications/README.md
index 3b585f0..3b0c28c 100644
--- a/prebuilts/gradle/BasicNotifications/README.md
+++ b/prebuilts/gradle/BasicNotifications/README.md
@@ -53,8 +53,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f56aa00..9726bd7 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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')
 }
 
@@ -32,8 +32,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    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 8ec3757..cfffdc9 100644
--- a/prebuilts/gradle/BasicRenderScript/README.md
+++ b/prebuilts/gradle/BasicRenderScript/README.md
@@ -28,8 +28,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 bce9ac2..c7eea62 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    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 d1b4e35..6503a57 100644
--- a/prebuilts/gradle/BasicSyncAdapter/README.md
+++ b/prebuilts/gradle/BasicSyncAdapter/README.md
@@ -28,8 +28,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 bff8131..848364c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/BasicTransition/README.md b/prebuilts/gradle/BasicTransition/README.md
index dd7dee8..2ed6ed2 100644
--- a/prebuilts/gradle/BasicTransition/README.md
+++ b/prebuilts/gradle/BasicTransition/README.md
@@ -33,8 +33,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 bff8131..848364c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/BatchStepSensor/README.md b/prebuilts/gradle/BatchStepSensor/README.md
index 273b5f0..7304957 100644
--- a/prebuilts/gradle/BatchStepSensor/README.md
+++ b/prebuilts/gradle/BatchStepSensor/README.md
@@ -31,8 +31,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 b2fa9ed..4e78d28 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/BeamLargeFiles/README.md b/prebuilts/gradle/BeamLargeFiles/README.md
index a8af4a8..f4657f4 100644
--- a/prebuilts/gradle/BeamLargeFiles/README.md
+++ b/prebuilts/gradle/BeamLargeFiles/README.md
@@ -15,8 +15,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/BluetoothAdvertisements/README.md b/prebuilts/gradle/BluetoothAdvertisements/README.md
index 69fa862..4ec13e7 100644
--- a/prebuilts/gradle/BluetoothAdvertisements/README.md
+++ b/prebuilts/gradle/BluetoothAdvertisements/README.md
@@ -29,8 +29,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 2915ada..982467a 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/BluetoothChat/README.md b/prebuilts/gradle/BluetoothChat/README.md
index 5e34883..fae67c6 100644
--- a/prebuilts/gradle/BluetoothChat/README.md
+++ b/prebuilts/gradle/BluetoothChat/README.md
@@ -32,8 +32,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 b8072d1..4ba6338 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/BluetoothLeGatt/README.md b/prebuilts/gradle/BluetoothLeGatt/README.md
index 06fe536..324dd3d 100644
--- a/prebuilts/gradle/BluetoothLeGatt/README.md
+++ b/prebuilts/gradle/BluetoothLeGatt/README.md
@@ -23,8 +23,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f757b43..38e812c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/BorderlessButtons/README.md b/prebuilts/gradle/BorderlessButtons/README.md
index 8376724..679484a 100644
--- a/prebuilts/gradle/BorderlessButtons/README.md
+++ b/prebuilts/gradle/BorderlessButtons/README.md
@@ -24,8 +24,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 0a86821..1f54744 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,11 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
+    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,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/Camera2Basic/README.md b/prebuilts/gradle/Camera2Basic/README.md
index dfdf0c4..cb8ca9f 100644
--- a/prebuilts/gradle/Camera2Basic/README.md
+++ b/prebuilts/gradle/Camera2Basic/README.md
@@ -42,8 +42,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 0a86821..1f54744 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,11 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
+    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,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/Camera2Raw/README.md b/prebuilts/gradle/Camera2Raw/README.md
index 31905ef..120e107 100644
--- a/prebuilts/gradle/Camera2Raw/README.md
+++ b/prebuilts/gradle/Camera2Raw/README.md
@@ -26,8 +26,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 0a86821..1f54744 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,11 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
+    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,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/Camera2Video/README.md b/prebuilts/gradle/Camera2Video/README.md
index e941a48..1a3ec5d 100644
--- a/prebuilts/gradle/Camera2Video/README.md
+++ b/prebuilts/gradle/Camera2Video/README.md
@@ -43,8 +43,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 bff8131..848364c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/CardEmulation/README.md b/prebuilts/gradle/CardEmulation/README.md
index 361208d..20dda5b 100644
--- a/prebuilts/gradle/CardEmulation/README.md
+++ b/prebuilts/gradle/CardEmulation/README.md
@@ -12,8 +12,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 bff8131..848364c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/CardReader/README.md b/prebuilts/gradle/CardReader/README.md
index 5df1123..43c8aab 100644
--- a/prebuilts/gradle/CardReader/README.md
+++ b/prebuilts/gradle/CardReader/README.md
@@ -13,8 +13,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 7086fcd..7445ee0 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'
     }
 }
 
@@ -28,8 +28,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/CardView/README.md b/prebuilts/gradle/CardView/README.md
index cf5ce5b..c992a53 100644
--- a/prebuilts/gradle/CardView/README.md
+++ b/prebuilts/gradle/CardView/README.md
@@ -8,8 +8,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 aeece30..2e0c392 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ClippingBasic/README.md b/prebuilts/gradle/ClippingBasic/README.md
index c79e9f9..c68f5a8 100644
--- a/prebuilts/gradle/ClippingBasic/README.md
+++ b/prebuilts/gradle/ClippingBasic/README.md
@@ -47,8 +47,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6a7bac7..003525d 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/ConfirmCredential/README.md b/prebuilts/gradle/ConfirmCredential/README.md
index c087bf2..a499e9c 100644
--- a/prebuilts/gradle/ConfirmCredential/README.md
+++ b/prebuilts/gradle/ConfirmCredential/README.md
@@ -30,8 +30,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 106dde3..3d79ea0 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,8 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -29,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 4
diff --git a/prebuilts/gradle/CustomChoiceList/README.md b/prebuilts/gradle/CustomChoiceList/README.md
index 162d93e..df7b190 100644
--- a/prebuilts/gradle/CustomChoiceList/README.md
+++ b/prebuilts/gradle/CustomChoiceList/README.md
@@ -41,8 +41,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 b2fa9ed..4e78d28 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/CustomNotifications/README.md b/prebuilts/gradle/CustomNotifications/README.md
index 0396198..b9567ea 100644
--- a/prebuilts/gradle/CustomNotifications/README.md
+++ b/prebuilts/gradle/CustomNotifications/README.md
@@ -25,8 +25,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 bff8131..848364c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 19
diff --git a/prebuilts/gradle/CustomTransition/README.md b/prebuilts/gradle/CustomTransition/README.md
index 81253ac..2b88dc1 100644
--- a/prebuilts/gradle/CustomTransition/README.md
+++ b/prebuilts/gradle/CustomTransition/README.md
@@ -32,8 +32,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 8fd521d..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
+    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')
 }
 
@@ -34,8 +34,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/DataLayer/README.md b/prebuilts/gradle/DataLayer/README.md
index 688fcb4..d04aafd 100644
--- a/prebuilts/gradle/DataLayer/README.md
+++ b/prebuilts/gradle/DataLayer/README.md
@@ -27,8 +27,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6170762..d1ce0a7 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 8fd521d..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
+    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')
 }
 
@@ -34,8 +34,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/DelayedConfirmation/README.md b/prebuilts/gradle/DelayedConfirmation/README.md
index 95b4fcc..063a05a 100644
--- a/prebuilts/gradle/DelayedConfirmation/README.md
+++ b/prebuilts/gradle/DelayedConfirmation/README.md
@@ -12,8 +12,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6170762..d1ce0a7 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DeviceOwner/README.md b/prebuilts/gradle/DeviceOwner/README.md
index 7fe2964..75b4ea7 100644
--- a/prebuilts/gradle/DeviceOwner/README.md
+++ b/prebuilts/gradle/DeviceOwner/README.md
@@ -30,8 +30,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 732141d..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,15 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
-    compile 'com.android.support:support-v4:24.0.0-beta1'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
-    compile 'com.android.support:recyclerview-v7:24.0.0-beta1'
-    compile 'com.android.support:design:24.0.0-beta1'
+    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'
 }
 
 // The sample build uses multiple directories to
@@ -37,7 +34,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 24
diff --git a/prebuilts/gradle/DirectBoot/README.md b/prebuilts/gradle/DirectBoot/README.md
index a37db30..4ac8fb4 100644
--- a/prebuilts/gradle/DirectBoot/README.md
+++ b/prebuilts/gradle/DirectBoot/README.md
@@ -44,7 +44,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v23.0.3
+- 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 6a7bac7..003525d 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/DirectShare/README.md b/prebuilts/gradle/DirectShare/README.md
index 33609b0..4c524fe 100644
--- a/prebuilts/gradle/DirectShare/README.md
+++ b/prebuilts/gradle/DirectShare/README.md
@@ -28,8 +28,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 ea0bd99..e0d67c6 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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:+'
 }
 
@@ -32,8 +32,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DirectorySelection/README.md b/prebuilts/gradle/DirectorySelection/README.md
index e9f369c..f9f4194 100644
--- a/prebuilts/gradle/DirectorySelection/README.md
+++ b/prebuilts/gradle/DirectorySelection/README.md
@@ -107,8 +107,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 0602b69..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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 9
diff --git a/prebuilts/gradle/DisplayingBitmaps/README.md b/prebuilts/gradle/DisplayingBitmaps/README.md
index e1d2c6d..f9c0d74 100644
--- a/prebuilts/gradle/DisplayingBitmaps/README.md
+++ b/prebuilts/gradle/DisplayingBitmaps/README.md
@@ -20,8 +20,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DocumentCentricApps/README.md b/prebuilts/gradle/DocumentCentricApps/README.md
index 3668cb1..5ac28c4 100644
--- a/prebuilts/gradle/DocumentCentricApps/README.md
+++ b/prebuilts/gradle/DocumentCentricApps/README.md
@@ -25,8 +25,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md b/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
index 2b621a4..fa2545f 100644
--- a/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
+++ b/prebuilts/gradle/DocumentCentricRelinquishIdentity/README.md
@@ -7,8 +7,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f757b43..38e812c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/DoneBar/README.md b/prebuilts/gradle/DoneBar/README.md
index 9dc3093..3e635c3 100644
--- a/prebuilts/gradle/DoneBar/README.md
+++ b/prebuilts/gradle/DoneBar/README.md
@@ -31,8 +31,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/DrawableTinting/README.md b/prebuilts/gradle/DrawableTinting/README.md
index 8f5d73a..671b384 100644
--- a/prebuilts/gradle/DrawableTinting/README.md
+++ b/prebuilts/gradle/DrawableTinting/README.md
@@ -16,8 +16,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 aeece30..2e0c392 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ElevationBasic/README.md b/prebuilts/gradle/ElevationBasic/README.md
index 10dcc2c..1405d71 100644
--- a/prebuilts/gradle/ElevationBasic/README.md
+++ b/prebuilts/gradle/ElevationBasic/README.md
@@ -41,8 +41,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 aeece30..2e0c392 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ElevationDrag/README.md b/prebuilts/gradle/ElevationDrag/README.md
index d573478..6cad94a 100644
--- a/prebuilts/gradle/ElevationDrag/README.md
+++ b/prebuilts/gradle/ElevationDrag/README.md
@@ -24,8 +24,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 b8072d1..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/ElizaChat/README.md b/prebuilts/gradle/ElizaChat/README.md
index efaf95d..9975bea 100644
--- a/prebuilts/gradle/ElizaChat/README.md
+++ b/prebuilts/gradle/ElizaChat/README.md
@@ -67,8 +67,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 8fd521d..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
+    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')
 }
 
@@ -34,8 +34,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/FindMyPhone/README.md b/prebuilts/gradle/FindMyPhone/README.md
index 80825dd..0b2db9c 100644
--- a/prebuilts/gradle/FindMyPhone/README.md
+++ b/prebuilts/gradle/FindMyPhone/README.md
@@ -10,8 +10,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6170762..d1ce0a7 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 6a7bac7..003525d 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/FingerprintDialog/README.md b/prebuilts/gradle/FingerprintDialog/README.md
index 6d73a5f..2a3b67d 100644
--- a/prebuilts/gradle/FingerprintDialog/README.md
+++ b/prebuilts/gradle/FingerprintDialog/README.md
@@ -35,8 +35,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 9d43138..ab447ea 100644
--- a/prebuilts/gradle/Flashlight/README.md
+++ b/prebuilts/gradle/Flashlight/README.md
@@ -18,8 +18,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6170762..d1ce0a7 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 aeece30..2e0c392 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/FloatingActionButtonBasic/README.md b/prebuilts/gradle/FloatingActionButtonBasic/README.md
index ed7dd2c..ef2bf38 100644
--- a/prebuilts/gradle/FloatingActionButtonBasic/README.md
+++ b/prebuilts/gradle/FloatingActionButtonBasic/README.md
@@ -25,8 +25,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 ad583e6..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    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.0.0-beta1'
+    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')
 }
 
@@ -35,8 +35,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/Geofencing/README.md b/prebuilts/gradle/Geofencing/README.md
index a326012..93d4c0c 100644
--- a/prebuilts/gradle/Geofencing/README.md
+++ b/prebuilts/gradle/Geofencing/README.md
@@ -36,8 +36,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6170762..d1ce0a7 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 86970bc..db72334 100644
--- a/prebuilts/gradle/GridViewPager/README.md
+++ b/prebuilts/gradle/GridViewPager/README.md
@@ -7,8 +7,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 fa8f537..00ec504 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 42874d4..cd2a9ac 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,11 +16,11 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:design:24.0.0-beta1'
+    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'
 }
 
 // The sample build uses multiple directories to
@@ -32,8 +32,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/HdrViewfinder/README.md b/prebuilts/gradle/HdrViewfinder/README.md
index 30c0d68..ca266b7 100644
--- a/prebuilts/gradle/HdrViewfinder/README.md
+++ b/prebuilts/gradle/HdrViewfinder/README.md
@@ -43,8 +43,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 2915ada..982467a 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/HorizontalPaging/README.md b/prebuilts/gradle/HorizontalPaging/README.md
index a3f84a6..3a14904 100644
--- a/prebuilts/gradle/HorizontalPaging/README.md
+++ b/prebuilts/gradle/HorizontalPaging/README.md
@@ -30,8 +30,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 2915ada..982467a 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/ImmersiveMode/README.md b/prebuilts/gradle/ImmersiveMode/README.md
index 060bf8e..a457243 100644
--- a/prebuilts/gradle/ImmersiveMode/README.md
+++ b/prebuilts/gradle/ImmersiveMode/README.md
@@ -9,8 +9,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/Interpolator/README.md b/prebuilts/gradle/Interpolator/README.md
index 40053a4..d98b19a 100644
--- a/prebuilts/gradle/Interpolator/README.md
+++ b/prebuilts/gradle/Interpolator/README.md
@@ -23,8 +23,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 aeece30..2e0c392 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/JobScheduler/README.md b/prebuilts/gradle/JobScheduler/README.md
index 90c018c..f7bcbac 100644
--- a/prebuilts/gradle/JobScheduler/README.md
+++ b/prebuilts/gradle/JobScheduler/README.md
@@ -8,8 +8,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 88b94e1..bcf134b 100644
--- a/prebuilts/gradle/JumpingJack/README.md
+++ b/prebuilts/gradle/JumpingJack/README.md
@@ -44,8 +44,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 fa8f537..00ec504 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 c849ff3..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/LNotifications/README.md b/prebuilts/gradle/LNotifications/README.md
index 0e4468f..605a514 100644
--- a/prebuilts/gradle/LNotifications/README.md
+++ b/prebuilts/gradle/LNotifications/README.md
@@ -26,8 +26,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 5330b45..8dc401a 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
+    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"
 
 }
 
@@ -29,8 +29,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/MediaBrowserService/README.md b/prebuilts/gradle/MediaBrowserService/README.md
index 5ae05e5..d2f34f4 100644
--- a/prebuilts/gradle/MediaBrowserService/README.md
+++ b/prebuilts/gradle/MediaBrowserService/README.md
@@ -72,8 +72,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f757b43..38e812c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/MediaEffects/README.md b/prebuilts/gradle/MediaEffects/README.md
index 780d3e8..8307e3d 100644
--- a/prebuilts/gradle/MediaEffects/README.md
+++ b/prebuilts/gradle/MediaEffects/README.md
@@ -21,8 +21,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 3db6809..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/MediaRecorder/README.md b/prebuilts/gradle/MediaRecorder/README.md
index 9669f16..8f4519e 100644
--- a/prebuilts/gradle/MediaRecorder/README.md
+++ b/prebuilts/gradle/MediaRecorder/README.md
@@ -25,8 +25,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 65e5ac8..6a473fa 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,12 +16,11 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
-    compile 'com.android.support:mediarouter-v7:24.0.0-beta1'
+    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'
 }
 
 // The sample build uses multiple directories to
@@ -33,8 +32,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 13
diff --git a/prebuilts/gradle/MediaRouter/README.md b/prebuilts/gradle/MediaRouter/README.md
index 6b43472..6e4f1d2 100644
--- a/prebuilts/gradle/MediaRouter/README.md
+++ b/prebuilts/gradle/MediaRouter/README.md
@@ -7,8 +7,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 2e2b995..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
+    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 "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/MessagingService/README.md b/prebuilts/gradle/MessagingService/README.md
index 1228827..f5f8448 100644
--- a/prebuilts/gradle/MessagingService/README.md
+++ b/prebuilts/gradle/MessagingService/README.md
@@ -51,7 +51,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v23.0.3
+- 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 6a7bac7..003525d 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/MidiScope/README.md b/prebuilts/gradle/MidiScope/README.md
index a276d5a..b563951 100644
--- a/prebuilts/gradle/MidiScope/README.md
+++ b/prebuilts/gradle/MidiScope/README.md
@@ -19,8 +19,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6a7bac7..003525d 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 23
diff --git a/prebuilts/gradle/MidiSynth/README.md b/prebuilts/gradle/MidiSynth/README.md
index 5f5f141..df10fa2 100644
--- a/prebuilts/gradle/MidiSynth/README.md
+++ b/prebuilts/gradle/MidiSynth/README.md
@@ -24,8 +24,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 eadd385..dbe200a 100644
--- a/prebuilts/gradle/MultiWindowPlayground/README.md
+++ b/prebuilts/gradle/MultiWindowPlayground/README.md
@@ -49,7 +49,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v23.0.3
+- 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 ef10dbe..abe4be7 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'
     }
 }
 
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/NavigationDrawer/README.md b/prebuilts/gradle/NavigationDrawer/README.md
index 373ab4a..991513b 100644
--- a/prebuilts/gradle/NavigationDrawer/README.md
+++ b/prebuilts/gradle/NavigationDrawer/README.md
@@ -8,8 +8,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 1fd5c2c..a70e03a 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 8
diff --git a/prebuilts/gradle/NetworkConnect/README.md b/prebuilts/gradle/NetworkConnect/README.md
index debdfb5..fc706bd 100644
--- a/prebuilts/gradle/NetworkConnect/README.md
+++ b/prebuilts/gradle/NetworkConnect/README.md
@@ -17,8 +17,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c849ff3..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/NfcProvisioning/README.md b/prebuilts/gradle/NfcProvisioning/README.md
index c79b653..724f467 100644
--- a/prebuilts/gradle/NfcProvisioning/README.md
+++ b/prebuilts/gradle/NfcProvisioning/README.md
@@ -33,8 +33,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 8fd521d..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
+    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')
 }
 
@@ -34,8 +34,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/Notifications/README.md b/prebuilts/gradle/Notifications/README.md
index f326e95..18df612 100644
--- a/prebuilts/gradle/Notifications/README.md
+++ b/prebuilts/gradle/Notifications/README.md
@@ -23,8 +23,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6170762..d1ce0a7 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 c4072f5..ff5e29e 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/PdfRendererBasic/README.md b/prebuilts/gradle/PdfRendererBasic/README.md
index 11aaa54..d70c95c 100644
--- a/prebuilts/gradle/PdfRendererBasic/README.md
+++ b/prebuilts/gradle/PdfRendererBasic/README.md
@@ -35,8 +35,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/PermissionRequest/README.md b/prebuilts/gradle/PermissionRequest/README.md
index 6a8abcb..9f3ee5b 100644
--- a/prebuilts/gradle/PermissionRequest/README.md
+++ b/prebuilts/gradle/PermissionRequest/README.md
@@ -46,8 +46,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 8fd521d..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
+    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')
 }
 
@@ -34,8 +34,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/Quiz/README.md b/prebuilts/gradle/Quiz/README.md
index 780e0db..88c0ca6 100644
--- a/prebuilts/gradle/Quiz/README.md
+++ b/prebuilts/gradle/Quiz/README.md
@@ -13,8 +13,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6170762..d1ce0a7 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 b8072d1..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/RecipeAssistant/README.md b/prebuilts/gradle/RecipeAssistant/README.md
index 3e59cb0..d92c959 100644
--- a/prebuilts/gradle/RecipeAssistant/README.md
+++ b/prebuilts/gradle/RecipeAssistant/README.md
@@ -12,8 +12,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 1907476..4ce4d8e 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,11 +16,11 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:recyclerview-v7:24.0.0-beta1'
+    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'
 }
 
 // The sample build uses multiple directories to
@@ -32,8 +32,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 7
diff --git a/prebuilts/gradle/RecyclerView/README.md b/prebuilts/gradle/RecyclerView/README.md
index 302a735..7360951 100644
--- a/prebuilts/gradle/RecyclerView/README.md
+++ b/prebuilts/gradle/RecyclerView/README.md
@@ -29,8 +29,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 a7d093c..ed101a3 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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')
 }
 
@@ -32,8 +32,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    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 2c35c39..225cb56 100644
--- a/prebuilts/gradle/RenderScriptIntrinsic/README.md
+++ b/prebuilts/gradle/RenderScriptIntrinsic/README.md
@@ -36,8 +36,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 2915ada..982467a 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.0.0-beta1"
-    compile "com.android.support:gridlayout-v7:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 11
diff --git a/prebuilts/gradle/RepeatingAlarm/README.md b/prebuilts/gradle/RepeatingAlarm/README.md
index ce31094..744e76d 100644
--- a/prebuilts/gradle/RepeatingAlarm/README.md
+++ b/prebuilts/gradle/RepeatingAlarm/README.md
@@ -8,8 +8,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 aeece30..2e0c392 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 21
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/RevealEffectBasic/README.md b/prebuilts/gradle/RevealEffectBasic/README.md
index 98ce674..d0bc2fd 100644
--- a/prebuilts/gradle/RevealEffectBasic/README.md
+++ b/prebuilts/gradle/RevealEffectBasic/README.md
@@ -27,8 +27,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 21
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 1155496..19b71d8 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,13 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
-    compile 'com.android.support:support-v4:24.0.0-beta1'
-    compile 'com.android.support:design:24.0.0-beta1'
+    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'
 }
 
 // The sample build uses multiple directories to
@@ -34,8 +33,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 15
diff --git a/prebuilts/gradle/RuntimePermissions/README.md b/prebuilts/gradle/RuntimePermissions/README.md
index f1271ec..65107a9 100644
--- a/prebuilts/gradle/RuntimePermissions/README.md
+++ b/prebuilts/gradle/RuntimePermissions/README.md
@@ -31,8 +31,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 1155496..19b71d8 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,13 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
-    compile 'com.android.support:support-v4:24.0.0-beta1'
-    compile 'com.android.support:design:24.0.0-beta1'
+    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'
 }
 
 // The sample build uses multiple directories to
@@ -34,8 +33,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 15
diff --git a/prebuilts/gradle/RuntimePermissionsBasic/README.md b/prebuilts/gradle/RuntimePermissionsBasic/README.md
index e75e686..0f9f963 100644
--- a/prebuilts/gradle/RuntimePermissionsBasic/README.md
+++ b/prebuilts/gradle/RuntimePermissionsBasic/README.md
@@ -22,8 +22,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 89255d7..2f6dc7d 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'
     }
 }
 
@@ -17,10 +17,10 @@
 }
 
 dependencies {
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
-    compile 'com.android.support:design:24.0.0-beta1'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
+    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:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     compile project(':Shared')
     wearApp project(':Wearable')
 }
@@ -36,7 +36,7 @@
 android {
     compileSdkVersion 23
 
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/RuntimePermissionsWear/README.md b/prebuilts/gradle/RuntimePermissionsWear/README.md
index 9388d4e..24f2d95 100644
--- a/prebuilts/gradle/RuntimePermissionsWear/README.md
+++ b/prebuilts/gradle/RuntimePermissionsWear/README.md
@@ -37,8 +37,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 74dd6c9..e9caec9 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 23
 
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/RuntimePermissionsWear/Wearable/build.gradle b/prebuilts/gradle/RuntimePermissionsWear/Wearable/build.gradle
index d769f1a..271ced8 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 b31c41b..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,13 +16,12 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
-    compile 'com.android.support:appcompat-v7:24.0.0-beta1'
-    compile 'com.android.support:recyclerview-v7:24.0.0-beta1'
-    compile 'com.android.support:support-v4:24.0.0-beta1'
+    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'
 }
 
 // The sample build uses multiple directories to
@@ -35,7 +34,7 @@
 
 android {
     compileSdkVersion 24
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 24
diff --git a/prebuilts/gradle/ScopedDirectoryAccess/README.md b/prebuilts/gradle/ScopedDirectoryAccess/README.md
index 2e29e27..81cdda2 100644
--- a/prebuilts/gradle/ScopedDirectoryAccess/README.md
+++ b/prebuilts/gradle/ScopedDirectoryAccess/README.md
@@ -37,7 +37,7 @@
 --------------
 
 - Android SDK 24
-- Android Build Tools v23.0.3
+- 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 c45ed11..1f54744 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 21
diff --git a/prebuilts/gradle/ScreenCapture/README.md b/prebuilts/gradle/ScreenCapture/README.md
index 3d46d45..c3ecae9 100644
--- a/prebuilts/gradle/ScreenCapture/README.md
+++ b/prebuilts/gradle/ScreenCapture/README.md
@@ -26,8 +26,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 5df07e4..1fd6410 100644
--- a/prebuilts/gradle/SkeletonWearableApp/README.md
+++ b/prebuilts/gradle/SkeletonWearableApp/README.md
@@ -21,8 +21,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 fa8f537..00ec504 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 f757b43..38e812c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SlidingTabsBasic/README.md b/prebuilts/gradle/SlidingTabsBasic/README.md
index cc4ee05..4830f0c 100644
--- a/prebuilts/gradle/SlidingTabsBasic/README.md
+++ b/prebuilts/gradle/SlidingTabsBasic/README.md
@@ -8,8 +8,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f757b43..38e812c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SlidingTabsColors/README.md b/prebuilts/gradle/SlidingTabsColors/README.md
index 8f32ecf..5cc3ca9 100644
--- a/prebuilts/gradle/SlidingTabsColors/README.md
+++ b/prebuilts/gradle/SlidingTabsColors/README.md
@@ -25,8 +25,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 522fe37..21cf4e0 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'
     }
 }
 
@@ -17,10 +17,10 @@
 }
 
 dependencies {
-    compile 'com.android.support:design:24.0.0-beta1'
-    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.0.0-beta1'
+    compile 'com.android.support:design:24.0.0'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/SpeedTracker/README.md b/prebuilts/gradle/SpeedTracker/README.md
index 2f4dfeb..9a6bfcc 100644
--- a/prebuilts/gradle/SpeedTracker/README.md
+++ b/prebuilts/gradle/SpeedTracker/README.md
@@ -16,8 +16,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 74dd6c9..e9caec9 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 23
 
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/SpeedTracker/Wearable/build.gradle b/prebuilts/gradle/SpeedTracker/Wearable/build.gradle
index a16c936..4a5266d 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 b2fa9ed..4e78d28 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 16
diff --git a/prebuilts/gradle/StorageClient/README.md b/prebuilts/gradle/StorageClient/README.md
index 54f44e0..88a72f5 100644
--- a/prebuilts/gradle/StorageClient/README.md
+++ b/prebuilts/gradle/StorageClient/README.md
@@ -23,8 +23,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 e3dbe03..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    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 2cd88e4..4894ed0 100644
--- a/prebuilts/gradle/StorageProvider/README.md
+++ b/prebuilts/gradle/StorageProvider/README.md
@@ -20,8 +20,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f757b43..38e812c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md b/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
index 43da52b..9fa2f5a 100644
--- a/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
+++ b/prebuilts/gradle/SwipeRefreshLayoutBasic/README.md
@@ -9,8 +9,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f757b43..38e812c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SwipeRefreshListFragment/README.md b/prebuilts/gradle/SwipeRefreshListFragment/README.md
index 1187231..85840ea 100644
--- a/prebuilts/gradle/SwipeRefreshListFragment/README.md
+++ b/prebuilts/gradle/SwipeRefreshListFragment/README.md
@@ -23,8 +23,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 f757b43..38e812c 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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -31,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 14
diff --git a/prebuilts/gradle/SwipeRefreshMultipleViews/README.md b/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
index 736495a..f57a8ab 100644
--- a/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
+++ b/prebuilts/gradle/SwipeRefreshMultipleViews/README.md
@@ -10,8 +10,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 94343e7..aad5079 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/SynchronizedNotifications/README.md b/prebuilts/gradle/SynchronizedNotifications/README.md
index 78c977c..8f7e498 100644
--- a/prebuilts/gradle/SynchronizedNotifications/README.md
+++ b/prebuilts/gradle/SynchronizedNotifications/README.md
@@ -51,8 +51,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 74dd6c9..e9caec9 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 23
 
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle b/prebuilts/gradle/SynchronizedNotifications/Wearable/build.gradle
index 276d8fd..98fa4dc 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 106dde3..3d79ea0 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,8 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -29,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 4
diff --git a/prebuilts/gradle/TextLinkify/README.md b/prebuilts/gradle/TextLinkify/README.md
index cc3b4ac..a97e401 100644
--- a/prebuilts/gradle/TextLinkify/README.md
+++ b/prebuilts/gradle/TextLinkify/README.md
@@ -32,8 +32,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 106dde3..3d79ea0 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,8 +16,10 @@
 }
 
 dependencies {
-    compile "com.android.support:support-v4:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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
@@ -29,8 +31,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 4
diff --git a/prebuilts/gradle/TextSwitcher/README.md b/prebuilts/gradle/TextSwitcher/README.md
index 2abcf29..ec1af64 100644
--- a/prebuilts/gradle/TextSwitcher/README.md
+++ b/prebuilts/gradle/TextSwitcher/README.md
@@ -22,8 +22,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 c74a03d..825814a 100644
--- a/prebuilts/gradle/Timer/README.md
+++ b/prebuilts/gradle/Timer/README.md
@@ -8,8 +8,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 fa8f537..00ec504 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 055e2d6..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.0.0-beta1"
-    compile "com.android.support:support-v13:24.0.0-beta1"
-    compile "com.android.support:cardview-v7:24.0.0-beta1"
-    compile "com.android.support:appcompat-v7:24.0.0-beta1"
+    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.0.0-beta1'
+    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')
 }
 
@@ -36,8 +36,8 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 23
-    buildToolsVersion "23.0.3"
+    compileSdkVersion 24
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/WatchFace/README.md b/prebuilts/gradle/WatchFace/README.md
index deae043..9bf7427 100644
--- a/prebuilts/gradle/WatchFace/README.md
+++ b/prebuilts/gradle/WatchFace/README.md
@@ -15,8 +15,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 92258a2..12b8d80 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 04f4017..9230e95 100644
--- a/prebuilts/gradle/WatchViewStub/README.md
+++ b/prebuilts/gradle/WatchViewStub/README.md
@@ -16,8 +16,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 fa8f537..00ec504 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 a7d8454..5b70bb8 100644
--- a/prebuilts/gradle/WearDrawers/README.md
+++ b/prebuilts/gradle/WearDrawers/README.md
@@ -28,8 +28,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 6ef783a..cfc5e78 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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 e92949a..03dfa70 100644
--- a/prebuilts/gradle/WearSpeakerSample/README.md
+++ b/prebuilts/gradle/WearSpeakerSample/README.md
@@ -11,8 +11,8 @@
 Pre-requisites
 --------------
 
-- Android SDK v23
-- Android Build Tools v23.0.3
+- Android SDK v24
+- 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 d1655d3..a068671 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-beta1'
-    compile 'com.android.support:recyclerview-v7:24.0.0-beta1'
-    compile 'com.android.support:design:24.0.0-beta1'
-    compile 'com.google.android.gms:play-services-wearable:8.4.0'
-    compile 'com.android.support:support-v13:24.0.0-beta1'
+    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:9.4.0'
+    compile 'com.android.support:support-v13:24.2.1'
     compile project(':Shared')
     wearApp project(':Wearable')
 }
@@ -40,7 +40,7 @@
 android {
     compileSdkVersion 23
 
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/XYZTouristAttractions/README.md b/prebuilts/gradle/XYZTouristAttractions/README.md
index d147e06..83e5277 100644
--- a/prebuilts/gradle/XYZTouristAttractions/README.md
+++ b/prebuilts/gradle/XYZTouristAttractions/README.md
@@ -99,8 +99,8 @@
 Pre-requisites
 --------------
 
-- Android SDK 23
-- Android Build Tools v23.0.3
+- Android SDK 24
+- 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 0622df9..29288ce 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 23
 
-    buildToolsVersion "23.0.3"
+    buildToolsVersion "24.0.2"
 
     defaultConfig {
         minSdkVersion 18
diff --git a/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle b/prebuilts/gradle/XYZTouristAttractions/Wearable/build.gradle
index 012088f..e04532f 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.0.0-beta1'
+    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 23
 
-    buildToolsVersion "23.0.3"
+    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
