From 884f9ea6b2b746d1bd72353eb139ce00066d1d2d Mon Sep 17 00:00:00 2001 From: Jianhua Yang Date: Thu, 30 Nov 2017 13:25:03 +0000 Subject: [PATCH] complex data to wear --- .../MyWearables2/.idea/misc.xml | 2 +- .../MyWearables2/.idea/modules.xml | 1 - .../.google/packaging.yaml | 19 + .../.idea/compiler.xml | 22 + .../.idea/copyright/profiles_settings.xml | 3 + .../android-DataLayer-master/.idea/gradle.xml | 19 + .../.idea/libraries/1_wearable_2_0_5.xml | 10 + .../animated_vector_drawable_26_0_0.xml | 10 + .../.idea/libraries/appcompat_v7_26_0_0.xml | 10 + .../.idea/libraries/cardview_v7_26_0_0.xml | 10 + .../.idea/libraries/percent_26_0_0.xml | 12 + .../libraries/play_services_base_11_4_0.xml | 10 + .../play_services_basement_11_4_0.xml | 10 + .../libraries/play_services_tasks_11_4_0.xml | 10 + .../play_services_wearable_11_4_0.xml | 10 + .../libraries/recyclerview_v7_26_0_0.xml | 12 + .../libraries/support_annotations_26_0_0.xml | 11 + .../.idea/libraries/support_compat_26_0_0.xml | 12 + .../libraries/support_core_ui_26_0_0.xml | 12 + .../libraries/support_core_utils_26_0_0.xml | 12 + .../libraries/support_fragment_26_0_0.xml | 12 + .../libraries/support_media_compat_26_0_0.xml | 12 + .../.idea/libraries/support_v13_26_0_0.xml | 10 + .../.idea/libraries/support_v4_26_0_0.xml | 12 + .../support_vector_drawable_26_0_0.xml | 10 + .../.idea/libraries/wearable_2_0_5.xml | 9 + .../android-DataLayer-master/.idea/misc.xml | 46 + .../.idea/modules.xml | 10 + .../.idea/runConfigurations.xml | 12 + .../.idea/workspace.xml | 3229 +++++++++++++++++ .../Application/build.gradle | 67 + .../Application/src/main/AndroidManifest.xml | 44 + .../wearable/datalayer/MainActivity.java | 459 +++ .../res/drawable-hdpi/ic_content_picture.png | Bin 0 -> 1474 bytes .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4584 bytes .../src/main/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../res/drawable-mdpi/ic_content_picture.png | Bin 0 -> 896 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2757 bytes .../res/drawable-xhdpi/ic_content_picture.png | Bin 0 -> 2139 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 6603 bytes .../drawable-xxhdpi/ic_content_picture.png | Bin 0 -> 3602 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 11788 bytes .../src/main/res/drawable/divider.xml | 20 + .../src/main/res/layout/main_activity.xml | 86 + .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../main/res/values-v11/template-styles.xml | 22 + .../src/main/res/values-v21/base-colors.xml | 21 + .../res/values-v21/base-template-styles.xml | 24 + .../src/main/res/values/base-strings.xml | 31 + .../src/main/res/values/strings.xml | 22 + .../Application/src/main/res/values/style.xml | 23 + .../src/main/res/values/template-dimens.xml | 32 + .../src/main/res/values/template-styles.xml | 42 + .../Application/src/main/res/values/wear.xml | 23 + .../android-DataLayer-master/CONTRIB.md | 35 + .../android-DataLayer-master/CONTRIBUTING.md | 35 + .../android-DataLayer-master/LICENSE | 647 ++++ .../android-DataLayer-master/README.md | 75 + .../Wearable/build.gradle | 77 + .../Wearable/src/main/AndroidManifest.xml | 64 + .../datalayer/DataLayerListenerService.java | 104 + .../wearable/datalayer/MainActivity.java | 346 ++ .../datalayer/fragments/AssetFragment.java | 49 + .../datalayer/fragments/DataFragment.java | 109 + .../fragments/DiscoveryFragment.java | 39 + .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4584 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2757 bytes .../res/drawable-nodpi/photo_placeholder.png | Bin 0 -> 34742 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 6603 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 11788 bytes .../main/res/drawable/rounded_background.xml | 21 + .../src/main/res/layout/asset_fragment.xml | 29 + .../src/main/res/layout/data_fragment.xml | 40 + .../main/res/layout/discovery_fragment.xml | 50 + .../src/main/res/layout/main_activity.xml | 38 + .../Wearable/src/main/res/values/dimens.xml | 19 + .../Wearable/src/main/res/values/strings.xml | 24 + .../Wearable/src/main/res/values/wear.xml | 22 + .../android-DataLayer-master/build.gradle | 14 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 49896 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../android-DataLayer-master/gradlew | 164 + .../android-DataLayer-master/gradlew.bat | 90 + .../screenshots/phone_image.png | Bin 0 -> 1549078 bytes .../screenshots/wearable_background_image.png | Bin 0 -> 150420 bytes .../android-DataLayer-master/settings.gradle | 2 + 87 files changed, 6641 insertions(+), 2 deletions(-) create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.google/packaging.yaml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/compiler.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/copyright/profiles_settings.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/gradle.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/1_wearable_2_0_5.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/animated_vector_drawable_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/appcompat_v7_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/cardview_v7_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/percent_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_base_11_4_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_basement_11_4_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_tasks_11_4_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_wearable_11_4_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/recyclerview_v7_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_annotations_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_compat_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_core_ui_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_core_utils_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_fragment_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_media_compat_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_v13_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_v4_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_vector_drawable_26_0_0.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/wearable_2_0_5.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/misc.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/modules.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/runConfigurations.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/.idea/workspace.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/build.gradle create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/AndroidManifest.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-hdpi/ic_content_picture.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-hdpi/tile.9.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-mdpi/ic_content_picture.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-xhdpi/ic_content_picture.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-xxhdpi/ic_content_picture.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable/divider.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/layout/main_activity.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values-sw600dp/template-dimens.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values-sw600dp/template-styles.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values-v11/template-styles.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values-v21/base-colors.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values-v21/base-template-styles.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values/base-strings.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values/strings.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values/style.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values/template-dimens.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values/template-styles.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/values/wear.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/CONTRIB.md create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/CONTRIBUTING.md create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/LICENSE create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/README.md create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/build.gradle create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/AndroidManifest.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/java/com/example/android/wearable/datalayer/DataLayerListenerService.java create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/java/com/example/android/wearable/datalayer/MainActivity.java create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/AssetFragment.java create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DataFragment.java create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/java/com/example/android/wearable/datalayer/fragments/DiscoveryFragment.java create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/drawable-nodpi/photo_placeholder.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/drawable/rounded_background.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/layout/asset_fragment.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/layout/data_fragment.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/layout/discovery_fragment.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/layout/main_activity.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/values/dimens.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/values/strings.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/Wearable/src/main/res/values/wear.xml create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/build.gradle create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/gradle/wrapper/gradle-wrapper.jar create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/gradle/wrapper/gradle-wrapper.properties create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/gradlew create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/gradlew.bat create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/screenshots/phone_image.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/screenshots/wearable_background_image.png create mode 100644 Week_09_Services_and_wearables/android-DataLayer-master/settings.gradle diff --git a/Week_09_Services_and_wearables/MyWearables2/.idea/misc.xml b/Week_09_Services_and_wearables/MyWearables2/.idea/misc.xml index 5d19981..fbb6828 100644 --- a/Week_09_Services_and_wearables/MyWearables2/.idea/misc.xml +++ b/Week_09_Services_and_wearables/MyWearables2/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/Week_09_Services_and_wearables/MyWearables2/.idea/modules.xml b/Week_09_Services_and_wearables/MyWearables2/.idea/modules.xml index c69a079..9493730 100644 --- a/Week_09_Services_and_wearables/MyWearables2/.idea/modules.xml +++ b/Week_09_Services_and_wearables/MyWearables2/.idea/modules.xml @@ -2,7 +2,6 @@ - diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.google/packaging.yaml b/Week_09_Services_and_wearables/android-DataLayer-master/.google/packaging.yaml new file mode 100644 index 0000000..34a922f --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.google/packaging.yaml @@ -0,0 +1,19 @@ + +# GOOGLE SAMPLE PACKAGING DATA +# +# This file is used by Google as part of our samples packaging process. +# End users may safely ignore this file. It has no relevance to other systems. +--- +status: PUBLISHED +technologies: [Android] +categories: [UI, Wearable] +languages: [Java] +solutions: [Mobile] +github: android-DataLayer +level: ADVANCED +icon: Application/src/main/res/drawable-xxhdpi/ic_launcher.png +apiRefs: + - gms:com.google.android.gms.wearable.DataApi + - gms:com.google.android.gms.wearable.DataEvent + - gms:com.google.android.gms.wearable.WearableListenerService +license: apache2 diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/compiler.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/copyright/profiles_settings.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/copyright/profiles_settings.xml new file mode 100644 index 0000000..e7bedf3 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/copyright/profiles_settings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/gradle.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/gradle.xml new file mode 100644 index 0000000..23fc949 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/1_wearable_2_0_5.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/1_wearable_2_0_5.xml new file mode 100644 index 0000000..648b33d --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/1_wearable_2_0_5.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/animated_vector_drawable_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/animated_vector_drawable_26_0_0.xml new file mode 100644 index 0000000..8c4f369 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/animated_vector_drawable_26_0_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/appcompat_v7_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/appcompat_v7_26_0_0.xml new file mode 100644 index 0000000..0266d2f --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/appcompat_v7_26_0_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/cardview_v7_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/cardview_v7_26_0_0.xml new file mode 100644 index 0000000..ce9cf5c --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/cardview_v7_26_0_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/percent_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/percent_26_0_0.xml new file mode 100644 index 0000000..d47aacb --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/percent_26_0_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_base_11_4_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_base_11_4_0.xml new file mode 100644 index 0000000..c5a7b81 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_base_11_4_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_basement_11_4_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_basement_11_4_0.xml new file mode 100644 index 0000000..7de74f9 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_basement_11_4_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_tasks_11_4_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_tasks_11_4_0.xml new file mode 100644 index 0000000..28f60a4 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_tasks_11_4_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_wearable_11_4_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_wearable_11_4_0.xml new file mode 100644 index 0000000..a1fb6e8 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/play_services_wearable_11_4_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/recyclerview_v7_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/recyclerview_v7_26_0_0.xml new file mode 100644 index 0000000..cbbb454 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/recyclerview_v7_26_0_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_annotations_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_annotations_26_0_0.xml new file mode 100644 index 0000000..3ed0e05 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_annotations_26_0_0.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_compat_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_compat_26_0_0.xml new file mode 100644 index 0000000..35be97f --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_compat_26_0_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_core_ui_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_core_ui_26_0_0.xml new file mode 100644 index 0000000..eea8b78 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_core_ui_26_0_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_core_utils_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_core_utils_26_0_0.xml new file mode 100644 index 0000000..b24c4ac --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_core_utils_26_0_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_fragment_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_fragment_26_0_0.xml new file mode 100644 index 0000000..d74d20c --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_fragment_26_0_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_media_compat_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_media_compat_26_0_0.xml new file mode 100644 index 0000000..c247a23 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_media_compat_26_0_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_v13_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_v13_26_0_0.xml new file mode 100644 index 0000000..073d75e --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_v13_26_0_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_v4_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_v4_26_0_0.xml new file mode 100644 index 0000000..e919710 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_v4_26_0_0.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_vector_drawable_26_0_0.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_vector_drawable_26_0_0.xml new file mode 100644 index 0000000..1280a7e --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/support_vector_drawable_26_0_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/wearable_2_0_5.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/wearable_2_0_5.xml new file mode 100644 index 0000000..7a91a6b --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/libraries/wearable_2_0_5.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/misc.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/misc.xml new file mode 100644 index 0000000..5d19981 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/misc.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/modules.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/modules.xml new file mode 100644 index 0000000..9f84d4e --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/runConfigurations.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/runConfigurations.xml new file mode 100644 index 0000000..7f68460 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/runConfigurations.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/.idea/workspace.xml b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/workspace.xml new file mode 100644 index 0000000..3445996 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/.idea/workspace.xml @@ -0,0 +1,3229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1512047094889 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/Application/build.gradle b/Week_09_Services_and_wearables/android-DataLayer-master/Application/build.gradle new file mode 100644 index 0000000..82bcf89 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/Application/build.gradle @@ -0,0 +1,67 @@ + +buildscript { + repositories { + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:2.3.3' + } +} + +apply plugin: 'com.android.application' + +repositories { + jcenter() + maven { + url 'https://maven.google.com' + } +} + +dependencies { + compile "com.android.support:support-v4:26.0.0" + compile "com.android.support:support-v13:26.0.0" + compile "com.android.support:cardview-v7:26.0.0" + compile "com.android.support:appcompat-v7:26.0.0" + compile 'com.google.android.gms:play-services-wearable:11.4.0' + compile 'com.android.support:support-v13:26.0.0' + wearApp project(':Wearable') +} + +// The sample build uses multiple directories to +// keep boilerplate and common code separate from +// the main sample code. +List dirs = [ + 'main', // main sample code; look here for the interesting stuff. + 'common', // components that are reused by multiple samples + 'template'] // boilerplate code that is generated by the sample template process + +android { + + compileSdkVersion 26 + + buildToolsVersion "26.0.1" + + defaultConfig { + minSdkVersion 18 + targetSdkVersion 25 + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + sourceSets { + main { + dirs.each { dir -> + java.srcDirs "src/${dir}/java" + res.srcDirs "src/${dir}/res" + } + } + androidTest.setRoot('tests') + androidTest.java.srcDirs = ['tests/src'] + + } + +} diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/AndroidManifest.xml b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/AndroidManifest.xml new file mode 100644 index 0000000..ed1cec3 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/AndroidManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java new file mode 100644 index 0000000..ca86d7a --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/java/com/example/android/wearable/datalayer/MainActivity.java @@ -0,0 +1,459 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.wearable.datalayer; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.IntentSender; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.provider.MediaStore; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.ListView; +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.GoogleApiClient.ConnectionCallbacks; +import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener; +import com.google.android.gms.common.api.ResultCallback; +import com.google.android.gms.wearable.Asset; +import com.google.android.gms.wearable.CapabilityApi; +import com.google.android.gms.wearable.CapabilityInfo; +import com.google.android.gms.wearable.DataApi; +import com.google.android.gms.wearable.DataApi.DataItemResult; +import com.google.android.gms.wearable.DataEvent; +import com.google.android.gms.wearable.DataEventBuffer; +import com.google.android.gms.wearable.MessageApi; +import com.google.android.gms.wearable.MessageApi.SendMessageResult; +import com.google.android.gms.wearable.MessageEvent; +import com.google.android.gms.wearable.Node; +import com.google.android.gms.wearable.NodeApi; +import com.google.android.gms.wearable.PutDataMapRequest; +import com.google.android.gms.wearable.PutDataRequest; +import com.google.android.gms.wearable.Wearable; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Collection; +import java.util.Date; +import java.util.HashSet; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +/** + * Receives its own events using a listener API designed for foreground activities. Updates a data + * item every second while it is open. Also allows user to take a photo and send that as an asset + * to the paired wearable. + */ +public class MainActivity extends Activity implements + CapabilityApi.CapabilityListener, + MessageApi.MessageListener, + DataApi.DataListener, + ConnectionCallbacks, + OnConnectionFailedListener { + + private static final String TAG = "MainActivity"; + + //Request code for launching the Intent to resolve Google Play services errors. + private static final int REQUEST_RESOLVE_ERROR = 1000; + + private static final int REQUEST_IMAGE_CAPTURE = 1; + + private static final String START_ACTIVITY_PATH = "/start-activity"; + private static final String COUNT_PATH = "/count"; + private static final String IMAGE_PATH = "/image"; + private static final String IMAGE_KEY = "photo"; + private static final String COUNT_KEY = "count"; + + private GoogleApiClient mGoogleApiClient; + private boolean mResolvingError = false; + private boolean mCameraSupported = false; + + private ListView mDataItemList; + private Button mSendPhotoBtn; + private ImageView mThumbView; + private Bitmap mImageBitmap; + private View mStartActivityBtn; + + private DataItemAdapter mDataItemListAdapter; + + // Send DataItems. + private ScheduledExecutorService mGeneratorExecutor; + private ScheduledFuture mDataItemGeneratorFuture; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + LOGD(TAG, "onCreate"); + mCameraSupported = getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); + setContentView(R.layout.main_activity); + setupViews(); + + // Stores DataItems received by the local broadcaster or from the paired watch. + mDataItemListAdapter = new DataItemAdapter(this, android.R.layout.simple_list_item_1); + mDataItemList.setAdapter(mDataItemListAdapter); + + mGeneratorExecutor = new ScheduledThreadPoolExecutor(1); + + mGoogleApiClient = new GoogleApiClient.Builder(this) + .addApi(Wearable.API) + .addConnectionCallbacks(this) + .addOnConnectionFailedListener(this) + .build(); + } + + @Override + protected void onStart() { + super.onStart(); + if (!mResolvingError) { + mGoogleApiClient.connect(); + } + } + + @Override + public void onResume() { + super.onResume(); + mDataItemGeneratorFuture = mGeneratorExecutor.scheduleWithFixedDelay( + new DataItemGenerator(), 1, 5, TimeUnit.SECONDS); + } + + @Override + public void onPause() { + super.onPause(); + mDataItemGeneratorFuture.cancel(true /* mayInterruptIfRunning */); + } + + @Override + protected void onStop() { + if (!mResolvingError && (mGoogleApiClient != null) && (mGoogleApiClient.isConnected())) { + Wearable.DataApi.removeListener(mGoogleApiClient, this); + Wearable.MessageApi.removeListener(mGoogleApiClient, this); + Wearable.CapabilityApi.removeListener(mGoogleApiClient, this); + mGoogleApiClient.disconnect(); + } + super.onStop(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { + Bundle extras = data.getExtras(); + mImageBitmap = (Bitmap) extras.get("data"); + mThumbView.setImageBitmap(mImageBitmap); + } + } + + @Override + public void onConnected(Bundle connectionHint) { + LOGD(TAG, "Google API Client was connected"); + mResolvingError = false; + mStartActivityBtn.setEnabled(true); + mSendPhotoBtn.setEnabled(mCameraSupported); + Wearable.DataApi.addListener(mGoogleApiClient, this); + Wearable.MessageApi.addListener(mGoogleApiClient, this); + Wearable.CapabilityApi.addListener( + mGoogleApiClient, this, Uri.parse("wear://"), CapabilityApi.FILTER_REACHABLE); + } + + @Override + public void onConnectionSuspended(int cause) { + LOGD(TAG, "Connection to Google API client was suspended"); + mStartActivityBtn.setEnabled(false); + mSendPhotoBtn.setEnabled(false); + } + + @Override + public void onConnectionFailed(ConnectionResult result) { + if (!mResolvingError) { + + if (result.hasResolution()) { + try { + mResolvingError = true; + result.startResolutionForResult(this, REQUEST_RESOLVE_ERROR); + } catch (IntentSender.SendIntentException e) { + // There was an error with the resolution intent. Try again. + mGoogleApiClient.connect(); + } + } else { + Log.e(TAG, "Connection to Google API client has failed"); + mResolvingError = false; + mStartActivityBtn.setEnabled(false); + mSendPhotoBtn.setEnabled(false); + Wearable.DataApi.removeListener(mGoogleApiClient, this); + Wearable.MessageApi.removeListener(mGoogleApiClient, this); + Wearable.CapabilityApi.removeListener(mGoogleApiClient, this); + } + } + } + + @Override + public void onDataChanged(DataEventBuffer dataEvents) { + LOGD(TAG, "onDataChanged: " + dataEvents); + + for (DataEvent event : dataEvents) { + if (event.getType() == DataEvent.TYPE_CHANGED) { + mDataItemListAdapter.add( + new Event("DataItem Changed", event.getDataItem().toString())); + } else if (event.getType() == DataEvent.TYPE_DELETED) { + mDataItemListAdapter.add( + new Event("DataItem Deleted", event.getDataItem().toString())); + } + } + } + + @Override + public void onMessageReceived(final MessageEvent messageEvent) { + LOGD(TAG, "onMessageReceived() A message from watch was received:" + + messageEvent.getRequestId() + " " + messageEvent.getPath()); + + mDataItemListAdapter.add(new Event("Message from watch", messageEvent.toString())); + } + + @Override + public void onCapabilityChanged(final CapabilityInfo capabilityInfo) { + LOGD(TAG, "onCapabilityChanged: " + capabilityInfo); + + mDataItemListAdapter.add(new Event("onCapabilityChanged", capabilityInfo.toString())); + } + + /** + * 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); + mStartActivityBtn = findViewById(R.id.start_wearable_activity); + } + + public void onTakePhotoClick(View view) { + dispatchTakePictureIntent(); + } + + public void onSendPhotoClick(View view) { + if (null != mImageBitmap && mGoogleApiClient.isConnected()) { + sendPhoto(toAsset(mImageBitmap)); + } + } + + /** + * Sends an RPC to start a fullscreen Activity on the wearable. + */ + public void onStartWearableActivityClick(View view) { + LOGD(TAG, "Generating RPC"); + + // Trigger an AsyncTask that will query for a list of connected nodes and send a + // "start-activity" message to each connected node. + new StartWearableActivityTask().execute(); + } + + private void sendStartActivityMessage(String node) { + Wearable.MessageApi.sendMessage( + mGoogleApiClient, node, START_ACTIVITY_PATH, new byte[0]).setResultCallback( + new ResultCallback() { + @Override + public void onResult(SendMessageResult sendMessageResult) { + if (!sendMessageResult.getStatus().isSuccess()) { + Log.e(TAG, "Failed to send message with status code: " + + sendMessageResult.getStatus().getStatusCode()); + } + } + } + ); + } + + /** + * Dispatches an {@link android.content.Intent} to take a photo. Result will be returned back + * in onActivityResult(). + */ + private void dispatchTakePictureIntent() { + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + if (takePictureIntent.resolveActivity(getPackageManager()) != null) { + startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); + } + } + + /** + * Builds an {@link com.google.android.gms.wearable.Asset} from a bitmap. The image that we get + * back from the camera in "data" is a thumbnail size. Typically, your image should not exceed + * 320x320 and if you want to have zoom and parallax effect in your app, limit the size of your + * image to 640x400. Resize your image before transferring to your wearable device. + */ + private static Asset toAsset(Bitmap bitmap) { + ByteArrayOutputStream byteStream = null; + try { + byteStream = new ByteArrayOutputStream(); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteStream); + return Asset.createFromBytes(byteStream.toByteArray()); + } finally { + if (null != byteStream) { + try { + byteStream.close(); + } catch (IOException e) { + // ignore + } + } + } + } + + /** + * Sends the asset that was created from the photo we took by adding it to the Data Item store. + */ + private void sendPhoto(Asset asset) { + PutDataMapRequest dataMap = PutDataMapRequest.create(IMAGE_PATH); + dataMap.getDataMap().putAsset(IMAGE_KEY, asset); + dataMap.getDataMap().putLong("time", new Date().getTime()); + PutDataRequest request = dataMap.asPutDataRequest(); + request.setUrgent(); + + Wearable.DataApi.putDataItem(mGoogleApiClient, request) + .setResultCallback(new ResultCallback() { + @Override + public void onResult(DataItemResult dataItemResult) { + LOGD(TAG, "Sending image was successful: " + dataItemResult.getStatus() + .isSuccess()); + } + }); + } + + private Collection getNodes() { + HashSet results = new HashSet<>(); + NodeApi.GetConnectedNodesResult nodes = + Wearable.NodeApi.getConnectedNodes(mGoogleApiClient).await(); + + for (Node node : nodes.getNodes()) { + results.add(node.getId()); + } + + return results; + } + + /** + * As simple wrapper around Log.d + */ + private static void LOGD(final String tag, String message) { + if (Log.isLoggable(tag, Log.DEBUG)) { + Log.d(tag, message); + } + } + + /** + * A View Adapter for presenting the Event objects in a list + */ + private static class DataItemAdapter extends ArrayAdapter { + + private final Context mContext; + + public DataItemAdapter(Context context, int unusedResource) { + super(context, unusedResource); + mContext = context; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( + 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); + } else { + holder = (ViewHolder) convertView.getTag(); + } + Event event = getItem(position); + holder.text1.setText(event.title); + holder.text2.setText(event.text); + return convertView; + } + + private class ViewHolder { + TextView text1; + TextView text2; + } + } + + private class Event { + + String title; + String text; + + public Event(String title, String text) { + this.title = title; + this.text = text; + } + } + + private class StartWearableActivityTask extends AsyncTask { + + @Override + protected Void doInBackground(Void... args) { + Collection nodes = getNodes(); + for (String node : nodes) { + sendStartActivityMessage(node); + } + return null; + } + } + + /** + * Generates a DataItem based on an incrementing count. + */ + private class DataItemGenerator implements Runnable { + + private int count = 0; + + @Override + public void run() { + PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(COUNT_PATH); + putDataMapRequest.getDataMap().putInt(COUNT_KEY, count++); + + PutDataRequest request = putDataMapRequest.asPutDataRequest(); + request.setUrgent(); + + LOGD(TAG, "Generating DataItem: " + request); + if (!mGoogleApiClient.isConnected()) { + return; + } + Wearable.DataApi.putDataItem(mGoogleApiClient, request) + .setResultCallback(new ResultCallback() { + @Override + public void onResult(DataItemResult dataItemResult) { + if (!dataItemResult.getStatus().isSuccess()) { + Log.e(TAG, "ERROR: failed to putDataItem, status code: " + + dataItemResult.getStatus().getStatusCode()); + } + } + }); + } + } +} \ No newline at end of file diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-hdpi/ic_content_picture.png b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-hdpi/ic_content_picture.png new file mode 100644 index 0000000000000000000000000000000000000000..597997ca38cd9982082cb7e8b8cc3ff4e4032493 GIT binary patch literal 1474 zcmd6n{Xf$Q0LMrBE)Sv8Dj{**tUJxpCe2dKW1_Y4l*2lfJjBfPu(5`|N@i@jq%vHo z#i-?BY~_Vkp|gaXnM_uBs7%zcygco?`y1|u`{DEcyk76u>+|b}O(Oc37+D%YAP^JZ zeV&KEHT|C$z`hZO8_t110Jg6uA&^0yED6gF3bJm~$^Cvbx0{KAo*M~6dqD~LW`}az zvf2troqpc?_mjWq+h@CuqOu*~*=Y0GD8l^eQ?mE1jwCbzc4>g)9h`6fa8aA@^xQh; zep6RFPFJs$L^?geP3R_*SS@u5O;Z<+3C20>I7iYv!){xn0*^vL2PuFgO?P8Y0unXU z$foGHNWHFjugs(O`C1jYW(y;>=m8i;(+A8BU_xld#2f0HabreQnIU`^wliFI@1SjS zlthVWEN?DP_2)lIz;7T|*X0((Vq8AeA{Y}oizk8Q&SfYQ^s8iV7%1O&NoXg1jxC8Z z6k%-r@u1wl_j+(JEwd>xL}MKDo#`;Kni(0@2j3hj%hSTS%cdrK4jeUoOJ%O&at%ai zN4N{<$L=Z5R?m;PCnKZ<7OWft(LqOe$p2Jdj>;WO%<8NKBCD46`!ce>2k~}`(spWn zEdFzM=3FT2=E6I>+7HZrkYhl3I&@E~G=dD}4O4aKzQ5)kymnOLBk|OZ{5Oge={vfh zF?YZ+5x#hw7{vgpzYc~Enk$s8s<|_kRO`A%C*&|x{2>Wvp)rA^?RI%oa-NfU$0~vA zwz49uXAJq`*;gmd@1|Ch_n$6%Oet_uY5Iu!?X=Z5Y~qU3#9h@iUY5z3%H+w_My@N? z*PUKhsJJpW_;3YoSmC4Cqdpb~&1m`LL9rE-WN-#tH(_QW<`Ha#F3&r230(ijKIJha z%w0H2%(=+Xd(BJGmIcuRDAaKXW9^Fz!<3xu^*I-;jy9z1Yz^g9@3_?&owb87p|3bM z+aMzw>s2f$+js!zmU{-iGBIX8f4)T=E~RK8#FM+D&j;R0-q4j)o7W&QQA>M2Jte%t zbXyRrxTE1i84XMw1>?PH!3qB#FN^O>p&}#VQlVQ{D1T^t-(I?4u`ktq#i#rqk#) zEHh=EHvULVi%b1a(gSO%rqcD15eL`xf3dpbh zhvZ4`kD&UJF4Sw=PkDiSOQ9r9)_hTrsO7O}O_Cpgek<|uw8{Vhue(7VKS00i2S`G% zk(oL}3R-WvnGFN_9YkZz&48*ADoLT?0u8991wW_4RfV!qlD!m1ivMtk76!ZOaa}#O zS19n2C2j~ejRyHE1cf$$B$|dRF#LC*fvfP-xQouH%#Ioj)^QK_^xH2K?kQy{hxIOF zV<0yb;m}~f!raei%&eeRGx7{>)N)E^7dL|FX|P`t;?be)r#E0!+;eF>eF9# zPqT^;+n8G)?A^#j+Dd_z?a&ZffO&Uq@oz6}7h=auw@>O#$q}lLrH8J@QysAC;#$>E z0-lYoEQw~6qvWeFFV*(8Qq`^qp`pmZIvfMaJA1DbsUJR;IdA^&bObQg+9RmgGNSwT O%@AKNqNm9H7w~UJ2-6h+ literal 0 HcmV?d00001 diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-hdpi/ic_launcher.png b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..589f229d14a11db31931caf22c66ef8e5cbcb25d GIT binary patch literal 4584 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 SZ-*BE0000DSr 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 LNkvXXu0mjfj66uW literal 0 HcmV?d00001 diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-xhdpi/ic_content_picture.png b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/drawable-xhdpi/ic_content_picture.png new file mode 100644 index 0000000000000000000000000000000000000000..289adf11a7455990495eac92b55bb5cdf223051d GIT binary patch literal 2139 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π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 z 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 u6 + + + + + + diff --git a/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/layout/main_activity.xml b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/layout/main_activity.xml new file mode 100644 index 0000000..0412023 --- /dev/null +++ b/Week_09_Services_and_wearables/android-DataLayer-master/Application/src/main/res/layout/main_activity.xml @@ -0,0 +1,86 @@ + + + + + + + +