diff --git a/wearable/wear/AgendaData/.gitignore b/deprecated/wearable/wear/AgendaData/.gitignore
similarity index 100%
rename from wearable/wear/AgendaData/.gitignore
rename to deprecated/wearable/wear/AgendaData/.gitignore
diff --git a/wearable/wear/AgendaData/Application/.gitignore b/deprecated/wearable/wear/AgendaData/Application/.gitignore
similarity index 100%
rename from wearable/wear/AgendaData/Application/.gitignore
rename to deprecated/wearable/wear/AgendaData/Application/.gitignore
diff --git a/wearable/wear/AgendaData/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/AgendaData/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/AgendaData/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/CalendarQueryService.java b/deprecated/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/CalendarQueryService.java
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/CalendarQueryService.java
rename to deprecated/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/CalendarQueryService.java
diff --git a/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/Constants.java b/deprecated/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/Constants.java
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/Constants.java
rename to deprecated/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/Constants.java
diff --git a/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/MainActivity.java b/deprecated/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/MainActivity.java
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/MainActivity.java
rename to deprecated/wearable/wear/AgendaData/Application/src/main/java/com/example/android/wearable/agendadata/MainActivity.java
diff --git a/wearable/wear/AgendaData/Application/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Application/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Application/src/main/res/drawable-nodpi/nobody.png b/deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-nodpi/nobody.png
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/res/drawable-nodpi/nobody.png
rename to deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-nodpi/nobody.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/AgendaData/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Application/src/main/res/layout/main.xml b/deprecated/wearable/wear/AgendaData/Application/src/main/res/layout/main.xml
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/res/layout/main.xml
rename to deprecated/wearable/wear/AgendaData/Application/src/main/res/layout/main.xml
diff --git a/wearable/wear/AgendaData/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/AgendaData/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/AgendaData/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/AgendaData/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/AgendaData/CONTRIB.md b/deprecated/wearable/wear/AgendaData/CONTRIB.md
similarity index 100%
rename from wearable/wear/AgendaData/CONTRIB.md
rename to deprecated/wearable/wear/AgendaData/CONTRIB.md
diff --git a/wearable/wear/AgendaData/Wearable/.gitignore b/deprecated/wearable/wear/AgendaData/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/.gitignore
rename to deprecated/wearable/wear/AgendaData/Wearable/.gitignore
diff --git a/wearable/wear/AgendaData/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/AgendaData/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/Constants.java b/deprecated/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/Constants.java
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/Constants.java
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/Constants.java
diff --git a/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/DeleteService.java b/deprecated/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/DeleteService.java
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/DeleteService.java
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/DeleteService.java
diff --git a/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/HomeListenerService.java b/deprecated/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/HomeListenerService.java
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/HomeListenerService.java
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/java/com/example/android/wearable/agendadata/HomeListenerService.java
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/drawable-hdpi/ic_menu_delete.png b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-hdpi/ic_menu_delete.png
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/drawable-hdpi/ic_menu_delete.png
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-hdpi/ic_menu_delete.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/drawable-mdpi/ic_menu_delete.png b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-mdpi/ic_menu_delete.png
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/drawable-mdpi/ic_menu_delete.png
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-mdpi/ic_menu_delete.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xhdpi/ic_menu_delete.png b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xhdpi/ic_menu_delete.png
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/drawable-xhdpi/ic_menu_delete.png
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xhdpi/ic_menu_delete.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xxhdpi/ic_menu_delete.png b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xxhdpi/ic_menu_delete.png
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/drawable-xxhdpi/ic_menu_delete.png
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/drawable-xxhdpi/ic_menu_delete.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/AgendaData/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/AgendaData/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/AgendaData/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/AgendaData/build.gradle b/deprecated/wearable/wear/AgendaData/build.gradle
similarity index 100%
rename from wearable/wear/AgendaData/build.gradle
rename to deprecated/wearable/wear/AgendaData/build.gradle
diff --git a/wearable/wear/AgendaData/buildSrc/build.gradle b/deprecated/wearable/wear/AgendaData/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/AgendaData/buildSrc/build.gradle
rename to deprecated/wearable/wear/AgendaData/buildSrc/build.gradle
diff --git a/wearable/wear/AgendaData/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/AgendaData/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/AgendaData/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/AgendaData/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/AgendaData/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/AgendaData/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/AgendaData/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/AgendaData/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/AgendaData/gradlew b/deprecated/wearable/wear/AgendaData/gradlew
similarity index 100%
rename from wearable/wear/AgendaData/gradlew
rename to deprecated/wearable/wear/AgendaData/gradlew
diff --git a/wearable/wear/AgendaData/gradlew.bat b/deprecated/wearable/wear/AgendaData/gradlew.bat
similarity index 100%
rename from wearable/wear/AgendaData/gradlew.bat
rename to deprecated/wearable/wear/AgendaData/gradlew.bat
diff --git a/wearable/wear/AgendaData/screenshots/companion_agenda_data.png b/deprecated/wearable/wear/AgendaData/screenshots/companion_agenda_data.png
similarity index 100%
rename from wearable/wear/AgendaData/screenshots/companion_agenda_data.png
rename to deprecated/wearable/wear/AgendaData/screenshots/companion_agenda_data.png
Binary files differ
diff --git a/wearable/wear/AgendaData/screenshots/dummy_calendar_event.png b/deprecated/wearable/wear/AgendaData/screenshots/dummy_calendar_event.png
similarity index 100%
rename from wearable/wear/AgendaData/screenshots/dummy_calendar_event.png
rename to deprecated/wearable/wear/AgendaData/screenshots/dummy_calendar_event.png
Binary files differ
diff --git a/wearable/wear/AgendaData/settings.gradle b/deprecated/wearable/wear/AgendaData/settings.gradle
similarity index 100%
rename from wearable/wear/AgendaData/settings.gradle
rename to deprecated/wearable/wear/AgendaData/settings.gradle
diff --git a/wearable/wear/AgendaData/template-params.xml b/deprecated/wearable/wear/AgendaData/template-params.xml
similarity index 100%
rename from wearable/wear/AgendaData/template-params.xml
rename to deprecated/wearable/wear/AgendaData/template-params.xml
diff --git a/wearable/wear/DelayedConfirmation/Application/.gitignore b/deprecated/wearable/wear/DelayedConfirmation/Application/.gitignore
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/.gitignore
rename to deprecated/wearable/wear/DelayedConfirmation/Application/.gitignore
diff --git a/wearable/wear/DelayedConfirmation/Application/proguard-project.txt b/deprecated/wearable/wear/DelayedConfirmation/Application/proguard-project.txt
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/proguard-project.txt
rename to deprecated/wearable/wear/DelayedConfirmation/Application/proguard-project.txt
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/java/com/example/android/wearable/delayedconfirmation/MainActivity.java b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/java/com/example/android/wearable/delayedconfirmation/MainActivity.java
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/java/com/example/android/wearable/delayedconfirmation/MainActivity.java
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/java/com/example/android/wearable/delayedconfirmation/MainActivity.java
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/res/layout/main_activity.xml b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/layout/main_activity.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/res/layout/main_activity.xml
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/layout/main_activity.xml
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/res/values/wear.xml b/deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/values/wear.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Application/src/main/res/values/wear.xml
rename to deprecated/wearable/wear/DelayedConfirmation/Application/src/main/res/values/wear.xml
diff --git a/wearable/wear/DelayedConfirmation/CONTRIB.md b/deprecated/wearable/wear/DelayedConfirmation/CONTRIB.md
similarity index 100%
rename from wearable/wear/DelayedConfirmation/CONTRIB.md
rename to deprecated/wearable/wear/DelayedConfirmation/CONTRIB.md
diff --git a/wearable/wear/DelayedConfirmation/Wearable/.gitignore b/deprecated/wearable/wear/DelayedConfirmation/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/.gitignore
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/.gitignore
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/java/com/example/android/wearable/delayedconfirmation/MainActivity.java b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/java/com/example/android/wearable/delayedconfirmation/MainActivity.java
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/java/com/example/android/wearable/delayedconfirmation/MainActivity.java
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/java/com/example/android/wearable/delayedconfirmation/MainActivity.java
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/java/com/example/android/wearable/delayedconfirmation/WearableMessageListenerService.java b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/java/com/example/android/wearable/delayedconfirmation/WearableMessageListenerService.java
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/java/com/example/android/wearable/delayedconfirmation/WearableMessageListenerService.java
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/java/com/example/android/wearable/delayedconfirmation/WearableMessageListenerService.java
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/res/layout/main_activity.xml b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/layout/main_activity.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/res/layout/main_activity.xml
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/layout/main_activity.xml
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/res/values/dimens.xml b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/values/dimens.xml
diff --git a/wearable/wear/DelayedConfirmation/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/DelayedConfirmation/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/DelayedConfirmation/build.gradle b/deprecated/wearable/wear/DelayedConfirmation/build.gradle
similarity index 100%
rename from wearable/wear/DelayedConfirmation/build.gradle
rename to deprecated/wearable/wear/DelayedConfirmation/build.gradle
diff --git a/wearable/wear/DelayedConfirmation/buildSrc/build.gradle b/deprecated/wearable/wear/DelayedConfirmation/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/DelayedConfirmation/buildSrc/build.gradle
rename to deprecated/wearable/wear/DelayedConfirmation/buildSrc/build.gradle
diff --git a/wearable/wear/DelayedConfirmation/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/DelayedConfirmation/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/DelayedConfirmation/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/DelayedConfirmation/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/DelayedConfirmation/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/DelayedConfirmation/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/DelayedConfirmation/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/DelayedConfirmation/gradlew b/deprecated/wearable/wear/DelayedConfirmation/gradlew
similarity index 100%
rename from wearable/wear/DelayedConfirmation/gradlew
rename to deprecated/wearable/wear/DelayedConfirmation/gradlew
diff --git a/wearable/wear/DelayedConfirmation/gradlew.bat b/deprecated/wearable/wear/DelayedConfirmation/gradlew.bat
similarity index 100%
rename from wearable/wear/DelayedConfirmation/gradlew.bat
rename to deprecated/wearable/wear/DelayedConfirmation/gradlew.bat
diff --git a/wearable/wear/DelayedConfirmation/screenshots/companion_delayed_confirmation.png b/deprecated/wearable/wear/DelayedConfirmation/screenshots/companion_delayed_confirmation.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/screenshots/companion_delayed_confirmation.png
rename to deprecated/wearable/wear/DelayedConfirmation/screenshots/companion_delayed_confirmation.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_box_inset_all.png b/deprecated/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_box_inset_all.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_box_inset_all.png
rename to deprecated/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_box_inset_all.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_box_inset_top.png b/deprecated/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_box_inset_top.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_box_inset_top.png
rename to deprecated/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_box_inset_top.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_notification.png b/deprecated/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_notification.png
similarity index 100%
rename from wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_notification.png
rename to deprecated/wearable/wear/DelayedConfirmation/screenshots/delayed_confirmation_notification.png
Binary files differ
diff --git a/wearable/wear/DelayedConfirmation/settings.gradle b/deprecated/wearable/wear/DelayedConfirmation/settings.gradle
similarity index 100%
rename from wearable/wear/DelayedConfirmation/settings.gradle
rename to deprecated/wearable/wear/DelayedConfirmation/settings.gradle
diff --git a/wearable/wear/DelayedConfirmation/template-params.xml b/deprecated/wearable/wear/DelayedConfirmation/template-params.xml
similarity index 100%
rename from wearable/wear/DelayedConfirmation/template-params.xml
rename to deprecated/wearable/wear/DelayedConfirmation/template-params.xml
diff --git a/wearable/wear/ElizaChat/Application/.gitignore b/deprecated/wearable/wear/ElizaChat/Application/.gitignore
similarity index 100%
rename from wearable/wear/ElizaChat/Application/.gitignore
rename to deprecated/wearable/wear/ElizaChat/Application/.gitignore
diff --git a/wearable/wear/ElizaChat/Application/proguard-project.txt b/deprecated/wearable/wear/ElizaChat/Application/proguard-project.txt
similarity index 100%
rename from wearable/wear/ElizaChat/Application/proguard-project.txt
rename to deprecated/wearable/wear/ElizaChat/Application/proguard-project.txt
diff --git a/wearable/wear/ElizaChat/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/ElizaChat/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/ElizaResponder.java b/deprecated/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/ElizaResponder.java
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/ElizaResponder.java
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/ElizaResponder.java
diff --git a/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/MainActivity.java b/deprecated/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/MainActivity.java
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/MainActivity.java
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/MainActivity.java
diff --git a/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/ResponderService.java b/deprecated/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/ResponderService.java
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/ResponderService.java
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/java/com/example/android/wearable/elizachat/ResponderService.java
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/drawable-hdpi/ic_full_reply.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/drawable-hdpi/ic_full_reply.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/drawable-hdpi/ic_full_reply.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/drawable-hdpi/ic_full_reply.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/drawable-mdpi/ic_full_reply.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/drawable-mdpi/ic_full_reply.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/drawable-mdpi/ic_full_reply.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/drawable-mdpi/ic_full_reply.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/drawable-nodpi/bg_eliza.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/drawable-nodpi/bg_eliza.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/drawable-nodpi/bg_eliza.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/drawable-nodpi/bg_eliza.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/drawable-xhdpi/ic_full_reply.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/drawable-xhdpi/ic_full_reply.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/drawable-xhdpi/ic_full_reply.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/drawable-xhdpi/ic_full_reply.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/layout/main.xml b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/layout/main.xml
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/layout/main.xml
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/layout/main.xml
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/menu/main.xml b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/menu/main.xml
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/menu/main.xml
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/menu/main.xml
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/mipmap-hdpi/ic_app_eliza.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-hdpi/ic_app_eliza.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/mipmap-hdpi/ic_app_eliza.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-hdpi/ic_app_eliza.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/mipmap-mdpi/ic_app_eliza.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-mdpi/ic_app_eliza.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/mipmap-mdpi/ic_app_eliza.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-mdpi/ic_app_eliza.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xhdpi/ic_app_eliza.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xhdpi/ic_app_eliza.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/mipmap-xhdpi/ic_app_eliza.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xhdpi/ic_app_eliza.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xxhdpi/ic_app_eliza.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xxhdpi/ic_app_eliza.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/mipmap-xxhdpi/ic_app_eliza.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xxhdpi/ic_app_eliza.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xxxhdpi/ic_app_eliza.png b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xxxhdpi/ic_app_eliza.png
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/mipmap-xxxhdpi/ic_app_eliza.png
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/mipmap-xxxhdpi/ic_app_eliza.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/values/dimens.xml b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/values/dimens.xml
diff --git a/wearable/wear/ElizaChat/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/ElizaChat/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/ElizaChat/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/ElizaChat/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/ElizaChat/CONTRIB.md b/deprecated/wearable/wear/ElizaChat/CONTRIB.md
similarity index 100%
rename from wearable/wear/ElizaChat/CONTRIB.md
rename to deprecated/wearable/wear/ElizaChat/CONTRIB.md
diff --git a/wearable/wear/ElizaChat/build.gradle b/deprecated/wearable/wear/ElizaChat/build.gradle
similarity index 100%
rename from wearable/wear/ElizaChat/build.gradle
rename to deprecated/wearable/wear/ElizaChat/build.gradle
diff --git a/wearable/wear/ElizaChat/buildSrc/build.gradle b/deprecated/wearable/wear/ElizaChat/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/ElizaChat/buildSrc/build.gradle
rename to deprecated/wearable/wear/ElizaChat/buildSrc/build.gradle
diff --git a/wearable/wear/ElizaChat/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/ElizaChat/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/ElizaChat/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/ElizaChat/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/ElizaChat/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/ElizaChat/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/ElizaChat/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/ElizaChat/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/ElizaChat/gradlew b/deprecated/wearable/wear/ElizaChat/gradlew
similarity index 100%
rename from wearable/wear/ElizaChat/gradlew
rename to deprecated/wearable/wear/ElizaChat/gradlew
diff --git a/wearable/wear/ElizaChat/gradlew.bat b/deprecated/wearable/wear/ElizaChat/gradlew.bat
similarity index 100%
rename from wearable/wear/ElizaChat/gradlew.bat
rename to deprecated/wearable/wear/ElizaChat/gradlew.bat
diff --git a/wearable/wear/ElizaChat/screenshots/companion_eliza_chat.png b/deprecated/wearable/wear/ElizaChat/screenshots/companion_eliza_chat.png
similarity index 100%
rename from wearable/wear/ElizaChat/screenshots/companion_eliza_chat.png
rename to deprecated/wearable/wear/ElizaChat/screenshots/companion_eliza_chat.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/screenshots/companion_eliza_chat_response.png b/deprecated/wearable/wear/ElizaChat/screenshots/companion_eliza_chat_response.png
similarity index 100%
rename from wearable/wear/ElizaChat/screenshots/companion_eliza_chat_response.png
rename to deprecated/wearable/wear/ElizaChat/screenshots/companion_eliza_chat_response.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/screenshots/wearable_eliza_notification.png b/deprecated/wearable/wear/ElizaChat/screenshots/wearable_eliza_notification.png
similarity index 100%
rename from wearable/wear/ElizaChat/screenshots/wearable_eliza_notification.png
rename to deprecated/wearable/wear/ElizaChat/screenshots/wearable_eliza_notification.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/screenshots/wearable_voice_reply.png b/deprecated/wearable/wear/ElizaChat/screenshots/wearable_voice_reply.png
similarity index 100%
rename from wearable/wear/ElizaChat/screenshots/wearable_voice_reply.png
rename to deprecated/wearable/wear/ElizaChat/screenshots/wearable_voice_reply.png
Binary files differ
diff --git a/wearable/wear/ElizaChat/settings.gradle b/deprecated/wearable/wear/ElizaChat/settings.gradle
similarity index 100%
rename from wearable/wear/ElizaChat/settings.gradle
rename to deprecated/wearable/wear/ElizaChat/settings.gradle
diff --git a/wearable/wear/ElizaChat/template-params.xml b/deprecated/wearable/wear/ElizaChat/template-params.xml
similarity index 100%
rename from wearable/wear/ElizaChat/template-params.xml
rename to deprecated/wearable/wear/ElizaChat/template-params.xml
diff --git a/wearable/wear/EmbeddedApp/Application/.gitignore b/deprecated/wearable/wear/EmbeddedApp/Application/.gitignore
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/.gitignore
rename to deprecated/wearable/wear/EmbeddedApp/Application/.gitignore
diff --git a/wearable/wear/EmbeddedApp/Application/proguard-project.txt b/deprecated/wearable/wear/EmbeddedApp/Application/proguard-project.txt
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/proguard-project.txt
rename to deprecated/wearable/wear/EmbeddedApp/Application/proguard-project.txt
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/java/com/example/android/wearable/embeddedapp/PhoneActivity.java b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/java/com/example/android/wearable/embeddedapp/PhoneActivity.java
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/java/com/example/android/wearable/embeddedapp/PhoneActivity.java
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/java/com/example/android/wearable/embeddedapp/PhoneActivity.java
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/res/layout/activity_phone.xml b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/layout/activity_phone.xml
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/res/layout/activity_phone.xml
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/layout/activity_phone.xml
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/res/values/dimens.xml b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/values/dimens.xml
diff --git a/wearable/wear/EmbeddedApp/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/EmbeddedApp/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/EmbeddedApp/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/EmbeddedApp/CONTRIB.md b/deprecated/wearable/wear/EmbeddedApp/CONTRIB.md
similarity index 100%
rename from wearable/wear/EmbeddedApp/CONTRIB.md
rename to deprecated/wearable/wear/EmbeddedApp/CONTRIB.md
diff --git a/wearable/wear/EmbeddedApp/Wearable/.gitignore b/deprecated/wearable/wear/EmbeddedApp/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/.gitignore
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/.gitignore
diff --git a/wearable/wear/EmbeddedApp/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/EmbeddedApp/Wearable/src/main/java/com/example/android/wearable/embeddedapp/WearableActivity.java b/deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/java/com/example/android/wearable/embeddedapp/WearableActivity.java
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/src/main/java/com/example/android/wearable/embeddedapp/WearableActivity.java
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/java/com/example/android/wearable/embeddedapp/WearableActivity.java
diff --git a/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/Wearable/src/main/res/layout/activity_wearable.xml b/deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/layout/activity_wearable.xml
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/src/main/res/layout/activity_wearable.xml
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/layout/activity_wearable.xml
diff --git a/wearable/wear/EmbeddedApp/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/EmbeddedApp/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/EmbeddedApp/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/EmbeddedApp/build.gradle b/deprecated/wearable/wear/EmbeddedApp/build.gradle
similarity index 100%
rename from wearable/wear/EmbeddedApp/build.gradle
rename to deprecated/wearable/wear/EmbeddedApp/build.gradle
diff --git a/wearable/wear/EmbeddedApp/buildSrc/build.gradle b/deprecated/wearable/wear/EmbeddedApp/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/EmbeddedApp/buildSrc/build.gradle
rename to deprecated/wearable/wear/EmbeddedApp/buildSrc/build.gradle
diff --git a/wearable/wear/EmbeddedApp/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/EmbeddedApp/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/EmbeddedApp/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/EmbeddedApp/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/EmbeddedApp/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/EmbeddedApp/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/EmbeddedApp/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/EmbeddedApp/gradlew b/deprecated/wearable/wear/EmbeddedApp/gradlew
similarity index 100%
rename from wearable/wear/EmbeddedApp/gradlew
rename to deprecated/wearable/wear/EmbeddedApp/gradlew
diff --git a/wearable/wear/EmbeddedApp/gradlew.bat b/deprecated/wearable/wear/EmbeddedApp/gradlew.bat
similarity index 100%
rename from wearable/wear/EmbeddedApp/gradlew.bat
rename to deprecated/wearable/wear/EmbeddedApp/gradlew.bat
diff --git a/wearable/wear/EmbeddedApp/screenshots/embedded_wearable_app.png b/deprecated/wearable/wear/EmbeddedApp/screenshots/embedded_wearable_app.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/screenshots/embedded_wearable_app.png
rename to deprecated/wearable/wear/EmbeddedApp/screenshots/embedded_wearable_app.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/screenshots/phone_app.png b/deprecated/wearable/wear/EmbeddedApp/screenshots/phone_app.png
similarity index 100%
rename from wearable/wear/EmbeddedApp/screenshots/phone_app.png
rename to deprecated/wearable/wear/EmbeddedApp/screenshots/phone_app.png
Binary files differ
diff --git a/wearable/wear/EmbeddedApp/settings.gradle b/deprecated/wearable/wear/EmbeddedApp/settings.gradle
similarity index 100%
rename from wearable/wear/EmbeddedApp/settings.gradle
rename to deprecated/wearable/wear/EmbeddedApp/settings.gradle
diff --git a/wearable/wear/EmbeddedApp/template-params.xml b/deprecated/wearable/wear/EmbeddedApp/template-params.xml
similarity index 100%
rename from wearable/wear/EmbeddedApp/template-params.xml
rename to deprecated/wearable/wear/EmbeddedApp/template-params.xml
diff --git a/wearable/wear/FindMyPhone/Application/.gitignore b/deprecated/wearable/wear/FindMyPhone/Application/.gitignore
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/.gitignore
rename to deprecated/wearable/wear/FindMyPhone/Application/.gitignore
diff --git a/wearable/wear/FindMyPhone/Application/proguard-project.txt b/deprecated/wearable/wear/FindMyPhone/Application/proguard-project.txt
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/proguard-project.txt
rename to deprecated/wearable/wear/FindMyPhone/Application/proguard-project.txt
diff --git a/wearable/wear/FindMyPhone/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/FindMyPhone/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/FindMyPhone/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/FindMyPhone/Application/src/main/java/com/example/android/wearable/findphone/SoundAlarmListenerService.java b/deprecated/wearable/wear/FindMyPhone/Application/src/main/java/com/example/android/wearable/findphone/SoundAlarmListenerService.java
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/src/main/java/com/example/android/wearable/findphone/SoundAlarmListenerService.java
rename to deprecated/wearable/wear/FindMyPhone/Application/src/main/java/com/example/android/wearable/findphone/SoundAlarmListenerService.java
diff --git a/wearable/wear/FindMyPhone/Application/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/FindMyPhone/Application/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/FindMyPhone/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Application/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/FindMyPhone/Application/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/FindMyPhone/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/FindMyPhone/Application/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/FindMyPhone/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/FindMyPhone/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/FindMyPhone/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/FindMyPhone/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/FindMyPhone/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/FindMyPhone/Application/src/main/res/values/wear.xml b/deprecated/wearable/wear/FindMyPhone/Application/src/main/res/values/wear.xml
similarity index 100%
rename from wearable/wear/FindMyPhone/Application/src/main/res/values/wear.xml
rename to deprecated/wearable/wear/FindMyPhone/Application/src/main/res/values/wear.xml
diff --git a/wearable/wear/FindMyPhone/CONTRIB.md b/deprecated/wearable/wear/FindMyPhone/CONTRIB.md
similarity index 100%
rename from wearable/wear/FindMyPhone/CONTRIB.md
rename to deprecated/wearable/wear/FindMyPhone/CONTRIB.md
diff --git a/wearable/wear/FindMyPhone/Wearable/.gitignore b/deprecated/wearable/wear/FindMyPhone/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/.gitignore
rename to deprecated/wearable/wear/FindMyPhone/Wearable/.gitignore
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/DisconnectListenerService.java b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/DisconnectListenerService.java
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/DisconnectListenerService.java
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/DisconnectListenerService.java
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/FindPhoneActivity.java b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/FindPhoneActivity.java
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/FindPhoneActivity.java
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/FindPhoneActivity.java
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/FindPhoneService.java b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/FindPhoneService.java
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/FindPhoneService.java
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/java/com/example/android/wearable/findphone/FindPhoneService.java
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-hdpi/alarm_action_icon.png b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-hdpi/alarm_action_icon.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-hdpi/alarm_action_icon.png
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-hdpi/alarm_action_icon.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/FindMyPhone/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/FindMyPhone/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/FindMyPhone/build.gradle b/deprecated/wearable/wear/FindMyPhone/build.gradle
similarity index 100%
rename from wearable/wear/FindMyPhone/build.gradle
rename to deprecated/wearable/wear/FindMyPhone/build.gradle
diff --git a/wearable/wear/FindMyPhone/buildSrc/build.gradle b/deprecated/wearable/wear/FindMyPhone/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/FindMyPhone/buildSrc/build.gradle
rename to deprecated/wearable/wear/FindMyPhone/buildSrc/build.gradle
diff --git a/wearable/wear/FindMyPhone/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/FindMyPhone/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/FindMyPhone/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/FindMyPhone/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/FindMyPhone/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/FindMyPhone/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/FindMyPhone/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/FindMyPhone/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/FindMyPhone/gradlew b/deprecated/wearable/wear/FindMyPhone/gradlew
similarity index 100%
rename from wearable/wear/FindMyPhone/gradlew
rename to deprecated/wearable/wear/FindMyPhone/gradlew
diff --git a/wearable/wear/FindMyPhone/gradlew.bat b/deprecated/wearable/wear/FindMyPhone/gradlew.bat
similarity index 100%
rename from wearable/wear/FindMyPhone/gradlew.bat
rename to deprecated/wearable/wear/FindMyPhone/gradlew.bat
diff --git a/wearable/wear/FindMyPhone/screenshots/find_my_phone_activity.png b/deprecated/wearable/wear/FindMyPhone/screenshots/find_my_phone_activity.png
similarity index 100%
rename from wearable/wear/FindMyPhone/screenshots/find_my_phone_activity.png
rename to deprecated/wearable/wear/FindMyPhone/screenshots/find_my_phone_activity.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/screenshots/find_my_phone_notification.png b/deprecated/wearable/wear/FindMyPhone/screenshots/find_my_phone_notification.png
similarity index 100%
rename from wearable/wear/FindMyPhone/screenshots/find_my_phone_notification.png
rename to deprecated/wearable/wear/FindMyPhone/screenshots/find_my_phone_notification.png
Binary files differ
diff --git a/wearable/wear/FindMyPhone/settings.gradle b/deprecated/wearable/wear/FindMyPhone/settings.gradle
similarity index 100%
rename from wearable/wear/FindMyPhone/settings.gradle
rename to deprecated/wearable/wear/FindMyPhone/settings.gradle
diff --git a/wearable/wear/FindMyPhone/template-params.xml b/deprecated/wearable/wear/FindMyPhone/template-params.xml
similarity index 100%
rename from wearable/wear/FindMyPhone/template-params.xml
rename to deprecated/wearable/wear/FindMyPhone/template-params.xml
diff --git a/wearable/wear/Flashlight/CONTRIB.md b/deprecated/wearable/wear/Flashlight/CONTRIB.md
similarity index 100%
rename from wearable/wear/Flashlight/CONTRIB.md
rename to deprecated/wearable/wear/Flashlight/CONTRIB.md
diff --git a/wearable/wear/Flashlight/Wearable/.gitignore b/deprecated/wearable/wear/Flashlight/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/.gitignore
rename to deprecated/wearable/wear/Flashlight/Wearable/.gitignore
diff --git a/wearable/wear/Flashlight/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/Flashlight/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/Flashlight/Wearable/src/main/java/com/example/android/wearable/flashlight/MainActivity.java b/deprecated/wearable/wear/Flashlight/Wearable/src/main/java/com/example/android/wearable/flashlight/MainActivity.java
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/java/com/example/android/wearable/flashlight/MainActivity.java
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/java/com/example/android/wearable/flashlight/MainActivity.java
diff --git a/wearable/wear/Flashlight/Wearable/src/main/java/com/example/android/wearable/flashlight/PartyLightView.java b/deprecated/wearable/wear/Flashlight/Wearable/src/main/java/com/example/android/wearable/flashlight/PartyLightView.java
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/java/com/example/android/wearable/flashlight/PartyLightView.java
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/java/com/example/android/wearable/flashlight/PartyLightView.java
diff --git a/wearable/wear/Flashlight/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/Flashlight/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Flashlight/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/Flashlight/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Flashlight/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/Flashlight/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Flashlight/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/Flashlight/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Flashlight/Wearable/src/main/res/layout/main.xml b/deprecated/wearable/wear/Flashlight/Wearable/src/main/res/layout/main.xml
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/res/layout/main.xml
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/res/layout/main.xml
diff --git a/wearable/wear/Flashlight/Wearable/src/main/res/layout/party_light.xml b/deprecated/wearable/wear/Flashlight/Wearable/src/main/res/layout/party_light.xml
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/res/layout/party_light.xml
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/res/layout/party_light.xml
diff --git a/wearable/wear/Flashlight/Wearable/src/main/res/layout/white_light.xml b/deprecated/wearable/wear/Flashlight/Wearable/src/main/res/layout/white_light.xml
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/res/layout/white_light.xml
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/res/layout/white_light.xml
diff --git a/wearable/wear/Flashlight/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/Flashlight/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/Flashlight/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/Flashlight/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/Flashlight/build.gradle b/deprecated/wearable/wear/Flashlight/build.gradle
similarity index 100%
rename from wearable/wear/Flashlight/build.gradle
rename to deprecated/wearable/wear/Flashlight/build.gradle
diff --git a/wearable/wear/Flashlight/buildSrc/build.gradle b/deprecated/wearable/wear/Flashlight/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/Flashlight/buildSrc/build.gradle
rename to deprecated/wearable/wear/Flashlight/buildSrc/build.gradle
diff --git a/wearable/wear/Flashlight/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/Flashlight/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/Flashlight/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/Flashlight/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/Flashlight/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/Flashlight/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/Flashlight/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/Flashlight/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/Flashlight/gradlew b/deprecated/wearable/wear/Flashlight/gradlew
similarity index 100%
rename from wearable/wear/Flashlight/gradlew
rename to deprecated/wearable/wear/Flashlight/gradlew
diff --git a/wearable/wear/Flashlight/gradlew.bat b/deprecated/wearable/wear/Flashlight/gradlew.bat
similarity index 100%
rename from wearable/wear/Flashlight/gradlew.bat
rename to deprecated/wearable/wear/Flashlight/gradlew.bat
diff --git a/wearable/wear/Flashlight/screenshots/flashlight.png b/deprecated/wearable/wear/Flashlight/screenshots/flashlight.png
similarity index 100%
rename from wearable/wear/Flashlight/screenshots/flashlight.png
rename to deprecated/wearable/wear/Flashlight/screenshots/flashlight.png
Binary files differ
diff --git a/wearable/wear/Flashlight/screenshots/icon-web.png b/deprecated/wearable/wear/Flashlight/screenshots/icon-web.png
similarity index 100%
rename from wearable/wear/Flashlight/screenshots/icon-web.png
rename to deprecated/wearable/wear/Flashlight/screenshots/icon-web.png
Binary files differ
diff --git a/wearable/wear/Flashlight/screenshots/party_mode.gif b/deprecated/wearable/wear/Flashlight/screenshots/party_mode.gif
similarity index 100%
rename from wearable/wear/Flashlight/screenshots/party_mode.gif
rename to deprecated/wearable/wear/Flashlight/screenshots/party_mode.gif
Binary files differ
diff --git a/wearable/wear/Flashlight/settings.gradle b/deprecated/wearable/wear/Flashlight/settings.gradle
similarity index 100%
rename from wearable/wear/Flashlight/settings.gradle
rename to deprecated/wearable/wear/Flashlight/settings.gradle
diff --git a/wearable/wear/Flashlight/template-params.xml b/deprecated/wearable/wear/Flashlight/template-params.xml
similarity index 100%
rename from wearable/wear/Flashlight/template-params.xml
rename to deprecated/wearable/wear/Flashlight/template-params.xml
diff --git a/wearable/wear/Geofencing/Application/.gitignore b/deprecated/wearable/wear/Geofencing/Application/.gitignore
similarity index 100%
rename from wearable/wear/Geofencing/Application/.gitignore
rename to deprecated/wearable/wear/Geofencing/Application/.gitignore
diff --git a/wearable/wear/Geofencing/Application/proguard-project.txt b/deprecated/wearable/wear/Geofencing/Application/proguard-project.txt
similarity index 100%
rename from wearable/wear/Geofencing/Application/proguard-project.txt
rename to deprecated/wearable/wear/Geofencing/Application/proguard-project.txt
diff --git a/wearable/wear/Geofencing/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/Geofencing/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/Geofencing/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/Constants.java b/deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/Constants.java
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/Constants.java
rename to deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/Constants.java
diff --git a/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/GeofenceTransitionsIntentService.java b/deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/GeofenceTransitionsIntentService.java
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/GeofenceTransitionsIntentService.java
rename to deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/GeofenceTransitionsIntentService.java
diff --git a/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/MainActivity.java b/deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/MainActivity.java
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/MainActivity.java
rename to deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/MainActivity.java
diff --git a/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/SimpleGeofence.java b/deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/SimpleGeofence.java
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/SimpleGeofence.java
rename to deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/SimpleGeofence.java
diff --git a/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/SimpleGeofenceStore.java b/deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/SimpleGeofenceStore.java
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/SimpleGeofenceStore.java
rename to deprecated/wearable/wear/Geofencing/Application/src/main/java/com/example/android/wearable/geofencing/SimpleGeofenceStore.java
diff --git a/wearable/wear/Geofencing/Application/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/Geofencing/Application/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/Geofencing/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Application/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/Geofencing/Application/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/Geofencing/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/Geofencing/Application/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Geofencing/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/Geofencing/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Geofencing/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/Geofencing/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/Geofencing/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/Geofencing/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/Geofencing/CONTRIB.md b/deprecated/wearable/wear/Geofencing/CONTRIB.md
similarity index 100%
rename from wearable/wear/Geofencing/CONTRIB.md
rename to deprecated/wearable/wear/Geofencing/CONTRIB.md
diff --git a/wearable/wear/Geofencing/Wearable/.gitignore b/deprecated/wearable/wear/Geofencing/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/.gitignore
rename to deprecated/wearable/wear/Geofencing/Wearable/.gitignore
diff --git a/wearable/wear/Geofencing/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/Geofencing/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/CheckInAndDeleteDataItemsService.java b/deprecated/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/CheckInAndDeleteDataItemsService.java
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/CheckInAndDeleteDataItemsService.java
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/CheckInAndDeleteDataItemsService.java
diff --git a/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/Constants.java b/deprecated/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/Constants.java
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/Constants.java
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/Constants.java
diff --git a/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/HomeListenerService.java b/deprecated/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/HomeListenerService.java
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/HomeListenerService.java
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/java/com/example/android/wearable/geofencing/HomeListenerService.java
diff --git a/wearable/wear/Geofencing/Wearable/src/main/res/drawable-hdpi/ic_action_check_in.png b/deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-hdpi/ic_action_check_in.png
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/res/drawable-hdpi/ic_action_check_in.png
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-hdpi/ic_action_check_in.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Wearable/src/main/res/drawable-nodpi/android_building.png b/deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-nodpi/android_building.png
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/res/drawable-nodpi/android_building.png
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-nodpi/android_building.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Wearable/src/main/res/drawable-nodpi/yerba_buena.png b/deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-nodpi/yerba_buena.png
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/res/drawable-nodpi/yerba_buena.png
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-nodpi/yerba_buena.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Geofencing/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/Geofencing/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/Geofencing/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/Geofencing/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/Geofencing/build.gradle b/deprecated/wearable/wear/Geofencing/build.gradle
similarity index 100%
rename from wearable/wear/Geofencing/build.gradle
rename to deprecated/wearable/wear/Geofencing/build.gradle
diff --git a/wearable/wear/Geofencing/buildSrc/build.gradle b/deprecated/wearable/wear/Geofencing/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/Geofencing/buildSrc/build.gradle
rename to deprecated/wearable/wear/Geofencing/buildSrc/build.gradle
diff --git a/wearable/wear/Geofencing/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/Geofencing/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/Geofencing/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/Geofencing/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/Geofencing/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/Geofencing/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/Geofencing/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/Geofencing/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/Geofencing/gradlew b/deprecated/wearable/wear/Geofencing/gradlew
similarity index 100%
rename from wearable/wear/Geofencing/gradlew
rename to deprecated/wearable/wear/Geofencing/gradlew
diff --git a/wearable/wear/Geofencing/gradlew.bat b/deprecated/wearable/wear/Geofencing/gradlew.bat
similarity index 100%
rename from wearable/wear/Geofencing/gradlew.bat
rename to deprecated/wearable/wear/Geofencing/gradlew.bat
diff --git a/wearable/wear/Geofencing/screenshots/android_building_check_in.png b/deprecated/wearable/wear/Geofencing/screenshots/android_building_check_in.png
similarity index 100%
rename from wearable/wear/Geofencing/screenshots/android_building_check_in.png
rename to deprecated/wearable/wear/Geofencing/screenshots/android_building_check_in.png
Binary files differ
diff --git a/wearable/wear/Geofencing/screenshots/icon-web.png b/deprecated/wearable/wear/Geofencing/screenshots/icon-web.png
similarity index 100%
rename from wearable/wear/Geofencing/screenshots/icon-web.png
rename to deprecated/wearable/wear/Geofencing/screenshots/icon-web.png
Binary files differ
diff --git a/wearable/wear/Geofencing/settings.gradle b/deprecated/wearable/wear/Geofencing/settings.gradle
similarity index 100%
rename from wearable/wear/Geofencing/settings.gradle
rename to deprecated/wearable/wear/Geofencing/settings.gradle
diff --git a/wearable/wear/Geofencing/template-params.xml b/deprecated/wearable/wear/Geofencing/template-params.xml
similarity index 100%
rename from wearable/wear/Geofencing/template-params.xml
rename to deprecated/wearable/wear/Geofencing/template-params.xml
diff --git a/wearable/wear/GridViewPager/.gitignore b/deprecated/wearable/wear/GridViewPager/.gitignore
similarity index 100%
rename from wearable/wear/GridViewPager/.gitignore
rename to deprecated/wearable/wear/GridViewPager/.gitignore
diff --git a/wearable/wear/GridViewPager/CONTRIB.md b/deprecated/wearable/wear/GridViewPager/CONTRIB.md
similarity index 100%
rename from wearable/wear/GridViewPager/CONTRIB.md
rename to deprecated/wearable/wear/GridViewPager/CONTRIB.md
diff --git a/wearable/wear/GridViewPager/Wearable/.gitignore b/deprecated/wearable/wear/GridViewPager/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/.gitignore
rename to deprecated/wearable/wear/GridViewPager/Wearable/.gitignore
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/CustomFragment.java b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/CustomFragment.java
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/CustomFragment.java
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/CustomFragment.java
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/MainActivity.java b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/MainActivity.java
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/MainActivity.java
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/MainActivity.java
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/SampleGridPagerAdapter.java b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/SampleGridPagerAdapter.java
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/SampleGridPagerAdapter.java
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/SampleGridPagerAdapter.java
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/bugdroid.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/bugdroid.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/bugdroid.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/bugdroid.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_left.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_left.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_left.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_left.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_right.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_right.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_right.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_right.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_up.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_up.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_up.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-hdpi/ic_swipe_arrow_up.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/bugdroid.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/bugdroid.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/bugdroid.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/bugdroid.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_left.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_left.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_left.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_left.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_right.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_right.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_right.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_right.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_up.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_up.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_up.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-mdpi/ic_swipe_arrow_up.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-nodpi/bugdroid_large.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-nodpi/bugdroid_large.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-nodpi/bugdroid_large.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-nodpi/bugdroid_large.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_left.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_left.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_left.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_left.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_right.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_right.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_right.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_right.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_up.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_up.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_up.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xhdpi/ic_swipe_arrow_up.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_1.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_1.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_1.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_1.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_2.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_2.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_2.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_2.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_3.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_3.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_3.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_3.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_4.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_4.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_4.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_4.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_5.png b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_5.png
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_5.png
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/debug_background_5.png
Binary files differ
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/gradient.xml b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/gradient.xml
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable/gradient.xml
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/gradient.xml
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/shape.xml b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/shape.xml
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/drawable/shape.xml
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/shape.xml
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/layout/activity_main.xml b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/layout/activity_main.xml
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/layout/activity_main.xml
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/layout/activity_main.xml
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/layout/custom_fragment.xml b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/layout/custom_fragment.xml
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/layout/custom_fragment.xml
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/layout/custom_fragment.xml
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/values/dimens.xml b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/values/dimens.xml
diff --git a/wearable/wear/GridViewPager/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/GridViewPager/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/GridViewPager/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/GridViewPager/build.gradle b/deprecated/wearable/wear/GridViewPager/build.gradle
similarity index 100%
rename from wearable/wear/GridViewPager/build.gradle
rename to deprecated/wearable/wear/GridViewPager/build.gradle
diff --git a/wearable/wear/GridViewPager/buildSrc/build.gradle b/deprecated/wearable/wear/GridViewPager/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/GridViewPager/buildSrc/build.gradle
rename to deprecated/wearable/wear/GridViewPager/buildSrc/build.gradle
diff --git a/wearable/wear/GridViewPager/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/GridViewPager/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/GridViewPager/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/GridViewPager/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/GridViewPager/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/GridViewPager/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/GridViewPager/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/GridViewPager/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/GridViewPager/gradlew b/deprecated/wearable/wear/GridViewPager/gradlew
similarity index 100%
rename from wearable/wear/GridViewPager/gradlew
rename to deprecated/wearable/wear/GridViewPager/gradlew
diff --git a/wearable/wear/GridViewPager/gradlew.bat b/deprecated/wearable/wear/GridViewPager/gradlew.bat
similarity index 100%
rename from wearable/wear/GridViewPager/gradlew.bat
rename to deprecated/wearable/wear/GridViewPager/gradlew.bat
diff --git a/wearable/wear/GridViewPager/screenshots/grid_view_pager.gif b/deprecated/wearable/wear/GridViewPager/screenshots/grid_view_pager.gif
similarity index 100%
rename from wearable/wear/GridViewPager/screenshots/grid_view_pager.gif
rename to deprecated/wearable/wear/GridViewPager/screenshots/grid_view_pager.gif
Binary files differ
diff --git a/wearable/wear/GridViewPager/settings.gradle b/deprecated/wearable/wear/GridViewPager/settings.gradle
similarity index 100%
rename from wearable/wear/GridViewPager/settings.gradle
rename to deprecated/wearable/wear/GridViewPager/settings.gradle
diff --git a/wearable/wear/GridViewPager/template-params.xml b/deprecated/wearable/wear/GridViewPager/template-params.xml
similarity index 100%
rename from wearable/wear/GridViewPager/template-params.xml
rename to deprecated/wearable/wear/GridViewPager/template-params.xml
diff --git a/wearable/wear/Notifications/.gitignore b/deprecated/wearable/wear/Notifications/.gitignore
similarity index 100%
rename from wearable/wear/Notifications/.gitignore
rename to deprecated/wearable/wear/Notifications/.gitignore
diff --git a/wearable/wear/Notifications/Application/.gitignore b/deprecated/wearable/wear/Notifications/Application/.gitignore
similarity index 100%
rename from wearable/wear/Notifications/Application/.gitignore
rename to deprecated/wearable/wear/Notifications/Application/.gitignore
diff --git a/wearable/wear/Notifications/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/Notifications/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/ActionsPreset.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/ActionsPreset.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/ActionsPreset.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/ActionsPreset.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/ActionsPresets.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/ActionsPresets.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/ActionsPresets.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/ActionsPresets.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/BackgroundPickers.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/BackgroundPickers.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/BackgroundPickers.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/BackgroundPickers.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/MainActivity.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/MainActivity.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/MainActivity.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/MainActivity.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NamedPreset.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NamedPreset.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NamedPreset.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NamedPreset.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationIntentReceiver.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationIntentReceiver.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationIntentReceiver.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationIntentReceiver.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationPreset.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationPreset.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationPreset.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationPreset.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationPresets.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationPresets.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationPresets.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationPresets.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationUtil.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationUtil.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationUtil.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/NotificationUtil.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/PriorityPreset.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/PriorityPreset.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/PriorityPreset.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/PriorityPreset.java
diff --git a/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/PriorityPresets.java b/deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/PriorityPresets.java
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/PriorityPresets.java
rename to deprecated/wearable/wear/Notifications/Application/src/main/java/com/example/android/support/wearable/notifications/PriorityPresets.java
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/example_large_icon.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/example_large_icon.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/example_large_icon.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/example_large_icon.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_full_action.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_full_action.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_full_action.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_full_action.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_full_reply.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_full_reply.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_full_reply.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_full_reply.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_result_open.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_result_open.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_result_open.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-hdpi/ic_result_open.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_full_action.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_full_action.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_full_action.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_full_action.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_full_reply.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_full_reply.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_full_reply.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_full_reply.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_result_open.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_result_open.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_result_open.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-mdpi/ic_result_open.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_1.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_1.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_1.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_1.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_2.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_2.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_2.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_2.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_3.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_3.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_3.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_3.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_4.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_4.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_4.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_4.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_5.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_5.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_5.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/bg_5.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/content_icon_large.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/content_icon_large.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/content_icon_large.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/content_icon_large.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/content_icon_small.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/content_icon_small.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/content_icon_small.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/content_icon_small.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/example_big_picture.jpg b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/example_big_picture.jpg
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/example_big_picture.jpg
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/example_big_picture.jpg
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/qr_code.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/qr_code.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/qr_code.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-nodpi/qr_code.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_full_action.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_full_action.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_full_action.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_full_action.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_full_reply.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_full_reply.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_full_reply.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_full_reply.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_result_open.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_result_open.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_result_open.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable-xhdpi/ic_result_open.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable/selected_background.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable/selected_background.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable/selected_background.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable/selected_background.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/drawable/unselected_background.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/drawable/unselected_background.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/drawable/unselected_background.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/drawable/unselected_background.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/layout/activity_main.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/layout/activity_main.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/layout/activity_main.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/layout/activity_main.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/layout/background_picker.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/layout/background_picker.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/layout/background_picker.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/layout/background_picker.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/layout/layout_divider.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/layout/layout_divider.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/layout/layout_divider.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/layout/layout_divider.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/layout/simple_spinner_item.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/layout/simple_spinner_item.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/layout/simple_spinner_item.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/layout/simple_spinner_item.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/mipmap-hdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/mipmap-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/mipmap-mdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/mipmap-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/mipmap-xhdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Application/src/main/res/values/colors.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/values/colors.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/values/colors.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/values/colors.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/values/dimens.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/values/dimens.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/Notifications/Application/src/main/res/values/styles.xml b/deprecated/wearable/wear/Notifications/Application/src/main/res/values/styles.xml
similarity index 100%
rename from wearable/wear/Notifications/Application/src/main/res/values/styles.xml
rename to deprecated/wearable/wear/Notifications/Application/src/main/res/values/styles.xml
diff --git a/wearable/wear/Notifications/CONTRIB.md b/deprecated/wearable/wear/Notifications/CONTRIB.md
similarity index 100%
rename from wearable/wear/Notifications/CONTRIB.md
rename to deprecated/wearable/wear/Notifications/CONTRIB.md
diff --git a/wearable/wear/Notifications/Wearable/.gitignore b/deprecated/wearable/wear/Notifications/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/Notifications/Wearable/.gitignore
rename to deprecated/wearable/wear/Notifications/Wearable/.gitignore
diff --git a/wearable/wear/Notifications/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/AnimatedNotificationDisplayActivity.java b/deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/AnimatedNotificationDisplayActivity.java
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/AnimatedNotificationDisplayActivity.java
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/AnimatedNotificationDisplayActivity.java
diff --git a/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/BasicNotificationDisplayActivity.java b/deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/BasicNotificationDisplayActivity.java
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/BasicNotificationDisplayActivity.java
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/BasicNotificationDisplayActivity.java
diff --git a/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/MainActivity.java b/deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/MainActivity.java
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/MainActivity.java
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/MainActivity.java
diff --git a/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/NotificationPreset.java b/deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/NotificationPreset.java
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/NotificationPreset.java
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/NotificationPreset.java
diff --git a/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/NotificationPresets.java b/deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/NotificationPresets.java
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/NotificationPresets.java
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/NotificationPresets.java
diff --git a/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/WearableListItemLayout.java b/deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/WearableListItemLayout.java
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/WearableListItemLayout.java
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/WearableListItemLayout.java
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/content_icon_large.png b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/content_icon_large.png
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/content_icon_large.png
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/content_icon_large.png
Binary files differ
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/content_icon_small.png b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/content_icon_small.png
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/content_icon_small.png
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/content_icon_small.png
Binary files differ
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/example_big_picture.jpg b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/example_big_picture.jpg
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/example_big_picture.jpg
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/drawable-nodpi/example_big_picture.jpg
Binary files differ
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/drawable/wl_circle.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/drawable/wl_circle.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/drawable/wl_circle.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/drawable/wl_circle.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_animated_notification_display.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_animated_notification_display.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/layout/activity_animated_notification_display.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_animated_notification_display.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_main.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_main.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/layout/activity_main.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_main.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_notification_display.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_notification_display.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/layout/activity_notification_display.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/layout/activity_notification_display.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/layout/notif_preset_list_item.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/layout/notif_preset_list_item.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/layout/notif_preset_list_item.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/layout/notif_preset_list_item.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/mipmap-xxxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/values/colors.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/values/colors.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/values/colors.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/values/colors.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/values/dimens.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/values/dimens.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/values/integers.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/values/integers.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/values/integers.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/values/integers.xml
diff --git a/wearable/wear/Notifications/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/Notifications/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/Notifications/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/Notifications/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/Notifications/build.gradle b/deprecated/wearable/wear/Notifications/build.gradle
similarity index 100%
rename from wearable/wear/Notifications/build.gradle
rename to deprecated/wearable/wear/Notifications/build.gradle
diff --git a/wearable/wear/Notifications/buildSrc/build.gradle b/deprecated/wearable/wear/Notifications/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/Notifications/buildSrc/build.gradle
rename to deprecated/wearable/wear/Notifications/buildSrc/build.gradle
diff --git a/wearable/wear/Notifications/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/Notifications/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/Notifications/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/Notifications/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/Notifications/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/Notifications/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/Notifications/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/Notifications/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/Notifications/gradlew b/deprecated/wearable/wear/Notifications/gradlew
similarity index 100%
rename from wearable/wear/Notifications/gradlew
rename to deprecated/wearable/wear/Notifications/gradlew
diff --git a/wearable/wear/Notifications/gradlew.bat b/deprecated/wearable/wear/Notifications/gradlew.bat
similarity index 100%
rename from wearable/wear/Notifications/gradlew.bat
rename to deprecated/wearable/wear/Notifications/gradlew.bat
diff --git a/wearable/wear/Notifications/screenshots/basic-menu.png b/deprecated/wearable/wear/Notifications/screenshots/basic-menu.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/basic-menu.png
rename to deprecated/wearable/wear/Notifications/screenshots/basic-menu.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/basic.png b/deprecated/wearable/wear/Notifications/screenshots/basic.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/basic.png
rename to deprecated/wearable/wear/Notifications/screenshots/basic.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/bottom-aligned.png b/deprecated/wearable/wear/Notifications/screenshots/bottom-aligned.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/bottom-aligned.png
rename to deprecated/wearable/wear/Notifications/screenshots/bottom-aligned.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/bundle.png b/deprecated/wearable/wear/Notifications/screenshots/bundle.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/bundle.png
rename to deprecated/wearable/wear/Notifications/screenshots/bundle.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/companion-bottom-aligned.png b/deprecated/wearable/wear/Notifications/screenshots/companion-bottom-aligned.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/companion-bottom-aligned.png
rename to deprecated/wearable/wear/Notifications/screenshots/companion-bottom-aligned.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/companion-bundle.png b/deprecated/wearable/wear/Notifications/screenshots/companion-bundle.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/companion-bundle.png
rename to deprecated/wearable/wear/Notifications/screenshots/companion-bundle.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/companion-content-action.png b/deprecated/wearable/wear/Notifications/screenshots/companion-content-action.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/companion-content-action.png
rename to deprecated/wearable/wear/Notifications/screenshots/companion-content-action.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/companion-multiple-page.png b/deprecated/wearable/wear/Notifications/screenshots/companion-multiple-page.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/companion-multiple-page.png
rename to deprecated/wearable/wear/Notifications/screenshots/companion-multiple-page.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/content-action.png b/deprecated/wearable/wear/Notifications/screenshots/content-action.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/content-action.png
rename to deprecated/wearable/wear/Notifications/screenshots/content-action.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/content-action2.png b/deprecated/wearable/wear/Notifications/screenshots/content-action2.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/content-action2.png
rename to deprecated/wearable/wear/Notifications/screenshots/content-action2.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/content-icon-menu.png b/deprecated/wearable/wear/Notifications/screenshots/content-icon-menu.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/content-icon-menu.png
rename to deprecated/wearable/wear/Notifications/screenshots/content-icon-menu.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/content-icon1.png b/deprecated/wearable/wear/Notifications/screenshots/content-icon1.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/content-icon1.png
rename to deprecated/wearable/wear/Notifications/screenshots/content-icon1.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/content-icon2.png b/deprecated/wearable/wear/Notifications/screenshots/content-icon2.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/content-icon2.png
rename to deprecated/wearable/wear/Notifications/screenshots/content-icon2.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/content-icon3.png b/deprecated/wearable/wear/Notifications/screenshots/content-icon3.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/content-icon3.png
rename to deprecated/wearable/wear/Notifications/screenshots/content-icon3.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/content-icon4.png b/deprecated/wearable/wear/Notifications/screenshots/content-icon4.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/content-icon4.png
rename to deprecated/wearable/wear/Notifications/screenshots/content-icon4.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/display-intent-menu.png b/deprecated/wearable/wear/Notifications/screenshots/display-intent-menu.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/display-intent-menu.png
rename to deprecated/wearable/wear/Notifications/screenshots/display-intent-menu.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/display-intent.png b/deprecated/wearable/wear/Notifications/screenshots/display-intent.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/display-intent.png
rename to deprecated/wearable/wear/Notifications/screenshots/display-intent.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/ic_launcher.png b/deprecated/wearable/wear/Notifications/screenshots/ic_launcher.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/ic_launcher.png
rename to deprecated/wearable/wear/Notifications/screenshots/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/multiple-page1.png b/deprecated/wearable/wear/Notifications/screenshots/multiple-page1.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/multiple-page1.png
rename to deprecated/wearable/wear/Notifications/screenshots/multiple-page1.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/multiple-page2.png b/deprecated/wearable/wear/Notifications/screenshots/multiple-page2.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/multiple-page2.png
rename to deprecated/wearable/wear/Notifications/screenshots/multiple-page2.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/stylized-menu.png b/deprecated/wearable/wear/Notifications/screenshots/stylized-menu.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/stylized-menu.png
rename to deprecated/wearable/wear/Notifications/screenshots/stylized-menu.png
Binary files differ
diff --git a/wearable/wear/Notifications/screenshots/stylized.png b/deprecated/wearable/wear/Notifications/screenshots/stylized.png
similarity index 100%
rename from wearable/wear/Notifications/screenshots/stylized.png
rename to deprecated/wearable/wear/Notifications/screenshots/stylized.png
Binary files differ
diff --git a/wearable/wear/Notifications/settings.gradle b/deprecated/wearable/wear/Notifications/settings.gradle
similarity index 100%
rename from wearable/wear/Notifications/settings.gradle
rename to deprecated/wearable/wear/Notifications/settings.gradle
diff --git a/wearable/wear/Notifications/template-params.xml b/deprecated/wearable/wear/Notifications/template-params.xml
similarity index 100%
rename from wearable/wear/Notifications/template-params.xml
rename to deprecated/wearable/wear/Notifications/template-params.xml
diff --git a/wearable/wear/Quiz/Application/.gitignore b/deprecated/wearable/wear/Quiz/Application/.gitignore
similarity index 100%
rename from wearable/wear/Quiz/Application/.gitignore
rename to deprecated/wearable/wear/Quiz/Application/.gitignore
diff --git a/wearable/wear/Quiz/Application/proguard-project.txt b/deprecated/wearable/wear/Quiz/Application/proguard-project.txt
similarity index 100%
rename from wearable/wear/Quiz/Application/proguard-project.txt
rename to deprecated/wearable/wear/Quiz/Application/proguard-project.txt
diff --git a/wearable/wear/Quiz/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/Quiz/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/Quiz/Application/src/main/assets/Quiz.json b/deprecated/wearable/wear/Quiz/Application/src/main/assets/Quiz.json
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/assets/Quiz.json
rename to deprecated/wearable/wear/Quiz/Application/src/main/assets/Quiz.json
diff --git a/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/Constants.java b/deprecated/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/Constants.java
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/Constants.java
rename to deprecated/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/Constants.java
diff --git a/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/JsonUtils.java b/deprecated/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/JsonUtils.java
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/JsonUtils.java
rename to deprecated/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/JsonUtils.java
diff --git a/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/MainActivity.java b/deprecated/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/MainActivity.java
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/MainActivity.java
rename to deprecated/wearable/wear/Quiz/Application/src/main/java/com/example/android/wearable/quiz/MainActivity.java
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_a.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_a.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_a.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_a.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_b.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_b.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_b.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_b.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_c.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_c.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_c.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_c.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_d.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_d.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_d.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_choice_d.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_unknown_choice.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_unknown_choice.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_unknown_choice.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-hdpi/ic_unknown_choice.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_a.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_a.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_a.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_a.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_b.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_b.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_b.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_b.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_c.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_c.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_c.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_c.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_d.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_d.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_d.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_choice_d.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_unknown_choice.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_unknown_choice.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_unknown_choice.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-mdpi/ic_unknown_choice.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_a.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_a.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_a.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_a.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_b.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_b.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_b.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_b.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_c.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_c.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_c.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_c.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_d.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_d.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_d.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_choice_d.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable/selected_background.xml b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable/selected_background.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable/selected_background.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable/selected_background.xml
diff --git a/wearable/wear/Quiz/Application/src/main/res/drawable/unselected_background.xml b/deprecated/wearable/wear/Quiz/Application/src/main/res/drawable/unselected_background.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/drawable/unselected_background.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/drawable/unselected_background.xml
diff --git a/wearable/wear/Quiz/Application/src/main/res/layout/main.xml b/deprecated/wearable/wear/Quiz/Application/src/main/res/layout/main.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/layout/main.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/layout/main.xml
diff --git a/wearable/wear/Quiz/Application/src/main/res/layout/question_status_element.xml b/deprecated/wearable/wear/Quiz/Application/src/main/res/layout/question_status_element.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/layout/question_status_element.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/layout/question_status_element.xml
diff --git a/wearable/wear/Quiz/Application/src/main/res/values/dimens.xml b/deprecated/wearable/wear/Quiz/Application/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/values/dimens.xml
diff --git a/wearable/wear/Quiz/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/Quiz/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/Quiz/Application/src/main/res/values/styles.xml b/deprecated/wearable/wear/Quiz/Application/src/main/res/values/styles.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/values/styles.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/values/styles.xml
diff --git a/wearable/wear/Quiz/Application/src/main/res/values/wear.xml b/deprecated/wearable/wear/Quiz/Application/src/main/res/values/wear.xml
similarity index 100%
rename from wearable/wear/Quiz/Application/src/main/res/values/wear.xml
rename to deprecated/wearable/wear/Quiz/Application/src/main/res/values/wear.xml
diff --git a/wearable/wear/Quiz/CONTRIB.md b/deprecated/wearable/wear/Quiz/CONTRIB.md
similarity index 100%
rename from wearable/wear/Quiz/CONTRIB.md
rename to deprecated/wearable/wear/Quiz/CONTRIB.md
diff --git a/wearable/wear/Quiz/Wearable/.gitignore b/deprecated/wearable/wear/Quiz/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/Quiz/Wearable/.gitignore
rename to deprecated/wearable/wear/Quiz/Wearable/.gitignore
diff --git a/wearable/wear/Quiz/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/Quiz/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/Constants.java b/deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/Constants.java
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/Constants.java
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/Constants.java
diff --git a/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/DeleteQuestionService.java b/deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/DeleteQuestionService.java
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/DeleteQuestionService.java
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/DeleteQuestionService.java
diff --git a/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/QuizListenerService.java b/deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/QuizListenerService.java
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/QuizListenerService.java
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/QuizListenerService.java
diff --git a/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/QuizReportActionService.java b/deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/QuizReportActionService.java
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/QuizReportActionService.java
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/QuizReportActionService.java
diff --git a/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/UpdateQuestionService.java b/deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/UpdateQuestionService.java
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/UpdateQuestionService.java
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/java/com/example/android/wearable/quiz/UpdateQuestionService.java
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_a.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_a.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_a.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_a.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_b.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_b.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_b.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_b.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_c.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_c.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_c.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_c.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_d.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_d.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_d.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_choice_d.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_unknown_choice.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_unknown_choice.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_unknown_choice.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-hdpi/ic_unknown_choice.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_a.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_a.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_a.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_a.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_b.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_b.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_b.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_b.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_c.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_c.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_c.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_c.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_d.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_d.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_d.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_choice_d.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_unknown_choice.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_unknown_choice.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_unknown_choice.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-mdpi/ic_unknown_choice.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_a.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_a.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_a.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_a.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_b.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_b.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_b.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_b.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_c.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_c.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_c.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_c.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_d.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_d.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_d.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_choice_d.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_unknown_choice.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_unknown_choice.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_unknown_choice.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xhdpi/ic_unknown_choice.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/values/colors.xml b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/values/colors.xml
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/values/colors.xml
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/values/colors.xml
diff --git a/wearable/wear/Quiz/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/Quiz/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/Quiz/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/Quiz/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/Quiz/build.gradle b/deprecated/wearable/wear/Quiz/build.gradle
similarity index 100%
rename from wearable/wear/Quiz/build.gradle
rename to deprecated/wearable/wear/Quiz/build.gradle
diff --git a/wearable/wear/Quiz/buildSrc/build.gradle b/deprecated/wearable/wear/Quiz/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/Quiz/buildSrc/build.gradle
rename to deprecated/wearable/wear/Quiz/buildSrc/build.gradle
diff --git a/wearable/wear/Quiz/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/Quiz/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/Quiz/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/Quiz/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/Quiz/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/Quiz/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/Quiz/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/Quiz/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/Quiz/gradlew b/deprecated/wearable/wear/Quiz/gradlew
similarity index 100%
rename from wearable/wear/Quiz/gradlew
rename to deprecated/wearable/wear/Quiz/gradlew
diff --git a/wearable/wear/Quiz/gradlew.bat b/deprecated/wearable/wear/Quiz/gradlew.bat
similarity index 100%
rename from wearable/wear/Quiz/gradlew.bat
rename to deprecated/wearable/wear/Quiz/gradlew.bat
diff --git a/wearable/wear/Quiz/screenshots/companion_quiz.png b/deprecated/wearable/wear/Quiz/screenshots/companion_quiz.png
similarity index 100%
rename from wearable/wear/Quiz/screenshots/companion_quiz.png
rename to deprecated/wearable/wear/Quiz/screenshots/companion_quiz.png
Binary files differ
diff --git a/wearable/wear/Quiz/screenshots/companion_quiz_correct_status.png b/deprecated/wearable/wear/Quiz/screenshots/companion_quiz_correct_status.png
similarity index 100%
rename from wearable/wear/Quiz/screenshots/companion_quiz_correct_status.png
rename to deprecated/wearable/wear/Quiz/screenshots/companion_quiz_correct_status.png
Binary files differ
diff --git a/wearable/wear/Quiz/screenshots/wearable_quiz.png b/deprecated/wearable/wear/Quiz/screenshots/wearable_quiz.png
similarity index 100%
rename from wearable/wear/Quiz/screenshots/wearable_quiz.png
rename to deprecated/wearable/wear/Quiz/screenshots/wearable_quiz.png
Binary files differ
diff --git a/wearable/wear/Quiz/screenshots/wearable_quiz_answer.png b/deprecated/wearable/wear/Quiz/screenshots/wearable_quiz_answer.png
similarity index 100%
rename from wearable/wear/Quiz/screenshots/wearable_quiz_answer.png
rename to deprecated/wearable/wear/Quiz/screenshots/wearable_quiz_answer.png
Binary files differ
diff --git a/wearable/wear/Quiz/screenshots/wearable_quiz_report.png b/deprecated/wearable/wear/Quiz/screenshots/wearable_quiz_report.png
similarity index 100%
rename from wearable/wear/Quiz/screenshots/wearable_quiz_report.png
rename to deprecated/wearable/wear/Quiz/screenshots/wearable_quiz_report.png
Binary files differ
diff --git a/wearable/wear/Quiz/settings.gradle b/deprecated/wearable/wear/Quiz/settings.gradle
similarity index 100%
rename from wearable/wear/Quiz/settings.gradle
rename to deprecated/wearable/wear/Quiz/settings.gradle
diff --git a/wearable/wear/Quiz/template-params.xml b/deprecated/wearable/wear/Quiz/template-params.xml
similarity index 100%
rename from wearable/wear/Quiz/template-params.xml
rename to deprecated/wearable/wear/Quiz/template-params.xml
diff --git a/wearable/wear/RecipeAssistant/Application/.gitignore b/deprecated/wearable/wear/RecipeAssistant/Application/.gitignore
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/.gitignore
rename to deprecated/wearable/wear/RecipeAssistant/Application/.gitignore
diff --git a/wearable/wear/RecipeAssistant/Application/proguard-project.txt b/deprecated/wearable/wear/RecipeAssistant/Application/proguard-project.txt
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/proguard-project.txt
rename to deprecated/wearable/wear/RecipeAssistant/Application/proguard-project.txt
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/beef-brisket-chili.json b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/beef-brisket-chili.json
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/beef-brisket-chili.json
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/beef-brisket-chili.json
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/chili.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/chili.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/chili.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/chili.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/guacamole.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/guacamole.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/guacamole.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/guacamole.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/guacamole.json b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/guacamole.json
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/guacamole.json
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/guacamole.json
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/irish-stew.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/irish-stew.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/irish-stew.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/irish-stew.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/northern-irish-vegetable-soup.json b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/northern-irish-vegetable-soup.json
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/northern-irish-vegetable-soup.json
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/northern-irish-vegetable-soup.json
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/recipelist.json b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/recipelist.json
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/recipelist.json
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/recipelist.json
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/step-1-grind-spices.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-1-grind-spices.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/step-1-grind-spices.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-1-grind-spices.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/step-2-score-beef.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-2-score-beef.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/step-2-score-beef.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-2-score-beef.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/step-3-brown-beef.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-3-brown-beef.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/step-3-brown-beef.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-3-brown-beef.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/step-3-lime.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-3-lime.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/step-3-lime.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-3-lime.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/step-4-fry-onion.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-4-fry-onion.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/step-4-fry-onion.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-4-fry-onion.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/step-6-combine.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-6-combine.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/step-6-combine.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-6-combine.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/assets/step-8-pull.jpg b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-8-pull.jpg
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/assets/step-8-pull.jpg
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/assets/step-8-pull.jpg
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/AssetUtils.java b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/AssetUtils.java
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/AssetUtils.java
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/AssetUtils.java
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/Constants.java b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/Constants.java
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/Constants.java
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/Constants.java
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/MainActivity.java b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/MainActivity.java
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/MainActivity.java
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/MainActivity.java
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/Recipe.java b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/Recipe.java
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/Recipe.java
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/Recipe.java
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeActivity.java b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeActivity.java
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeActivity.java
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeActivity.java
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeListAdapter.java b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeListAdapter.java
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeListAdapter.java
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeListAdapter.java
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeService.java b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeService.java
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeService.java
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/java/com/example/android/wearable/recipeassistant/RecipeService.java
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-hdpi/ic_noimage.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-hdpi/ic_noimage.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/drawable-hdpi/ic_noimage.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-hdpi/ic_noimage.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-mdpi/ic_noimage.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-mdpi/ic_noimage.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/drawable-mdpi/ic_noimage.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-mdpi/ic_noimage.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-xhdpi/ic_noimage.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-xhdpi/ic_noimage.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/drawable-xhdpi/ic_noimage.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/drawable-xhdpi/ic_noimage.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/layout/list_item.xml b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/layout/list_item.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/layout/list_item.xml
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/layout/list_item.xml
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/layout/recipe.xml b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/layout/recipe.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/layout/recipe.xml
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/layout/recipe.xml
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/layout/step_item.xml b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/layout/step_item.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/layout/step_item.xml
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/layout/step_item.xml
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/menu/main.xml b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/menu/main.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/menu/main.xml
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/menu/main.xml
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-hdpi/ic_app_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-hdpi/ic_app_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-hdpi/ic_app_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-hdpi/ic_app_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-hdpi/ic_notification_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-hdpi/ic_notification_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-hdpi/ic_notification_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-hdpi/ic_notification_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-mdpi/ic_app_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-mdpi/ic_app_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-mdpi/ic_app_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-mdpi/ic_app_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-mdpi/ic_notification_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-mdpi/ic_notification_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-mdpi/ic_notification_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-mdpi/ic_notification_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xhdpi/ic_app_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xhdpi/ic_app_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xhdpi/ic_app_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xhdpi/ic_app_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xhdpi/ic_notification_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xhdpi/ic_notification_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xhdpi/ic_notification_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xhdpi/ic_notification_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxhdpi/ic_app_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxhdpi/ic_app_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxhdpi/ic_app_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxhdpi/ic_app_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxhdpi/ic_notification_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxhdpi/ic_notification_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxhdpi/ic_notification_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxhdpi/ic_notification_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxxhdpi/ic_app_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxxhdpi/ic_app_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxxhdpi/ic_app_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxxhdpi/ic_app_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxxhdpi/ic_notification_recipe.png b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxxhdpi/ic_notification_recipe.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxxhdpi/ic_notification_recipe.png
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/mipmap-xxxhdpi/ic_notification_recipe.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/values/colors.xml b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/values/colors.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/values/colors.xml
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/values/colors.xml
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/values/strings.xml b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/values/strings.xml
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/res/values/styles.xml b/deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/values/styles.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/Application/src/main/res/values/styles.xml
rename to deprecated/wearable/wear/RecipeAssistant/Application/src/main/res/values/styles.xml
diff --git a/wearable/wear/RecipeAssistant/CONTRIB.md b/deprecated/wearable/wear/RecipeAssistant/CONTRIB.md
similarity index 100%
rename from wearable/wear/RecipeAssistant/CONTRIB.md
rename to deprecated/wearable/wear/RecipeAssistant/CONTRIB.md
diff --git a/wearable/wear/RecipeAssistant/build.gradle b/deprecated/wearable/wear/RecipeAssistant/build.gradle
similarity index 100%
rename from wearable/wear/RecipeAssistant/build.gradle
rename to deprecated/wearable/wear/RecipeAssistant/build.gradle
diff --git a/wearable/wear/RecipeAssistant/buildSrc/build.gradle b/deprecated/wearable/wear/RecipeAssistant/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/RecipeAssistant/buildSrc/build.gradle
rename to deprecated/wearable/wear/RecipeAssistant/buildSrc/build.gradle
diff --git a/wearable/wear/RecipeAssistant/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/RecipeAssistant/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/RecipeAssistant/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/RecipeAssistant/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/RecipeAssistant/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/RecipeAssistant/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/RecipeAssistant/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/RecipeAssistant/gradlew b/deprecated/wearable/wear/RecipeAssistant/gradlew
similarity index 100%
rename from wearable/wear/RecipeAssistant/gradlew
rename to deprecated/wearable/wear/RecipeAssistant/gradlew
diff --git a/wearable/wear/RecipeAssistant/gradlew.bat b/deprecated/wearable/wear/RecipeAssistant/gradlew.bat
similarity index 100%
rename from wearable/wear/RecipeAssistant/gradlew.bat
rename to deprecated/wearable/wear/RecipeAssistant/gradlew.bat
diff --git a/wearable/wear/RecipeAssistant/screenshots/guac_notification.png b/deprecated/wearable/wear/RecipeAssistant/screenshots/guac_notification.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/screenshots/guac_notification.png
rename to deprecated/wearable/wear/RecipeAssistant/screenshots/guac_notification.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/screenshots/guac_notification_step1.png b/deprecated/wearable/wear/RecipeAssistant/screenshots/guac_notification_step1.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/screenshots/guac_notification_step1.png
rename to deprecated/wearable/wear/RecipeAssistant/screenshots/guac_notification_step1.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/screenshots/recipe_assistant_guac.png b/deprecated/wearable/wear/RecipeAssistant/screenshots/recipe_assistant_guac.png
similarity index 100%
rename from wearable/wear/RecipeAssistant/screenshots/recipe_assistant_guac.png
rename to deprecated/wearable/wear/RecipeAssistant/screenshots/recipe_assistant_guac.png
Binary files differ
diff --git a/wearable/wear/RecipeAssistant/settings.gradle b/deprecated/wearable/wear/RecipeAssistant/settings.gradle
similarity index 100%
rename from wearable/wear/RecipeAssistant/settings.gradle
rename to deprecated/wearable/wear/RecipeAssistant/settings.gradle
diff --git a/wearable/wear/RecipeAssistant/template-params.xml b/deprecated/wearable/wear/RecipeAssistant/template-params.xml
similarity index 100%
rename from wearable/wear/RecipeAssistant/template-params.xml
rename to deprecated/wearable/wear/RecipeAssistant/template-params.xml
diff --git a/wearable/wear/SkeletonWearableApp/CONTRIB.md b/deprecated/wearable/wear/SkeletonWearableApp/CONTRIB.md
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/CONTRIB.md
rename to deprecated/wearable/wear/SkeletonWearableApp/CONTRIB.md
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/.gitignore b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/.gitignore
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/.gitignore
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/java/com/example/android/google/wearable/app/GridExampleActivity.java b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/java/com/example/android/google/wearable/app/GridExampleActivity.java
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/java/com/example/android/google/wearable/app/GridExampleActivity.java
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/java/com/example/android/google/wearable/app/GridExampleActivity.java
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/java/com/example/android/google/wearable/app/MainActivity.java b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/java/com/example/android/google/wearable/app/MainActivity.java
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/java/com/example/android/google/wearable/app/MainActivity.java
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/java/com/example/android/google/wearable/app/MainActivity.java
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/layout/grid_activity.xml b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/layout/grid_activity.xml
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/res/layout/grid_activity.xml
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/layout/grid_activity.xml
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/layout/main_activity.xml b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/layout/main_activity.xml
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/res/layout/main_activity.xml
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/layout/main_activity.xml
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/values/dimens.xml b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/values/dimens.xml
diff --git a/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/SkeletonWearableApp/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/SkeletonWearableApp/build.gradle b/deprecated/wearable/wear/SkeletonWearableApp/build.gradle
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/build.gradle
rename to deprecated/wearable/wear/SkeletonWearableApp/build.gradle
diff --git a/wearable/wear/SkeletonWearableApp/buildSrc/build.gradle b/deprecated/wearable/wear/SkeletonWearableApp/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/buildSrc/build.gradle
rename to deprecated/wearable/wear/SkeletonWearableApp/buildSrc/build.gradle
diff --git a/wearable/wear/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/SkeletonWearableApp/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/SkeletonWearableApp/gradlew b/deprecated/wearable/wear/SkeletonWearableApp/gradlew
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/gradlew
rename to deprecated/wearable/wear/SkeletonWearableApp/gradlew
diff --git a/wearable/wear/SkeletonWearableApp/gradlew.bat b/deprecated/wearable/wear/SkeletonWearableApp/gradlew.bat
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/gradlew.bat
rename to deprecated/wearable/wear/SkeletonWearableApp/gradlew.bat
diff --git a/wearable/wear/SkeletonWearableApp/screenshots/delayed_confirmation.png b/deprecated/wearable/wear/SkeletonWearableApp/screenshots/delayed_confirmation.png
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/screenshots/delayed_confirmation.png
rename to deprecated/wearable/wear/SkeletonWearableApp/screenshots/delayed_confirmation.png
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/screenshots/dismiss_overlay.png b/deprecated/wearable/wear/SkeletonWearableApp/screenshots/dismiss_overlay.png
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/screenshots/dismiss_overlay.png
rename to deprecated/wearable/wear/SkeletonWearableApp/screenshots/dismiss_overlay.png
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/screenshots/grid_view_pager.png b/deprecated/wearable/wear/SkeletonWearableApp/screenshots/grid_view_pager.png
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/screenshots/grid_view_pager.png
rename to deprecated/wearable/wear/SkeletonWearableApp/screenshots/grid_view_pager.png
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/screenshots/skeleton_wearable_app.png b/deprecated/wearable/wear/SkeletonWearableApp/screenshots/skeleton_wearable_app.png
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/screenshots/skeleton_wearable_app.png
rename to deprecated/wearable/wear/SkeletonWearableApp/screenshots/skeleton_wearable_app.png
Binary files differ
diff --git a/wearable/wear/SkeletonWearableApp/settings.gradle b/deprecated/wearable/wear/SkeletonWearableApp/settings.gradle
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/settings.gradle
rename to deprecated/wearable/wear/SkeletonWearableApp/settings.gradle
diff --git a/wearable/wear/SkeletonWearableApp/template-params.xml b/deprecated/wearable/wear/SkeletonWearableApp/template-params.xml
similarity index 100%
rename from wearable/wear/SkeletonWearableApp/template-params.xml
rename to deprecated/wearable/wear/SkeletonWearableApp/template-params.xml
diff --git a/wearable/wear/SynchronizedNotifications/.gitignore b/deprecated/wearable/wear/SynchronizedNotifications/.gitignore
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/.gitignore
rename to deprecated/wearable/wear/SynchronizedNotifications/.gitignore
diff --git a/wearable/wear/SynchronizedNotifications/Application/.gitignore b/deprecated/wearable/wear/SynchronizedNotifications/Application/.gitignore
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/.gitignore
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/.gitignore
diff --git a/wearable/wear/SynchronizedNotifications/Application/README-simpleview.txt b/deprecated/wearable/wear/SynchronizedNotifications/Application/README-simpleview.txt
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/README-simpleview.txt
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/README-simpleview.txt
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/AndroidManifest.xml b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/AndroidManifest.xml
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/java/com/example/android/wearable/synchronizednotifications/DismissListener.java b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/java/com/example/android/wearable/synchronizednotifications/DismissListener.java
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/java/com/example/android/wearable/synchronizednotifications/DismissListener.java
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/java/com/example/android/wearable/synchronizednotifications/DismissListener.java
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/java/com/example/android/wearable/synchronizednotifications/SynchronizedNotificationsFragment.java b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/java/com/example/android/wearable/synchronizednotifications/SynchronizedNotificationsFragment.java
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/java/com/example/android/wearable/synchronizednotifications/SynchronizedNotificationsFragment.java
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/java/com/example/android/wearable/synchronizednotifications/SynchronizedNotificationsFragment.java
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/res/menu/main.xml b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/menu/main.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/res/menu/main.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/menu/main.xml
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/res/values/dimens.xml b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/values/dimens.xml
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/res/values/sample-strings.xml b/deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/values/sample-strings.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Application/src/main/res/values/sample-strings.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Application/src/main/res/values/sample-strings.xml
diff --git a/wearable/wear/SynchronizedNotifications/CONTRIB.md b/deprecated/wearable/wear/SynchronizedNotifications/CONTRIB.md
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/CONTRIB.md
rename to deprecated/wearable/wear/SynchronizedNotifications/CONTRIB.md
diff --git a/wearable/wear/SynchronizedNotifications/Shared/.gitignore b/deprecated/wearable/wear/SynchronizedNotifications/Shared/.gitignore
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Shared/.gitignore
rename to deprecated/wearable/wear/SynchronizedNotifications/Shared/.gitignore
diff --git a/wearable/wear/SynchronizedNotifications/Shared/src/main/AndroidManifest.xml b/deprecated/wearable/wear/SynchronizedNotifications/Shared/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Shared/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Shared/src/main/AndroidManifest.xml
diff --git a/wearable/wear/SynchronizedNotifications/Shared/src/main/java/com/example/android/wearable/synchronizednotifications/common/Constants.java b/deprecated/wearable/wear/SynchronizedNotifications/Shared/src/main/java/com/example/android/wearable/synchronizednotifications/common/Constants.java
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Shared/src/main/java/com/example/android/wearable/synchronizednotifications/common/Constants.java
rename to deprecated/wearable/wear/SynchronizedNotifications/Shared/src/main/java/com/example/android/wearable/synchronizednotifications/common/Constants.java
diff --git a/wearable/wear/SynchronizedNotifications/Shared/src/main/res/values/strings.xml b/deprecated/wearable/wear/SynchronizedNotifications/Shared/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Shared/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Shared/src/main/res/values/strings.xml
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/.gitignore b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/.gitignore
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/.gitignore
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/java/com/example/android/wearable/synchronizednotifications/NotificationUpdateService.java b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/java/com/example/android/wearable/synchronizednotifications/NotificationUpdateService.java
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/src/main/java/com/example/android/wearable/synchronizednotifications/NotificationUpdateService.java
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/java/com/example/android/wearable/synchronizednotifications/NotificationUpdateService.java
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/java/com/example/android/wearable/synchronizednotifications/WearableActivity.java b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/java/com/example/android/wearable/synchronizednotifications/WearableActivity.java
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/src/main/java/com/example/android/wearable/synchronizednotifications/WearableActivity.java
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/java/com/example/android/wearable/synchronizednotifications/WearableActivity.java
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/layout/activity_wearable.xml b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/layout/activity_wearable.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/src/main/res/layout/activity_wearable.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/layout/activity_wearable.xml
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/SynchronizedNotifications/build.gradle b/deprecated/wearable/wear/SynchronizedNotifications/build.gradle
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/build.gradle
rename to deprecated/wearable/wear/SynchronizedNotifications/build.gradle
diff --git a/wearable/wear/SynchronizedNotifications/buildSrc/build.gradle b/deprecated/wearable/wear/SynchronizedNotifications/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/buildSrc/build.gradle
rename to deprecated/wearable/wear/SynchronizedNotifications/buildSrc/build.gradle
diff --git a/wearable/wear/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/SynchronizedNotifications/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/SynchronizedNotifications/gradlew b/deprecated/wearable/wear/SynchronizedNotifications/gradlew
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/gradlew
rename to deprecated/wearable/wear/SynchronizedNotifications/gradlew
diff --git a/wearable/wear/SynchronizedNotifications/gradlew.bat b/deprecated/wearable/wear/SynchronizedNotifications/gradlew.bat
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/gradlew.bat
rename to deprecated/wearable/wear/SynchronizedNotifications/gradlew.bat
diff --git a/wearable/wear/SynchronizedNotifications/screenshots/different_notifications_phone.png b/deprecated/wearable/wear/SynchronizedNotifications/screenshots/different_notifications_phone.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/screenshots/different_notifications_phone.png
rename to deprecated/wearable/wear/SynchronizedNotifications/screenshots/different_notifications_phone.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/screenshots/different_notifications_wearable.png b/deprecated/wearable/wear/SynchronizedNotifications/screenshots/different_notifications_wearable.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/screenshots/different_notifications_wearable.png
rename to deprecated/wearable/wear/SynchronizedNotifications/screenshots/different_notifications_wearable.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/screenshots/notification_options.png b/deprecated/wearable/wear/SynchronizedNotifications/screenshots/notification_options.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/screenshots/notification_options.png
rename to deprecated/wearable/wear/SynchronizedNotifications/screenshots/notification_options.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/screenshots/watch_only_notification.png b/deprecated/wearable/wear/SynchronizedNotifications/screenshots/watch_only_notification.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/screenshots/watch_only_notification.png
rename to deprecated/wearable/wear/SynchronizedNotifications/screenshots/watch_only_notification.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/screenshots/web-icon.png b/deprecated/wearable/wear/SynchronizedNotifications/screenshots/web-icon.png
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/screenshots/web-icon.png
rename to deprecated/wearable/wear/SynchronizedNotifications/screenshots/web-icon.png
Binary files differ
diff --git a/wearable/wear/SynchronizedNotifications/settings.gradle b/deprecated/wearable/wear/SynchronizedNotifications/settings.gradle
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/settings.gradle
rename to deprecated/wearable/wear/SynchronizedNotifications/settings.gradle
diff --git a/wearable/wear/SynchronizedNotifications/template-params.xml b/deprecated/wearable/wear/SynchronizedNotifications/template-params.xml
similarity index 100%
rename from wearable/wear/SynchronizedNotifications/template-params.xml
rename to deprecated/wearable/wear/SynchronizedNotifications/template-params.xml
diff --git a/wearable/wear/Timer/CONTRIB.md b/deprecated/wearable/wear/Timer/CONTRIB.md
similarity index 100%
rename from wearable/wear/Timer/CONTRIB.md
rename to deprecated/wearable/wear/Timer/CONTRIB.md
diff --git a/wearable/wear/Timer/Wearable/.gitignore b/deprecated/wearable/wear/Timer/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/Timer/Wearable/.gitignore
rename to deprecated/wearable/wear/Timer/Wearable/.gitignore
diff --git a/wearable/wear/Timer/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/Timer/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/Timer/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/SetTimerActivity.java b/deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/SetTimerActivity.java
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/SetTimerActivity.java
rename to deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/SetTimerActivity.java
diff --git a/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/TimerNotificationService.java b/deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/TimerNotificationService.java
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/TimerNotificationService.java
rename to deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/TimerNotificationService.java
diff --git a/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java b/deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java
rename to deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java
diff --git a/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/Constants.java b/deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/Constants.java
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/Constants.java
rename to deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/Constants.java
diff --git a/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/TimerFormat.java b/deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/TimerFormat.java
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/TimerFormat.java
rename to deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/TimerFormat.java
diff --git a/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/TimerObj.java b/deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/TimerObj.java
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/TimerObj.java
rename to deprecated/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/util/TimerObj.java
diff --git a/wearable/wear/Timer/Wearable/src/main/res/drawable/ic_cc_alarm.png b/deprecated/wearable/wear/Timer/Wearable/src/main/res/drawable/ic_cc_alarm.png
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/drawable/ic_cc_alarm.png
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/drawable/ic_cc_alarm.png
Binary files differ
diff --git a/wearable/wear/Timer/Wearable/src/main/res/drawable/wl_circle.xml b/deprecated/wearable/wear/Timer/Wearable/src/main/res/drawable/wl_circle.xml
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/drawable/wl_circle.xml
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/drawable/wl_circle.xml
diff --git a/wearable/wear/Timer/Wearable/src/main/res/layout/timer_list_item.xml b/deprecated/wearable/wear/Timer/Wearable/src/main/res/layout/timer_list_item.xml
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/layout/timer_list_item.xml
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/layout/timer_list_item.xml
diff --git a/wearable/wear/Timer/Wearable/src/main/res/layout/timer_set_timer.xml b/deprecated/wearable/wear/Timer/Wearable/src/main/res/layout/timer_set_timer.xml
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/layout/timer_set_timer.xml
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/layout/timer_set_timer.xml
diff --git a/wearable/wear/Timer/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png b/deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Timer/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png b/deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Timer/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png b/deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Timer/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Timer/Wearable/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-xxxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/mipmap-xxxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/Timer/Wearable/src/main/res/values/colors.xml b/deprecated/wearable/wear/Timer/Wearable/src/main/res/values/colors.xml
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/values/colors.xml
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/values/colors.xml
diff --git a/wearable/wear/Timer/Wearable/src/main/res/values/integers.xml b/deprecated/wearable/wear/Timer/Wearable/src/main/res/values/integers.xml
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/values/integers.xml
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/values/integers.xml
diff --git a/wearable/wear/Timer/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/Timer/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/Timer/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/Timer/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/Timer/build.gradle b/deprecated/wearable/wear/Timer/build.gradle
similarity index 100%
rename from wearable/wear/Timer/build.gradle
rename to deprecated/wearable/wear/Timer/build.gradle
diff --git a/wearable/wear/Timer/buildSrc/build.gradle b/deprecated/wearable/wear/Timer/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/Timer/buildSrc/build.gradle
rename to deprecated/wearable/wear/Timer/buildSrc/build.gradle
diff --git a/wearable/wear/Timer/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/Timer/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/Timer/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/Timer/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/Timer/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/Timer/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/Timer/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/Timer/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/Timer/gradlew b/deprecated/wearable/wear/Timer/gradlew
similarity index 100%
rename from wearable/wear/Timer/gradlew
rename to deprecated/wearable/wear/Timer/gradlew
diff --git a/wearable/wear/Timer/gradlew.bat b/deprecated/wearable/wear/Timer/gradlew.bat
similarity index 100%
rename from wearable/wear/Timer/gradlew.bat
rename to deprecated/wearable/wear/Timer/gradlew.bat
diff --git a/wearable/wear/Timer/screenshots/timer.png b/deprecated/wearable/wear/Timer/screenshots/timer.png
similarity index 100%
rename from wearable/wear/Timer/screenshots/timer.png
rename to deprecated/wearable/wear/Timer/screenshots/timer.png
Binary files differ
diff --git a/wearable/wear/Timer/screenshots/timer_countdown.png b/deprecated/wearable/wear/Timer/screenshots/timer_countdown.png
similarity index 100%
rename from wearable/wear/Timer/screenshots/timer_countdown.png
rename to deprecated/wearable/wear/Timer/screenshots/timer_countdown.png
Binary files differ
diff --git a/wearable/wear/Timer/settings.gradle b/deprecated/wearable/wear/Timer/settings.gradle
similarity index 100%
rename from wearable/wear/Timer/settings.gradle
rename to deprecated/wearable/wear/Timer/settings.gradle
diff --git a/wearable/wear/Timer/template-params.xml b/deprecated/wearable/wear/Timer/template-params.xml
similarity index 100%
rename from wearable/wear/Timer/template-params.xml
rename to deprecated/wearable/wear/Timer/template-params.xml
diff --git a/wearable/wear/WatchViewStub/CONTRIB.md b/deprecated/wearable/wear/WatchViewStub/CONTRIB.md
similarity index 100%
rename from wearable/wear/WatchViewStub/CONTRIB.md
rename to deprecated/wearable/wear/WatchViewStub/CONTRIB.md
diff --git a/wearable/wear/WatchViewStub/Wearable/.gitignore b/deprecated/wearable/wear/WatchViewStub/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/.gitignore
rename to deprecated/wearable/wear/WatchViewStub/Wearable/.gitignore
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/AndroidManifest.xml b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/AndroidManifest.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/AndroidManifest.xml
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/AndroidManifest.xml
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/java/com/example/android/google/wearable/watchviewstub/MainActivity.java b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/java/com/example/android/google/wearable/watchviewstub/MainActivity.java
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/java/com/example/android/google/wearable/watchviewstub/MainActivity.java
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/java/com/example/android/google/wearable/watchviewstub/MainActivity.java
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-hdpi/ic_launcher.png b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-mdpi/ic_launcher.png b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable/rect_background.xml b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable/rect_background.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/drawable/rect_background.xml
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable/rect_background.xml
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable/round_background.xml b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable/round_background.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/drawable/round_background.xml
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/drawable/round_background.xml
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/main_activity.xml b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/main_activity.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/layout/main_activity.xml
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/main_activity.xml
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/rect_layout.xml b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/rect_layout.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/layout/rect_layout.xml
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/rect_layout.xml
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/round_layout.xml b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/round_layout.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/layout/round_layout.xml
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/layout/round_layout.xml
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/values/dimens.xml b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/values/dimens.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/values/dimens.xml
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/values/dimens.xml
diff --git a/wearable/wear/WatchViewStub/Wearable/src/main/res/values/strings.xml b/deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/values/strings.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/Wearable/src/main/res/values/strings.xml
rename to deprecated/wearable/wear/WatchViewStub/Wearable/src/main/res/values/strings.xml
diff --git a/wearable/wear/WatchViewStub/build.gradle b/deprecated/wearable/wear/WatchViewStub/build.gradle
similarity index 100%
rename from wearable/wear/WatchViewStub/build.gradle
rename to deprecated/wearable/wear/WatchViewStub/build.gradle
diff --git a/wearable/wear/WatchViewStub/buildSrc/build.gradle b/deprecated/wearable/wear/WatchViewStub/buildSrc/build.gradle
similarity index 100%
rename from wearable/wear/WatchViewStub/buildSrc/build.gradle
rename to deprecated/wearable/wear/WatchViewStub/buildSrc/build.gradle
diff --git a/wearable/wear/WatchViewStub/gradle/wrapper/gradle-wrapper.jar b/deprecated/wearable/wear/WatchViewStub/gradle/wrapper/gradle-wrapper.jar
similarity index 100%
rename from wearable/wear/WatchViewStub/gradle/wrapper/gradle-wrapper.jar
rename to deprecated/wearable/wear/WatchViewStub/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/wearable/wear/WatchViewStub/gradle/wrapper/gradle-wrapper.properties b/deprecated/wearable/wear/WatchViewStub/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from wearable/wear/WatchViewStub/gradle/wrapper/gradle-wrapper.properties
rename to deprecated/wearable/wear/WatchViewStub/gradle/wrapper/gradle-wrapper.properties
diff --git a/wearable/wear/WatchViewStub/gradlew b/deprecated/wearable/wear/WatchViewStub/gradlew
similarity index 100%
rename from wearable/wear/WatchViewStub/gradlew
rename to deprecated/wearable/wear/WatchViewStub/gradlew
diff --git a/wearable/wear/WatchViewStub/gradlew.bat b/deprecated/wearable/wear/WatchViewStub/gradlew.bat
similarity index 100%
rename from wearable/wear/WatchViewStub/gradlew.bat
rename to deprecated/wearable/wear/WatchViewStub/gradlew.bat
diff --git a/wearable/wear/WatchViewStub/screenshots/watch_view_stub_rectangular.png b/deprecated/wearable/wear/WatchViewStub/screenshots/watch_view_stub_rectangular.png
similarity index 100%
rename from wearable/wear/WatchViewStub/screenshots/watch_view_stub_rectangular.png
rename to deprecated/wearable/wear/WatchViewStub/screenshots/watch_view_stub_rectangular.png
Binary files differ
diff --git a/wearable/wear/WatchViewStub/screenshots/watch_view_stub_round.png b/deprecated/wearable/wear/WatchViewStub/screenshots/watch_view_stub_round.png
similarity index 100%
rename from wearable/wear/WatchViewStub/screenshots/watch_view_stub_round.png
rename to deprecated/wearable/wear/WatchViewStub/screenshots/watch_view_stub_round.png
Binary files differ
diff --git a/wearable/wear/WatchViewStub/settings.gradle b/deprecated/wearable/wear/WatchViewStub/settings.gradle
similarity index 100%
rename from wearable/wear/WatchViewStub/settings.gradle
rename to deprecated/wearable/wear/WatchViewStub/settings.gradle
diff --git a/wearable/wear/WatchViewStub/template-params.xml b/deprecated/wearable/wear/WatchViewStub/template-params.xml
similarity index 100%
rename from wearable/wear/WatchViewStub/template-params.xml
rename to deprecated/wearable/wear/WatchViewStub/template-params.xml
diff --git a/projects.txt b/projects.txt
index 6800fdf..84d6fc3 100644
--- a/projects.txt
+++ b/projects.txt
@@ -70,23 +70,9 @@
 admin/AppRestrictionEnforcer
 admin/AppRestrictionSchema
 connectivity/bluetooth/BluetoothChat
-wearable/wear/AgendaData
 wearable/wear/DataLayer
-wearable/wear/DelayedConfirmation
-wearable/wear/ElizaChat
-wearable/wear/FindMyPhone
-wearable/wear/Flashlight
-wearable/wear/Geofencing
-wearable/wear/GridViewPager
 wearable/wear/JumpingJack
-wearable/wear/Notifications
-wearable/wear/Quiz
-wearable/wear/RecipeAssistant
-wearable/wear/SkeletonWearableApp
 wearable/wear/SpeedTracker
-wearable/wear/SynchronizedNotifications
-wearable/wear/Timer
-wearable/wear/WatchViewStub
 wearable/wear/WatchFace
 content/webview/PermissionRequest
 content/documentsUi/DirectorySelection
@@ -129,4 +115,3 @@
 views/EmojiCompat
 ui/fonts/DownloadableFonts
 wearable/wear/WearComplicationProvidersTestSuite
-wearable/wear/WearMessagingApp
\ No newline at end of file
diff --git a/wearable/wear/AgendaData/Application/proguard-project.txt b/wearable/wear/AgendaData/Application/proguard-project.txt
deleted file mode 100644
index 0d8f171..0000000
--- a/wearable/wear/AgendaData/Application/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
- To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# 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/wearable/wear/AgendaData/LICENSE b/wearable/wear/AgendaData/LICENSE
deleted file mode 100644
index d5cf8f3..0000000
--- a/wearable/wear/AgendaData/LICENSE
+++ /dev/null
@@ -1,203 +0,0 @@
-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.
diff --git a/wearable/wear/AgendaData/README-wear.txt b/wearable/wear/AgendaData/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/AgendaData/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/AlwaysOn/Wearable/build.gradle b/wearable/wear/AlwaysOn/Wearable/build.gradle
index 6a22d1c..11f813b 100644
--- a/wearable/wear/AlwaysOn/Wearable/build.gradle
+++ b/wearable/wear/AlwaysOn/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,15 +21,15 @@
 
 dependencies {
 
-    compile 'com.android.support:wear:27.1.0'
+    implementation 'com.android.support:wear:27.1.0'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/AlwaysOn/Wearable/src/main/java/com/example/android/wearable/wear/alwayson/MainActivity.java b/wearable/wear/AlwaysOn/Wearable/src/main/java/com/example/android/wearable/wear/alwayson/MainActivity.java
index 76e14f0..ab61c41 100644
--- a/wearable/wear/AlwaysOn/Wearable/src/main/java/com/example/android/wearable/wear/alwayson/MainActivity.java
+++ b/wearable/wear/AlwaysOn/Wearable/src/main/java/com/example/android/wearable/wear/alwayson/MainActivity.java
@@ -15,7 +15,6 @@
  */
 package com.example.android.wearable.wear.alwayson;
 
-import android.app.Activity;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
@@ -26,7 +25,8 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.util.Log;
 import android.view.View;
 import android.widget.TextView;
@@ -72,7 +72,8 @@
  * Faces API documentation: keeping most pixels black, avoiding large blocks of white pixels, using
  * only black and white, disabling anti-aliasing, etc.
  */
-public class MainActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class MainActivity extends FragmentActivity
+        implements AmbientModeSupport.AmbientCallbackProvider {
 
     private static final String TAG = "MainActivity";
 
@@ -92,10 +93,10 @@
     private static final int BURN_IN_OFFSET_PX = 10;
 
     /**
-     * Ambient mode controller attached to this display. Used by Activity to see if it is in
-     * ambient mode.
+     * Ambient mode controller attached to this display. Used by Activity to see if it is in ambient
+     * mode.
      */
-    private AmbientMode.AmbientController mAmbientController;
+    private AmbientModeSupport.AmbientController mAmbientController;
 
     /** If the display is low-bit in ambient mode. i.e. it requires anti-aliased fonts. */
     boolean mIsLowBitAmbient;
@@ -142,7 +143,7 @@
 
         setContentView(R.layout.activity_main);
 
-        mAmbientController = AmbientMode.attachAmbientSupport(this);
+        mAmbientController = AmbientModeSupport.attach(this);
 
         mAmbientUpdateAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
 
@@ -274,19 +275,20 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {
         /** Prepares the UI for ambient mode. */
         @Override
         public void onEnterAmbient(Bundle ambientDetails) {
             super.onEnterAmbient(ambientDetails);
 
-            mIsLowBitAmbient = ambientDetails.getBoolean(AmbientMode.EXTRA_LOWBIT_AMBIENT, false);
+            mIsLowBitAmbient =
+                    ambientDetails.getBoolean(AmbientModeSupport.EXTRA_LOWBIT_AMBIENT, false);
             mDoBurnInProtection =
-                    ambientDetails.getBoolean(AmbientMode.EXTRA_BURN_IN_PROTECTION, false);
+                    ambientDetails.getBoolean(AmbientModeSupport.EXTRA_BURN_IN_PROTECTION, false);
 
             /* Clears Handler queue (only needed for updates in active mode). */
             mActiveModeUpdateHandler.removeMessages(MSG_UPDATE_SCREEN);
diff --git a/wearable/wear/AlwaysOn/template-params.xml b/wearable/wear/AlwaysOn/template-params.xml
index eb743d8..5136ef5 100644
--- a/wearable/wear/AlwaysOn/template-params.xml
+++ b/wearable/wear/AlwaysOn/template-params.xml
@@ -24,7 +24,7 @@
     <targetSdkVersionWear>26</targetSdkVersionWear>
     <multiDexEnabled>true</multiDexEnabled>
 
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
 
     <strings>
         <intro>
diff --git a/wearable/wear/DataLayer/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java b/wearable/wear/DataLayer/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
index b7f9f8b..2f232cc 100644
--- a/wearable/wear/DataLayer/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
+++ b/wearable/wear/DataLayer/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
@@ -168,7 +168,7 @@
     }
 
     @Override
-    public void onMessageReceived(final MessageEvent messageEvent) {
+    public void onMessageReceived(MessageEvent messageEvent) {
         LOGD(TAG, "onMessageReceived() A message from watch was received:"
                 + messageEvent.getRequestId() + " " + messageEvent.getPath());
 
@@ -186,9 +186,9 @@
      * Sets up UI components and their callback handlers.
      */
     private void setupViews() {
-        mSendPhotoBtn = (Button) findViewById(R.id.sendPhoto);
-        mThumbView = (ImageView) findViewById(R.id.imageView);
-        mDataItemList = (ListView) findViewById(R.id.data_item_list);
+        mSendPhotoBtn = findViewById(R.id.sendPhoto);
+        mThumbView = findViewById(R.id.imageView);
+        mDataItemList = findViewById(R.id.data_item_list);
         mStartActivityBtn = findViewById(R.id.start_wearable_activity);
     }
 
@@ -419,4 +419,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java
index 020cd15..b9539a3 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java
+++ b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java
@@ -20,16 +20,14 @@
 import android.net.Uri;
 import android.util.Log;
 
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
 import com.google.android.gms.wearable.DataEvent;
 import com.google.android.gms.wearable.DataEventBuffer;
 import com.google.android.gms.wearable.MessageEvent;
 import com.google.android.gms.wearable.Wearable;
 import com.google.android.gms.wearable.WearableListenerService;
 
-import java.util.concurrent.TimeUnit;
-
 /**
  * Listens to DataItems and Messages from the local node.
  */
@@ -42,34 +40,16 @@
     public static final String COUNT_PATH = "/count";
     public static final String IMAGE_PATH = "/image";
     public static final String IMAGE_KEY = "photo";
-    GoogleApiClient mGoogleApiClient;
-
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        mGoogleApiClient = new GoogleApiClient.Builder(this)
-                .addApi(Wearable.API)
-                .build();
-        mGoogleApiClient.connect();
-    }
 
     @Override
     public void onDataChanged(DataEventBuffer dataEvents) {
-        LOGD(TAG, "onDataChanged: " + dataEvents);
-        if (!mGoogleApiClient.isConnected() || !mGoogleApiClient.isConnecting()) {
-            ConnectionResult connectionResult = mGoogleApiClient
-                    .blockingConnect(30, TimeUnit.SECONDS);
-            if (!connectionResult.isSuccess()) {
-                Log.e(TAG, "DataLayerListenerService failed to connect to GoogleApiClient, "
-                        + "error code: " + connectionResult.getErrorCode());
-                return;
-            }
-        }
+        Log.d(TAG, "onDataChanged: " + dataEvents);
 
         // Loop through the events and send a message back to the node that created the data item.
         for (DataEvent event : dataEvents) {
             Uri uri = event.getDataItem().getUri();
             String path = uri.getPath();
+
             if (COUNT_PATH.equals(path)) {
                 // Get the node id of the node that created the data item from the host portion of
                 // the uri.
@@ -78,15 +58,28 @@
                 byte[] payload = uri.toString().getBytes();
 
                 // Send the rpc
-                Wearable.MessageApi.sendMessage(mGoogleApiClient, nodeId, DATA_ITEM_RECEIVED_PATH,
-                        payload);
+                // Instantiates clients without member variables, as clients are inexpensive to
+                // create. (They are cached and shared between GoogleApi instances.)
+                Task<Integer> sendMessageTask = Wearable.getMessageClient(this)
+                        .sendMessage(nodeId, DATA_ITEM_RECEIVED_PATH, payload);
+
+                sendMessageTask.addOnCompleteListener(new OnCompleteListener<Integer>() {
+                    @Override
+                    public void onComplete(Task<Integer> task) {
+                        if (task.isSuccessful()) {
+                            Log.d(TAG, "Message sent successfully");
+                        } else {
+                            Log.d(TAG, "Message failed.");
+                        }
+                    }
+                });
             }
         }
     }
 
     @Override
     public void onMessageReceived(MessageEvent messageEvent) {
-        LOGD(TAG, "onMessageReceived: " + messageEvent);
+        Log.d(TAG, "onMessageReceived: " + messageEvent);
 
         // Check to see if the message is to start an activity
         if (messageEvent.getPath().equals(START_ACTIVITY_PATH)) {
@@ -95,10 +88,4 @@
             startActivity(startIntent);
         }
     }
-
-    public static void LOGD(final String tag, String message) {
-        if (Log.isLoggable(tag, Log.DEBUG)) {
-            Log.d(tag, message);
-        }
-    }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
index feec09c..0044ca0 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
+++ b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java
@@ -16,8 +16,6 @@
 
 package com.example.android.wearable.datalayer;
 
-import static com.example.android.wearable.datalayer.DataLayerListenerService.LOGD;
-
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
@@ -120,7 +118,7 @@
 
     @Override
     public void onDataChanged(DataEventBuffer dataEvents) {
-        LOGD(TAG, "onDataChanged(): " + dataEvents);
+        Log.d(TAG, "onDataChanged(): " + dataEvents);
 
         for (DataEvent event : dataEvents) {
             if (event.getType() == DataEvent.TYPE_CHANGED) {
@@ -133,10 +131,10 @@
                     new LoadBitmapAsyncTask().execute(photoAsset);
 
                 } else if (DataLayerListenerService.COUNT_PATH.equals(path)) {
-                    LOGD(TAG, "Data Changed for COUNT_PATH");
+                    Log.d(TAG, "Data Changed for COUNT_PATH");
                     mDataFragment.appendItem("DataItem Changed", event.getDataItem().toString());
                 } else {
-                    LOGD(TAG, "Unrecognized path: " + path);
+                    Log.d(TAG, "Unrecognized path: " + path);
                 }
 
             } else if (event.getType() == DataEvent.TYPE_DELETED) {
@@ -162,13 +160,13 @@
 
     @Override
     public void onMessageReceived(MessageEvent event) {
-        LOGD(TAG, "onMessageReceived: " + event);
+        Log.d(TAG, "onMessageReceived: " + event);
         mDataFragment.appendItem("Message", event.toString());
     }
 
     @Override
     public void onCapabilityChanged(CapabilityInfo capabilityInfo) {
-        LOGD(TAG, "onCapabilityChanged: " + capabilityInfo);
+        Log.d(TAG, "onCapabilityChanged: " + capabilityInfo);
         mDataFragment.appendItem("onCapabilityChanged", capabilityInfo.toString());
     }
 
@@ -206,7 +204,7 @@
         for (Node node : nodes) {
             nodesList.add(node.getDisplayName());
         }
-        LOGD(TAG, "Connected Nodes: " + (nodesList.isEmpty()
+        Log.d(TAG, "Connected Nodes: " + (nodesList.isEmpty()
                 ? "No connected device was found for the given capabilities"
                 : TextUtils.join(",", nodesList)));
         String msg;
@@ -322,10 +320,10 @@
         protected void onPostExecute(Bitmap bitmap) {
 
             if (bitmap != null) {
-                LOGD(TAG, "Setting background image on second page..");
+                Log.d(TAG, "Setting background image on second page..");
                 moveToPage(1);
                 mAssetFragment.setBackgroundImage(bitmap);
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java
index 879c2a7..312b086 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java
+++ b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java
@@ -39,7 +39,7 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.asset_fragment, container, false);
-        mPhoto = (ImageView) view.findViewById(R.id.photo);
+        mPhoto = view.findViewById(R.id.photo);
         return view;
     }
 
diff --git a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java
index f111e7d..c8457fc 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java
+++ b/wearable/wear/DataLayer/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java
@@ -43,8 +43,8 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.data_fragment, container, false);
-        ListView dataItemList = (ListView) view.findViewById(R.id.dataItem_list);
-        mIntroText = (TextView) view.findViewById(R.id.intro);
+        ListView dataItemList = view.findViewById(R.id.dataItem_list);
+        mIntroText = view.findViewById(R.id.intro);
         mDataItemListAdapter = new DataItemAdapter(getActivity(),
                 android.R.layout.simple_list_item_1);
         dataItemList.setAdapter(mDataItemListAdapter);
@@ -78,8 +78,8 @@
                         Context.LAYOUT_INFLATER_SERVICE);
                 convertView = inflater.inflate(android.R.layout.two_line_list_item, null);
                 convertView.setTag(holder);
-                holder.text1 = (TextView) convertView.findViewById(android.R.id.text1);
-                holder.text2 = (TextView) convertView.findViewById(android.R.id.text2);
+                holder.text1 = convertView.findViewById(android.R.id.text1);
+                holder.text2 = convertView.findViewById(android.R.id.text2);
             } else {
                 holder = (ViewHolder) convertView.getTag();
             }
diff --git a/wearable/wear/DataLayer/template-params.xml b/wearable/wear/DataLayer/template-params.xml
index 1f83906..ba07ff6 100644
--- a/wearable/wear/DataLayer/template-params.xml
+++ b/wearable/wear/DataLayer/template-params.xml
@@ -26,6 +26,12 @@
 
     <multiDexEnabled>true</multiDexEnabled>
 
+    <dependency>com.android.support:recyclerview-v7:27.1.1</dependency>
+    <dependency>com.android.support:percent:27.1.1</dependency>
+
+    <dependency_wearable>com.android.support:recyclerview-v7:27.1.1</dependency_wearable>
+    <dependency_wearable>com.android.support:percent:27.1.1</dependency_wearable>
+
     <wearable>
         <has_handheld_app>true</has_handheld_app>
     </wearable>
diff --git a/wearable/wear/DelayedConfirmation/LICENSE b/wearable/wear/DelayedConfirmation/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/DelayedConfirmation/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/DelayedConfirmation/README-wear.txt b/wearable/wear/DelayedConfirmation/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/DelayedConfirmation/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/ElizaChat/LICENSE b/wearable/wear/ElizaChat/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/ElizaChat/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/EmbeddedApp/LICENSE b/wearable/wear/EmbeddedApp/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/EmbeddedApp/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/EmbeddedApp/README-wear.txt b/wearable/wear/EmbeddedApp/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/EmbeddedApp/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/FindMyPhone/LICENSE b/wearable/wear/FindMyPhone/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/FindMyPhone/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/FindMyPhone/README-wear.txt b/wearable/wear/FindMyPhone/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/FindMyPhone/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/Flashlight/LICENSE b/wearable/wear/Flashlight/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/Flashlight/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/Flashlight/README-wear.txt b/wearable/wear/Flashlight/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/Flashlight/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/Geofencing/LICENSE b/wearable/wear/Geofencing/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/Geofencing/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/Geofencing/README-wear.txt b/wearable/wear/Geofencing/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/Geofencing/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/GridViewPager/LICENSE b/wearable/wear/GridViewPager/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/GridViewPager/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/GridViewPager/README-wear.txt b/wearable/wear/GridViewPager/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/GridViewPager/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/JumpingJack/Wearable/src/main/java/com/example/android/wearable/jumpingjack/MainActivity.java b/wearable/wear/JumpingJack/Wearable/src/main/java/com/example/android/wearable/jumpingjack/MainActivity.java
index f1589c7..8618a9d 100644
--- a/wearable/wear/JumpingJack/Wearable/src/main/java/com/example/android/wearable/jumpingjack/MainActivity.java
+++ b/wearable/wear/JumpingJack/Wearable/src/main/java/com/example/android/wearable/jumpingjack/MainActivity.java
@@ -50,7 +50,7 @@
 public class MainActivity extends Activity
         implements SensorEventListener {
 
-    private static final String TAG = "JJMainActivity";
+    private static final String TAG = "MainActivity";
 
     /** How long to keep the screen on when no activity is happening **/
     private static final long SCREEN_ON_TIMEOUT_MS = 20000; // in milliseconds
@@ -94,9 +94,9 @@
     }
 
     private void setupViews() {
-        mPager = (ViewPager) findViewById(R.id.pager);
-        mFirstIndicator = (ImageView) findViewById(R.id.indicator_0);
-        mSecondIndicator = (ImageView) findViewById(R.id.indicator_1);
+        mPager = findViewById(R.id.pager);
+        mFirstIndicator = findViewById(R.id.indicator_0);
+        mSecondIndicator = findViewById(R.id.indicator_1);
         final PagerAdapter adapter = new PagerAdapter(getFragmentManager());
         mCounterPage = new CounterFragment();
         mSettingPage = new SettingsFragment();
diff --git a/wearable/wear/Notifications/Application/proguard-project.txt b/wearable/wear/Notifications/Application/proguard-project.txt
deleted file mode 100644
index 0d8f171..0000000
--- a/wearable/wear/Notifications/Application/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
- To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# 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/wearable/wear/Notifications/LICENSE b/wearable/wear/Notifications/LICENSE
deleted file mode 100644
index d5cf8f3..0000000
--- a/wearable/wear/Notifications/LICENSE
+++ /dev/null
@@ -1,203 +0,0 @@
-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.
diff --git a/wearable/wear/Notifications/README-wear.txt b/wearable/wear/Notifications/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/Notifications/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/Quiz/LICENSE b/wearable/wear/Quiz/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/Quiz/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/Quiz/README-wear.txt b/wearable/wear/Quiz/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/Quiz/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/RecipeAssistant/LICENSE b/wearable/wear/RecipeAssistant/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/RecipeAssistant/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/RecipeAssistant/README-wear.txt b/wearable/wear/RecipeAssistant/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/RecipeAssistant/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/RuntimePermissionsWear/Application/src/main/java/com/example/android/wearable/runtimepermissions/IncomingRequestPhoneService.java b/wearable/wear/RuntimePermissionsWear/Application/src/main/java/com/example/android/wearable/runtimepermissions/IncomingRequestPhoneService.java
index 4cad2fa..2c036cd 100644
--- a/wearable/wear/RuntimePermissionsWear/Application/src/main/java/com/example/android/wearable/runtimepermissions/IncomingRequestPhoneService.java
+++ b/wearable/wear/RuntimePermissionsWear/Application/src/main/java/com/example/android/wearable/runtimepermissions/IncomingRequestPhoneService.java
@@ -25,16 +25,14 @@
 
 import com.example.android.wearable.runtimepermissions.common.Constants;
 
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.PendingResult;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
 import com.google.android.gms.wearable.DataMap;
-import com.google.android.gms.wearable.MessageApi;
 import com.google.android.gms.wearable.MessageEvent;
 import com.google.android.gms.wearable.Wearable;
 import com.google.android.gms.wearable.WearableListenerService;
 
 import java.io.File;
-import java.util.concurrent.TimeUnit;
 
 /**
  * Handles all incoming requests for phone data (and permissions) from wear devices.
@@ -140,31 +138,26 @@
     private void sendMessage(String nodeId, DataMap dataMap) {
         Log.d(TAG, "sendMessage() Node: " + nodeId);
 
-        GoogleApiClient client = new GoogleApiClient.Builder(this)
-                .addApi(Wearable.API)
-                .build();
-        client.blockingConnect(Constants.CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
 
-
-        PendingResult<MessageApi.SendMessageResult> pendingMessageResult =
-                Wearable.MessageApi.sendMessage(
-                        client,
+        // Clients are inexpensive to create, so in this case we aren't creating member variables.
+        // (They are cached and shared between GoogleApi instances.)
+        Task<Integer> sendMessageTask =
+                Wearable.getMessageClient(
+                        getApplicationContext()).sendMessage(
                         nodeId,
                         Constants.MESSAGE_PATH_WEAR,
                         dataMap.toByteArray());
 
-        MessageApi.SendMessageResult sendMessageResult =
-                pendingMessageResult.await(
-                        Constants.CONNECTION_TIME_OUT_MS,
-                        TimeUnit.MILLISECONDS);
-
-        if (!sendMessageResult.getStatus().isSuccess()) {
-            Log.d(TAG, "Sending message failed, status: "
-                    + sendMessageResult.getStatus());
-        } else {
-            Log.d(TAG, "Message sent successfully");
-        }
-        client.disconnect();
+        sendMessageTask.addOnCompleteListener(new OnCompleteListener<Integer>() {
+            @Override
+            public void onComplete(Task<Integer> task) {
+                if (task.isSuccessful()) {
+                    Log.d(TAG, "Message sent successfully");
+                } else {
+                    Log.d(TAG, "Message failed.");
+                }
+            }
+        });
     }
 
     private boolean isExternalStorageReadable() {
@@ -173,4 +166,4 @@
         return Environment.MEDIA_MOUNTED.equals(state)
                 || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state);
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/RuntimePermissionsWear/Application/src/main/java/com/example/android/wearable/runtimepermissions/MainPhoneActivity.java b/wearable/wear/RuntimePermissionsWear/Application/src/main/java/com/example/android/wearable/runtimepermissions/MainPhoneActivity.java
index 196b03b..d2c3ea1 100644
--- a/wearable/wear/RuntimePermissionsWear/Application/src/main/java/com/example/android/wearable/runtimepermissions/MainPhoneActivity.java
+++ b/wearable/wear/RuntimePermissionsWear/Application/src/main/java/com/example/android/wearable/runtimepermissions/MainPhoneActivity.java
@@ -32,21 +32,18 @@
 
 import com.example.android.wearable.runtimepermissions.common.Constants;
 
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.PendingResult;
-import com.google.android.gms.common.api.ResultCallback;
-import com.google.android.gms.wearable.CapabilityApi;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.android.gms.wearable.CapabilityClient;
 import com.google.android.gms.wearable.CapabilityInfo;
 import com.google.android.gms.wearable.DataMap;
-import com.google.android.gms.wearable.MessageApi;
+import com.google.android.gms.wearable.MessageClient;
 import com.google.android.gms.wearable.MessageEvent;
 import com.google.android.gms.wearable.Node;
 import com.google.android.gms.wearable.Wearable;
 
 import java.io.File;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 /**
  * Displays data that requires runtime permissions both locally (READ_EXTERNAL_STORAGE) and
@@ -60,11 +57,9 @@
  * in app experience.
  */
 public class MainPhoneActivity extends AppCompatActivity implements
-        GoogleApiClient.ConnectionCallbacks,
-        GoogleApiClient.OnConnectionFailedListener,
-        CapabilityApi.CapabilityListener,
-        MessageApi.MessageListener,
-        ResultCallback<MessageApi.SendMessageResult> {
+        CapabilityClient.OnCapabilityChangedListener,
+        MessageClient.OnMessageReceivedListener,
+        OnCompleteListener<Integer> {
 
     private static final String TAG = "MainPhoneActivity";
 
@@ -88,8 +83,6 @@
 
     private Set<Node> mWearNodeIds;
 
-    private GoogleApiClient mGoogleApiClient;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log.d(TAG, "onCreate()");
@@ -107,19 +100,11 @@
         mWearRequestingPhoneStoragePermission =
                 getIntent().getBooleanExtra(EXTRA_PROMPT_PERMISSION_FROM_WEAR, false);
 
-        mPhoneStoragePermissionButton =
-                (Button) findViewById(R.id.phoneStoragePermissionButton);
+        mPhoneStoragePermissionButton = findViewById(R.id.phoneStoragePermissionButton);
 
-        mWearBodySensorsPermissionButton =
-                (Button) findViewById(R.id.wearBodySensorsPermissionButton);
+        mWearBodySensorsPermissionButton = findViewById(R.id.wearBodySensorsPermissionButton);
 
-        mOutputTextView = (TextView) findViewById(R.id.output);
-
-        mGoogleApiClient = new GoogleApiClient.Builder(this)
-                .addApi(Wearable.API)
-                .addConnectionCallbacks(this)
-                .addOnConnectionFailedListener(this)
-                .build();
+        mOutputTextView = findViewById(R.id.output);
     }
 
     public void onClickWearBodySensors(View view) {
@@ -147,14 +132,9 @@
     protected void onPause() {
         Log.d(TAG, "onPause()");
         super.onPause();
-        if ((mGoogleApiClient != null) && (mGoogleApiClient.isConnected())) {
-            Wearable.CapabilityApi.removeCapabilityListener(
-                    mGoogleApiClient,
-                    this,
-                    Constants.CAPABILITY_WEAR_APP);
-            Wearable.MessageApi.removeListener(mGoogleApiClient, this);
-            mGoogleApiClient.disconnect();
-        }
+
+        Wearable.getMessageClient(this).removeListener(this);
+        Wearable.getCapabilityClient(this).removeListener(this);
     }
 
     @Override
@@ -174,9 +154,51 @@
                     R.drawable.ic_permission_approved, 0, 0, 0);
         }
 
-        if (mGoogleApiClient != null) {
-            mGoogleApiClient.connect();
-        }
+        // Clients are inexpensive to create, so in this case we aren't creating member variables.
+        // (They are cached and shared between GoogleApi instances.)
+        Wearable.getMessageClient(this).addListener(this);
+        Wearable.getCapabilityClient(this).addListener(
+                this, Constants.CAPABILITY_WEAR_APP);
+
+        // Initial check of capabilities to find the phone.
+        Task<CapabilityInfo> capabilityInfoTask = Wearable.getCapabilityClient(this)
+                .getCapability(Constants.CAPABILITY_WEAR_APP, CapabilityClient.FILTER_REACHABLE);
+
+        capabilityInfoTask.addOnCompleteListener(new OnCompleteListener<CapabilityInfo>() {
+            @Override
+            public void onComplete(Task<CapabilityInfo> task) {
+
+                if (task.isSuccessful()) {
+                    Log.d(TAG, "Capability request succeeded.");
+                    CapabilityInfo capabilityInfo = task.getResult();
+                    String capabilityName = capabilityInfo.getName();
+
+                    boolean wearSupportsSampleApp =
+                            capabilityName.equals(Constants.CAPABILITY_WEAR_APP);
+
+                    if (wearSupportsSampleApp) {
+                        mWearNodeIds = capabilityInfo.getNodes();
+
+                        /*
+                         * Upon getting all wear nodes, we now need to check if the original
+                         * request to launch this activity (and PhonePermissionRequestActivity) was
+                         * initiated by a wear device. If it was, we need to send back the
+                         * permission results (data or rejection of permission) to the wear device.
+                         *
+                         * Also, note we set variable to false, this enables the user to continue
+                         * changing permissions without sending updates to the wear every time.
+                         */
+                        if (mWearRequestingPhoneStoragePermission) {
+                            mWearRequestingPhoneStoragePermission = false;
+                            sendWearPermissionResults();
+                        }
+                    }
+
+                } else {
+                    Log.d(TAG, "Capability request failed to return any results.");
+                }
+            }
+        });
     }
 
     @Override
@@ -195,66 +217,6 @@
         }
     }
 
-    @Override
-    public void onConnected(Bundle bundle) {
-        Log.d(TAG, "onConnected()");
-
-        // Set up listeners for capability and message changes.
-        Wearable.CapabilityApi.addCapabilityListener(
-                mGoogleApiClient,
-                this,
-                Constants.CAPABILITY_WEAR_APP);
-        Wearable.MessageApi.addListener(mGoogleApiClient, this);
-
-        // Initial check of capabilities to find the wear nodes.
-        PendingResult<CapabilityApi.GetCapabilityResult> pendingResult =
-                Wearable.CapabilityApi.getCapability(
-                        mGoogleApiClient,
-                        Constants.CAPABILITY_WEAR_APP,
-                        CapabilityApi.FILTER_REACHABLE);
-
-        pendingResult.setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
-            @Override
-            public void onResult(CapabilityApi.GetCapabilityResult getCapabilityResult) {
-
-                CapabilityInfo capabilityInfo = getCapabilityResult.getCapability();
-                String capabilityName = capabilityInfo.getName();
-
-                boolean wearSupportsSampleApp =
-                        capabilityName.equals(Constants.CAPABILITY_WEAR_APP);
-
-                if (wearSupportsSampleApp) {
-                    mWearNodeIds = capabilityInfo.getNodes();
-
-                    /*
-                     * Upon getting all wear nodes, we now need to check if the original request to
-                     * launch this activity (and PhonePermissionRequestActivity) was initiated by
-                     * a wear device. If it was, we need to send back the permission results (data
-                     * or rejection of permission) to the wear device.
-                     *
-                     * Also, note we set variable to false, this enables the user to continue
-                     * changing permissions without sending updates to the wear every time.
-                     */
-                    if (mWearRequestingPhoneStoragePermission) {
-                        mWearRequestingPhoneStoragePermission = false;
-                        sendWearPermissionResults();
-                    }
-                }
-            }
-        });
-    }
-
-    @Override
-    public void onConnectionSuspended(int i) {
-        Log.d(TAG, "onConnectionSuspended(): connection to location client suspended");
-    }
-
-    @Override
-    public void onConnectionFailed(ConnectionResult connectionResult) {
-        Log.e(TAG, "onConnectionFailed(): connection to location client failed");
-    }
-
-
     public void onCapabilityChanged(CapabilityInfo capabilityInfo) {
         Log.d(TAG, "onCapabilityChanged(): " + capabilityInfo);
 
@@ -310,9 +272,9 @@
     }
 
     @Override
-    public void onResult(MessageApi.SendMessageResult sendMessageResult) {
-        if (!sendMessageResult.getStatus().isSuccess()) {
-            Log.d(TAG, "Sending message failed, onResult: " + sendMessageResult);
+    public void onComplete(Task<Integer> task) {
+        if (!task.isSuccessful()) {
+            Log.d(TAG, "Sending message failed, onComplete.");
             updateWearButtonOnUiThread();
             logToUi("Sending message failed.");
 
@@ -325,19 +287,17 @@
         Log.d(TAG, "sendMessage(): " + mWearNodeIds);
 
         if ((mWearNodeIds != null) && (!mWearNodeIds.isEmpty())) {
-
-            PendingResult<MessageApi.SendMessageResult> pendingResult;
+            
+            Task<Integer> sendMessageTask;
 
             for (Node node : mWearNodeIds) {
 
-                pendingResult = Wearable.MessageApi.sendMessage(
-                        mGoogleApiClient,
+                sendMessageTask = Wearable.getMessageClient(this).sendMessage(
                         node.getId(),
                         Constants.MESSAGE_PATH_WEAR,
                         dataMap.toByteArray());
 
-                pendingResult.setResultCallback(this, Constants.CONNECTION_TIME_OUT_MS,
-                        TimeUnit.SECONDS);
+                sendMessageTask.addOnCompleteListener(this);
             }
         } else {
             // Unable to retrieve node with proper capability
diff --git a/wearable/wear/RuntimePermissionsWear/Shared/build.gradle b/wearable/wear/RuntimePermissionsWear/Shared/build.gradle
index 95588db..bf02c2c 100644
--- a/wearable/wear/RuntimePermissionsWear/Shared/build.gradle
+++ b/wearable/wear/RuntimePermissionsWear/Shared/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
diff --git a/wearable/wear/RuntimePermissionsWear/Wearable/src/main/java/com/example/android/wearable/runtimepermissions/IncomingRequestWearService.java b/wearable/wear/RuntimePermissionsWear/Wearable/src/main/java/com/example/android/wearable/runtimepermissions/IncomingRequestWearService.java
index 5dc2467..408b470 100644
--- a/wearable/wear/RuntimePermissionsWear/Wearable/src/main/java/com/example/android/wearable/runtimepermissions/IncomingRequestWearService.java
+++ b/wearable/wear/RuntimePermissionsWear/Wearable/src/main/java/com/example/android/wearable/runtimepermissions/IncomingRequestWearService.java
@@ -26,13 +26,11 @@
 
 import com.example.android.wearable.runtimepermissions.common.Constants;
 
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.PendingResult;
-import com.google.android.gms.wearable.CapabilityApi;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.android.gms.wearable.CapabilityClient;
 import com.google.android.gms.wearable.CapabilityInfo;
 import com.google.android.gms.wearable.DataMap;
-import com.google.android.gms.wearable.MessageApi;
 import com.google.android.gms.wearable.MessageEvent;
 import com.google.android.gms.wearable.Node;
 import com.google.android.gms.wearable.Wearable;
@@ -40,7 +38,6 @@
 
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 /**
  * Handles all incoming requests for wear data (and permissions) from phone devices.
@@ -129,60 +126,52 @@
         }
     }
 
-    private void sendMessage(DataMap dataMap) {
+    private void sendMessage(final DataMap dataMap) {
 
         Log.d(TAG, "sendMessage(): " + dataMap);
 
-        GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
-                .addApi(Wearable.API)
-                .build();
-        ConnectionResult connectionResult =
-                googleApiClient.blockingConnect(
-                        Constants.CONNECTION_TIME_OUT_MS,
-                        TimeUnit.MILLISECONDS);
+        // Initial check of capabilities to find the phone.
+        Task<CapabilityInfo> capabilityInfoTask = Wearable.getCapabilityClient(this)
+                .getCapability(Constants.CAPABILITY_PHONE_APP, CapabilityClient.FILTER_REACHABLE);
 
-        if (!connectionResult.isSuccess()) {
-            Log.d(TAG, "Google API Client failed to connect.");
-            return;
-        }
+        capabilityInfoTask.addOnCompleteListener(new OnCompleteListener<CapabilityInfo>() {
+             @Override
+             public void onComplete(Task<CapabilityInfo> task) {
 
-        PendingResult<CapabilityApi.GetCapabilityResult> pendingCapabilityResult =
-                Wearable.CapabilityApi.getCapability(
-                        googleApiClient,
-                        Constants.CAPABILITY_PHONE_APP,
-                        CapabilityApi.FILTER_REACHABLE);
+                 if (task.isSuccessful()) {
+                     Log.d(TAG, "Capability request succeeded.");
 
-        CapabilityApi.GetCapabilityResult getCapabilityResult =
-                pendingCapabilityResult.await(
-                        Constants.CONNECTION_TIME_OUT_MS,
-                        TimeUnit.MILLISECONDS);
+                     CapabilityInfo capabilityInfo = task.getResult();
+                     String phoneNodeId = pickBestNodeId(capabilityInfo.getNodes());
 
-        if (!getCapabilityResult.getStatus().isSuccess()) {
-            Log.d(TAG, "CapabilityApi failed to return any results.");
-            googleApiClient.disconnect();
-            return;
-        }
+                     if (phoneNodeId != null) {
+                         // Instantiates clients without member variables, as clients are inexpensive to
+                         // create. (They are cached and shared between GoogleApi instances.)
+                         Task<Integer> sendMessageTask =
+                                 Wearable.getMessageClient(
+                                         getApplicationContext()).sendMessage(
+                                         phoneNodeId,
+                                         Constants.MESSAGE_PATH_PHONE,
+                                         dataMap.toByteArray());
 
-        CapabilityInfo capabilityInfo = getCapabilityResult.getCapability();
-        String phoneNodeId = pickBestNodeId(capabilityInfo.getNodes());
-
-        PendingResult<MessageApi.SendMessageResult> pendingMessageResult =
-                Wearable.MessageApi.sendMessage(
-                        googleApiClient,
-                        phoneNodeId,
-                        Constants.MESSAGE_PATH_PHONE,
-                        dataMap.toByteArray());
-
-        MessageApi.SendMessageResult sendMessageResult =
-                pendingMessageResult.await(Constants.CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
-
-        if (!sendMessageResult.getStatus().isSuccess()) {
-            Log.d(TAG, "Sending message failed, onResult: " + sendMessageResult.getStatus());
-        } else {
-            Log.d(TAG, "Message sent successfully");
-        }
-
-        googleApiClient.disconnect();
+                         sendMessageTask.addOnCompleteListener(new OnCompleteListener<Integer>() {
+                             @Override
+                             public void onComplete(Task<Integer> task) {
+                                 if (task.isSuccessful()) {
+                                     Log.d(TAG, "Message sent successfully");
+                                 } else {
+                                     Log.d(TAG, "Message failed.");
+                                 }
+                             }
+                         });
+                     } else {
+                         Log.d(TAG, "No phone node available.");
+                     }
+                 } else {
+                     Log.d(TAG, "Capability request failed to return any results.");
+                 }
+             }
+         });
     }
 
     /*
@@ -206,4 +195,4 @@
         }
         return bestNodeId;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/RuntimePermissionsWear/Wearable/src/main/java/com/example/android/wearable/runtimepermissions/MainWearActivity.java b/wearable/wear/RuntimePermissionsWear/Wearable/src/main/java/com/example/android/wearable/runtimepermissions/MainWearActivity.java
index 95a152b..685f200 100644
--- a/wearable/wear/RuntimePermissionsWear/Wearable/src/main/java/com/example/android/wearable/runtimepermissions/MainWearActivity.java
+++ b/wearable/wear/RuntimePermissionsWear/Wearable/src/main/java/com/example/android/wearable/runtimepermissions/MainWearActivity.java
@@ -17,16 +17,15 @@
 package com.example.android.wearable.runtimepermissions;
 
 import android.Manifest;
-import android.app.Activity;
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.hardware.Sensor;
 import android.hardware.SensorManager;
 import android.os.Bundle;
 import android.os.Looper;
-import android.support.annotation.NonNull;
 import android.support.v4.app.ActivityCompat;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
@@ -34,21 +33,18 @@
 
 import com.example.android.wearable.runtimepermissions.common.Constants;
 
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.PendingResult;
-import com.google.android.gms.common.api.ResultCallback;
-import com.google.android.gms.wearable.CapabilityApi;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.android.gms.wearable.CapabilityClient;
 import com.google.android.gms.wearable.CapabilityInfo;
 import com.google.android.gms.wearable.DataMap;
-import com.google.android.gms.wearable.MessageApi;
+import com.google.android.gms.wearable.MessageClient;
 import com.google.android.gms.wearable.MessageEvent;
 import com.google.android.gms.wearable.Node;
 import com.google.android.gms.wearable.Wearable;
 
 import java.util.List;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 /**
  * Displays data that requires runtime permissions both locally (BODY_SENSORS) and remotely on
@@ -59,12 +55,10 @@
  * this Activity also sends back the results of the permission request to the phone device (and
  * the sensor data if approved).
  */
-public class MainWearActivity extends Activity implements
-        AmbientMode.AmbientCallbackProvider,
-        GoogleApiClient.ConnectionCallbacks,
-        GoogleApiClient.OnConnectionFailedListener,
-        CapabilityApi.CapabilityListener,
-        MessageApi.MessageListener,
+public class MainWearActivity extends FragmentActivity
+        implements AmbientModeSupport.AmbientCallbackProvider,
+        CapabilityClient.OnCapabilityChangedListener,
+        MessageClient.OnMessageReceivedListener,
         ActivityCompat.OnRequestPermissionsResultCallback {
 
     private static final String TAG = "MainWearActivity";
@@ -82,7 +76,7 @@
      * Ambient mode controller attached to this display. Used by the Activity to see if it is in
      * ambient mode.
      */
-    private AmbientMode.AmbientController mAmbientController;
+    private AmbientModeSupport.AmbientController mAmbientController;
 
     private boolean mWearBodySensorsPermissionApproved;
     private boolean mPhoneStoragePermissionApproved;
@@ -95,8 +89,6 @@
 
     private String mPhoneNodeId;
 
-    private GoogleApiClient mGoogleApiClient;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log.d(TAG, "onCreate()");
@@ -111,34 +103,26 @@
         setContentView(R.layout.activity_main);
 
         // Enables Ambient mode.
-        mAmbientController = AmbientMode.attachAmbientSupport(this);
+        mAmbientController = AmbientModeSupport.attach(this);
 
         // Checks if phone app requested wear permission (permission request opens later if true).
         mPhoneRequestingWearSensorPermission =
                 getIntent().getBooleanExtra(EXTRA_PROMPT_PERMISSION_FROM_PHONE, false);
 
-        mWearBodySensorsPermissionButton =
-                (Button) findViewById(R.id.wear_body_sensors_permission_button);
+        mWearBodySensorsPermissionButton = findViewById(R.id.wear_body_sensors_permission_button);
 
         if (mWearBodySensorsPermissionApproved) {
             mWearBodySensorsPermissionButton.setCompoundDrawablesWithIntrinsicBounds(
                     R.drawable.ic_permission_approved, 0, 0, 0);
         }
 
-        mPhoneStoragePermissionButton = (Button) findViewById(R.id.phone_storage_permission_button);
+        mPhoneStoragePermissionButton = findViewById(R.id.phone_storage_permission_button);
 
-        mOutputTextView = (TextView) findViewById(R.id.output);
+        mOutputTextView = findViewById(R.id.output);
 
         if (mPhoneRequestingWearSensorPermission) {
             launchPermissionDialogForPhone();
         }
-
-
-        mGoogleApiClient = new GoogleApiClient.Builder(this)
-                .addApi(Wearable.API)
-                .addConnectionCallbacks(this)
-                .addOnConnectionFailedListener(this)
-                .build();
     }
 
     public void onClickWearBodySensors(View view) {
@@ -175,23 +159,42 @@
     protected void onPause() {
         Log.d(TAG, "onPause()");
         super.onPause();
-        if ((mGoogleApiClient != null) && mGoogleApiClient.isConnected()) {
-            Wearable.CapabilityApi.removeCapabilityListener(
-                    mGoogleApiClient,
-                    this,
-                    Constants.CAPABILITY_PHONE_APP);
-            Wearable.MessageApi.removeListener(mGoogleApiClient, this);
-            mGoogleApiClient.disconnect();
-        }
+
+        Wearable.getMessageClient(this).removeListener(this);
+        Wearable.getCapabilityClient(this).removeListener(this);
     }
 
+
     @Override
     protected void onResume() {
         Log.d(TAG, "onResume()");
         super.onResume();
-        if (mGoogleApiClient != null) {
-            mGoogleApiClient.connect();
-        }
+
+        // Instantiates clients without member variables, as clients are inexpensive to create and
+        // won't lose their listeners. (They are cached and shared between GoogleApi instances.)
+        Wearable.getMessageClient(this).addListener(this);
+        Wearable.getCapabilityClient(this).addListener(
+                this, Constants.CAPABILITY_PHONE_APP);
+
+        // Initial check of capabilities to find the phone.
+        Task<CapabilityInfo> capabilityInfoTask = Wearable.getCapabilityClient(this)
+                .getCapability(Constants.CAPABILITY_PHONE_APP, CapabilityClient.FILTER_REACHABLE);
+
+        capabilityInfoTask.addOnCompleteListener(new OnCompleteListener<CapabilityInfo>() {
+            @Override
+            public void onComplete(Task<CapabilityInfo> task) {
+
+                if (task.isSuccessful()) {
+                    Log.d(TAG, "Capability request succeeded.");
+
+                    CapabilityInfo capabilityInfo = task.getResult();
+                    mPhoneNodeId = pickBestNodeId(capabilityInfo.getNodes());
+
+                } else {
+                    Log.d(TAG, "Capability request failed to return any results.");
+                }
+            }
+        });
 
         // Enables app to handle 23+ (M+) style permissions.
         mWearBodySensorsPermissionApproved =
@@ -218,51 +221,6 @@
         }
     }
 
-
-    @Override
-    public void onConnected(Bundle bundle) {
-        Log.d(TAG, "onConnected()");
-
-        // Set up listeners for capability and message changes.
-        Wearable.CapabilityApi.addCapabilityListener(
-                mGoogleApiClient,
-                this,
-                Constants.CAPABILITY_PHONE_APP);
-        Wearable.MessageApi.addListener(mGoogleApiClient, this);
-
-        // Initial check of capabilities to find the phone.
-        PendingResult<CapabilityApi.GetCapabilityResult> pendingResult =
-                Wearable.CapabilityApi.getCapability(
-                        mGoogleApiClient,
-                        Constants.CAPABILITY_PHONE_APP,
-                        CapabilityApi.FILTER_REACHABLE);
-
-        pendingResult.setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
-            @Override
-            public void onResult(CapabilityApi.GetCapabilityResult getCapabilityResult) {
-
-                if (getCapabilityResult.getStatus().isSuccess()) {
-                    CapabilityInfo capabilityInfo = getCapabilityResult.getCapability();
-                    mPhoneNodeId = pickBestNodeId(capabilityInfo.getNodes());
-
-                } else {
-                    Log.d(TAG, "Failed CapabilityApi result: "
-                            + getCapabilityResult.getStatus());
-                }
-            }
-        });
-    }
-
-    @Override
-    public void onConnectionSuspended(int i) {
-        Log.d(TAG, "onConnectionSuspended(): connection to location client suspended");
-    }
-
-    @Override
-    public void onConnectionFailed(ConnectionResult connectionResult) {
-        Log.e(TAG, "onConnectionFailed(): connection to location client failed");
-    }
-
     public void onCapabilityChanged(CapabilityInfo capabilityInfo) {
         Log.d(TAG, "onCapabilityChanged(): " + capabilityInfo);
 
@@ -274,7 +232,7 @@
      */
     @Override
     public void onRequestPermissionsResult(
-            int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+            int requestCode, String[] permissions, int[] grantResults) {
 
         String permissionResult = "Request code: " + requestCode + ", Permissions: " + permissions
                 + ", Results: " + grantResults;
@@ -377,27 +335,21 @@
         Log.d(TAG, "sendMessage(): " + mPhoneNodeId);
 
         if (mPhoneNodeId != null) {
+            // Clients are inexpensive to create, so in this case we aren't creating member variables.
+            // (They are cached and shared between GoogleApi instances.)
+            Task<Integer> sendMessageTask = Wearable.getMessageClient(this)
+                    .sendMessage(mPhoneNodeId, Constants.MESSAGE_PATH_PHONE, dataMap.toByteArray());
 
-            PendingResult<MessageApi.SendMessageResult> pendingResult =
-                    Wearable.MessageApi.sendMessage(
-                            mGoogleApiClient,
-                            mPhoneNodeId,
-                            Constants.MESSAGE_PATH_PHONE,
-                            dataMap.toByteArray());
-
-            pendingResult.setResultCallback(new ResultCallback<MessageApi.SendMessageResult>() {
+            sendMessageTask.addOnCompleteListener(new OnCompleteListener<Integer>() {
                 @Override
-                public void onResult(MessageApi.SendMessageResult sendMessageResult) {
-
-                    if (!sendMessageResult.getStatus().isSuccess()) {
-                        updatePhoneButtonOnUiThread();
-                        logToUi("Sending message failed.");
-
+                public void onComplete(Task<Integer> task) {
+                    if (task.isSuccessful()) {
+                        Log.d(TAG, "Message sent successfully");
                     } else {
-                        Log.d(TAG, "Message sent successfully.");
+                        Log.d(TAG, "Message failed.");
                     }
                 }
-            }, Constants.CONNECTION_TIME_OUT_MS, TimeUnit.SECONDS);
+            });
 
         } else {
             // Unable to retrieve node with proper capability
@@ -485,11 +437,11 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {
         /** Prepares the UI for ambient mode. */
         @Override
         public void onEnterAmbient(Bundle ambientDetails) {
@@ -568,4 +520,4 @@
             });
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/RuntimePermissionsWear/template-params.xml b/wearable/wear/RuntimePermissionsWear/template-params.xml
index 0a1863c..df3850e 100644
--- a/wearable/wear/RuntimePermissionsWear/template-params.xml
+++ b/wearable/wear/RuntimePermissionsWear/template-params.xml
@@ -32,10 +32,10 @@
         <has_handheld_app>true</has_handheld_app>
     </wearable>
 
-    <dependency>com.android.support:appcompat-v7:27.1,0</dependency>
-    <dependency>com.android.support:design:27.1.0</dependency>
+    <dependency>com.android.support:appcompat-v7:27.1.1</dependency>
+    <dependency>com.android.support:design:27.1.1</dependency>
 
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
 
     <strings>
         <intro>
diff --git a/wearable/wear/SkeletonWearableApp/LICENSE b/wearable/wear/SkeletonWearableApp/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/SkeletonWearableApp/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/SkeletonWearableApp/README-wear.txt b/wearable/wear/SkeletonWearableApp/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/SkeletonWearableApp/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/WearableMainActivity.java b/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/WearableMainActivity.java
index d6e2f3f..c2e180c 100644
--- a/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/WearableMainActivity.java
+++ b/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/WearableMainActivity.java
@@ -30,7 +30,6 @@
 
 import android.Manifest;
 import android.annotation.SuppressLint;
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -42,8 +41,9 @@
 import android.preference.PreferenceManager;
 import android.support.annotation.NonNull;
 import android.support.v4.app.ActivityCompat;
+import android.support.v4.app.FragmentActivity;
 import android.support.v4.content.ContextCompat;
-import android.support.wear.ambient.AmbientMode;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
@@ -62,8 +62,8 @@
  * and if the user exceeds the speed limit, it will turn red. In order to show the user that GPS
  * location data is coming in, a small green dot keeps on blinking while GPS data is available.
  */
-public class WearableMainActivity extends Activity implements
-        AmbientMode.AmbientCallbackProvider,
+public class WearableMainActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider,
         GoogleApiClient.ConnectionCallbacks,
         GoogleApiClient.OnConnectionFailedListener,
         ActivityCompat.OnRequestPermissionsResultCallback,
@@ -112,7 +112,7 @@
      * Ambient mode controller attached to this display. Used by the Activity to see if it is in
      * ambient mode.
      */
-    private AmbientMode.AmbientController mAmbientController;
+    private AmbientModeSupport.AmbientController mAmbientController;
 
     private GoogleApiClient mGoogleApiClient;
 
@@ -150,7 +150,7 @@
          * https://developer.android.com/training/wearables/apps/always-on.html
          */
         // Enables Ambient mode.
-        mAmbientController = AmbientMode.attachAmbientSupport(this);
+        mAmbientController = AmbientModeSupport.attach(this);
 
         mCalendar = Calendar.getInstance();
 
@@ -229,12 +229,12 @@
     }
 
     private void setupViews() {
-        mSpeedLimitTextView = (TextView) findViewById(R.id.max_speed_text);
-        mSpeedTextView = (TextView) findViewById(R.id.current_speed_text);
-        mCurrentSpeedMphTextView = (TextView) findViewById(R.id.current_speed_mph);
+        mSpeedLimitTextView = findViewById(R.id.max_speed_text);
+        mSpeedTextView = findViewById(R.id.current_speed_text);
+        mCurrentSpeedMphTextView = findViewById(R.id.current_speed_mph);
 
-        mGpsPermissionImageView = (ImageView) findViewById(R.id.gps_permission);
-        mGpsIssueTextView = (TextView) findViewById(R.id.gps_issue_text);
+        mGpsPermissionImageView = findViewById(R.id.gps_permission);
+        mGpsIssueTextView = findViewById(R.id.gps_issue_text);
         mBlinkingGpsStatusDotView = findViewById(R.id.dot);
 
         updateActivityViewsBasedOnLocationPermissions();
@@ -506,11 +506,11 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {
         /** Prepares the UI for ambient mode. */
         @Override
         public void onEnterAmbient(Bundle ambientDetails) {
@@ -535,4 +535,4 @@
                     ContextCompat.getColor(getApplicationContext(), R.color.green));
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/ui/SpeedPickerLayout.java b/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/ui/SpeedPickerLayout.java
index 5796c13..7b767be 100644
--- a/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/ui/SpeedPickerLayout.java
+++ b/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/ui/SpeedPickerLayout.java
@@ -60,8 +60,8 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        mCircle = (ImageView) findViewById(R.id.circle);
-        mName = (TextView) findViewById(R.id.name);
+        mCircle = findViewById(R.id.circle);
+        mName = findViewById(R.id.name);
     }
 
     @Override
diff --git a/wearable/wear/SpeedTracker/template-params.xml b/wearable/wear/SpeedTracker/template-params.xml
index 253f13d..6524ca4 100644
--- a/wearable/wear/SpeedTracker/template-params.xml
+++ b/wearable/wear/SpeedTracker/template-params.xml
@@ -32,8 +32,8 @@
         <has_handheld_app>true</has_handheld_app>
     </wearable>
 
-    <dependency>com.android.support:design:27.1.0</dependency>
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency>com.android.support:design:27.1.1</dependency>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
 
     <dependency>com.google.android.gms:play-services-maps</dependency>
     <dependency>com.google.android.gms:play-services-location</dependency>
diff --git a/wearable/wear/SynchronizedNotifications/Application/proguard-project.txt b/wearable/wear/SynchronizedNotifications/Application/proguard-project.txt
deleted file mode 100644
index 0d8f171..0000000
--- a/wearable/wear/SynchronizedNotifications/Application/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
- To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# 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/wearable/wear/SynchronizedNotifications/LICENSE b/wearable/wear/SynchronizedNotifications/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/SynchronizedNotifications/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/SynchronizedNotifications/README-wear.txt b/wearable/wear/SynchronizedNotifications/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/SynchronizedNotifications/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/Timer/LICENSE b/wearable/wear/Timer/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/Timer/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/Timer/README-wear.txt b/wearable/wear/Timer/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/Timer/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/WatchViewStub/LICENSE b/wearable/wear/WatchViewStub/LICENSE
deleted file mode 100644
index 4f22946..0000000
--- a/wearable/wear/WatchViewStub/LICENSE
+++ /dev/null
@@ -1,647 +0,0 @@
-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/wearable/wear/WatchViewStub/README-wear.txt b/wearable/wear/WatchViewStub/README-wear.txt
deleted file mode 100644
index 17523d7..0000000
--- a/wearable/wear/WatchViewStub/README-wear.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-<#--
-        Copyright 2014 The Android Open Source Project
-
-        Licensed under the Apache License, Version 2.0 (the "License");
-        you may not use this file except in compliance with the License.
-        You may obtain a copy of the License at
-
-        http://www.apache.org/licenses/LICENSE-2.0
-
-        Unless required by applicable law or agreed to in writing, software
-        distributed under the License is distributed on an "AS IS" BASIS,
-        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-        See the License for the specific language governing permissions and
-        limitations under the License.
--->
-
-Steps to use Wear template on top of an existing sample:
-- In template-params.xml.ftl:
-    - Add the following template:
-        <template src="Wear"/>
-
-- Refresh your project (./gradlew refresh)
-- Add Wearable-specific code to Wearable directory
-- Add code to be shared among the main application and the wearable to Shared
-  directory
-
-Note that you still need the main application sample code. This is usually
-achieved by adding another template, like "base" for example.
-
-
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/build.gradle b/wearable/wear/WearAccessibilityApp/Wearable/build.gradle
index a38f216..86a8296 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/build.gradle
+++ b/wearable/wear/WearAccessibilityApp/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,17 +21,17 @@
 
 dependencies {
 
-    compile 'com.android.support:wear:27.1.0'
-    compile 'com.android.support.constraint:constraint-layout:1.0.2'
-    compile 'com.android.support:appcompat-v7:27.1.0'
+    implementation 'com.android.support:wear:27.1.0'
+    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
+    implementation 'com.android.support:appcompat-v7:27.1.0'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java
index 40c7a3a..5cb897e 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ControlsActivity.java
@@ -15,18 +15,19 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
 import android.preference.PreferenceFragment;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 
-public class ControlsActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class ControlsActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Display the fragment as the main content.
         getFragmentManager()
@@ -46,9 +47,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java
index cc0d0fb..e17476c 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/DialogsActivity.java
@@ -15,13 +15,13 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.app.Dialog;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.support.wearable.view.AcceptDenyDialog;
 import android.support.wearable.view.WearableDialogHelper.DialogBuilder;
 import android.view.LayoutInflater;
@@ -34,7 +34,8 @@
 import java.util.List;
 import java.util.function.Supplier;
 
-public class DialogsActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class DialogsActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     private List<DialogsItem> mItems;
     public View mView;
@@ -44,7 +45,7 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_dialogs);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Supplier objects
         Supplier<Dialog> twoActionDialog =
@@ -183,9 +184,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java
index 0145288..f254e28 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/FullScreenActivity.java
@@ -15,25 +15,26 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 
-public class FullScreenActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class FullScreenActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         setContentView(R.layout.activity_fullscreen_progress);
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java
index 2291fbc..dcb9504 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ImagesActivity.java
@@ -15,15 +15,16 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.graphics.drawable.Animatable2.AnimationCallback;
 import android.graphics.drawable.AnimatedVectorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.widget.ImageView;
 
-public class ImagesActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class ImagesActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
     private AnimatedVectorDrawable mAnimatedVectorDrawableSwipe;
     private AnimatedVectorDrawable mAnimatedVectorDrawableTap;
     private AnimationCallback mAnimationCallback;
@@ -33,7 +34,7 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_images);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Used to repeat animation from the beginning.
         mAnimationCallback =
@@ -66,9 +67,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java
index 723d57c..275f544 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/InLineActivity.java
@@ -15,22 +15,23 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.PreferenceFragment;
 import android.preference.PreferenceScreen;
 import android.preference.SwitchPreference;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 
-public class InLineActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class InLineActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         getFragmentManager()
                 .beginTransaction()
@@ -87,9 +88,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java
index 1159ebc..1d70066 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListOfGraphicsActivity.java
@@ -15,9 +15,9 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.AdapterView;
@@ -27,8 +27,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class ListOfGraphicsActivity extends Activity
-        implements AmbientMode.AmbientCallbackProvider {
+public class ListOfGraphicsActivity extends FragmentActivity
+        implements AmbientModeSupport.AmbientCallbackProvider {
     private List<AppItem> mItems;
 
     @Override
@@ -36,7 +36,7 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_list_of_graphics);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Store all data in a list for adapter to use.
         mItems = new ArrayList<AppItem>();
@@ -79,9 +79,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java
index 0ef82dc..bd9d773 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ListsActivity.java
@@ -15,9 +15,9 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.AdapterView;
@@ -27,7 +27,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class ListsActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class ListsActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
     private List<ListsItem> mItems;
 
     @Override
@@ -35,7 +36,7 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_lists);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Create a list of items for adapter to display.
         mItems = new ArrayList<>();
@@ -70,9 +71,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java
index b2fd721..4240397 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/LongListActivity.java
@@ -15,12 +15,12 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
 import android.os.Handler;
+import android.support.v4.app.FragmentActivity;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
-import android.support.wear.ambient.AmbientMode;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.support.wear.widget.WearableRecyclerView;
 import android.support.wear.widget.drawer.WearableActionDrawerView;
 import android.view.View;
@@ -30,7 +30,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class LongListActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class LongListActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     private List<AppItem> mItems;
     private LongListRecyclerViewAdapter mAdapter;
@@ -44,7 +45,7 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_long_list);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         mHandler = new Handler();
 
@@ -186,9 +187,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java
index a1f1d37..4bbfacd 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/MainActivity.java
@@ -15,23 +15,24 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.support.wear.widget.WearableLinearLayoutManager;
 import android.support.wear.widget.WearableRecyclerView;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class MainActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class MainActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Menu items
         List<AppItem> items = new ArrayList<AppItem>();
@@ -78,9 +79,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java
index 412b012..fd0bfeb 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/NotificationsActivity.java
@@ -15,7 +15,6 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
@@ -30,15 +29,17 @@
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceFragment;
 import android.preference.SwitchPreference;
+import android.support.v4.app.FragmentActivity;
 import android.support.v4.app.NotificationCompat;
 import android.support.v4.app.NotificationCompat.MessagingStyle;
 import android.support.v4.app.NotificationManagerCompat;
 import android.support.v4.app.RemoteInput;
 import android.support.v4.content.ContextCompat;
-import android.support.wear.ambient.AmbientMode;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.util.Log;
 
-public class NotificationsActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class NotificationsActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     public static final int NOTIFICATION_ID = 888;
 
@@ -46,7 +47,7 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Display the fragment as the main content.
         getFragmentManager()
@@ -315,9 +316,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java
index db1ae6e..acc3c53 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/OpenOnPhoneAnimationActivity.java
@@ -15,16 +15,16 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.graphics.drawable.Animatable2.AnimationCallback;
 import android.graphics.drawable.AnimatedVectorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.widget.ImageView;
 
-public class OpenOnPhoneAnimationActivity extends Activity
-        implements AmbientMode.AmbientCallbackProvider {
+public class OpenOnPhoneAnimationActivity extends FragmentActivity
+        implements AmbientModeSupport.AmbientCallbackProvider {
     private AnimationCallback mAnimationCallback;
     private AnimatedVectorDrawable mAnimatedVectorDrawablePhone;
 
@@ -33,7 +33,7 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_open_on_phone_animation);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         mAnimationCallback =
                 new AnimationCallback() {
@@ -59,9 +59,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java
index 3c53b03..5fa1f8b 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/PhotoCarouselActivity.java
@@ -15,23 +15,23 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ImageView;
 
-public class PhotoCarouselActivity extends Activity
-        implements AmbientMode.AmbientCallbackProvider, OnClickListener {
+public class PhotoCarouselActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider, OnClickListener {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_photo_carousel);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Grab reference to each image in activity_photo_carousel.
         ImageView catImage = findViewById(R.id.cat_image);
@@ -59,9 +59,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java
index 07ed344..38add02 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ProgressActivity.java
@@ -15,9 +15,9 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.AdapterView;
@@ -27,7 +27,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class ProgressActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class ProgressActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
     private List<ListsItem> mItems;
 
     @Override
@@ -35,7 +36,7 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_lists);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Create a list of items for adapter to display.
         mItems = new ArrayList<>();
@@ -70,9 +71,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java
index e8d26b2..d5bcc8b 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/RadioListActivity.java
@@ -15,28 +15,29 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.widget.TextView;
 
-public class RadioListActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class RadioListActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_radio_list);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         TextView titleView = findViewById(R.id.radio_list_title);
         titleView.setText(R.string.radio_list);
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java
index 27a24d1..cde17b5 100644
--- a/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java
+++ b/wearable/wear/WearAccessibilityApp/Wearable/src/main/java/com/example/android/wearable/wear/wearaccessibilityapp/ZoomImageActivity.java
@@ -15,20 +15,21 @@
  */
 package com.example.android.wearable.wear.wearaccessibilityapp;
 
-import android.app.Activity;
 import android.content.res.Resources.NotFoundException;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.widget.ImageView;
 
-public class ZoomImageActivity extends Activity implements AmbientMode.AmbientCallbackProvider {
+public class ZoomImageActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_zoom_image);
 
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         // Check if integer was actually given.
         if (!(getIntent().hasExtra(getString(R.string.intent_extra_image)))) {
@@ -42,9 +43,9 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {}
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {}
 }
diff --git a/wearable/wear/WearAccessibilityApp/template-params.xml b/wearable/wear/WearAccessibilityApp/template-params.xml
index 7117644..7e32902 100644
--- a/wearable/wear/WearAccessibilityApp/template-params.xml
+++ b/wearable/wear/WearAccessibilityApp/template-params.xml
@@ -26,9 +26,9 @@
 
     <multiDexEnabled>true</multiDexEnabled>
 
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
     <dependency_wearable>com.android.support.constraint:constraint-layout:1.0.2</dependency_wearable>
-    <dependency_wearable>com.android.support:appcompat-v7:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:appcompat-v7:27.1.1</dependency_wearable>
 
 
     <strings>
diff --git a/wearable/wear/WearComplicationProvidersTestSuite/Wearable/build.gradle b/wearable/wear/WearComplicationProvidersTestSuite/Wearable/build.gradle
index 84288bb..39ddaf8 100644
--- a/wearable/wear/WearComplicationProvidersTestSuite/Wearable/build.gradle
+++ b/wearable/wear/WearComplicationProvidersTestSuite/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,15 +21,15 @@
 
 dependencies {
 
-    compile 'com.android.support:appcompat-v7:27.1.0'
+    implementation 'com.android.support:appcompat-v7:27.1.1'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/WearComplicationProvidersTestSuite/template-params.xml b/wearable/wear/WearComplicationProvidersTestSuite/template-params.xml
index 9270990..8cb8692 100644
--- a/wearable/wear/WearComplicationProvidersTestSuite/template-params.xml
+++ b/wearable/wear/WearComplicationProvidersTestSuite/template-params.xml
@@ -30,7 +30,7 @@
         <has_handheld_app>false</has_handheld_app>
     </wearable>
 
-    <dependency_wearable>com.android.support:appcompat-v7:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:appcompat-v7:27.1.1</dependency_wearable>
 
     <strings>
         <intro>
diff --git a/wearable/wear/WearDrawers/Wearable/build.gradle b/wearable/wear/WearDrawers/Wearable/build.gradle
index 6a22d1c..d52e606 100644
--- a/wearable/wear/WearDrawers/Wearable/build.gradle
+++ b/wearable/wear/WearDrawers/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,15 +21,15 @@
 
 dependencies {
 
-    compile 'com.android.support:wear:27.1.0'
+    implementation 'com.android.support:wear:27.1.1'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/WearDrawers/Wearable/src/main/java/com/example/android/wearable/wear/weardrawers/MainActivity.java b/wearable/wear/WearDrawers/Wearable/src/main/java/com/example/android/wearable/wear/weardrawers/MainActivity.java
index c90583b..88d71f5 100644
--- a/wearable/wear/WearDrawers/Wearable/src/main/java/com/example/android/wearable/wear/weardrawers/MainActivity.java
+++ b/wearable/wear/WearDrawers/Wearable/src/main/java/com/example/android/wearable/wear/weardrawers/MainActivity.java
@@ -15,7 +15,6 @@
  */
 package com.example.android.wearable.wear.weardrawers;
 
-import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.content.Context;
@@ -24,7 +23,8 @@
 import android.graphics.ColorMatrixColorFilter;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.support.wear.widget.drawer.WearableActionDrawerView;
 import android.support.wear.widget.drawer.WearableNavigationDrawerView;
 import android.util.Log;
@@ -40,8 +40,8 @@
 /**
  * Demonstrates use of Navigation and Action Drawers on Wear.
  */
-public class MainActivity extends Activity implements
-        AmbientMode.AmbientCallbackProvider,
+public class MainActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider,
         MenuItem.OnMenuItemClickListener,
         WearableNavigationDrawerView.OnItemSelectedListener {
 
@@ -63,7 +63,7 @@
         setContentView(R.layout.activity_main);
 
         // Enables Ambient mode.
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
         mSolarSystem = initializeSolarSystem();
         mSelectedPlanet = 0;
@@ -223,7 +223,7 @@
                 LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
             View rootView = inflater.inflate(R.layout.fragment_planet, container, false);
 
-            mImageView = ((ImageView) rootView.findViewById(R.id.image));
+            mImageView = rootView.findViewById(R.id.image);
 
             int imageIdToLoad = getArguments().getInt(ARG_PLANET_IMAGE_ID);
             mImageView.setImageResource(imageIdToLoad);
@@ -257,11 +257,11 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {
         /** Prepares the UI for ambient mode. */
         @Override
         public void onEnterAmbient(Bundle ambientDetails) {
@@ -283,4 +283,4 @@
             mWearableActionDrawer.getController().peekDrawer();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearDrawers/template-params.xml b/wearable/wear/WearDrawers/template-params.xml
index 4b8ccdf..23b3271 100644
--- a/wearable/wear/WearDrawers/template-params.xml
+++ b/wearable/wear/WearDrawers/template-params.xml
@@ -26,7 +26,7 @@
 
     <multiDexEnabled>true</multiDexEnabled>
 
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
 
     <strings>
         <intro>
diff --git a/wearable/wear/WearHighBandwidthNetworking/Wearable/build.gradle b/wearable/wear/WearHighBandwidthNetworking/Wearable/build.gradle
index c56f3a1..6b309ec 100644
--- a/wearable/wear/WearHighBandwidthNetworking/Wearable/build.gradle
+++ b/wearable/wear/WearHighBandwidthNetworking/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,15 +21,15 @@
 
 dependencies {
 
-    compile 'com.android.support:wear:27.1.0'
+    implementation 'com.android.support:wear:27.1.1'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/WearHighBandwidthNetworking/Wearable/src/main/java/com/example/android/wearable/wear/wearhighbandwidthnetworking/MainActivity.java b/wearable/wear/WearHighBandwidthNetworking/Wearable/src/main/java/com/example/android/wearable/wear/wearhighbandwidthnetworking/MainActivity.java
index b2161ed..726d3e3 100644
--- a/wearable/wear/WearHighBandwidthNetworking/Wearable/src/main/java/com/example/android/wearable/wear/wearhighbandwidthnetworking/MainActivity.java
+++ b/wearable/wear/WearHighBandwidthNetworking/Wearable/src/main/java/com/example/android/wearable/wear/wearhighbandwidthnetworking/MainActivity.java
@@ -31,6 +31,7 @@
 import android.widget.ImageView;
 import android.widget.TextView;
 
+import java.lang.ref.WeakReference;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -60,7 +61,7 @@
     private ConnectivityManager.NetworkCallback mNetworkCallback;
 
     // Handler for dealing with network connection timeouts.
-    private Handler mHandler;
+    private final TimeOutHandler mTimeOutHandler = new TimeOutHandler(this);
 
     private ImageView mConnectivityIcon;
     private TextView mConnectivityText;
@@ -93,32 +94,19 @@
 
         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
 
-        mConnectivityIcon = (ImageView) findViewById(R.id.connectivity_icon);
-        mConnectivityText = (TextView) findViewById(R.id.connectivity_text);
+        mConnectivityIcon = findViewById(R.id.connectivity_icon);
+        mConnectivityText = findViewById(R.id.connectivity_text);
 
         mProgressBar = findViewById(R.id.progress_bar);
 
         mButton = findViewById(R.id.button);
         mButton.setTag(TAG_REQUEST_NETWORK);
-        mButtonIcon = (ImageView) findViewById(R.id.button_icon);
-        mButtonText = (TextView) findViewById(R.id.button_label);
+        mButtonIcon = findViewById(R.id.button_icon);
+        mButtonText = findViewById(R.id.button_label);
 
-        mInfoText = (TextView) findViewById(R.id.info_text);
+        mInfoText = findViewById(R.id.info_text);
 
         mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
-
-        mHandler = new Handler() {
-            @Override
-            public void handleMessage(Message msg) {
-                switch (msg.what) {
-                    case MESSAGE_CONNECTIVITY_TIMEOUT:
-                        Log.d(LOG_TAG, "Network connection timeout");
-                        setUiState(UI_STATE_CONNECTION_TIMEOUT);
-                        unregisterNetworkCallback();
-                        break;
-                }
-            }
-        };
     }
 
     @Override
@@ -159,11 +147,8 @@
         int bandwidth = mConnectivityManager
                 .getNetworkCapabilities(network).getLinkDownstreamBandwidthKbps();
 
-        if (bandwidth >= MIN_NETWORK_BANDWIDTH_KBPS) {
-            return true;
-        }
+        return bandwidth >= MIN_NETWORK_BANDWIDTH_KBPS;
 
-        return false;
     }
 
     private void requestHighBandwidthNetwork() {
@@ -185,7 +170,7 @@
         mNetworkCallback = new ConnectivityManager.NetworkCallback() {
             @Override
             public void onAvailable(final Network network) {
-                mHandler.removeMessages(MESSAGE_CONNECTIVITY_TIMEOUT);
+                mTimeOutHandler.removeMessages(MESSAGE_CONNECTIVITY_TIMEOUT);
 
                 runOnUiThread(new Runnable() {
                     @Override
@@ -230,8 +215,8 @@
         // requires android.permission.CHANGE_NETWORK_STATE
         mConnectivityManager.requestNetwork(request, mNetworkCallback);
 
-        mHandler.sendMessageDelayed(
-                mHandler.obtainMessage(MESSAGE_CONNECTIVITY_TIMEOUT),
+        mTimeOutHandler.sendMessageDelayed(
+                mTimeOutHandler.obtainMessage(MESSAGE_CONNECTIVITY_TIMEOUT),
                 NETWORK_CONNECTIVITY_TIMEOUT_MS);
     }
 
@@ -337,4 +322,26 @@
                 break;
         }
     }
-}
\ No newline at end of file
+
+    private static class TimeOutHandler extends Handler {
+        private final WeakReference<MainActivity> mMainActivityWeakReference;
+
+        TimeOutHandler(MainActivity mainActivity) {
+            mMainActivityWeakReference = new WeakReference<>(mainActivity);
+        }
+        @Override
+        public void handleMessage(Message msg) {
+            MainActivity mainActivity = mMainActivityWeakReference.get();
+
+            if (mainActivity != null) {
+                switch (msg.what) {
+                    case MESSAGE_CONNECTIVITY_TIMEOUT:
+                        Log.d(LOG_TAG, "Network connection timeout");
+                        mainActivity.setUiState(UI_STATE_CONNECTION_TIMEOUT);
+                        mainActivity.unregisterNetworkCallback();
+                        break;
+                }
+            }
+        }
+    }
+}
diff --git a/wearable/wear/WearHighBandwidthNetworking/template-params.xml b/wearable/wear/WearHighBandwidthNetworking/template-params.xml
index 5648a3e..9e463a0 100644
--- a/wearable/wear/WearHighBandwidthNetworking/template-params.xml
+++ b/wearable/wear/WearHighBandwidthNetworking/template-params.xml
@@ -31,7 +31,7 @@
 
     <!-- Include additional dependencies here.-->
     <!-- dependency>com.google.android.gms:play-services:5.0.+</dependency -->
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
 
 
     <strings>
@@ -142,4 +142,4 @@
 ]]>
         </intro>
     </metadata>
-</sample>
\ No newline at end of file
+</sample>
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
index 79997e2..1e4049e 100644
--- a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
@@ -15,7 +15,7 @@
  */
 package com.example.android.wearable.wear.wearnotifications;
 
-import android.support.v4.app.NotificationCompat;
+import androidx.core.app.NotificationCompat;
 
 /**
  * We use a Singleton for a global copy of the NotificationCompat.Builder to update active
@@ -48,13 +48,13 @@
      * 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 () { }
+    private GlobalNotificationBuilder() { }
 
     public static void setNotificationCompatBuilderInstance (NotificationCompat.Builder builder) {
         sGlobalNotificationCompatBuilder = builder;
     }
 
-    public static NotificationCompat.Builder getNotificationCompatBuilderInstance(){
+    public static NotificationCompat.Builder getNotificationCompatBuilderInstance() {
         return sGlobalNotificationCompatBuilder;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
index d944100..ae32411 100644
--- a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/MainActivity.java
@@ -21,17 +21,6 @@
 import android.graphics.BitmapFactory;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.NotificationCompat;
-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.v4.content.ContextCompat;
-import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.view.View;
 import android.widget.AdapterView;
@@ -40,6 +29,21 @@
 import android.widget.Spinner;
 import android.widget.TextView;
 
+import com.google.android.material.snackbar.Snackbar;
+
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.Action;
+import androidx.core.app.NotificationCompat.BigPictureStyle;
+import androidx.core.app.NotificationCompat.BigTextStyle;
+import androidx.core.app.NotificationCompat.InboxStyle;
+import androidx.core.app.NotificationCompat.MessagingStyle;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.Person;
+import androidx.core.app.RemoteInput;
+import androidx.core.app.TaskStackBuilder;
+import androidx.core.content.ContextCompat;
+
 import com.example.android.wearable.wear.common.mock.MockDatabase;
 import com.example.android.wearable.wear.common.util.NotificationUtil;
 import com.example.android.wearable.wear.wearnotifications.handlers.BigPictureSocialIntentService;
@@ -67,16 +71,16 @@
     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 = {
+            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 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;
 
@@ -666,23 +670,30 @@
 
         // 0. Get your data (everything unique per Notification)
         MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData =
-                MockDatabase.getMessagingStyleData();
+                MockDatabase.getMessagingStyleData(getApplicationContext());
 
         // 1. Create/Retrieve Notification Channel for O and beyond devices (26+).
         String notificationChannelId =
                 NotificationUtil.createNotificationChannel(this, messagingStyleCommsAppData);
 
-        // 2. Build the Notification.Style (MESSAGING_STYLE).
+        // 2. Build the NotificationCompat.Style (MESSAGING_STYLE).
         String contentTitle = messagingStyleCommsAppData.getContentTitle();
 
         MessagingStyle messagingStyle =
-                new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getReplayName())
-                        // This could be the user-created name of the group or, if it doesn't have
-                        // a specific name, a list of the participants in the conversation. Do not
-                        // set a conversation title for one-on-one chats, since platforms use the
-                        // existence of this field as a hint that the conversation is a group.
-                        //
-                        // In our case, we use the same title.
+                new MessagingStyle(messagingStyleCommsAppData.getMe())
+                        /*
+                         * <p>This API's behavior was changed in SDK version
+                         * {@link Build.VERSION_CODES#P}. If your application's target version is
+                         * less than {@link Build.VERSION_CODES#P}, setting a conversation title to
+                         * a non-null value will make {@link #isGroupConversation()} return
+                         * {@code true} and passing {@code null} will make it return {@code false}.
+                         * This behavior can be overridden by calling
+                         * {@link #setGroupConversation(boolean)} regardless of SDK version.
+                         * In {@code P} and above, this method does not affect group conversation
+                         * settings.
+                         *
+                         * In our case, we use the same title.
+                         */
                         .setConversationTitle(contentTitle);
 
         // Adds all Messages.
@@ -691,6 +702,8 @@
             messagingStyle.addMessage(message);
         }
 
+        messagingStyle.setGroupConversation(messagingStyleCommsAppData.isGroupConversation());
+
         // 3. Set up main Intent for notification.
         Intent notifyIntent = new Intent(this, MessagingMainActivity.class);
 
@@ -741,6 +754,8 @@
         String replyLabel = getString(R.string.reply_label);
         RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
                 .setLabel(replyLabel)
+                // Use machine learning to create responses based on previous messages.
+                .setChoices(messagingStyleCommsAppData.getReplyChoicesBasedOnLastMessage())
                 .build();
 
         // Pending intent =
@@ -763,8 +778,12 @@
                         replyLabel,
                         replyActionPendingIntent)
                         .addRemoteInput(remoteInput)
+                        // Informs system we aren't bringing up our own custom UI for a reply
+                        // action.
+                        .setShowsUserInterface(false)
                         // Allows system to generate replies by context of conversation.
                         .setAllowGeneratedReplies(true)
+                        .setSemanticAction(Action.SEMANTIC_ACTION_REPLY)
                         .build();
 
 
@@ -817,10 +836,10 @@
                 // visibility is set in the NotificationChannel.
                 .setVisibility(messagingStyleCommsAppData.getChannelLockscreenVisibility());
 
-        // 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);
+        // If the phone is in "Do not disturb" mode, the user may still be notified if the
+        // sender(s) are in a group allowed through "Do not disturb" by the user.
+        for (Person name : messagingStyleCommsAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name.getUri());
         }
 
         Notification notification = notificationCompatBuilder.build();
@@ -844,4 +863,4 @@
         intent.putExtra("app_uid", getApplicationInfo().uid);
         startActivity(intent);
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
index 30c970b..1d93cf3 100644
--- a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
@@ -22,13 +22,14 @@
 import android.graphics.BitmapFactory;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.v4.app.NotificationCompat;
-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.util.Log;
 
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.BigPictureStyle;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.RemoteInput;
+import androidx.core.app.TaskStackBuilder;
+
 import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
 import com.example.android.wearable.wear.wearnotifications.MainActivity;
 import com.example.android.wearable.wear.wearnotifications.R;
@@ -225,4 +226,4 @@
 
         return notificationCompatBuilder;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
index bfd577c..089a0d9 100644
--- a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
@@ -20,11 +20,12 @@
 import android.app.PendingIntent;
 import android.content.Intent;
 import android.graphics.BitmapFactory;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationCompat.BigTextStyle;
-import android.support.v4.app.NotificationManagerCompat;
 import android.util.Log;
 
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.BigTextStyle;
+import androidx.core.app.NotificationManagerCompat;
+
 import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
 import com.example.android.wearable.wear.wearnotifications.MainActivity;
 import com.example.android.wearable.wear.wearnotifications.R;
@@ -203,4 +204,4 @@
 
         return notificationCompatBuilder;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
index da56242..2f57fff 100644
--- a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
@@ -22,18 +22,22 @@
 import android.graphics.BitmapFactory;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.v4.app.NotificationCompat;
-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.v4.content.ContextCompat;
 import android.util.Log;
 
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.Action;
+import androidx.core.app.NotificationCompat.MessagingStyle;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.Person;
+import androidx.core.app.RemoteInput;
+import androidx.core.app.TaskStackBuilder;
+import androidx.core.content.ContextCompat;
+
+import com.example.android.wearable.wear.common.mock.MockDatabase;
+import com.example.android.wearable.wear.common.util.NotificationUtil;
 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.common.mock.MockDatabase;
 
 /**
  * Asynchronously handles updating messaging app posts (and active Notification) with replies from
@@ -49,7 +53,6 @@
     public static final String EXTRA_REPLY =
             "com.example.android.wearable.wear.wearnotifications.handlers.extra.REPLY";
 
-
     public MessagingIntentService() {
         super("MessagingIntentService");
     }
@@ -66,9 +69,7 @@
         }
     }
 
-    /**
-     * Handles action for replying to messages from the notification.
-     */
+    /** Handles action for replying to messages from the notification. */
     private void handleActionReply(CharSequence replyCharSequence) {
         Log.d(TAG, "handleActionReply(): " + replyCharSequence);
 
@@ -104,21 +105,19 @@
                 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);
+                    NotificationCompat.MessagingStyle.extractMessagingStyleFromNotification(
+                            notification);
 
-            // Add new message to the MessagingStyle
-            messagingStyle.addMessage(replyCharSequence, System.currentTimeMillis(), null);
+            // Add new message to the MessagingStyle. Set last parameter to null for responses
+            // from user.
+            messagingStyle.addMessage(replyCharSequence, System.currentTimeMillis(), (Person) null);
 
             // Updates the Notification
-            notification = notificationCompatBuilder
-                    .setStyle(messagingStyle)
-                    .build();
+            notification = notificationCompatBuilder.setStyle(messagingStyle).build();
 
             // Pushes out the updated Notification
             NotificationManagerCompat notificationManagerCompat =
@@ -144,60 +143,102 @@
      */
     private NotificationCompat.Builder recreateBuilderWithMessagingStyle() {
 
-        // Main steps for building a MESSAGING_STYLE notification (for more detailed comments on
-        // building this notification, check MainActivity.java):
+        // Main steps for building a MESSAGING_STYLE notification:
         //      0. Get your data
-        //      1. Retrieve Notification Channel for O and beyond devices (26+)
+        //      1. Create/Retrieve Notification Channel for O and beyond devices (26+)
         //      2. Build the MESSAGING_STYLE
         //      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();
+        // 0. Get your data (everything unique per Notification)
+        MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData =
+                MockDatabase.getMessagingStyleData(getApplicationContext());
 
-        // 1. Retrieve Notification Channel for O and beyond devices (26+). We don't need to create
-        //    the NotificationChannel, since it was created the first time this Notification was
-        //    created.
-        String notificationChannelId = messagingData.getChannelId();
+        // 1. Create/Retrieve Notification Channel for O and beyond devices (26+).
+        String notificationChannelId =
+                NotificationUtil.createNotificationChannel(this, messagingStyleCommsAppData);
 
-        // 2. Build the Notification.Style (MESSAGING_STYLE).
-        String contentTitle = messagingData.getContentTitle();
+        // 2. Build the NotificationCompat.Style (MESSAGING_STYLE).
+        String contentTitle = messagingStyleCommsAppData.getContentTitle();
 
         MessagingStyle messagingStyle =
-                new NotificationCompat.MessagingStyle(messagingData.getReplayName())
+                new MessagingStyle(messagingStyleCommsAppData.getMe())
+                        /*
+                         * <p>This API's behavior was changed in SDK version
+                         * {@link Build.VERSION_CODES#P}. If your application's target version is
+                         * less than {@link Build.VERSION_CODES#P}, setting a conversation title to
+                         * a non-null value will make {@link #isGroupConversation()} return
+                         * {@code true} and passing {@code null} will make it return {@code false}.
+                         * This behavior can be overridden by calling
+                         * {@link #setGroupConversation(boolean)} regardless of SDK version.
+                         * In {@code P} and above, this method does not affect group conversation
+                         * settings.
+                         *
+                         * 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 : messagingData.getMessages()) {
+        for (MessagingStyle.Message message : messagingStyleCommsAppData.getMessages()) {
             messagingStyle.addMessage(message);
         }
 
+        messagingStyle.setGroupConversation(messagingStyleCommsAppData.isGroupConversation());
 
         // 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
-                );
-
+                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();
 
+        // 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)
+                        // Use machine learning to create responses based on previous messages.
+                        .setChoices(messagingStyleCommsAppData.getReplyChoicesBasedOnLastMessage())
+                        .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) {
@@ -211,44 +252,72 @@
 
         NotificationCompat.Action replyAction =
                 new NotificationCompat.Action.Builder(
-                        R.drawable.ic_reply_white_18dp,
-                        replyLabel,
-                        replyActionPendingIntent)
+                                R.drawable.ic_reply_white_18dp,
+                                replyLabel,
+                                replyActionPendingIntent)
                         .addRemoteInput(remoteInput)
+                        // Informs system we aren't bringing up our own custom UI for a reply
+                        // action.
+                        .setShowsUserInterface(false)
                         // Allows system to generate replies by context of conversation.
                         .setAllowGeneratedReplies(true)
+                        .setSemanticAction(Action.SEMANTIC_ACTION_REPLY)
                         .build();
 
-
         // 5. Build and issue the notification.
 
-        // Notification Channel Id is ignored for Android pre O (26).
+        // 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(), notificationChannelId);
+                new NotificationCompat.Builder(getApplicationContext(), notificationChannelId);
 
         GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
 
         notificationCompatBuilder
+                // MESSAGING_STYLE sets title and content for API 16 and above devices.
                 .setStyle(messagingStyle)
+                // Title for API < 16 devices.
                 .setContentTitle(contentTitle)
-                .setContentText(messagingData.getContentText())
+                // Content for API < 16 devices.
+                .setContentText(messagingStyleCommsAppData.getContentText())
                 .setSmallIcon(R.drawable.ic_launcher)
-                .setLargeIcon(BitmapFactory.decodeResource(
-                        getResources(),
-                        R.drawable.ic_person_black_48dp))
+                .setLargeIcon(
+                        BitmapFactory.decodeResource(
+                                getResources(), R.drawable.ic_person_black_48dp))
                 .setContentIntent(mainPendingIntent)
+                .setDefaults(NotificationCompat.DEFAULT_ALL)
+                // Set primary color (important for Wear 2.0 Notifications).
                 .setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary))
-                .setSubText(Integer.toString(messagingData.getNumberOfNewMessages()))
+
+                // SIDE NOTE: Auto-bundling is enabled for 4 or more notifications on API 24+ (N+)
+                // devices and all 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(messagingData.getPriority())
-                .setVisibility(messagingData.getChannelLockscreenVisibility());
 
-        for (String name : messagingData.getParticipants()) {
-            notificationCompatBuilder.addPerson(name);
+                // Sets priority for 25 and below. For 26 and above, 'priority' is deprecated for
+                // 'importance' which is set in the NotificationChannel. The integers representing
+                // 'priority' are different from 'importance', so make sure you don't mix them.
+                .setPriority(messagingStyleCommsAppData.getPriority())
+
+                // Sets lock-screen visibility for 25 and below. For 26 and above, lock screen
+                // visibility is set in the NotificationChannel.
+                .setVisibility(messagingStyleCommsAppData.getChannelLockscreenVisibility());
+
+        // If the phone is in "Do not disturb" mode, the user may still be notified if the
+        // sender(s) are in a group allowed through "Do not disturb" by the user.
+        for (Person name : messagingStyleCommsAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(name.getUri());
         }
 
         return notificationCompatBuilder;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
index 77d9d0c..2463ca2 100644
--- a/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
+++ b/wearable/wear/WearNotifications/Application/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
@@ -43,5 +43,8 @@
         notificationManager.cancel(MainActivity.NOTIFICATION_ID);
 
         // TODO: Handle and display message/conversation from your database
+        // NOTE: You can retrieve the EXTRA_REMOTE_INPUT_DRAFT sent by the system when a user
+        // inadvertently closes a messaging notification to pre-populate the reply text field so
+        // the user can finish their reply.
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Shared/build.gradle b/wearable/wear/WearNotifications/Shared/build.gradle
index 2eb303b..edb53d4 100644
--- a/wearable/wear/WearNotifications/Shared/build.gradle
+++ b/wearable/wear/WearNotifications/Shared/build.gradle
@@ -6,11 +6,11 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.2.0-beta01'
     }
 }
 
-apply plugin: 'android-library'
+apply plugin: 'com.android.library'
 
 repositories {
     jcenter()
@@ -18,7 +18,7 @@
 }
 
 dependencies {
-    compile 'com.android.support:support-v4:27.1.0'
+    implementation 'androidx.legacy:legacy-support-v4:1.0.0-alpha3'
 }
 
 // The sample build uses multiple directories to
@@ -30,13 +30,13 @@
     'template'] // boilerplate code that is generated by the sample template process
 
 android {
-    compileSdkVersion 27
+    compileSdkVersion 28
 
     buildToolsVersion "27.0.3"
 
     defaultConfig {
         minSdkVersion 18
-        targetSdkVersion 27
+        targetSdkVersion 28
     }
 
     compileOptions {
diff --git a/wearable/wear/WearNotifications/Shared/src/main/java/com/example/android/wearable/wear/common/mock/MockDatabase.java b/wearable/wear/WearNotifications/Shared/src/main/java/com/example/android/wearable/wear/common/mock/MockDatabase.java
index de25111..7e506aa 100644
--- a/wearable/wear/WearNotifications/Shared/src/main/java/com/example/android/wearable/wear/common/mock/MockDatabase.java
+++ b/wearable/wear/WearNotifications/Shared/src/main/java/com/example/android/wearable/wear/common/mock/MockDatabase.java
@@ -16,16 +16,21 @@
 package com.example.android.wearable.wear.common.mock;
 
 import android.app.NotificationManager;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationCompat.MessagingStyle;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.net.Uri;
+import android.util.Log;
+
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.MessagingStyle;
+import androidx.core.app.Person;
+import androidx.core.graphics.drawable.IconCompat;
 
 import com.example.android.wearable.wear.wearnotifications.common.R;
 
 import java.util.ArrayList;
 
-/**
- * Mock data for each of the Notification Style Demos.
- */
+/** Mock data for each of the Notification Style Demos. */
 public final class MockDatabase {
 
     public static BigTextStyleReminderAppData getBigTextStyleData() {
@@ -40,13 +45,11 @@
         return InboxStyleEmailAppData.getInstance();
     }
 
-    public static MessagingStyleCommsAppData getMessagingStyleData() {
-        return MessagingStyleCommsAppData.getInstance();
+    public static MessagingStyleCommsAppData getMessagingStyleData(Context context) {
+        return MessagingStyleCommsAppData.getInstance(context);
     }
 
-    /**
-     * Represents data needed for BigTextStyle Notification.
-     */
+    /** Represents data needed for BigTextStyle Notification. */
     public static class BigTextStyleReminderAppData extends MockNotificationData {
 
         private static BigTextStyleReminderAppData sInstance = null;
@@ -83,11 +86,11 @@
 
             // 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.";
+            mBigText =
+                    "... feed the dogs before you leave for work, and check the garage to "
+                            + "make sure the door is closed.";
             mSummaryText = "Dogs and Garage";
 
-
             // Notification channel values (for devices targeting 26 and above):
             mChannelId = "channel_reminder_1";
             // The user-visible name of the channel.
@@ -117,9 +120,7 @@
         }
     }
 
-    /**
-     * Represents data needed for BigPictureStyle Notification.
-     */
+    /** Represents data needed for BigPictureStyle Notification. */
     public static class BigPictureStyleSocialAppData extends MockNotificationData {
 
         private static BigPictureStyleSocialAppData sInstance = null;
@@ -161,7 +162,7 @@
             mSummaryText = "Like my shot of Earth?";
 
             // This would be possible responses based on the contents of the post.
-            mPossiblePostResponses = new CharSequence[]{"Yes", "No", "Maybe?"};
+            mPossiblePostResponses = new CharSequence[] {"Yes", "No", "Maybe?"};
 
             mParticipants = new ArrayList<>();
             mParticipants.add("Bob Smith");
@@ -203,9 +204,7 @@
         }
     }
 
-    /**
-     * Represents data needed for InboxStyle Notification.
-     */
+    /** Represents data needed for InboxStyle Notification. */
     public static class InboxStyleEmailAppData extends MockNotificationData {
 
         private static InboxStyleEmailAppData sInstance = null;
@@ -262,7 +261,6 @@
             mParticipants.add("Jane Johns");
             mParticipants.add("John Smith");
 
-
             // Notification channel values (for devices targeting 26 and above):
             mChannelId = "channel_email_1";
             // The user-visible name of the channel.
@@ -300,9 +298,7 @@
         }
     }
 
-    /**
-     * Represents data needed for MessagingStyle Notification.
-     */
+    /** Represents data needed for MessagingStyle Notification. */
     public static class MessagingStyleCommsAppData extends MockNotificationData {
 
         private static MessagingStyleCommsAppData sInstance = null;
@@ -312,70 +308,97 @@
         // String of all mMessages.
         private String mFullConversation;
         // Name preferred when replying to chat.
-        private String mReplayName;
-        private int mNumberOfNewMessages;
-        private ArrayList<String> mParticipants;
+        private Person mMe;
+        private ArrayList<Person> mParticipants;
 
+        private CharSequence[] mReplyChoicesBasedOnLastMessages;
 
-        public static MessagingStyleCommsAppData getInstance() {
+        public static MessagingStyleCommsAppData getInstance(Context context) {
             if (sInstance == null) {
-                sInstance = getSync();
+                sInstance = getSync(context);
             }
             return sInstance;
         }
 
-        private static synchronized MessagingStyleCommsAppData getSync() {
+        private static synchronized MessagingStyleCommsAppData getSync(Context context) {
             if (sInstance == null) {
-                sInstance = new MessagingStyleCommsAppData();
+                sInstance = new MessagingStyleCommsAppData(context);
             }
 
             return sInstance;
         }
 
-        private MessagingStyleCommsAppData() {
+        private MessagingStyleCommsAppData(Context context) {
             // Standard notification values:
             // Content for API <24 (M and below) devices.
-            mContentTitle = "2 Messages w/ Famous McFamously";
-            mContentText = "HEY! ... You know I am a Pesce-pescetarian. :P";
+            // Note: I am actually hardcoding these Strings based on info below. You would be
+            // pulling these values from the same source in your database. I leave this up here, so
+            // you can see the standard parts of a Notification first.
+            mContentTitle = "3 Messages w/ Famous, Wendy";
+            mContentText = "HEY, I see my house! :)";
             mPriority = NotificationCompat.PRIORITY_HIGH;
 
-            // 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(
-                    "HEY!", 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: HEY!\n\n"
-                    + "Famous: You know I am a Pesce-pescetarian. :P\n\n";
-
-            mNumberOfNewMessages = 2;
-
+            // Create the users for the conversation.
             // Name preferred when replying to chat.
-            mReplayName = "Me";
+            mMe =
+                    new Person.Builder()
+                            .setName("Me MacDonald")
+                            .setKey("1234567890")
+                            .setUri("tel:1234567890")
+                            .setIcon(
+                                    IconCompat.createWithResource(context, R.drawable.me_macdonald))
+                            .build();
+
+            Person participant1 =
+                    new Person.Builder()
+                            .setName("Famous Fryer")
+                            .setKey("9876543210")
+                            .setUri("tel:9876543210")
+                            .setIcon(
+                                    IconCompat.createWithResource(context, R.drawable.famous_fryer))
+                            .build();
+
+            Person participant2 =
+                    new Person.Builder()
+                            .setName("Wendy Wonda")
+                            .setKey("2233221122")
+                            .setUri("tel:2233221122")
+                            .setIcon(IconCompat.createWithResource(context, R.drawable.wendy_wonda))
+                            .build();
 
             // If the phone is in "Do not disturb mode, the user will still be notified if
             // the user(s) is starred as a favorite.
+            // Note: You don't need to add yourself, aka 'me', as a participant.
             mParticipants = new ArrayList<>();
-            mParticipants.add("Famous McFamously");
+            mParticipants.add(participant1);
+            mParticipants.add(participant2);
 
+            mMessages = new ArrayList<>();
+
+            // For each message, you need the timestamp. In this case, we are using arbitrary longs
+            // representing time in milliseconds.
+            mMessages.add(
+                    // When you are setting an image for a message, text does not display.
+                    new MessagingStyle.Message("", 1528490641998l, participant1)
+                            .setData("image/png", resourceToUri(context, R.drawable.earth)));
+
+            mMessages.add(
+                    new MessagingStyle.Message(
+                            "Visiting the moon again? :P", 1528490643998l, mMe));
+
+            mMessages.add(
+                    new MessagingStyle.Message("HEY, I see my house!", 1528490645998l, participant2));
+
+            // String version of the mMessages above.
+            mFullConversation =
+                    "Famous: [Picture of Moon]\n\n"
+                            + "Me: Visiting the moon again? :P\n\n"
+                            + "Wendy: HEY, I see my house! :)\n\n";
+
+            // Responses based on the last messages of the conversation. You would use
+            // Machine Learning to get these (https://developers.google.com/ml-kit/).
+            mReplyChoicesBasedOnLastMessages =
+                    new CharSequence[] {"Me too!", "How's the weather?", "You have good eyesight."};
 
             // Notification channel values (for devices targeting 26 and above):
             mChannelId = "channel_messaging_1";
@@ -386,7 +409,6 @@
             mChannelImportance = NotificationManager.IMPORTANCE_MAX;
             mChannelEnableVibrate = true;
             mChannelLockscreenVisibility = NotificationCompat.VISIBILITY_PRIVATE;
-
         }
 
         public ArrayList<MessagingStyle.Message> getMessages() {
@@ -397,30 +419,34 @@
             return mFullConversation;
         }
 
-        public String getReplayName() {
-            return mReplayName;
+        public Person getMe() {
+            return mMe;
         }
 
         public int getNumberOfNewMessages() {
-            return mNumberOfNewMessages;
+            return mMessages.size();
         }
 
-        public ArrayList<String> getParticipants() {
+        public ArrayList<Person> getParticipants() {
             return mParticipants;
         }
 
+        public CharSequence[] getReplyChoicesBasedOnLastMessage() {
+            return mReplyChoicesBasedOnLastMessages;
+        }
+
         @Override
         public String toString() {
             return getFullConversation();
         }
 
-
+        public boolean isGroupConversation() {
+            return mParticipants.size() > 1;
+        }
     }
 
-    /**
-     * Represents standard data needed for a Notification.
-     */
-    public static abstract class MockNotificationData {
+    /** Represents standard data needed for a Notification. */
+    public abstract static class MockNotificationData {
 
         // Standard notification values:
         protected String mContentTitle;
@@ -435,7 +461,6 @@
         protected boolean mChannelEnableVibrate;
         protected int mChannelLockscreenVisibility;
 
-
         // Notification Standard notification get methods:
         public String getContentTitle() {
             return mContentTitle;
@@ -474,4 +499,15 @@
             return mChannelLockscreenVisibility;
         }
     }
-}
\ No newline at end of file
+
+    public static Uri resourceToUri(Context context, int resId) {
+        return Uri.parse(
+                ContentResolver.SCHEME_ANDROID_RESOURCE
+                        + "://"
+                        + context.getResources().getResourcePackageName(resId)
+                        + "/"
+                        + context.getResources().getResourceTypeName(resId)
+                        + "/"
+                        + context.getResources().getResourceEntryName(resId));
+    }
+}
diff --git a/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/famous_fryer.png b/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/famous_fryer.png
new file mode 100644
index 0000000..92204db
--- /dev/null
+++ b/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/famous_fryer.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/me_macdonald.png b/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/me_macdonald.png
new file mode 100644
index 0000000..cbf4a05
--- /dev/null
+++ b/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/me_macdonald.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/wendy_wonda.png b/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/wendy_wonda.png
new file mode 100644
index 0000000..3097ce1
--- /dev/null
+++ b/wearable/wear/WearNotifications/Shared/src/main/res/drawable-hdpi/wendy_wonda.png
Binary files differ
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/CustomRecyclerAdapter.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/CustomRecyclerAdapter.java
index 6bdcac3..8bcbfe8 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/CustomRecyclerAdapter.java
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/CustomRecyclerAdapter.java
@@ -17,7 +17,6 @@
 
 import android.widget.ImageView;
 
-import android.support.v4.app.NotificationCompat;
 import android.support.wearable.view.WearableRecyclerView;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -25,6 +24,8 @@
 import android.view.ViewGroup;
 import android.widget.TextView;
 
+import androidx.core.app.NotificationCompat;
+
 /**
  * Provides a binding from {@link NotificationCompat.Style} data set to views displayed within the
  * {@link WearableRecyclerView}.
@@ -92,4 +93,4 @@
     public int getItemCount() {
         return mDataSet.length;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
index e7d461e..8f39aa2 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/GlobalNotificationBuilder.java
@@ -15,7 +15,7 @@
  */
 package com.example.android.wearable.wear.wearnotifications;
 
-import android.support.v4.app.NotificationCompat;
+import androidx.core.app.NotificationCompat;
 
 /**
  * We use a Singleton for a global copy of the NotificationCompat.Builder to update active
@@ -50,11 +50,11 @@
      */
     private GlobalNotificationBuilder() { }
 
-    public static void setNotificationCompatBuilderInstance (NotificationCompat.Builder builder) {
+    public static void setNotificationCompatBuilderInstance(NotificationCompat.Builder builder) {
         sGlobalNotificationCompatBuilder = builder;
     }
 
-    public static NotificationCompat.Builder getNotificationCompatBuilderInstance(){
+    public static NotificationCompat.Builder getNotificationCompatBuilderInstance() {
         return sGlobalNotificationCompatBuilder;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/ScalingScrollLayoutCallback.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/ScalingScrollLayoutCallback.java
index 6c68b43..a207de9 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/ScalingScrollLayoutCallback.java
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/ScalingScrollLayoutCallback.java
@@ -15,11 +15,12 @@
  */
 package com.example.android.wearable.wear.wearnotifications;
 
-import android.support.v7.widget.RecyclerView;
-import android.support.wear.widget.WearableLinearLayoutManager;
-import android.support.wear.widget.WearableRecyclerView;
 import android.view.View;
 
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.wear.widget.WearableLinearLayoutManager;
+import androidx.wear.widget.WearableRecyclerView;
+
 /**
  * Shrinks items (children) farther away from the center in a {@link WearableRecyclerView}. The UX
  * makes scrolling more readable.
@@ -51,4 +52,4 @@
         child.setScaleX(1 - mProgressToCenter);
         child.setScaleY(1 - mProgressToCenter);
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/StandaloneMainActivity.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/StandaloneMainActivity.java
index 5ba3b97..11e857a 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/StandaloneMainActivity.java
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/StandaloneMainActivity.java
@@ -22,22 +22,26 @@
 import android.graphics.BitmapFactory;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.design.widget.Snackbar;
-import android.support.v4.app.NotificationCompat;
-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.content.ContextCompat;
-import android.support.wear.ambient.AmbientMode;
-import android.support.wear.widget.WearableLinearLayoutManager;
-import android.support.wear.widget.WearableRecyclerView;
 import android.util.Log;
 import android.view.View;
 import android.widget.FrameLayout;
 
+import com.google.android.material.snackbar.Snackbar;
+
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.Action;
+import androidx.core.app.NotificationCompat.BigPictureStyle;
+import androidx.core.app.NotificationCompat.BigTextStyle;
+import androidx.core.app.NotificationCompat.InboxStyle;
+import androidx.core.app.NotificationCompat.MessagingStyle;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.Person;
+import androidx.core.app.RemoteInput;
+import androidx.core.content.ContextCompat;
+import androidx.wear.ambient.AmbientMode;
+import androidx.wear.widget.WearableLinearLayoutManager;
+import androidx.wear.widget.WearableRecyclerView;
+
 import com.example.android.wearable.wear.common.mock.MockDatabase;
 import com.example.android.wearable.wear.common.util.NotificationUtil;
 import com.example.android.wearable.wear.wearnotifications.handlers.BigPictureSocialIntentService;
@@ -48,7 +52,6 @@
 import com.example.android.wearable.wear.wearnotifications.handlers.MessagingIntentService;
 import com.example.android.wearable.wear.wearnotifications.handlers.MessagingMainActivity;
 
-
 /**
  * Demonstrates best practice for {@link NotificationCompat} Notifications created by local
  * standalone Wear apps. All {@link NotificationCompat} examples use
@@ -632,7 +635,7 @@
 
         // 0. Get your data (everything unique per Notification).
         MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData =
-                MockDatabase.getMessagingStyleData();
+                MockDatabase.getMessagingStyleData(getApplicationContext());
 
         // 1. Create/Retrieve Notification Channel for O and beyond devices (26+).
         String notificationChannelId =
@@ -642,10 +645,20 @@
         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.
+                new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getMe())
+                        /*
+                         * <p>This API's behavior was changed in SDK version
+                         * {@link Build.VERSION_CODES#P}. If your application's target version is
+                         * less than {@link Build.VERSION_CODES#P}, setting a conversation title to
+                         * a non-null value will make {@link #isGroupConversation()} return
+                         * {@code true} and passing {@code null} will make it return {@code false}.
+                         * This behavior can be overridden by calling
+                         * {@link #setGroupConversation(boolean)} regardless of SDK version.
+                         * In {@code P} and above, this method does not affect group conversation
+                         * settings.
+                         *
+                         * In our case, we use the same title.
+                         */
                         .setConversationTitle(contentTitle);
 
         // Adds all Messages.
@@ -654,6 +667,8 @@
             messagingStyle.addMessage(message);
         }
 
+        messagingStyle.setGroupConversation(messagingStyleCommsAppData.isGroupConversation());
+
         // 3. Set up main Intent for notification.
         Intent notifyIntent = new Intent(this, MessagingMainActivity.class);
 
@@ -673,6 +688,8 @@
         String replyLabel = getString(R.string.reply_label);
         RemoteInput remoteInput = new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
                 .setLabel(replyLabel)
+                // Use machine learning to create responses based on previous messages.
+                .setChoices(messagingStyleCommsAppData.getReplyChoicesBasedOnLastMessage())
                 .build();
 
         // Create PendingIntent for service that handles input.
@@ -693,9 +710,13 @@
                         replyLabel,
                         replyActionPendingIntent)
                         .addRemoteInput(remoteInput)
+                        // Informs system we aren't bringing up our own custom UI for a reply
+                        // action.
+                        .setShowsUserInterface(false)
                         // Allows system to generate replies by context of conversation.
                         .setAllowGeneratedReplies(true)
                         // Add WearableExtender to enable inline actions.
+                        .setSemanticAction(Action.SEMANTIC_ACTION_REPLY)
                         .extend(inlineActionForWear2)
                         .build();
 
@@ -742,10 +763,10 @@
                 // visibility is set in the NotificationChannel.
                 .setVisibility(messagingStyleCommsAppData.getChannelLockscreenVisibility());
 
-        // 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);
+        // If the phone is in "Do not disturb" mode, the user may still be notified if the
+        // sender(s) are in a group allowed through "Do not disturb" by the user.
+        for (Person person : messagingStyleCommsAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(person.getUri());
         }
 
         Notification notification = notificationCompatBuilder.build();
@@ -798,4 +819,4 @@
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
index cc22dc1..3243edc 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigPictureSocialIntentService.java
@@ -21,13 +21,14 @@
 import android.content.Intent;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationCompat.BigPictureStyle;
-import android.support.v4.app.NotificationManagerCompat;
-import android.support.v4.app.RemoteInput;
-import android.support.v4.content.ContextCompat;
 import android.util.Log;
 
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.BigPictureStyle;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.RemoteInput;
+import androidx.core.content.ContextCompat;
+
 import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
 import com.example.android.wearable.wear.wearnotifications.R;
 import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
@@ -235,4 +236,4 @@
 
         return notificationCompatBuilder;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
index bf50afd..9407a1f 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/BigTextIntentService.java
@@ -21,12 +21,13 @@
 import android.content.Intent;
 import android.graphics.BitmapFactory;
 import android.os.Build;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationCompat.BigTextStyle;
-import android.support.v4.app.NotificationManagerCompat;
-import android.support.v4.content.ContextCompat;
 import android.util.Log;
 
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.BigTextStyle;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.content.ContextCompat;
+
 import com.example.android.wearable.wear.wearnotifications.GlobalNotificationBuilder;
 import com.example.android.wearable.wear.wearnotifications.R;
 import com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity;
@@ -235,4 +236,4 @@
 
         return notificationCompatBuilder;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
index cf17fdd..c3bcd6e 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingIntentService.java
@@ -21,17 +21,20 @@
 import android.content.Intent;
 import android.graphics.BitmapFactory;
 import android.os.Bundle;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationCompat.MessagingStyle;
-import android.support.v4.app.NotificationManagerCompat;
-import android.support.v4.app.RemoteInput;
-import android.support.v4.content.ContextCompat;
 import android.util.Log;
 
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationCompat.Action;
+import androidx.core.app.NotificationCompat.MessagingStyle;
+import androidx.core.app.NotificationManagerCompat;
+import androidx.core.app.Person;
+import androidx.core.app.RemoteInput;
+import androidx.core.content.ContextCompat;
+
+import com.example.android.wearable.wear.common.mock.MockDatabase;
 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.common.mock.MockDatabase;
 
 /**
  * Asynchronously handles updating messaging app posts (and active Notification) with replies from
@@ -47,7 +50,6 @@
     public static final String EXTRA_REPLY =
             "com.example.android.wearable.wear.wearnotifications.handlers.extra.REPLY";
 
-
     public MessagingIntentService() {
         super("MessagingIntentService");
     }
@@ -64,9 +66,7 @@
         }
     }
 
-    /**
-     * Handles action for replying to messages from the notification.
-     */
+    /** Handles action for replying to messages from the notification. */
     private void handleActionReply(CharSequence replyCharSequence) {
         Log.d(TAG, "handleActionReply(): " + replyCharSequence);
 
@@ -102,21 +102,19 @@
                 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);
+                    NotificationCompat.MessagingStyle.extractMessagingStyleFromNotification(
+                            notification);
 
-            // Add new message to the MessagingStyle
-            messagingStyle.addMessage(replyCharSequence, System.currentTimeMillis(), null);
+            // Add new message to the MessagingStyle. Set last parameter to null for responses
+            // from user.
+            messagingStyle.addMessage(replyCharSequence, System.currentTimeMillis(), (Person) null);
 
             // Updates the Notification
-            notification = notificationCompatBuilder
-                    .setStyle(messagingStyle)
-                    .build();
+            notification = notificationCompatBuilder.setStyle(messagingStyle).build();
 
             // Pushes out the updated Notification
             NotificationManagerCompat notificationManagerCompat =
@@ -142,10 +140,9 @@
      */
     private NotificationCompat.Builder recreateBuilderWithMessagingStyle() {
 
-        // Main steps for building a MESSAGING_STYLE notification (for more detailed comments on
-        // building this notification, check StandaloneMainActivity.java):
+        // Main steps for building a MESSAGING_STYLE notification:
         //      0. Get your data
-        //      1. Retrieve Notification Channel for O and beyond devices (26+)
+        //      1. Create Notification Channel for O and beyond devices (26+)
         //      2. Build the MESSAGING_STYLE
         //      3. Set up main Intent for notification
         //      4. Set up RemoteInput (users can input directly from notification)
@@ -153,99 +150,128 @@
 
         // 0. Get your data (everything unique per Notification).
         MockDatabase.MessagingStyleCommsAppData messagingStyleCommsAppData =
-                MockDatabase.getMessagingStyleData();
+                MockDatabase.getMessagingStyleData(getApplicationContext());
 
         // 1. Retrieve Notification Channel for O and beyond devices (26+). We don't need to create
         //    the NotificationChannel, since it was created the first time this Notification was
         //    created.
         String notificationChannelId = messagingStyleCommsAppData.getChannelId();
 
-
         // 2. Build the Notification.Style (MESSAGING_STYLE).
         String contentTitle = messagingStyleCommsAppData.getContentTitle();
 
         MessagingStyle messagingStyle =
-                new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getReplayName())
+                new NotificationCompat.MessagingStyle(messagingStyleCommsAppData.getMe())
+                        /*
+                         * <p>This API's behavior was changed in SDK version
+                         * {@link Build.VERSION_CODES#P}. If your application's target version is
+                         * less than {@link Build.VERSION_CODES#P}, setting a conversation title to
+                         * a non-null value will make {@link #isGroupConversation()} return
+                         * {@code true} and passing {@code null} will make it return {@code false}.
+                         * This behavior can be overridden by calling
+                         * {@link #setGroupConversation(boolean)} regardless of SDK version.
+                         * In {@code P} and above, this method does not affect group conversation
+                         * settings.
+                         *
+                         * 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);
         }
 
+        messagingStyle.setGroupConversation(messagingStyleCommsAppData.isGroupConversation());
 
         // 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
-                );
-
+                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();
 
+        // Create the RemoteInput specifying this key.
+        String replyLabel = getString(R.string.reply_label);
+        RemoteInput remoteInput =
+                new RemoteInput.Builder(MessagingIntentService.EXTRA_REPLY)
+                        .setLabel(replyLabel)
+                        // Use machine learning to create responses based on previous messages.
+                        .setChoices(messagingStyleCommsAppData.getReplyChoicesBasedOnLastMessage())
+                        .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_0 =
+        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)
+                                R.drawable.ic_reply_white_18dp,
+                                replyLabel,
+                                replyActionPendingIntent)
                         .addRemoteInput(remoteInput)
+                        // Informs system we aren't bringing up our own custom UI for a reply
+                        // action.
+                        .setShowsUserInterface(false)
                         // Allows system to generate replies by context of conversation.
                         .setAllowGeneratedReplies(true)
                         // Add WearableExtender to enable inline actions.
-                        .extend(inlineActionForWear2_0)
+                        .setSemanticAction(Action.SEMANTIC_ACTION_REPLY)
+                        .extend(inlineActionForWear2)
                         .build();
 
-
         // 5. Build and issue the notification.
 
         // Notification Channel Id is ignored for Android pre O (26).
         NotificationCompat.Builder notificationCompatBuilder =
-                new NotificationCompat.Builder(
-                        getApplicationContext(), notificationChannelId);
+                new NotificationCompat.Builder(getApplicationContext(), notificationChannelId);
 
         GlobalNotificationBuilder.setNotificationCompatBuilderInstance(notificationCompatBuilder);
 
         notificationCompatBuilder
+                // MESSAGING_STYLE sets title and content for Wear 1.+ and Wear 2.0 devices.
                 .setStyle(messagingStyle)
                 .setContentTitle(contentTitle)
                 .setContentText(messagingStyleCommsAppData.getContentText())
                 .setSmallIcon(R.drawable.ic_launcher)
-                .setLargeIcon(BitmapFactory.decodeResource(
-                        getResources(),
-                        R.drawable.ic_person_black_48dp))
+                .setLargeIcon(
+                        BitmapFactory.decodeResource(
+                                getResources(), R.drawable.ic_person_black_48dp))
                 .setContentIntent(mainPendingIntent)
+                .setDefaults(NotificationCompat.DEFAULT_ALL)
+                // Set primary color (important for Wear 2.0 Notifications).
                 .setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary))
+
+                // Number of new notifications for API <24 (Wear 1.+) devices.
                 .setSubText(Integer.toString(messagingStyleCommsAppData.getNumberOfNewMessages()))
                 .addAction(replyAction)
                 .setCategory(Notification.CATEGORY_MESSAGE)
+
+                // Sets priority for 25 and below. For 26 and above, 'priority' is deprecated for
+                // 'importance' which is set in the NotificationChannel. The integers representing
+                // 'priority' are different from 'importance', so make sure you don't mix them.
                 .setPriority(messagingStyleCommsAppData.getPriority())
+
+                // Sets lock-screen visibility for 25 and below. For 26 and above, lock screen
+                // visibility is set in the NotificationChannel.
                 .setVisibility(messagingStyleCommsAppData.getChannelLockscreenVisibility());
 
-        for (String name : messagingStyleCommsAppData.getParticipants()) {
-            notificationCompatBuilder.addPerson(name);
+        // If the phone is in "Do not disturb" mode, the user may still be notified if the
+        // sender(s) are in a group allowed through "Do not disturb" by the user.
+        for (Person person : messagingStyleCommsAppData.getParticipants()) {
+            notificationCompatBuilder.addPerson(person.getUri());
         }
-
         return notificationCompatBuilder;
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
index 5454c79..8ab3db5 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
+++ b/wearable/wear/WearNotifications/Wearable/src/main/java/com/example/android/wearable/wear/wearnotifications/handlers/MessagingMainActivity.java
@@ -43,5 +43,9 @@
         notificationManager.cancel(StandaloneMainActivity.NOTIFICATION_ID);
 
         // TODO: Handle and display message/conversation from your database
+
+        // NOTE: You can retrieve the EXTRA_REMOTE_INPUT_DRAFT sent by the system when a user
+        // inadvertently closes a messaging notification to pre-populate the reply text field so
+        // the user can finish their reply.
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearNotifications/Wearable/src/main/res/layout/activity_main.xml b/wearable/wear/WearNotifications/Wearable/src/main/res/layout/activity_main.xml
index 10528cf..f8dd907 100644
--- a/wearable/wear/WearNotifications/Wearable/src/main/res/layout/activity_main.xml
+++ b/wearable/wear/WearNotifications/Wearable/src/main/res/layout/activity_main.xml
@@ -22,7 +22,7 @@
     android:layout_height="match_parent"
     tools:context="com.example.android.wearable.wear.wearnotifications.StandaloneMainActivity">
 
-    <android.support.wear.widget.WearableRecyclerView
+    <androidx.wear.widget.WearableRecyclerView
         android:id="@+id/recycler_view"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
@@ -38,4 +38,4 @@
         android:paddingBottom="@dimen/activity_main_text_header_spacing"
         android:background="@color/grey"
         android:text="@string/floating_text"/>
-</FrameLayout>
\ No newline at end of file
+</FrameLayout>
diff --git a/wearable/wear/WearNotifications/gradle.properties b/wearable/wear/WearNotifications/gradle.properties
new file mode 100644
index 0000000..6511fc1
--- /dev/null
+++ b/wearable/wear/WearNotifications/gradle.properties
@@ -0,0 +1,22 @@
+
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Settings specified in this file will override any Gradle settings
+# configured through the IDE.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx10248m -XX:MaxPermSize=256m
+# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+android.useAndroidX = true
+android.enableJetifier = true
diff --git a/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.properties b/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.properties
index eee1f3d..b74aed0 100644
--- a/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.properties
+++ b/wearable/wear/WearNotifications/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Thu Aug 18 11:31:37 PDT 2016
+#Fri May 04 14:21:41 PDT 2018
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
\ No newline at end of file
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
diff --git a/wearable/wear/WearNotifications/template-params.xml b/wearable/wear/WearNotifications/template-params.xml
index 4268dcc..2639611 100644
--- a/wearable/wear/WearNotifications/template-params.xml
+++ b/wearable/wear/WearNotifications/template-params.xml
@@ -20,27 +20,31 @@
     <package>com.example.android.wearable.wear.wearnotifications</package>
 
     <minSdk>18</minSdk>
-    <compileSdkVersion>27</compileSdkVersion>
-    <targetSdkVersion>27</targetSdkVersion>
+    <compileSdkVersion>28</compileSdkVersion>
+    <targetSdkVersion>28</targetSdkVersion>
 
     <minSdkVersionWear>23</minSdkVersionWear>
-    <compileSdkVersionWear>26</compileSdkVersionWear>
-    <targetSdkVersionWear>26</targetSdkVersionWear>
+    <compileSdkVersionWear>28</compileSdkVersionWear>
+    <targetSdkVersionWear>28</targetSdkVersionWear>
     <multiDexEnabled>true</multiDexEnabled>
 
     <wearable>
         <has_handheld_app>true</has_handheld_app>
     </wearable>
 
-    <dependency>com.android.support:appcompat-v7:27.1.0</dependency>
-    <dependency>com.android.support:cardview-v7:27.1.0</dependency>
-    <dependency>com.android.support:design:27.1.0</dependency>
+    <androidX>true</androidX>
 
-    <dependency_shared>com.android.support:support-v4:27.1.0</dependency_shared>
+    <dependency>androidx.appcompat:appcompat:1.0.0-alpha3</dependency>
+    <dependency>androidx.cardview:cardview:1.0.0-alpha3</dependency>
+    <dependency>com.google.android.material:material:1.0.0-alpha3</dependency>
+    <dependency>androidx.legacy:legacy-support-v13:1.0.0-alpha3</dependency>
 
-    <dependency_wearable>com.android.support:appcompat-v7:27.1.0</dependency_wearable>
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
-    <dependency_wearable>com.android.support:design:27.1.0</dependency_wearable>
+    <dependency_shared>androidx.legacy:legacy-support-v4:1.0.0-alpha3</dependency_shared>
+
+    <dependency_wearable>androidx.appcompat:appcompat:1.0.0-alpha3</dependency_wearable>
+    <dependency_wearable>androidx.wear:wear:1.0.0-alpha3</dependency_wearable>
+    <dependency_wearable>com.google.android.material:material:1.0.0-alpha3</dependency_wearable>
+    <dependency_wearable>androidx.legacy:legacy-support-v13:1.0.0-alpha3</dependency_wearable>
 
     <!-- Include additional dependencies here.-->
     <!-- dependency>com.google.android.gms:play-services:5.0.+</dependency -->
diff --git a/wearable/wear/WearSpeakerSample/build.gradle b/wearable/wear/WearSpeakerSample/build.gradle
index 6c111e7..b35d701 100644
--- a/wearable/wear/WearSpeakerSample/build.gradle
+++ b/wearable/wear/WearSpeakerSample/build.gradle
@@ -22,7 +22,7 @@
         google()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
 
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files
diff --git a/wearable/wear/WearSpeakerSample/wear/build.gradle b/wearable/wear/WearSpeakerSample/wear/build.gradle
index 19604a1..08c92f4 100644
--- a/wearable/wear/WearSpeakerSample/wear/build.gradle
+++ b/wearable/wear/WearSpeakerSample/wear/build.gradle
@@ -19,7 +19,7 @@
 
 android {
     compileSdkVersion 26
-    buildToolsVersion '26.0.2'
+    buildToolsVersion '27.0.3'
 
     defaultConfig {
         applicationId "com.example.android.wearable.speaker"
@@ -38,11 +38,16 @@
 
 dependencies {
 
-    compile 'com.android.support:wear:27.1.0'
+    implementation 'com.android.support:wear:27.1.1'
+    implementation 'com.android.support:animated-vector-drawable:27.1.1'
+    implementation 'com.android.support:support-media-compat:27.1.1'
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:appcompat-v7:27.1.0'
+    implementation 'com.android.support:percent:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:appcompat-v7:27.1.1'
+    implementation 'com.android.support:support-v4:27.1.1'
+
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 }
diff --git a/wearable/wear/WearSpeakerSample/wear/src/main/java/com/example/android/wearable/speaker/MainActivity.java b/wearable/wear/WearSpeakerSample/wear/src/main/java/com/example/android/wearable/speaker/MainActivity.java
index e212195..72813b4 100644
--- a/wearable/wear/WearSpeakerSample/wear/src/main/java/com/example/android/wearable/speaker/MainActivity.java
+++ b/wearable/wear/WearSpeakerSample/wear/src/main/java/com/example/android/wearable/speaker/MainActivity.java
@@ -17,7 +17,6 @@
 package com.example.android.wearable.speaker;
 
 import android.Manifest;
-import android.app.Activity;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
@@ -28,8 +27,9 @@
 import android.os.Bundle;
 import android.os.CountDownTimer;
 import android.support.v4.app.ActivityCompat;
+import android.support.v4.app.FragmentActivity;
 import android.support.v4.content.ContextCompat;
-import android.support.wear.ambient.AmbientMode;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
@@ -45,8 +45,8 @@
  * to 10 seconds), a Play icon (if clicked, it wil playback the recorded audio file) and a music
  * note icon (if clicked, it plays an MP3 file that is included in the app).
  */
-public class MainActivity extends Activity implements
-        AmbientMode.AmbientCallbackProvider,
+public class MainActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider,
         UIAnimation.UIStateListener,
         SoundRecorder.OnVoicePlaybackStateChangedListener {
 
@@ -72,7 +72,7 @@
      * Ambient mode controller attached to this display. Used by Activity to see if it is in
      * ambient mode.
      */
-    private AmbientMode.AmbientController mAmbientController;
+    private AmbientModeSupport.AmbientController mAmbientController;
 
     enum AppState {
         READY, PLAYING_VOICE, PLAYING_MUSIC, RECORDING
@@ -89,7 +89,7 @@
         mProgressBar = findViewById(R.id.progress_bar);
 
         // Enables Ambient mode.
-        mAmbientController = AmbientMode.attachAmbientSupport(this);
+        mAmbientController = AmbientModeSupport.attach(this);
     }
 
     private void setProgressBar(long progressInMillis) {
@@ -239,10 +239,10 @@
         int[] thumbResources = new int[] {R.id.mic, R.id.play, R.id.music};
         ImageView[] thumbs = new ImageView[3];
         for(int i=0; i < 3; i++) {
-            thumbs[i] = (ImageView) findViewById(thumbResources[i]);
+            thumbs[i] = findViewById(thumbResources[i]);
         }
         View containerView = findViewById(R.id.container);
-        ImageView expandedView = (ImageView) findViewById(R.id.expanded);
+        ImageView expandedView = findViewById(R.id.expanded);
         int animationDuration = getResources().getInteger(android.R.integer.config_shortAnimTime);
         mUIAnimation = new UIAnimation(containerView, thumbs, expandedView, animationDuration,
                 this);
@@ -312,11 +312,11 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {
         /** Prepares the UI for ambient mode. */
         @Override
         public void onEnterAmbient(Bundle ambientDetails) {
diff --git a/wearable/wear/WearSpeakerSample/wear/src/main/java/com/example/android/wearable/speaker/SoundRecorder.java b/wearable/wear/WearSpeakerSample/wear/src/main/java/com/example/android/wearable/speaker/SoundRecorder.java
index a45bdd2..63604b0 100644
--- a/wearable/wear/WearSpeakerSample/wear/src/main/java/com/example/android/wearable/speaker/SoundRecorder.java
+++ b/wearable/wear/WearSpeakerSample/wear/src/main/java/com/example/android/wearable/speaker/SoundRecorder.java
@@ -32,6 +32,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.lang.ref.WeakReference;
 
 /**
  * A helper class to provide methods to record audio input from the MIC to the internal storage
@@ -79,62 +80,7 @@
             return;
         }
 
-        mRecordingAsyncTask = new AsyncTask<Void, Void, Void>() {
-
-            private AudioRecord mAudioRecord;
-
-            @Override
-            protected void onPreExecute() {
-                mState = State.RECORDING;
-            }
-
-            @Override
-            protected Void doInBackground(Void... params) {
-                mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
-                        RECORDING_RATE, CHANNEL_IN, FORMAT, BUFFER_SIZE * 3);
-                BufferedOutputStream bufferedOutputStream = null;
-                try {
-                    bufferedOutputStream = new BufferedOutputStream(
-                            mContext.openFileOutput(mOutputFileName, Context.MODE_PRIVATE));
-                    byte[] buffer = new byte[BUFFER_SIZE];
-                    mAudioRecord.startRecording();
-                    while (!isCancelled()) {
-                        int read = mAudioRecord.read(buffer, 0, buffer.length);
-                        bufferedOutputStream.write(buffer, 0, read);
-                    }
-                } catch (IOException | NullPointerException | IndexOutOfBoundsException e) {
-                    Log.e(TAG, "Failed to record data: " + e);
-                } finally {
-                    if (bufferedOutputStream != null) {
-                        try {
-                            bufferedOutputStream.close();
-                        } catch (IOException e) {
-                            // ignore
-                        }
-                    }
-                    mAudioRecord.release();
-                    mAudioRecord = null;
-                }
-                return null;
-            }
-
-            @Override
-            protected void onPostExecute(Void aVoid) {
-                mState = State.IDLE;
-                mRecordingAsyncTask = null;
-            }
-
-            @Override
-            protected void onCancelled() {
-                if (mState == State.RECORDING) {
-                    Log.d(TAG, "Stopping the recording ...");
-                    mState = State.IDLE;
-                } else {
-                    Log.w(TAG, "Requesting to stop recording while state was not RECORDING");
-                }
-                mRecordingAsyncTask = null;
-            }
-        };
+        mRecordingAsyncTask = new RecordAudioAsyncTask(this);
 
         mRecordingAsyncTask.execute();
     }
@@ -172,74 +118,9 @@
             }
             return;
         }
-        final int intSize = AudioTrack.getMinBufferSize(RECORDING_RATE, CHANNELS_OUT, FORMAT);
+        int intSize = AudioTrack.getMinBufferSize(RECORDING_RATE, CHANNELS_OUT, FORMAT);
 
-        mPlayingAsyncTask = new AsyncTask<Void, Void, Void>() {
-
-            private AudioTrack mAudioTrack;
-
-            @Override
-            protected void onPreExecute() {
-                mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
-                        mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0 /* flags */);
-                mState = State.PLAYING;
-            }
-
-            @Override
-            protected Void doInBackground(Void... params) {
-                try {
-                    mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, RECORDING_RATE,
-                            CHANNELS_OUT, FORMAT, intSize, AudioTrack.MODE_STREAM);
-                    byte[] buffer = new byte[intSize * 2];
-                    FileInputStream in = null;
-                    BufferedInputStream bis = null;
-                    mAudioTrack.setVolume(AudioTrack.getMaxVolume());
-                    mAudioTrack.play();
-                    try {
-                        in = mContext.openFileInput(mOutputFileName);
-                        bis = new BufferedInputStream(in);
-                        int read;
-                        while (!isCancelled() && (read = bis.read(buffer, 0, buffer.length)) > 0) {
-                            mAudioTrack.write(buffer, 0, read);
-                        }
-                    } catch (IOException e) {
-                        Log.e(TAG, "Failed to read the sound file into a byte array", e);
-                    } finally {
-                        try {
-                            if (in != null) {
-                                in.close();
-                            }
-                            if (bis != null) {
-                                bis.close();
-                            }
-                        } catch (IOException e) { /* ignore */}
-
-                        mAudioTrack.release();
-                    }
-                } catch (IllegalStateException e) {
-                    Log.e(TAG, "Failed to start playback", e);
-                }
-                return null;
-            }
-
-            @Override
-            protected void onPostExecute(Void aVoid) {
-                cleanup();
-            }
-
-            @Override
-            protected void onCancelled() {
-                cleanup();
-            }
-
-            private void cleanup() {
-                if (mListener != null) {
-                    mListener.onPlaybackStopped();
-                }
-                mState = State.IDLE;
-                mPlayingAsyncTask = null;
-            }
-        };
+        mPlayingAsyncTask = new PlayAudioAsyncTask(this, intSize);
 
         mPlayingAsyncTask.execute();
     }
@@ -260,4 +141,176 @@
         stopPlaying();
         stopRecording();
     }
+
+
+    private static class PlayAudioAsyncTask extends AsyncTask<Void, Void, Void> {
+
+        private WeakReference<SoundRecorder> mSoundRecorderWeakReference;
+
+        private AudioTrack mAudioTrack;
+        private int mIntSize;
+
+        PlayAudioAsyncTask(SoundRecorder context, int intSize) {
+            mSoundRecorderWeakReference = new WeakReference<>(context);
+            mIntSize = intSize;
+        }
+
+        @Override
+        protected void onPreExecute() {
+
+            SoundRecorder soundRecorder = mSoundRecorderWeakReference.get();
+
+            if (soundRecorder != null) {
+                soundRecorder.mAudioManager.setStreamVolume(
+                        AudioManager.STREAM_MUSIC,
+                        soundRecorder.mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC),
+                        0 /* flags */);
+                soundRecorder.mState = State.PLAYING;
+            }
+        }
+
+        @Override
+        protected Void doInBackground(Void... params) {
+            SoundRecorder soundRecorder = mSoundRecorderWeakReference.get();
+
+            try {
+                mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, RECORDING_RATE,
+                        CHANNELS_OUT, FORMAT, mIntSize, AudioTrack.MODE_STREAM);
+                byte[] buffer = new byte[mIntSize * 2];
+                FileInputStream in = null;
+                BufferedInputStream bis = null;
+                mAudioTrack.setVolume(AudioTrack.getMaxVolume());
+                mAudioTrack.play();
+                try {
+                    in = soundRecorder.mContext.openFileInput(soundRecorder.mOutputFileName);
+                    bis = new BufferedInputStream(in);
+                    int read;
+                    while (!isCancelled() && (read = bis.read(buffer, 0, buffer.length)) > 0) {
+                        mAudioTrack.write(buffer, 0, read);
+                    }
+                } catch (IOException e) {
+                    Log.e(TAG, "Failed to read the sound file into a byte array", e);
+                } finally {
+                    try {
+                        if (in != null) {
+                            in.close();
+                        }
+                        if (bis != null) {
+                            bis.close();
+                        }
+                    } catch (IOException e) { /* ignore */}
+
+                    mAudioTrack.release();
+                }
+            } catch (IllegalStateException e) {
+                Log.e(TAG, "Failed to start playback", e);
+            }
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(Void aVoid) {
+            cleanup();
+        }
+
+        @Override
+        protected void onCancelled() {
+            cleanup();
+        }
+
+        private void cleanup() {
+            SoundRecorder soundRecorder = mSoundRecorderWeakReference.get();
+
+            if (soundRecorder != null) {
+                if (soundRecorder.mListener != null) {
+                    soundRecorder.mListener.onPlaybackStopped();
+                }
+                soundRecorder.mState = State.IDLE;
+                soundRecorder.mPlayingAsyncTask = null;
+            }
+        }
+    }
+
+    private static class RecordAudioAsyncTask extends AsyncTask<Void, Void, Void> {
+
+        private WeakReference<SoundRecorder> mSoundRecorderWeakReference;
+
+        private AudioRecord mAudioRecord;
+
+        RecordAudioAsyncTask(SoundRecorder context) {
+            mSoundRecorderWeakReference = new WeakReference<>(context);
+        }
+
+        @Override
+        protected void onPreExecute() {
+            SoundRecorder soundRecorder = mSoundRecorderWeakReference.get();
+
+            if (soundRecorder != null) {
+                soundRecorder.mState = State.RECORDING;
+            }
+        }
+
+        @Override
+        protected Void doInBackground(Void... params) {
+
+            SoundRecorder soundRecorder = mSoundRecorderWeakReference.get();
+
+            mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
+                    RECORDING_RATE, CHANNEL_IN, FORMAT, BUFFER_SIZE * 3);
+
+
+            BufferedOutputStream bufferedOutputStream = null;
+
+            try {
+                bufferedOutputStream = new BufferedOutputStream(
+                        soundRecorder.mContext.openFileOutput(
+                                soundRecorder.mOutputFileName,
+                                Context.MODE_PRIVATE));
+                byte[] buffer = new byte[BUFFER_SIZE];
+                mAudioRecord.startRecording();
+                while (!isCancelled()) {
+                    int read = mAudioRecord.read(buffer, 0, buffer.length);
+                    bufferedOutputStream.write(buffer, 0, read);
+                }
+            } catch (IOException | NullPointerException | IndexOutOfBoundsException e) {
+                Log.e(TAG, "Failed to record data: " + e);
+            } finally {
+                if (bufferedOutputStream != null) {
+                    try {
+                        bufferedOutputStream.close();
+                    } catch (IOException e) {
+                        // ignore
+                    }
+                }
+                mAudioRecord.release();
+                mAudioRecord = null;
+            }
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(Void aVoid) {
+            SoundRecorder soundRecorder = mSoundRecorderWeakReference.get();
+
+            if (soundRecorder != null) {
+                soundRecorder.mState = State.IDLE;
+                soundRecorder.mRecordingAsyncTask = null;
+            }
+        }
+
+        @Override
+        protected void onCancelled() {
+            SoundRecorder soundRecorder = mSoundRecorderWeakReference.get();
+
+            if (soundRecorder != null) {
+                if (soundRecorder.mState == State.RECORDING) {
+                    Log.d(TAG, "Stopping the recording ...");
+                    soundRecorder.mState = State.IDLE;
+                } else {
+                    Log.w(TAG, "Requesting to stop recording while state was not RECORDING");
+                }
+                soundRecorder.mRecordingAsyncTask = null;
+            }
+        }
+    }
 }
diff --git a/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java b/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java
index ed15119..e9e9a49 100644
--- a/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java
+++ b/wearable/wear/WearVerifyRemoteApp/Application/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainMobileActivity.java
@@ -20,8 +20,6 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.ResultReceiver;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.support.v7.app.AppCompatActivity;
 import android.util.Log;
 import android.view.View;
@@ -29,14 +27,11 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.PendingResult;
-import com.google.android.gms.common.api.ResultCallback;
-import com.google.android.gms.wearable.CapabilityApi;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.android.gms.wearable.CapabilityClient;
 import com.google.android.gms.wearable.CapabilityInfo;
 import com.google.android.gms.wearable.Node;
-import com.google.android.gms.wearable.NodeApi;
 import com.google.android.gms.wearable.Wearable;
 import com.google.android.wearable.intent.RemoteIntent;
 
@@ -49,9 +44,7 @@
  * user to open the app listing on the Wear devices' Play Store.
  */
 public class MainMobileActivity extends AppCompatActivity implements
-        GoogleApiClient.ConnectionCallbacks,
-        GoogleApiClient.OnConnectionFailedListener,
-        CapabilityApi.CapabilityListener {
+        CapabilityClient.OnCapabilityChangedListener {
 
     private static final String TAG = "MainMobileActivity";
 
@@ -123,16 +116,14 @@
     private Set<Node> mWearNodesWithApp;
     private List<Node> mAllConnectedNodes;
 
-    private GoogleApiClient mGoogleApiClient;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log.d(TAG, "onCreate()");
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
-        mInformationTextView = (TextView) findViewById(R.id.information_text_view);
-        mRemoteOpenButton = (Button) findViewById(R.id.remote_open_button);
+        mInformationTextView = findViewById(R.id.information_text_view);
+        mRemoteOpenButton = findViewById(R.id.remote_open_button);
 
         mInformationTextView.setText(CHECKING_MESSAGE);
 
@@ -142,49 +133,22 @@
                 openPlayStoreOnWearDevicesWithoutApp();
             }
         });
-
-        mGoogleApiClient = new GoogleApiClient.Builder(this)
-                .addApi(Wearable.API)
-                .addConnectionCallbacks(this)
-                .addOnConnectionFailedListener(this)
-                .build();
     }
 
-
     @Override
     protected void onPause() {
         Log.d(TAG, "onPause()");
         super.onPause();
 
-        if ((mGoogleApiClient != null) && mGoogleApiClient.isConnected()) {
-
-            Wearable.CapabilityApi.removeCapabilityListener(
-                    mGoogleApiClient,
-                    this,
-                    CAPABILITY_WEAR_APP);
-
-            mGoogleApiClient.disconnect();
-        }
+        Wearable.getCapabilityClient(this).removeListener(this, CAPABILITY_WEAR_APP);
     }
 
     @Override
     protected void onResume() {
         Log.d(TAG, "onResume()");
         super.onResume();
-        if (mGoogleApiClient != null) {
-            mGoogleApiClient.connect();
-        }
-    }
 
-    @Override
-    public void onConnected(@Nullable Bundle bundle) {
-        Log.d(TAG, "onConnected()");
-
-        // Set up listeners for capability changes (install/uninstall of remote app).
-        Wearable.CapabilityApi.addCapabilityListener(
-                mGoogleApiClient,
-                this,
-                CAPABILITY_WEAR_APP);
+        Wearable.getCapabilityClient(this).addListener(this, CAPABILITY_WEAR_APP);
 
         // Initial request for devices with our capability, aka, our Wear app installed.
         findWearDevicesWithApp();
@@ -196,16 +160,6 @@
         findAllWearDevices();
     }
 
-    @Override
-    public void onConnectionSuspended(int i) {
-        Log.d(TAG, "onConnectionSuspended(): connection to location client suspended: " + i);
-    }
-
-    @Override
-    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
-        Log.e(TAG, "onConnectionFailed(): " + connectionResult);
-    }
-
     /*
      * Updates UI when capabilities change (install/uninstall wear app).
      */
@@ -224,26 +178,25 @@
     private void findWearDevicesWithApp() {
         Log.d(TAG, "findWearDevicesWithApp()");
 
-        // You can filter this by FILTER_REACHABLE if you only want to open Nodes (Wear Devices)
-        // directly connect to your phone.
-        PendingResult<CapabilityApi.GetCapabilityResult> pendingResult =
-                Wearable.CapabilityApi.getCapability(
-                        mGoogleApiClient,
-                        CAPABILITY_WEAR_APP,
-                        CapabilityApi.FILTER_ALL);
+        Task<CapabilityInfo> capabilityInfoTask = Wearable.getCapabilityClient(this)
+                .getCapability(CAPABILITY_WEAR_APP, CapabilityClient.FILTER_ALL);
 
-        pendingResult.setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
+        capabilityInfoTask.addOnCompleteListener(new OnCompleteListener<CapabilityInfo>() {
             @Override
-            public void onResult(@NonNull CapabilityApi.GetCapabilityResult getCapabilityResult) {
-                Log.d(TAG, "onResult(): " + getCapabilityResult);
+            public void onComplete(Task<CapabilityInfo> task) {
 
-                if (getCapabilityResult.getStatus().isSuccess()) {
-                    CapabilityInfo capabilityInfo = getCapabilityResult.getCapability();
+                if (task.isSuccessful()) {
+                    Log.d(TAG, "Capability request succeeded.");
+
+                    CapabilityInfo capabilityInfo = task.getResult();
                     mWearNodesWithApp = capabilityInfo.getNodes();
+
+                    Log.d(TAG, "Capable Nodes: " + mWearNodesWithApp);
+
                     verifyNodeAndUpdateUI();
 
                 } else {
-                    Log.d(TAG, "Failed CapabilityApi: " + getCapabilityResult.getStatus());
+                    Log.d(TAG, "Capability request failed to return any results.");
                 }
             }
         });
@@ -252,20 +205,21 @@
     private void findAllWearDevices() {
         Log.d(TAG, "findAllWearDevices()");
 
-        PendingResult<NodeApi.GetConnectedNodesResult> pendingResult =
-                Wearable.NodeApi.getConnectedNodes(mGoogleApiClient);
+        Task<List<Node>> NodeListTask = Wearable.getNodeClient(this).getConnectedNodes();
 
-        pendingResult.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
+        NodeListTask.addOnCompleteListener(new OnCompleteListener<List<Node>>() {
             @Override
-            public void onResult(@NonNull NodeApi.GetConnectedNodesResult getConnectedNodesResult) {
+            public void onComplete(Task<List<Node>> task) {
 
-                if (getConnectedNodesResult.getStatus().isSuccess()) {
-                    mAllConnectedNodes = getConnectedNodesResult.getNodes();
-                    verifyNodeAndUpdateUI();
+                if (task.isSuccessful()) {
+                    Log.d(TAG, "Node request succeeded.");
+                    mAllConnectedNodes = task.getResult();
 
                 } else {
-                    Log.d(TAG, "Failed CapabilityApi: " + getConnectedNodesResult.getStatus());
+                    Log.d(TAG, "Node request failed to return any results.");
                 }
+
+                verifyNodeAndUpdateUI();
             }
         });
     }
@@ -338,4 +292,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/wearable/wear/WearVerifyRemoteApp/Wearable/build.gradle b/wearable/wear/WearVerifyRemoteApp/Wearable/build.gradle
index bb93be9..ac9f145 100644
--- a/wearable/wear/WearVerifyRemoteApp/Wearable/build.gradle
+++ b/wearable/wear/WearVerifyRemoteApp/Wearable/build.gradle
@@ -6,7 +6,7 @@
     }
 
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.0.1'
+        classpath 'com.android.tools.build:gradle:3.1.3'
     }
 }
 
@@ -21,15 +21,15 @@
 
 dependencies {
 
-    compile 'com.android.support:wear:27.1.0'
+    implementation 'com.android.support:wear:27.1.1'
 
 
-    compile 'com.google.android.gms:play-services-wearable:11.8.0'
-    compile 'com.android.support:support-v13:27.1.0'
+    implementation 'com.google.android.gms:play-services-wearable:15.0.1'
+    implementation 'com.android.support:support-v13:27.1.1'
 
-    provided 'com.google.android.wearable:wearable:2.3.0'
+    compileOnly 'com.google.android.wearable:wearable:2.3.0'
 
-    compile 'com.google.android.support:wearable:2.3.0'
+    implementation 'com.google.android.support:wearable:2.3.0'
 
 }
 
diff --git a/wearable/wear/WearVerifyRemoteApp/Wearable/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainWearActivity.java b/wearable/wear/WearVerifyRemoteApp/Wearable/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainWearActivity.java
index 53b71aa..6521b09 100644
--- a/wearable/wear/WearVerifyRemoteApp/Wearable/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainWearActivity.java
+++ b/wearable/wear/WearVerifyRemoteApp/Wearable/src/main/java/com/example/android/wearable/wear/wearverifyremoteapp/MainWearActivity.java
@@ -15,15 +15,13 @@
  */
 package com.example.android.wearable.wear.wearverifyremoteapp;
 
-import android.app.Activity;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.ResultReceiver;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.wear.ambient.AmbientMode;
+import android.support.v4.app.FragmentActivity;
+import android.support.wear.ambient.AmbientModeSupport;
 import android.support.wearable.phone.PhoneDeviceType;
 import android.support.wearable.view.ConfirmationOverlay;
 import android.util.Log;
@@ -31,11 +29,9 @@
 import android.widget.Button;
 import android.widget.TextView;
 
-import com.google.android.gms.common.ConnectionResult;
-import com.google.android.gms.common.api.GoogleApiClient;
-import com.google.android.gms.common.api.PendingResult;
-import com.google.android.gms.common.api.ResultCallback;
-import com.google.android.gms.wearable.CapabilityApi;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.android.gms.wearable.CapabilityClient;
 import com.google.android.gms.wearable.CapabilityInfo;
 import com.google.android.gms.wearable.Node;
 import com.google.android.gms.wearable.Wearable;
@@ -47,11 +43,9 @@
  * Checks if the phone app is installed on remote device. If it is not, allows user to open app
  * listing on the phone's Play or App Store.
  */
-public class MainWearActivity extends Activity implements
-        AmbientMode.AmbientCallbackProvider,
-        GoogleApiClient.ConnectionCallbacks,
-        GoogleApiClient.OnConnectionFailedListener,
-        CapabilityApi.CapabilityListener {
+public class MainWearActivity extends FragmentActivity implements
+        AmbientModeSupport.AmbientCallbackProvider,
+        CapabilityClient.OnCapabilityChangedListener {
 
     private static final String TAG = "MainWearActivity";
 
@@ -107,8 +101,6 @@
 
     private Node mAndroidPhoneNodeWithApp;
 
-    private GoogleApiClient mGoogleApiClient;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         Log.d(TAG, "onCreate()");
@@ -117,10 +109,10 @@
         setContentView(R.layout.activity_main);
 
         // Enables Ambient mode.
-        AmbientMode.attachAmbientSupport(this);
+        AmbientModeSupport.attach(this);
 
-        mInformationTextView = (TextView) findViewById(R.id.information_text_view);
-        mRemoteOpenButton = (Button) findViewById(R.id.remote_open_button);
+        mInformationTextView = findViewById(R.id.information_text_view);
+        mRemoteOpenButton = findViewById(R.id.remote_open_button);
 
         mInformationTextView.setText(CHECKING_MESSAGE);
 
@@ -130,12 +122,6 @@
                 openAppInStoreOnPhone();
             }
         });
-
-        mGoogleApiClient = new GoogleApiClient.Builder(this)
-                .addApi(Wearable.API)
-                .addConnectionCallbacks(this)
-                .addOnConnectionFailedListener(this)
-                .build();
     }
 
 
@@ -144,48 +130,19 @@
         Log.d(TAG, "onPause()");
         super.onPause();
 
-        if ((mGoogleApiClient != null) && mGoogleApiClient.isConnected()) {
-            Wearable.CapabilityApi.removeCapabilityListener(
-                    mGoogleApiClient,
-                    this,
-                    CAPABILITY_PHONE_APP);
-
-            mGoogleApiClient.disconnect();
-        }
+        Wearable.getCapabilityClient(this).removeListener(this, CAPABILITY_PHONE_APP);
     }
 
     @Override
     protected void onResume() {
         Log.d(TAG, "onResume()");
         super.onResume();
-        if (mGoogleApiClient != null) {
-            mGoogleApiClient.connect();
-        }
-    }
 
-    @Override
-    public void onConnected(@Nullable Bundle bundle) {
-        Log.d(TAG, "onConnected()");
-
-        // Set up listeners for capability changes (install/uninstall of remote app).
-        Wearable.CapabilityApi.addCapabilityListener(
-                mGoogleApiClient,
-                this,
-                CAPABILITY_PHONE_APP);
+        Wearable.getCapabilityClient(this).addListener(this, CAPABILITY_PHONE_APP);
 
         checkIfPhoneHasApp();
     }
 
-    @Override
-    public void onConnectionSuspended(int i) {
-        Log.d(TAG, "onConnectionSuspended(): connection to location client suspended: " + i);
-    }
-
-    @Override
-    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
-        Log.e(TAG, "onConnectionFailed(): " + connectionResult);
-    }
-
     /*
      * Updates UI when capabilities change (install/uninstall phone app).
      */
@@ -199,26 +156,23 @@
     private void checkIfPhoneHasApp() {
         Log.d(TAG, "checkIfPhoneHasApp()");
 
-        PendingResult<CapabilityApi.GetCapabilityResult> pendingResult =
-                Wearable.CapabilityApi.getCapability(
-                        mGoogleApiClient,
-                        CAPABILITY_PHONE_APP,
-                        CapabilityApi.FILTER_ALL);
+        Task<CapabilityInfo> capabilityInfoTask = Wearable.getCapabilityClient(this)
+                .getCapability(CAPABILITY_PHONE_APP, CapabilityClient.FILTER_ALL);
 
-        pendingResult.setResultCallback(new ResultCallback<CapabilityApi.GetCapabilityResult>() {
-
+        capabilityInfoTask.addOnCompleteListener(new OnCompleteListener<CapabilityInfo>() {
             @Override
-            public void onResult(@NonNull CapabilityApi.GetCapabilityResult getCapabilityResult) {
-                Log.d(TAG, "onResult(): " + getCapabilityResult);
+            public void onComplete(Task<CapabilityInfo> task) {
 
-                if (getCapabilityResult.getStatus().isSuccess()) {
-                    CapabilityInfo capabilityInfo = getCapabilityResult.getCapability();
+                if (task.isSuccessful()) {
+                    Log.d(TAG, "Capability request succeeded.");
+                    CapabilityInfo capabilityInfo = task.getResult();
                     mAndroidPhoneNodeWithApp = pickBestNodeId(capabilityInfo.getNodes());
-                    verifyNodeAndUpdateUI();
 
                 } else {
-                    Log.d(TAG, "Failed CapabilityApi: " + getCapabilityResult.getStatus());
+                    Log.d(TAG, "Capability request failed to return any results.");
                 }
+
+                verifyNodeAndUpdateUI();
             }
         });
     }
@@ -301,11 +255,11 @@
     }
 
     @Override
-    public AmbientMode.AmbientCallback getAmbientCallback() {
+    public AmbientModeSupport.AmbientCallback getAmbientCallback() {
         return new MyAmbientCallback();
     }
 
-    private class MyAmbientCallback extends AmbientMode.AmbientCallback {
+    private class MyAmbientCallback extends AmbientModeSupport.AmbientCallback {
         /** Prepares the UI for ambient mode. */
         @Override
         public void onEnterAmbient(Bundle ambientDetails) {
diff --git a/wearable/wear/WearVerifyRemoteApp/template-params.xml b/wearable/wear/WearVerifyRemoteApp/template-params.xml
index 6c3f3f9..7b17a13 100644
--- a/wearable/wear/WearVerifyRemoteApp/template-params.xml
+++ b/wearable/wear/WearVerifyRemoteApp/template-params.xml
@@ -34,7 +34,7 @@
     <dependency>com.google.android.support:wearable:2.3.0</dependency>
 
 
-    <dependency_wearable>com.android.support:wear:27.1.0</dependency_wearable>
+    <dependency_wearable>com.android.support:wear:27.1.1</dependency_wearable>
 
     <!-- Include additional dependencies here.-->
     <!-- dependency>com.google.android.gms:play-services:5.0.+</dependency -->
