From 697d71f7cccee7617e1aad0fa541605aad0822d7 Mon Sep 17 00:00:00 2001 From: Trevor Johns Date: Wed, 28 Sep 2016 22:11:38 -0700 Subject: [PATCH] Syncing latest sample prebuilts for mnc-dev. developers/build: 3c56004c2e943b3a87d99958c18950de0f89f3a7 developers/samples/android: d72f3df26721c64aa403e3b6d400cf8b99260dd1 Change-Id: Ice543fd11f2956aacfa3301bf9bdb4b1f49e9c4d --- .../fragment_app_restriction_enforcer.xml | 28 - .../res/values/strings.xml | 3 - .../AppRestrictionEnforcerFragment.java | 78 -- .../ItemAddFragment.java | 7 +- .../MainActivity.java | 2 +- .../SetupProfileFragment.java | 13 +- .../fragment_app_restriction_schema.xml | 9 - .../res/values/restriction_values.xml | 38 +- .../res/values/strings.xml | 1 - .../res/xml/app_restrictions.xml | 20 - .../AppRestrictionSchemaFragment.java | 39 +- .../BasicRenderScript/res/values/attrs.xml | 14 - .../BasicSyncAdapter/res/values/attrs.xml | 21 - .../DragSource/AndroidManifest.xml | 49 ++ .../DragSource/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../DragSource/res/drawable/image1.png | Bin 0 -> 5111 bytes .../DragSource/res/drawable/image2.png | Bin 0 -> 11034 bytes .../res/layout-w720dp/activity_main.xml | 72 ++ .../DragSource/res/layout/activity_main.xml | 64 ++ .../res/layout/fragment_dragsource.xml | 96 ++ .../DragSource/res/menu/main.xml | 22 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2772 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1894 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3711 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6021 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8352 bytes .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../res/values-v11/template-styles.xml | 22 + .../DragSource/res/values-v21/base-colors.xml | 20 + .../res/values-v21/base-template-styles.xml | 22 + .../DragSource/res/values/colors.xml | 21 + .../DragSource/res/values/dimen.xml | 31 + .../res/values/fragmentview_strings.xml | 19 + .../DragSource/res/values/strings.xml | 22 + .../DragSource/res/values/template-dimens.xml | 32 + .../DragSource/res/values/template-styles.xml | 42 + .../DragSource/res/xml/file_paths.xml | 21 + .../common/activities/SampleActivityBase.java | 52 ++ .../common/logger/Log.java | 244 ++++++ .../common/logger/LogFragment.java | 98 +++ .../common/logger/LogNode.java | 41 + .../common/logger/LogView.java | 149 ++++ .../common/logger/LogWrapper.java | 77 ++ .../common/logger/MessageOnlyLogFilter.java | 61 ++ .../dragsource/DragSourceFragment.java | 237 +++++ .../dragsource/ImageDragListener.java | 104 +++ .../dragsource/MainActivity.java | 110 +++ .../DropTarget/AndroidManifest.xml | 31 + .../DropTarget/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../res/layout-w720dp/activity_main.xml | 72 ++ .../DropTarget/res/layout/activity_main.xml | 64 ++ .../res/layout/fragment_droptarget.xml | 63 ++ .../DropTarget/res/menu/main.xml | 22 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3322 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2164 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4147 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6583 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9136 bytes .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../res/values-v11/template-styles.xml | 22 + .../DropTarget/res/values-v21/base-colors.xml | 20 + .../res/values-v21/base-template-styles.xml | 22 + .../DropTarget/res/values/colors.xml | 21 + .../DropTarget/res/values/dimen.xml | 27 + .../res/values/fragmentview_strings.xml | 19 + .../DropTarget/res/values/strings.xml | 28 + .../DropTarget/res/values/template-dimens.xml | 32 + .../DropTarget/res/values/template-styles.xml | 42 + .../common/activities/SampleActivityBase.java | 52 ++ .../common/logger/Log.java | 236 +++++ .../common/logger/LogFragment.java | 94 ++ .../common/logger/LogNode.java | 39 + .../common/logger/LogView.java | 145 +++ .../common/logger/LogWrapper.java | 75 ++ .../common/logger/MessageOnlyLogFilter.java | 60 ++ .../droptarget/DropTargetFragment.java | 178 ++++ .../droptarget/ImageDragListener.java | 96 ++ .../droptarget/MainActivity.java | 110 +++ .../DragAndDropAcrossApps/_index.jd | 18 + .../res/values/attrs.xml | 14 - samples/browseable/StorageProvider/_index.jd | 4 +- .../res/values/base-strings.xml | 4 +- .../WatchFace/Wearable/AndroidManifest.xml | 198 +++-- .../ComplicationSimpleConfigActivity.java | 24 +- .../ComplicationSimpleWatchFaceService.java | 111 ++- .../provider/RandomNumberProviderService.java | 25 +- .../UpdateComplicationDataService.java | 63 ++ .../WearDrawers/AndroidManifest.xml | 1 - .../Application/AndroidManifest.xml | 83 ++ .../Application/res/drawable-hdpi/earth.png | Bin 0 -> 155081 bytes .../res/drawable-hdpi/ic_alarm_white_48dp.png | Bin 0 -> 1201 bytes .../drawable-hdpi/ic_cancel_white_48dp.png | Bin 0 -> 751 bytes .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 781 bytes .../drawable-hdpi/ic_message_black_18dp.png | Bin 0 -> 194 bytes .../drawable-hdpi/ic_person_black_48dp.png | Bin 0 -> 428 bytes .../res/drawable-hdpi/ic_reply_white_18dp.png | Bin 0 -> 219 bytes .../Application/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../res/drawable-mdpi/ic_alarm_white_48dp.png | Bin 0 -> 821 bytes .../drawable-mdpi/ic_cancel_white_48dp.png | Bin 0 -> 536 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 558 bytes .../drawable-mdpi/ic_message_black_18dp.png | Bin 0 -> 144 bytes .../drawable-mdpi/ic_person_black_48dp.png | Bin 0 -> 307 bytes .../res/drawable-mdpi/ic_reply_white_18dp.png | Bin 0 -> 165 bytes .../drawable-xhdpi/ic_alarm_white_48dp.png | Bin 0 -> 1668 bytes .../drawable-xhdpi/ic_cancel_white_48dp.png | Bin 0 -> 1003 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 1062 bytes .../drawable-xhdpi/ic_message_black_18dp.png | Bin 0 -> 156 bytes .../drawable-xhdpi/ic_person_black_48dp.png | Bin 0 -> 565 bytes .../drawable-xhdpi/ic_reply_white_18dp.png | Bin 0 -> 253 bytes .../drawable-xxhdpi/ic_alarm_white_48dp.png | Bin 0 -> 2492 bytes .../drawable-xxhdpi/ic_cancel_white_48dp.png | Bin 0 -> 1481 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 1616 bytes .../drawable-xxhdpi/ic_message_black_18dp.png | Bin 0 -> 241 bytes .../drawable-xxhdpi/ic_person_black_48dp.png | Bin 0 -> 846 bytes .../drawable-xxhdpi/ic_reply_white_18dp.png | Bin 0 -> 351 bytes .../drawable-xxxhdpi/ic_alarm_white_48dp.png | Bin 0 -> 3399 bytes .../drawable-xxxhdpi/ic_cancel_white_48dp.png | Bin 0 -> 2015 bytes .../res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 2153 bytes .../ic_message_black_18dp.png | Bin 0 -> 248 bytes .../drawable-xxxhdpi/ic_person_black_48dp.png | Bin 0 -> 1121 bytes .../drawable-xxxhdpi/ic_reply_white_18dp.png | Bin 0 -> 436 bytes .../res/layout/activity_big_picture_main.xml | 37 + .../res/layout/activity_big_text_main.xml | 38 + .../res/layout/activity_inbox_main.xml | 38 + .../Application/res/layout/activity_main.xml | 62 ++ .../res/layout/activity_messaging_main.xml | 38 + .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../res/values-v11/template-styles.xml | 22 + .../res/values-v21/base-colors.xml | 21 + .../res/values-v21/base-template-styles.xml | 24 + .../Application/res/values-w820dp/dimens.xml | 22 + .../Application/res/values/base-strings.xml | 33 + .../Application/res/values/colors.xml | 21 + .../Application/res/values/dimens.xml | 21 + .../Application/res/values/strings.xml | 43 + .../Application/res/values/styles.xml | 21 + .../res/values/template-dimens.xml | 32 + .../res/values/template-styles.xml | 42 + .../GlobalNotificationBuilder.java | 60 ++ .../MainActivity.java | 828 ++++++++++++++++++ .../BigPictureSocialIntentService.java | 228 +++++ .../BigPictureSocialMainActivity.java | 45 + .../handlers/BigTextIntentService.java | 206 +++++ .../handlers/BigTextMainActivity.java | 45 + .../handlers/InboxMainActivity.java | 45 + .../handlers/MessagingIntentService.java | 262 ++++++ .../handlers/MessagingMainActivity.java | 47 + .../mock/MockDatabase.java | 400 +++++++++ .../Wearable/AndroidManifest.xml | 96 ++ .../Wearable/res/drawable-hdpi/earth.png | Bin 0 -> 155081 bytes .../res/drawable-hdpi/ic_alarm_white_48dp.png | Bin 0 -> 1201 bytes .../drawable-hdpi/ic_cancel_white_48dp.png | Bin 0 -> 751 bytes .../res/drawable-hdpi/ic_launcher.png | Bin 0 -> 781 bytes .../drawable-hdpi/ic_message_black_18dp.png | Bin 0 -> 194 bytes .../drawable-hdpi/ic_person_black_48dp.png | Bin 0 -> 428 bytes .../res/drawable-hdpi/ic_reply_white_18dp.png | Bin 0 -> 219 bytes .../res/drawable-mdpi/ic_alarm_white_48dp.png | Bin 0 -> 821 bytes .../drawable-mdpi/ic_cancel_white_48dp.png | Bin 0 -> 536 bytes .../res/drawable-mdpi/ic_launcher.png | Bin 0 -> 558 bytes .../drawable-mdpi/ic_message_black_18dp.png | Bin 0 -> 144 bytes .../drawable-mdpi/ic_person_black_48dp.png | Bin 0 -> 307 bytes .../res/drawable-mdpi/ic_reply_white_18dp.png | Bin 0 -> 165 bytes .../drawable-xhdpi/ic_alarm_white_48dp.png | Bin 0 -> 1668 bytes .../drawable-xhdpi/ic_cancel_white_48dp.png | Bin 0 -> 1003 bytes .../res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 1062 bytes .../drawable-xhdpi/ic_message_black_18dp.png | Bin 0 -> 156 bytes .../drawable-xhdpi/ic_person_black_48dp.png | Bin 0 -> 565 bytes .../drawable-xhdpi/ic_reply_white_18dp.png | Bin 0 -> 253 bytes .../drawable-xxhdpi/ic_alarm_white_48dp.png | Bin 0 -> 2492 bytes .../drawable-xxhdpi/ic_cancel_white_48dp.png | Bin 0 -> 1481 bytes .../res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 1616 bytes .../drawable-xxhdpi/ic_message_black_18dp.png | Bin 0 -> 241 bytes .../drawable-xxhdpi/ic_person_black_48dp.png | Bin 0 -> 846 bytes .../drawable-xxhdpi/ic_reply_white_18dp.png | Bin 0 -> 351 bytes .../drawable-xxxhdpi/ic_alarm_white_48dp.png | Bin 0 -> 3399 bytes .../drawable-xxxhdpi/ic_cancel_white_48dp.png | Bin 0 -> 2015 bytes .../res/drawable-xxxhdpi/ic_launcher.png | Bin 0 -> 2153 bytes .../ic_message_black_18dp.png | Bin 0 -> 248 bytes .../drawable-xxxhdpi/ic_person_black_48dp.png | Bin 0 -> 1121 bytes .../drawable-xxxhdpi/ic_reply_white_18dp.png | Bin 0 -> 436 bytes .../res/layout/activity_big_picture_main.xml | 37 + .../res/layout/activity_big_text_main.xml | 38 + .../res/layout/activity_inbox_main.xml | 38 + .../Wearable/res/layout/activity_main.xml | 53 ++ .../res/layout/activity_messaging_main.xml | 38 + .../Wearable/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3418 bytes .../Wearable/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2206 bytes .../Wearable/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4842 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7718 bytes .../Wearable/res/values-round/dimens.xml | 22 + .../Wearable/res/values/colors.xml | 21 + .../Wearable/res/values/dimens.xml | 22 + .../Wearable/res/values/strings.xml | 44 + .../GlobalNotificationBuilder.java | 60 ++ .../StandaloneMainActivity.java | 738 ++++++++++++++++ .../BigPictureSocialIntentService.java | 228 +++++ .../BigPictureSocialMainActivity.java | 45 + .../handlers/BigTextIntentService.java | 227 +++++ .../handlers/BigTextMainActivity.java | 45 + .../handlers/InboxMainActivity.java | 45 + .../handlers/MessagingIntentService.java | 259 ++++++ .../handlers/MessagingMainActivity.java | 47 + .../mock/MockDatabase.java | 400 +++++++++ .../browseable/WearNotifications/_index.jd | 14 + 207 files changed, 9067 insertions(+), 394 deletions(-) delete mode 100644 samples/browseable/BasicRenderScript/res/values/attrs.xml delete mode 100644 samples/browseable/BasicSyncAdapter/res/values/attrs.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/AndroidManifest.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/drawable-hdpi/tile.9.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/drawable/image1.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/drawable/image2.png create mode 100755 samples/browseable/DragAndDropAcrossApps/DragSource/res/layout-w720dp/activity_main.xml create mode 100755 samples/browseable/DragAndDropAcrossApps/DragSource/res/layout/activity_main.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/layout/fragment_dragsource.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/menu/main.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-hdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-mdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-xhdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values-sw600dp/template-dimens.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values-sw600dp/template-styles.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values-v11/template-styles.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values-v21/base-colors.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values-v21/base-template-styles.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values/colors.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values/dimen.xml create mode 100755 samples/browseable/DragAndDropAcrossApps/DragSource/res/values/fragmentview_strings.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values/strings.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values/template-dimens.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/values/template-styles.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/res/xml/file_paths.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/activities/SampleActivityBase.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/Log.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogFragment.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogNode.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogView.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogWrapper.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/MessageOnlyLogFilter.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/DragSourceFragment.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/ImageDragListener.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/MainActivity.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/AndroidManifest.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/drawable-hdpi/tile.9.png create mode 100755 samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout-w720dp/activity_main.xml create mode 100755 samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout/activity_main.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout/fragment_droptarget.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/menu/main.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-hdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-mdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-xhdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-sw600dp/template-dimens.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-sw600dp/template-styles.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-v11/template-styles.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-v21/base-colors.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-v21/base-template-styles.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/colors.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/dimen.xml create mode 100755 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/fragmentview_strings.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/strings.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/template-dimens.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/template-styles.xml create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/activities/SampleActivityBase.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/Log.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogFragment.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogNode.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogView.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogWrapper.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/MessageOnlyLogFilter.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/DropTargetFragment.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/ImageDragListener.java create mode 100644 samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/MainActivity.java create mode 100644 samples/browseable/DragAndDropAcrossApps/_index.jd delete mode 100644 samples/browseable/RenderScriptIntrinsic/res/values/attrs.xml create mode 100644 samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/provider/UpdateComplicationDataService.java create mode 100644 samples/browseable/WearNotifications/Application/AndroidManifest.xml create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-hdpi/earth.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-hdpi/tile.9.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Application/res/layout/activity_big_picture_main.xml create mode 100644 samples/browseable/WearNotifications/Application/res/layout/activity_big_text_main.xml create mode 100644 samples/browseable/WearNotifications/Application/res/layout/activity_inbox_main.xml create mode 100644 samples/browseable/WearNotifications/Application/res/layout/activity_main.xml create mode 100644 samples/browseable/WearNotifications/Application/res/layout/activity_messaging_main.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values-sw600dp/template-dimens.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values-sw600dp/template-styles.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values-v11/template-styles.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values-v21/base-colors.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values-v21/base-template-styles.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values-w820dp/dimens.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values/base-strings.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values/colors.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values/dimens.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values/strings.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values/styles.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values/template-dimens.xml create mode 100644 samples/browseable/WearNotifications/Application/res/values/template-styles.xml create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/GlobalNotificationBuilder.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/MainActivity.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/handlers/BigPictureSocialIntentService.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/handlers/BigPictureSocialMainActivity.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/handlers/BigTextIntentService.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/handlers/BigTextMainActivity.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/handlers/InboxMainActivity.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/handlers/MessagingIntentService.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/handlers/MessagingMainActivity.java create mode 100644 samples/browseable/WearNotifications/Application/src/com.example.android.wearable.wear.wearnotifications/mock/MockDatabase.java create mode 100644 samples/browseable/WearNotifications/Wearable/AndroidManifest.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-hdpi/earth.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-hdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-hdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-hdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-hdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-hdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-hdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-mdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-mdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-mdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-mdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-mdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-mdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xhdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xhdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xhdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xhdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xhdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xhdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxhdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxhdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxhdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxhdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxhdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxhdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxxhdpi/ic_alarm_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxxhdpi/ic_cancel_white_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxxhdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxxhdpi/ic_message_black_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxxhdpi/ic_person_black_48dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/drawable-xxxhdpi/ic_reply_white_18dp.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/layout/activity_big_picture_main.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/layout/activity_big_text_main.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/layout/activity_inbox_main.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/layout/activity_main.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/layout/activity_messaging_main.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/mipmap-hdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/mipmap-mdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/mipmap-xhdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 samples/browseable/WearNotifications/Wearable/res/values-round/dimens.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/values/colors.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/values/dimens.xml create mode 100644 samples/browseable/WearNotifications/Wearable/res/values/strings.xml create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/GlobalNotificationBuilder.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/StandaloneMainActivity.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/handlers/BigPictureSocialIntentService.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/handlers/BigPictureSocialMainActivity.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/handlers/BigTextIntentService.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/handlers/BigTextMainActivity.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/handlers/InboxMainActivity.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/handlers/MessagingIntentService.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/handlers/MessagingMainActivity.java create mode 100644 samples/browseable/WearNotifications/Wearable/src/com.example.android.wearable.wear.wearnotifications/mock/MockDatabase.java create mode 100644 samples/browseable/WearNotifications/_index.jd diff --git a/samples/browseable/AppRestrictionEnforcer/res/layout/fragment_app_restriction_enforcer.xml b/samples/browseable/AppRestrictionEnforcer/res/layout/fragment_app_restriction_enforcer.xml index b68398974..95d605ce5 100644 --- a/samples/browseable/AppRestrictionEnforcer/res/layout/fragment_app_restriction_enforcer.xml +++ b/samples/browseable/AppRestrictionEnforcer/res/layout/fragment_app_restriction_enforcer.xml @@ -119,34 +119,6 @@ - - - - - - - - - - Number: Rank: Approvals: - Profile: - Name - Age Items: Add Key diff --git a/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/AppRestrictionEnforcerFragment.java b/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/AppRestrictionEnforcerFragment.java index 361c4ac33..908f9046b 100644 --- a/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/AppRestrictionEnforcerFragment.java +++ b/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/AppRestrictionEnforcerFragment.java @@ -89,13 +89,6 @@ public class AppRestrictionEnforcerFragment extends Fragment implements */ private static final String RESTRICTION_KEY_APPROVALS = "approvals"; - /** - * Key for the bundle restriction in AppRestrictionSchema. - */ - private static final String RESTRICTION_KEY_PROFILE = "profile"; - private static final String RESTRICTION_KEY_PROFILE_NAME = "name"; - private static final String RESTRICTION_KEY_PROFILE_AGE = "age"; - /** * Key for the bundle array restriction in AppRestrictionSchema. */ @@ -119,8 +112,6 @@ public class AppRestrictionEnforcerFragment extends Fragment implements private EditText mEditNumber; private Spinner mSpinnerRank; private LinearLayout mLayoutApprovals; - private EditText mEditProfileName; - private EditText mEditProfileAge; private LinearLayout mLayoutItems; @Override @@ -137,17 +128,12 @@ public class AppRestrictionEnforcerFragment extends Fragment implements mEditNumber = (EditText) view.findViewById(R.id.number); mSpinnerRank = (Spinner) view.findViewById(R.id.rank); mLayoutApprovals = (LinearLayout) view.findViewById(R.id.approvals); - mEditProfileName = (EditText) view.findViewById(R.id.profile_name); - mEditProfileAge = (EditText) view.findViewById(R.id.profile_age); mLayoutItems = (LinearLayout) view.findViewById(R.id.items); view.findViewById(R.id.item_add).setOnClickListener(this); - View bundleLayout = view.findViewById(R.id.bundle_layout); View bundleArrayLayout = view.findViewById(R.id.bundle_array_layout); if (BUNDLE_SUPPORTED) { - bundleLayout.setVisibility(View.VISIBLE); bundleArrayLayout.setVisibility(View.VISIBLE); } else { - bundleLayout.setVisibility(View.GONE); bundleArrayLayout.setVisibility(View.GONE); } } @@ -197,21 +183,6 @@ public class AppRestrictionEnforcerFragment extends Fragment implements } }; - private TextWatcher mWatcherProfile = new EasyTextWatcher() { - @Override - public void afterTextChanged(Editable s) { - try { - String name = mEditProfileName.getText().toString(); - String ageString = mEditProfileAge.getText().toString(); - if (!TextUtils.isEmpty(ageString)) { - saveProfile(getActivity(), name, Integer.parseInt(ageString)); - } - } catch (NumberFormatException e) { - Toast.makeText(getActivity(), "Not an integer!", Toast.LENGTH_SHORT).show(); - } - } - }; - @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { switch (parent.getId()) { @@ -292,20 +263,6 @@ public class AppRestrictionEnforcerFragment extends Fragment implements TextUtils.join(DELIMETER, restriction.getAllSelectedStrings())), DELIMETER)); - } else if (BUNDLE_SUPPORTED && RESTRICTION_KEY_PROFILE.equals(key)) { - String name = null; - int age = 0; - for (RestrictionEntry entry : restriction.getRestrictions()) { - String profileKey = entry.getKey(); - if (RESTRICTION_KEY_PROFILE_NAME.equals(profileKey)) { - name = entry.getSelectedString(); - } else if (RESTRICTION_KEY_PROFILE_AGE.equals(profileKey)) { - age = entry.getIntValue(); - } - } - name = prefs.getString(RESTRICTION_KEY_PROFILE_NAME, name); - age = prefs.getInt(RESTRICTION_KEY_PROFILE_AGE, age); - updateProfile(name, age); } else if (BUNDLE_SUPPORTED && RESTRICTION_KEY_ITEMS.equals(key)) { String itemsString = prefs.getString(RESTRICTION_KEY_ITEMS, ""); HashMap items = new HashMap<>(); @@ -362,22 +319,6 @@ public class AppRestrictionEnforcerFragment extends Fragment implements } } - private void updateProfile(String name, int age) { - if (!BUNDLE_SUPPORTED) { - return; - } - Bundle profile = new Bundle(); - profile.putString(RESTRICTION_KEY_PROFILE_NAME, name); - profile.putInt(RESTRICTION_KEY_PROFILE_AGE, age); - mCurrentRestrictions.putBundle(RESTRICTION_KEY_PROFILE, profile); - mEditProfileName.removeTextChangedListener(mWatcherProfile); - mEditProfileName.setText(name); - mEditProfileName.addTextChangedListener(mWatcherProfile); - mEditProfileAge.removeTextChangedListener(mWatcherProfile); - mEditProfileAge.setText(String.valueOf(age)); - mEditProfileAge.addTextChangedListener((mWatcherProfile)); - } - private void updateItems(Context context, Map items) { if (!BUNDLE_SUPPORTED) { return; @@ -510,25 +451,6 @@ public class AppRestrictionEnforcerFragment extends Fragment implements TextUtils.join(DELIMETER, approvals)).apply(); } - /** - * Saves the value for the "profile" restriction of AppRestrictionSchema. - * - * @param activity The activity - * @param name The value to be set for the "name" field. - * @param age The value to be set for the "age" field. - */ - private void saveProfile(Activity activity, String name, int age) { - if (!BUNDLE_SUPPORTED) { - return; - } - Bundle profile = new Bundle(); - profile.putString(RESTRICTION_KEY_PROFILE_NAME, name); - profile.putInt(RESTRICTION_KEY_PROFILE_AGE, age); - mCurrentRestrictions.putBundle(RESTRICTION_KEY_PROFILE, profile); - saveRestrictions(activity); - editPreferences(activity).putString(RESTRICTION_KEY_PROFILE_NAME, name).apply(); - } - /** * Saves the value for the "items" restriction of AppRestrictionSchema. * diff --git a/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/ItemAddFragment.java b/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/ItemAddFragment.java index cda2726bd..091a0a889 100644 --- a/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/ItemAddFragment.java +++ b/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/ItemAddFragment.java @@ -17,6 +17,7 @@ package com.example.android.apprestrictionenforcer; import android.app.Activity; +import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; @@ -42,10 +43,10 @@ public class ItemAddFragment extends DialogFragment implements View.OnClickListe private EditText mEditValue; @Override - public void onAttach(Activity activity) { - super.onAttach(activity); + public void onAttach(Context context) { + super.onAttach(context); Fragment parentFragment = getParentFragment(); - mListener = (OnItemAddedListener) (parentFragment == null ? activity : parentFragment); + mListener = (OnItemAddedListener) (parentFragment == null ? context : parentFragment); } @Override diff --git a/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/MainActivity.java b/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/MainActivity.java index c6b012be8..85eace96b 100644 --- a/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/MainActivity.java +++ b/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/MainActivity.java @@ -62,7 +62,7 @@ public class MainActivity extends FragmentActivity implements StatusFragment.Sta private void showSetupProfile() { getSupportFragmentManager().beginTransaction() - .replace(R.id.container, new SetupProfileFragment()) + .replace(R.id.container, SetupProfileFragment.newInstance()) .commit(); } diff --git a/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/SetupProfileFragment.java b/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/SetupProfileFragment.java index 4dbd93055..29c36d410 100644 --- a/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/SetupProfileFragment.java +++ b/samples/browseable/AppRestrictionEnforcer/src/com.example.android.apprestrictionenforcer/SetupProfileFragment.java @@ -18,6 +18,7 @@ package com.example.android.apprestrictionenforcer; import android.app.Activity; import android.content.Intent; +import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; @@ -28,6 +29,7 @@ import android.widget.Toast; import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE; import static android.app.admin.DevicePolicyManager.EXTRA_DEVICE_ADMIN; import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME; +import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME; /** * This {@link Fragment} handles initiation of managed profile provisioning. @@ -74,9 +76,14 @@ public class SetupProfileFragment extends Fragment implements View.OnClickListen return; } Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE); - intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, - activity.getApplicationContext().getPackageName()); - intent.putExtra(EXTRA_DEVICE_ADMIN, EnforcerDeviceAdminReceiver.getComponentName(activity)); + if (Build.VERSION.SDK_INT >= 24) { + intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, + EnforcerDeviceAdminReceiver.getComponentName(activity)); + } else { + intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, + activity.getApplicationContext().getPackageName()); + intent.putExtra(EXTRA_DEVICE_ADMIN, EnforcerDeviceAdminReceiver.getComponentName(activity)); + } if (intent.resolveActivity(activity.getPackageManager()) != null) { startActivityForResult(intent, REQUEST_PROVISION_MANAGED_PROFILE); activity.finish(); diff --git a/samples/browseable/AppRestrictionSchema/res/layout/fragment_app_restriction_schema.xml b/samples/browseable/AppRestrictionSchema/res/layout/fragment_app_restriction_schema.xml index 02d83e615..01bda925d 100644 --- a/samples/browseable/AppRestrictionSchema/res/layout/fragment_app_restriction_schema.xml +++ b/samples/browseable/AppRestrictionSchema/res/layout/fragment_app_restriction_schema.xml @@ -68,15 +68,6 @@ limitations under the License. android:textAppearance="?android:attr/textAppearanceMedium" tools:text="@string/approvals_you_have"/> - - - - Rank Rank of the user + Apprentice + Intermediate + Master - Apprentice - Intermediate - Master + @string/entry_rank_apprentice + @string/entry_rank_intermediate + @string/entry_rank_master - apprentice - intermediate - master - @string/entry_value_rank_apprentice - @string/entry_value_rank_intermediate - @string/entry_value_rank_master + apprentice + intermediate + master - @string/entry_value_rank_apprentice + apprentice Approvals Approvals + Read + Write + Execute - Read - Write - Execute + @string/entry_approvals_read + @string/entry_approvals_write + @string/entry_approvals_execute - read - write - execute - @string/entry_value_approvals_read - @string/entry_value_approvals_write - @string/entry_value_approvals_execute + read + write + execute diff --git a/samples/browseable/AppRestrictionSchema/res/values/strings.xml b/samples/browseable/AppRestrictionSchema/res/values/strings.xml index 1ec68d54c..2fe686970 100644 --- a/samples/browseable/AppRestrictionSchema/res/values/strings.xml +++ b/samples/browseable/AppRestrictionSchema/res/values/strings.xml @@ -25,7 +25,6 @@ limitations under the License. Your rank: %s Approvals you have: %s none - Your profile: %1$s (%2$d) Your items: %s diff --git a/samples/browseable/AppRestrictionSchema/res/xml/app_restrictions.xml b/samples/browseable/AppRestrictionSchema/res/xml/app_restrictions.xml index 1e2ea457a..32ec8deaf 100644 --- a/samples/browseable/AppRestrictionSchema/res/xml/app_restrictions.xml +++ b/samples/browseable/AppRestrictionSchema/res/xml/app_restrictions.xml @@ -72,26 +72,6 @@ limitations under the License. android:restrictionType="hidden" android:title="@string/title_secret_code"/> - - - - - - - - - - - - - - diff --git a/samples/browseable/BasicSyncAdapter/res/values/attrs.xml b/samples/browseable/BasicSyncAdapter/res/values/attrs.xml deleted file mode 100644 index 6c1550469..000000000 --- a/samples/browseable/BasicSyncAdapter/res/values/attrs.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/AndroidManifest.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/AndroidManifest.xml new file mode 100644 index 000000000..453cd6c5f --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/AndroidManifest.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/drawable-hdpi/tile.9.png b/samples/browseable/DragAndDropAcrossApps/DragSource/res/drawable-hdpi/tile.9.png new file mode 100644 index 0000000000000000000000000000000000000000..135862883e26eddce2b19db021adf62e10357ad0 GIT binary patch literal 196 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout-w720dp/activity_main.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout-w720dp/activity_main.xml new file mode 100755 index 000000000..efc54b70b --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout-w720dp/activity_main.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout/activity_main.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout/activity_main.xml new file mode 100755 index 000000000..17bc911a8 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout/activity_main.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout/fragment_dragsource.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout/fragment_dragsource.xml new file mode 100644 index 000000000..a46ba0abb --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/layout/fragment_dragsource.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/menu/main.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/menu/main.xml new file mode 100644 index 000000000..480cafef6 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/menu/main.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-hdpi/ic_launcher.png b/samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..125edc6c0b0ed0ea5f1ff5269637fdcd48c5296b GIT binary patch literal 2772 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-xxhdpi/ic_launcher.png b/samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a387e3c02130879a2caaddf4ba28940d25168b39 GIT binary patch literal 6021 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-xxxhdpi/ic_launcher.png b/samples/browseable/DragAndDropAcrossApps/DragSource/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f33d5bb0c5c4271ab93f36421cba71a5492d2a84 GIT binary patch literal 8352 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 U4vCEv@-Tp=x}I9yJ)5Zi0ohBY{Qv*} literal 0 HcmV?d00001 diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-sw600dp/template-dimens.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-sw600dp/template-dimens.xml new file mode 100644 index 000000000..22074a2bd --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-sw600dp/template-dimens.xml @@ -0,0 +1,24 @@ + + + + + + + @dimen/margin_huge + @dimen/margin_medium + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-sw600dp/template-styles.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-sw600dp/template-styles.xml new file mode 100644 index 000000000..03d197418 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-sw600dp/template-styles.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-v11/template-styles.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-v11/template-styles.xml new file mode 100644 index 000000000..8c1ea66f2 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values-v11/template-styles.xml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/colors.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/colors.xml new file mode 100644 index 000000000..801e292dd --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/colors.xml @@ -0,0 +1,21 @@ + + + + + + #ff888888 + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/dimen.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/dimen.xml new file mode 100644 index 000000000..220d1b82b --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/dimen.xml @@ -0,0 +1,31 @@ + + + + + + 16dp + 0dp + 16dp + 16dp + + 80dp + 16dp + + 0dp + 10dp + 6dp + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/fragmentview_strings.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/fragmentview_strings.xml new file mode 100755 index 000000000..7b9d9ec4f --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/fragmentview_strings.xml @@ -0,0 +1,19 @@ + + + Show Log + Hide Log + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/strings.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/strings.xml new file mode 100644 index 000000000..f2ab0925b --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/strings.xml @@ -0,0 +1,22 @@ + + + + + + These images can be dragged to any app.\nTry dragging it to the area below. + This sample demonstrates drag and drop functionality and is the \'source\' app for this sample. It shows how data can be moved between views within an app or between different apps.\nTry dragging one of the images to the highlighted target in this app.\nOpen the \'DropTarget\' sample app next to this app and try dragging an image between the two apps.\nImages are served through a content provider. The target app must request permission to access the dropped content. + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/template-dimens.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/template-dimens.xml new file mode 100644 index 000000000..39e710b5c --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/template-dimens.xml @@ -0,0 +1,32 @@ + + + + + + + 4dp + 8dp + 16dp + 32dp + 64dp + + + + @dimen/margin_medium + @dimen/margin_medium + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/template-styles.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/template-styles.xml new file mode 100644 index 000000000..6e7d593dd --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/values/template-styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/res/xml/file_paths.xml b/samples/browseable/DragAndDropAcrossApps/DragSource/res/xml/file_paths.xml new file mode 100644 index 000000000..53c088759 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/res/xml/file_paths.xml @@ -0,0 +1,21 @@ + + + + + + + \ No newline at end of file diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/activities/SampleActivityBase.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/activities/SampleActivityBase.java new file mode 100644 index 000000000..db8962ef2 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/activities/SampleActivityBase.java @@ -0,0 +1,52 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.example.android.common.activities; + +import com.example.android.common.logger.Log; +import com.example.android.common.logger.LogWrapper; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; + +/** + * Base launcher activity, to handle most of the common plumbing for samples. + */ +public class SampleActivityBase extends FragmentActivity { + + public static final String TAG = "SampleActivityBase"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void onStart() { + super.onStart(); + initializeLogging(); + } + + /** Set up targets to receive log data */ + public void initializeLogging() { + // Using Log, front-end to the logging chain, emulates android.util.log method signatures. + // Wraps Android's native log framework + LogWrapper logWrapper = new LogWrapper(); + Log.setLogNode(logWrapper); + + Log.i(TAG, "Ready"); + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/Log.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/Log.java new file mode 100644 index 000000000..56dc2a956 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/Log.java @@ -0,0 +1,244 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Helper class for a list (or tree) of LoggerNodes. + * + *

When this is set as the head of the list, + * an instance of it can function as a drop-in replacement for {@link android.util.Log}. + * Most of the methods in this class server only to map a method call in Log to its equivalent + * in LogNode.

+ */ +public class Log { + + // Grabbing the native values from Android's native logging facilities, + // to make for easy migration and interop. + public static final int NONE = -1; + + public static final int VERBOSE = android.util.Log.VERBOSE; + + public static final int DEBUG = android.util.Log.DEBUG; + + public static final int INFO = android.util.Log.INFO; + + public static final int WARN = android.util.Log.WARN; + + public static final int ERROR = android.util.Log.ERROR; + + public static final int ASSERT = android.util.Log.ASSERT; + + // Stores the beginning of the LogNode topology. + private static LogNode mLogNode; + + /** + * Returns the next LogNode in the linked list. + */ + public static LogNode getLogNode() { + return mLogNode; + } + + /** + * Sets the LogNode data will be sent to. + */ + public static void setLogNode(LogNode node) { + mLogNode = node; + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging + * facilities + * to extract and print useful information. + */ + public static void println(int priority, String tag, String msg, Throwable tr) { + if (mLogNode != null) { + mLogNode.println(priority, tag, msg, tr); + } + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + */ + public static void println(int priority, String tag, String msg) { + println(priority, tag, msg, null); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void v(String tag, String msg, Throwable tr) { + println(VERBOSE, tag, msg, tr); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void v(String tag, String msg) { + v(tag, msg, null); + } + + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void d(String tag, String msg, Throwable tr) { + println(DEBUG, tag, msg, tr); + } + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void d(String tag, String msg) { + d(tag, msg, null); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void i(String tag, String msg, Throwable tr) { + println(INFO, tag, msg, tr); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void i(String tag, String msg) { + i(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, String msg, Throwable tr) { + println(WARN, tag, msg, tr); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void w(String tag, String msg) { + w(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, Throwable tr) { + w(tag, null, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void e(String tag, String msg, Throwable tr) { + println(ERROR, tag, msg, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void e(String tag, String msg) { + e(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, String msg, Throwable tr) { + println(ASSERT, tag, msg, tr); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void wtf(String tag, String msg) { + wtf(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, Throwable tr) { + wtf(tag, null, tr); + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogFragment.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogFragment.java new file mode 100644 index 000000000..2b9250694 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogFragment.java @@ -0,0 +1,98 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.example.android.common.logger; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ScrollView; + +/** + * Simple fragment which contains a LogView and uses is to output log data it receives + * through the LogNode interface. + */ +public class LogFragment extends Fragment { + + private LogView mLogView; + + private ScrollView mScrollView; + + public LogFragment() { + } + + public View inflateViews() { + mScrollView = new ScrollView(getActivity()); + ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + mScrollView.setLayoutParams(scrollParams); + + mLogView = new LogView(getActivity()); + ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams); + logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; + mLogView.setLayoutParams(logParams); + mLogView.setClickable(true); + mLogView.setFocusable(true); + mLogView.setTypeface(Typeface.MONOSPACE); + + // Want to set padding as 16 dips, setPadding takes pixels. Hooray math! + int paddingDips = 16; + double scale = getResources().getDisplayMetrics().density; + int paddingPixels = (int) ((paddingDips * (scale)) + .5); + mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels); + mLogView.setCompoundDrawablePadding(paddingPixels); + + mLogView.setGravity(Gravity.BOTTOM); + mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium); + + mScrollView.addView(mLogView); + return mScrollView; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View result = inflateViews(); + + mLogView.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + mScrollView.fullScroll(ScrollView.FOCUS_DOWN); + } + }); + return result; + } + + public LogView getLogView() { + return mLogView; + } +} \ No newline at end of file diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogNode.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogNode.java new file mode 100644 index 000000000..0c922e0a1 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogNode.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Basic interface for a logging system that can output to one or more targets. + * Note that in addition to classes that will output these logs in some format, + * one can also implement this interface over a filter and insert that in the chain, + * such that no targets further down see certain data, or see manipulated forms of the data. + * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data + * it received to HTML and sent it along to the next node in the chain, without printing it + * anywhere. + */ +public interface LogNode { + + /** + * Instructs first LogNode in the list to print the log data provided. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging + * facilities + * to extract and print useful information. + */ + public void println(int priority, String tag, String msg, Throwable tr); + +} diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogView.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogView.java new file mode 100644 index 000000000..f752f339d --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogView.java @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.app.Activity; +import android.content.Context; +import android.util.AttributeSet; +import android.widget.TextView; + +/** + * Simple TextView which is used to output log data received through the LogNode interface. + */ +public class LogView extends TextView implements LogNode { + + public LogView(Context context) { + super(context); + } + + public LogView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public LogView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Formats the log data and prints it out to the LogView. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging + * facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + + String priorityStr = null; + + // For the purposes of this View, we want to print the priority as readable text. + switch (priority) { + case android.util.Log.VERBOSE: + priorityStr = "VERBOSE"; + break; + case android.util.Log.DEBUG: + priorityStr = "DEBUG"; + break; + case android.util.Log.INFO: + priorityStr = "INFO"; + break; + case android.util.Log.WARN: + priorityStr = "WARN"; + break; + case android.util.Log.ERROR: + priorityStr = "ERROR"; + break; + case android.util.Log.ASSERT: + priorityStr = "ASSERT"; + break; + default: + break; + } + + // Handily, the Log class has a facility for converting a stack trace into a usable string. + String exceptionStr = null; + if (tr != null) { + exceptionStr = android.util.Log.getStackTraceString(tr); + } + + // Take the priority, tag, message, and exception, and concatenate as necessary + // into one usable line of text. + final StringBuilder outputBuilder = new StringBuilder(); + + String delimiter = "\t"; + appendIfNotNull(outputBuilder, priorityStr, delimiter); + appendIfNotNull(outputBuilder, tag, delimiter); + appendIfNotNull(outputBuilder, msg, delimiter); + appendIfNotNull(outputBuilder, exceptionStr, delimiter); + + // In case this was originally called from an AsyncTask or some other off-UI thread, + // make sure the update occurs within the UI thread. + ((Activity) getContext()).runOnUiThread((new Thread(new Runnable() { + @Override + public void run() { + // Display the text we just generated within the LogView. + appendToLog(outputBuilder.toString()); + } + }))); + + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } + + public LogNode getNext() { + return mNext; + } + + public void setNext(LogNode node) { + mNext = node; + } + + /** + * Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since + * the logger takes so many arguments that might be null, this method helps cut out some of the + * agonizing tedium of writing the same 3 lines over and over. + * + * @param source StringBuilder containing the text to append to. + * @param addStr The String to append + * @param delimiter The String to separate the source and appended strings. A tab or comma, + * for instance. + * @return The fully concatenated String as a StringBuilder + */ + private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) { + if (addStr != null) { + if (addStr.length() == 0) { + delimiter = ""; + } + + return source.append(addStr).append(delimiter); + } + return source; + } + + // The next LogNode in the chain. + LogNode mNext; + + /** Outputs the string as a new line of log data in the LogView. */ + public void appendToLog(String s) { + append("\n" + s); + } + + +} diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogWrapper.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogWrapper.java new file mode 100644 index 000000000..cacf16217 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/LogWrapper.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.util.Log; + +/** + * Helper class which wraps Android's native Log utility in the Logger interface. This way + * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously. + */ +public class LogWrapper implements LogNode { + + // For piping: The next node to receive Log data after this one has done its work. + private LogNode mNext; + + /** + * Returns the next LogNode in the linked list. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + + /** + * Prints data out to the console using Android's native log mechanism. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging + * facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + // There actually are log methods that don't take a msg parameter. For now, + // if that's the case, just convert null to the empty string and move on. + String useMsg = msg; + if (useMsg == null) { + useMsg = ""; + } + + // If an exeption was provided, convert that exception to a usable string and attach + // it to the end of the msg method. + if (tr != null) { + msg += "\n" + Log.getStackTraceString(tr); + } + + // This is functionally identical to Log.x(tag, useMsg); + // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg) + Log.println(priority, tag, useMsg); + + // If this isn't the last node in the chain, move things along. + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/MessageOnlyLogFilter.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/MessageOnlyLogFilter.java new file mode 100644 index 000000000..bc3817425 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/common/logger/MessageOnlyLogFilter.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Simple {@link LogNode} filter, removes everything except the message. + * Useful for situations like on-screen log output where you don't want a lot of metadata + * displayed, + * just easy-to-read message updates as they're happening. + */ +public class MessageOnlyLogFilter implements LogNode { + + LogNode mNext; + + /** + * Takes the "next" LogNode as a parameter, to simplify chaining. + * + * @param next The next LogNode in the pipeline. + */ + public MessageOnlyLogFilter(LogNode next) { + mNext = next; + } + + public MessageOnlyLogFilter() { + } + + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + if (mNext != null) { + getNext().println(Log.NONE, null, msg, null); + } + } + + /** + * Returns the next LogNode in the chain. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + +} diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/DragSourceFragment.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/DragSourceFragment.java new file mode 100644 index 000000000..5b92fc997 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/DragSourceFragment.java @@ -0,0 +1,237 @@ +/* + * Copyright 2015, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +package com.example.android.dragsource; + +import com.example.android.common.logger.Log; + +import android.content.ClipData; +import android.content.ClipDescription; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Point; +import android.net.Uri; +import android.os.Bundle; +import android.os.PersistableBundle; +import android.support.annotation.Nullable; +import android.support.v13.view.DragStartHelper; +import android.support.v4.app.Fragment; +import android.support.v4.content.FileProvider; +import android.view.DragEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Date; + + +/** + * This sample demonstrates data can be moved between views within the app or between different + * apps via drag and drop. + *

This is the source app for the drag and drop sample. This app contains several + * {@link android.widget.ImageView} widgets which can be a drag source. Images can be dropped + * to a drop target area within the same app or in the DropTarget app (a separate app in this + * sample). + *

+ * There is also one {@link android.widget.EditText} widget that can be a drag source (no extra + * setup is necessary). + *

+ * To enable cross application drag and drop, the {@link android.view.View#DRAG_FLAG_GLOBAL} + * permission needs to be passed to the {@link android.view.View#startDragAndDrop(ClipData, + * View.DragShadowBuilder, Object, int)} method. If a Uri + * requiring permission grants is being sent, then the + * {@link android.view.View#DRAG_FLAG_GLOBAL_URI_READ} and/or the + * {@link android.view.View#DRAG_FLAG_GLOBAL_URI_WRITE} flags must be used also. + */ +public class DragSourceFragment extends Fragment { + + /** + * Name of saved data that stores the dropped image URI on the local ImageView when set. + */ + private static final String IMAGE_URI = "IMAGE_URI"; + + /** + * Name of the parameter for a {@link ClipData} extra that stores a text describing the dragged + * image. + */ + public static final String EXTRA_IMAGE_INFO = "IMAGE_INFO"; + + /** + * Uri of the ImageView source when set. + */ + private Uri mLocalImageUri; + + private static final String TAG = "DragSourceFragment"; + + private static final String CONTENT_AUTHORITY = "com.example.android.dragsource.fileprovider"; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.fragment_dragsource, null); + + // Set up two image views for global drag and drop with a permission grant. + Uri imageUri = getFileUri(R.drawable.image1, "image1.png"); + ImageView imageView = (ImageView) view.findViewById(R.id.image_one); + setUpDraggableImage(imageView, imageUri); + imageView.setImageURI(imageUri); + + imageUri = getFileUri(R.drawable.image2, "image2.png"); + imageView = (ImageView) view.findViewById(R.id.image_two); + setUpDraggableImage(imageView, imageUri); + imageView.setImageURI(imageUri); + + // Set up the local drop target area. + final ImageView localImageTarget = (ImageView) view.findViewById(R.id.local_target); + localImageTarget.setOnDragListener(new ImageDragListener() { + @Override + protected boolean setImageUri(View view, DragEvent event, Uri uri) { + mLocalImageUri = uri; + Log.d(TAG, "Setting local image to: " + uri); + return super.setImageUri(view, event, uri); + } + }); + + if (savedInstanceState != null) { + final String uriString = savedInstanceState.getString(IMAGE_URI); + if (uriString != null) { + mLocalImageUri = Uri.parse(uriString); + Log.d(TAG, "Restoring local image to: " + mLocalImageUri); + localImageTarget.setImageURI(mLocalImageUri); + } + } + return view; + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + if (mLocalImageUri != null) { + savedInstanceState.putString(IMAGE_URI, mLocalImageUri.toString()); + } + super.onSaveInstanceState(savedInstanceState); + } + + private void setUpDraggableImage(ImageView imageView, final Uri imageUri) { + + // Set up a listener that starts the drag and drop event with flags and extra data. + DragStartHelper.OnDragStartListener listener = new DragStartHelper.OnDragStartListener() { + @Override + public boolean onDragStart(View view, final DragStartHelper helper) { + Log.d(TAG, "Drag start event received from helper."); + + // Use a DragShadowBuilder + View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view) { + @Override + public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) { + super.onProvideShadowMetrics(shadowSize, shadowTouchPoint); + // Notify the DragStartHelper of point where the view was touched. + helper.getTouchPosition(shadowTouchPoint); + Log.d(TAG, "View was touched at: " + shadowTouchPoint); + } + }; + + // Set up the flags for the drag event. + // Enable drag and drop across apps (global) + // and require read permissions for this URI. + int flags = View.DRAG_FLAG_GLOBAL | View.DRAG_FLAG_GLOBAL_URI_READ; + + // Add an optional clip description that that contains an extra String that is + // read out by the target app. + final ClipDescription clipDescription = new ClipDescription("", new String[]{ + getContext().getContentResolver().getType(imageUri)}); + // Extras are stored within a PersistableBundle. + PersistableBundle extras = new PersistableBundle(1); + // Add a String that the target app will display. + extras.putString(EXTRA_IMAGE_INFO, + "Drag Started at " + new Date()); + clipDescription.setExtras(extras); + + // The ClipData object describes the object that is being dragged and dropped. + final ClipData clipData = + new ClipData(clipDescription, new ClipData.Item(imageUri)); + + Log.d(TAG, "Created ClipDescription. Starting drag and drop."); + // Start the drag and drop event. + return view.startDragAndDrop(clipData, shadowBuilder, null, flags); + + } + + }; + + // Use the DragStartHelper to detect drag and drop events and use the OnDragStartListener + // defined above to start the event when it has been detected. + DragStartHelper helper = new DragStartHelper(imageView, listener); + helper.attach(); + Log.d(TAG, "DragStartHelper attached to view."); + } + + /** + * Copy a drawable resource into local storage and makes it available via the + * {@link FileProvider}. + * + * @see Context#getFilesDir() + * @see FileProvider + * @see FileProvider#getUriForFile(Context, String, File) + */ + private Uri getFileUri(int sourceResourceId, String targetName) { + // Create the images/ sub directory if it does not exist yet. + File filePath = new File(getContext().getFilesDir(), "images"); + if (!filePath.exists() && !filePath.mkdir()) { + return null; + } + + // Copy a drawable from resources to the internal directory. + File newFile = new File(filePath, targetName); + if (!newFile.exists()) { + copyImageResourceToFile(sourceResourceId, newFile); + } + + // Make the file accessible via the FileProvider and retrieve its URI. + return FileProvider.getUriForFile(getContext(), CONTENT_AUTHORITY, newFile); + } + + + /** + * Copy a PNG resource drawable to a {@File}. + */ + private void copyImageResourceToFile(int resourceId, File filePath) { + Bitmap image = BitmapFactory.decodeResource(getResources(), resourceId); + + FileOutputStream out = null; + try { + out = new FileOutputStream(filePath); + image.compress(Bitmap.CompressFormat.PNG, 100, out); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + +} diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/ImageDragListener.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/ImageDragListener.java new file mode 100644 index 000000000..8ad2864fe --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/ImageDragListener.java @@ -0,0 +1,104 @@ +/* + * Copyright 2016, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.dragsource; + +import android.content.ClipData; +import android.net.Uri; +import android.view.DragEvent; +import android.view.View; +import android.widget.ImageView; + +/** + * OnDragListener for ImageViews. + * Sets colors of the target when DragEvents fire. When a drop is received, the {@link Uri} backing + * the first {@link android.content.ClipData.Item} in the {@link DragEvent} is set as the image + * resource of the ImageView. + */ +public class ImageDragListener implements View.OnDragListener { + + private static final int COLOR_INACTIVE = 0xFF888888; + + private static final int COLOR_ACTIVE = 0xFFCCCCCC; + + private static final int COLOR_HOVER = 0xFFEEEEEE; + + @Override + public boolean onDrag(View view, DragEvent event) { + // Change the color of the target for all events. + // For the drop action, set the view to the dropped image. + switch (event.getAction()) { + case DragEvent.ACTION_DRAG_STARTED: + setTargetColor(view, COLOR_ACTIVE); + return true; + + case DragEvent.ACTION_DRAG_ENTERED: + setTargetColor(view, COLOR_HOVER); + return true; + + case DragEvent.ACTION_DRAG_LOCATION: + processLocation(event.getX(), event.getY()); + return true; + + case DragEvent.ACTION_DRAG_EXITED: + setTargetColor(view, COLOR_ACTIVE); + return true; + + case DragEvent.ACTION_DROP: + return processDrop(view, event); + + case DragEvent.ACTION_DRAG_ENDED: + setTargetColor(view, COLOR_INACTIVE); + return true; + + default: + break; + } + + return false; + } + + private void setTargetColor(View view, int color) { + view.setBackgroundColor(color); + } + + private boolean processDrop(View view, DragEvent event) { + ClipData clipData = event.getClipData(); + if (clipData == null || clipData.getItemCount() == 0) { + return false; + } + ClipData.Item item = clipData.getItemAt(0); + if (item == null) { + return false; + } + Uri uri = item.getUri(); + if (uri == null) { + return false; + } + return setImageUri(view, event, uri); + } + + protected void processLocation(float x, float y) { + } + + protected boolean setImageUri(View view, DragEvent event, Uri uri) { + if (!(view instanceof ImageView)) { + return false; + } + ((ImageView) view).setImageURI(uri); + return true; + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/MainActivity.java b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/MainActivity.java new file mode 100644 index 000000000..67bbb6c9b --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DragSource/src/com.example.android/dragsource/MainActivity.java @@ -0,0 +1,110 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + +package com.example.android.dragsource; + +import com.example.android.common.activities.SampleActivityBase; +import com.example.android.common.logger.Log; +import com.example.android.common.logger.LogFragment; +import com.example.android.common.logger.LogWrapper; +import com.example.android.common.logger.MessageOnlyLogFilter; + +import android.os.Bundle; +import android.support.v4.app.FragmentTransaction; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.ViewAnimator; + +/** + * A simple launcher activity containing a summary sample description, sample log and a custom + * {@link android.support.v4.app.Fragment} which can display a view. + *

+ * For devices with displays with a width of 720dp or greater, the sample log is always visible, + * on other devices it's visibility is controlled by an item on the Action Bar. + */ +public class MainActivity extends SampleActivityBase { + + public static final String TAG = "MainActivity"; + + // Whether the Log Fragment is currently shown + private boolean mLogShown; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + if (savedInstanceState == null) { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + DragSourceFragment fragment = new DragSourceFragment(); + transaction.replace(R.id.sample_content_fragment, fragment); + transaction.commit(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem logToggle = menu.findItem(R.id.menu_toggle_log); + logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator); + logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log); + + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_toggle_log: + mLogShown = !mLogShown; + ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output); + if (mLogShown) { + output.setDisplayedChild(1); + } else { + output.setDisplayedChild(0); + } + supportInvalidateOptionsMenu(); + return true; + } + return super.onOptionsItemSelected(item); + } + + /** Create a chain of targets that will receive log data */ + @Override + public void initializeLogging() { + // Wraps Android's native log framework. + LogWrapper logWrapper = new LogWrapper(); + // Using Log, front-end to the logging chain, emulates android.util.log method signatures. + Log.setLogNode(logWrapper); + + // Filter strips out everything except the message text. + MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter(); + logWrapper.setNext(msgFilter); + + // On screen logging via a fragment with a TextView. + LogFragment logFragment = (LogFragment) getSupportFragmentManager() + .findFragmentById(R.id.log_fragment); + msgFilter.setNext(logFragment.getLogView()); + + Log.i(TAG, "Ready"); + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/AndroidManifest.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/AndroidManifest.xml new file mode 100644 index 000000000..02f39b2ee --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/AndroidManifest.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/drawable-hdpi/tile.9.png b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/drawable-hdpi/tile.9.png new file mode 100644 index 0000000000000000000000000000000000000000..135862883e26eddce2b19db021adf62e10357ad0 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^d_XM3!3HF=W8NDADajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MQNTcjv*DdlK%YvZ_jLY;KT`zX$+@~lcus~rX(d9r71A} z`ThO9P5{3!^Gb##?W|{)7_*qnaG3jle#z^Ewh3!L+OJDkI + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout/activity_main.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout/activity_main.xml new file mode 100755 index 000000000..17bc911a8 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout/activity_main.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout/fragment_droptarget.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout/fragment_droptarget.xml new file mode 100644 index 000000000..672117117 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/layout/fragment_droptarget.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/menu/main.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/menu/main.xml new file mode 100644 index 000000000..480cafef6 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/menu/main.xml @@ -0,0 +1,22 @@ + + +

+ + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-hdpi/ic_launcher.png b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0732a105b03e9785a9970addd2f22e1a070b1540 GIT binary patch literal 3322 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 Ef@ixYng9R* literal 0 HcmV?d00001 diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-mdpi/ic_launcher.png b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6f8f369ebe79cb7f1395020763e9ada2904d4ab3 GIT binary patch literal 2164 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-xxhdpi/ic_launcher.png b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..48899e6d251325cdc00052bf2e7c81c4bc061dc4 GIT binary patch literal 6583 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-sw600dp/template-dimens.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-sw600dp/template-dimens.xml new file mode 100644 index 000000000..22074a2bd --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-sw600dp/template-dimens.xml @@ -0,0 +1,24 @@ + + + + + + + @dimen/margin_huge + @dimen/margin_medium + + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-sw600dp/template-styles.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-sw600dp/template-styles.xml new file mode 100644 index 000000000..03d197418 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-sw600dp/template-styles.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-v11/template-styles.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-v11/template-styles.xml new file mode 100644 index 000000000..8c1ea66f2 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values-v11/template-styles.xml @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/colors.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/colors.xml new file mode 100644 index 000000000..801e292dd --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/colors.xml @@ -0,0 +1,21 @@ + + + + + + #ff888888 + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/dimen.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/dimen.xml new file mode 100644 index 000000000..1efd96e3d --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/dimen.xml @@ -0,0 +1,27 @@ + + + + + + 16dp + + 150dp + + 0dp + 10dp + 6dp + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/fragmentview_strings.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/fragmentview_strings.xml new file mode 100755 index 000000000..7b9d9ec4f --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/fragmentview_strings.xml @@ -0,0 +1,19 @@ + + + Show Log + Hide Log + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/strings.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/strings.xml new file mode 100644 index 000000000..585a7890d --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/strings.xml @@ -0,0 +1,28 @@ + + + + + + + Drop image here.\nThe app will request permission from the source app before displaying the image. + + This sample demonstrates drag and drop functionality and is the \'target\' app for this sample. It shows how data can be received when dragged from another app.\nOpen the \'DragSource\' sample app next to this one and try dragging an image into the space below. + + Release permissions immediately after a drop + + Releasing permissions will prevent the image from being properly restored after the activity has been resized. + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/template-dimens.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/template-dimens.xml new file mode 100644 index 000000000..39e710b5c --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/template-dimens.xml @@ -0,0 +1,32 @@ + + + + + + + 4dp + 8dp + 16dp + 32dp + 64dp + + + + @dimen/margin_medium + @dimen/margin_medium + + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/template-styles.xml b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/template-styles.xml new file mode 100644 index 000000000..6e7d593dd --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/res/values/template-styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/activities/SampleActivityBase.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/activities/SampleActivityBase.java new file mode 100644 index 000000000..3228927b7 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/activities/SampleActivityBase.java @@ -0,0 +1,52 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.example.android.common.activities; + +import android.os.Bundle; +import android.support.v4.app.FragmentActivity; + +import com.example.android.common.logger.Log; +import com.example.android.common.logger.LogWrapper; + +/** + * Base launcher activity, to handle most of the common plumbing for samples. + */ +public class SampleActivityBase extends FragmentActivity { + + public static final String TAG = "SampleActivityBase"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void onStart() { + super.onStart(); + initializeLogging(); + } + + /** Set up targets to receive log data */ + public void initializeLogging() { + // Using Log, front-end to the logging chain, emulates android.util.log method signatures. + // Wraps Android's native log framework + LogWrapper logWrapper = new LogWrapper(); + Log.setLogNode(logWrapper); + + Log.i(TAG, "Ready"); + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/Log.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/Log.java new file mode 100644 index 000000000..17503c568 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/Log.java @@ -0,0 +1,236 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Helper class for a list (or tree) of LoggerNodes. + * + *

When this is set as the head of the list, + * an instance of it can function as a drop-in replacement for {@link android.util.Log}. + * Most of the methods in this class server only to map a method call in Log to its equivalent + * in LogNode.

+ */ +public class Log { + // Grabbing the native values from Android's native logging facilities, + // to make for easy migration and interop. + public static final int NONE = -1; + public static final int VERBOSE = android.util.Log.VERBOSE; + public static final int DEBUG = android.util.Log.DEBUG; + public static final int INFO = android.util.Log.INFO; + public static final int WARN = android.util.Log.WARN; + public static final int ERROR = android.util.Log.ERROR; + public static final int ASSERT = android.util.Log.ASSERT; + + // Stores the beginning of the LogNode topology. + private static LogNode mLogNode; + + /** + * Returns the next LogNode in the linked list. + */ + public static LogNode getLogNode() { + return mLogNode; + } + + /** + * Sets the LogNode data will be sent to. + */ + public static void setLogNode(LogNode node) { + mLogNode = node; + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void println(int priority, String tag, String msg, Throwable tr) { + if (mLogNode != null) { + mLogNode.println(priority, tag, msg, tr); + } + } + + /** + * Instructs the LogNode to print the log data provided. Other LogNodes can + * be chained to the end of the LogNode as desired. + * + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + */ + public static void println(int priority, String tag, String msg) { + println(priority, tag, msg, null); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void v(String tag, String msg, Throwable tr) { + println(VERBOSE, tag, msg, tr); + } + + /** + * Prints a message at VERBOSE priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void v(String tag, String msg) { + v(tag, msg, null); + } + + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void d(String tag, String msg, Throwable tr) { + println(DEBUG, tag, msg, tr); + } + + /** + * Prints a message at DEBUG priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void d(String tag, String msg) { + d(tag, msg, null); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void i(String tag, String msg, Throwable tr) { + println(INFO, tag, msg, tr); + } + + /** + * Prints a message at INFO priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void i(String tag, String msg) { + i(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, String msg, Throwable tr) { + println(WARN, tag, msg, tr); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void w(String tag, String msg) { + w(tag, msg, null); + } + + /** + * Prints a message at WARN priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void w(String tag, Throwable tr) { + w(tag, null, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void e(String tag, String msg, Throwable tr) { + println(ERROR, tag, msg, tr); + } + + /** + * Prints a message at ERROR priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void e(String tag, String msg) { + e(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, String msg, Throwable tr) { + println(ASSERT, tag, msg, tr); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. + */ + public static void wtf(String tag, String msg) { + wtf(tag, msg, null); + } + + /** + * Prints a message at ASSERT priority. + * + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public static void wtf(String tag, Throwable tr) { + wtf(tag, null, tr); + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogFragment.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogFragment.java new file mode 100644 index 000000000..c1f369a28 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogFragment.java @@ -0,0 +1,94 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.example.android.common.logger; + +import android.graphics.Typeface; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ScrollView; + +/** + * Simple fragment which contains a LogView and uses is to output log data it receives + * through the LogNode interface. + */ +public class LogFragment extends Fragment { + + private LogView mLogView; + private ScrollView mScrollView; + + public LogFragment() {} + + public View inflateViews() { + mScrollView = new ScrollView(getActivity()); + ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + mScrollView.setLayoutParams(scrollParams); + + mLogView = new LogView(getActivity()); + ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams); + logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; + mLogView.setLayoutParams(logParams); + mLogView.setClickable(true); + mLogView.setFocusable(true); + mLogView.setTypeface(Typeface.MONOSPACE); + + // Want to set padding as 16 dips, setPadding takes pixels. Hooray math! + int paddingDips = 16; + double scale = getResources().getDisplayMetrics().density; + int paddingPixels = (int) ((paddingDips * (scale)) + .5); + mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels); + mLogView.setCompoundDrawablePadding(paddingPixels); + + mLogView.setGravity(Gravity.BOTTOM); + mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium); + + mScrollView.addView(mLogView); + return mScrollView; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + View result = inflateViews(); + + mLogView.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + + @Override + public void afterTextChanged(Editable s) { + mScrollView.fullScroll(ScrollView.FOCUS_DOWN); + } + }); + return result; + } + + public LogView getLogView() { + return mLogView; + } +} \ No newline at end of file diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogNode.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogNode.java new file mode 100644 index 000000000..bc37cabc0 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogNode.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Basic interface for a logging system that can output to one or more targets. + * Note that in addition to classes that will output these logs in some format, + * one can also implement this interface over a filter and insert that in the chain, + * such that no targets further down see certain data, or see manipulated forms of the data. + * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data + * it received to HTML and sent it along to the next node in the chain, without printing it + * anywhere. + */ +public interface LogNode { + + /** + * Instructs first LogNode in the list to print the log data provided. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + public void println(int priority, String tag, String msg, Throwable tr); + +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogView.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogView.java new file mode 100644 index 000000000..c01542b91 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogView.java @@ -0,0 +1,145 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.app.Activity; +import android.content.Context; +import android.util.*; +import android.widget.TextView; + +/** Simple TextView which is used to output log data received through the LogNode interface. +*/ +public class LogView extends TextView implements LogNode { + + public LogView(Context context) { + super(context); + } + + public LogView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public LogView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * Formats the log data and prints it out to the LogView. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + + + String priorityStr = null; + + // For the purposes of this View, we want to print the priority as readable text. + switch(priority) { + case android.util.Log.VERBOSE: + priorityStr = "VERBOSE"; + break; + case android.util.Log.DEBUG: + priorityStr = "DEBUG"; + break; + case android.util.Log.INFO: + priorityStr = "INFO"; + break; + case android.util.Log.WARN: + priorityStr = "WARN"; + break; + case android.util.Log.ERROR: + priorityStr = "ERROR"; + break; + case android.util.Log.ASSERT: + priorityStr = "ASSERT"; + break; + default: + break; + } + + // Handily, the Log class has a facility for converting a stack trace into a usable string. + String exceptionStr = null; + if (tr != null) { + exceptionStr = android.util.Log.getStackTraceString(tr); + } + + // Take the priority, tag, message, and exception, and concatenate as necessary + // into one usable line of text. + final StringBuilder outputBuilder = new StringBuilder(); + + String delimiter = "\t"; + appendIfNotNull(outputBuilder, priorityStr, delimiter); + appendIfNotNull(outputBuilder, tag, delimiter); + appendIfNotNull(outputBuilder, msg, delimiter); + appendIfNotNull(outputBuilder, exceptionStr, delimiter); + + // In case this was originally called from an AsyncTask or some other off-UI thread, + // make sure the update occurs within the UI thread. + ((Activity) getContext()).runOnUiThread( (new Thread(new Runnable() { + @Override + public void run() { + // Display the text we just generated within the LogView. + appendToLog(outputBuilder.toString()); + } + }))); + + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } + + public LogNode getNext() { + return mNext; + } + + public void setNext(LogNode node) { + mNext = node; + } + + /** Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since + * the logger takes so many arguments that might be null, this method helps cut out some of the + * agonizing tedium of writing the same 3 lines over and over. + * @param source StringBuilder containing the text to append to. + * @param addStr The String to append + * @param delimiter The String to separate the source and appended strings. A tab or comma, + * for instance. + * @return The fully concatenated String as a StringBuilder + */ + private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) { + if (addStr != null) { + if (addStr.length() == 0) { + delimiter = ""; + } + + return source.append(addStr).append(delimiter); + } + return source; + } + + // The next LogNode in the chain. + LogNode mNext; + + /** Outputs the string as a new line of log data in the LogView. */ + public void appendToLog(String s) { + append("\n" + s); + } + + +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogWrapper.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogWrapper.java new file mode 100644 index 000000000..16a9e7ba2 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/LogWrapper.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +import android.util.Log; + +/** + * Helper class which wraps Android's native Log utility in the Logger interface. This way + * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously. + */ +public class LogWrapper implements LogNode { + + // For piping: The next node to receive Log data after this one has done its work. + private LogNode mNext; + + /** + * Returns the next LogNode in the linked list. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + + /** + * Prints data out to the console using Android's native log mechanism. + * @param priority Log level of the data being logged. Verbose, Error, etc. + * @param tag Tag for for the log data. Can be used to organize log statements. + * @param msg The actual message to be logged. The actual message to be logged. + * @param tr If an exception was thrown, this can be sent along for the logging facilities + * to extract and print useful information. + */ + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + // There actually are log methods that don't take a msg parameter. For now, + // if that's the case, just convert null to the empty string and move on. + String useMsg = msg; + if (useMsg == null) { + useMsg = ""; + } + + // If an exeption was provided, convert that exception to a usable string and attach + // it to the end of the msg method. + if (tr != null) { + msg += "\n" + Log.getStackTraceString(tr); + } + + // This is functionally identical to Log.x(tag, useMsg); + // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg) + Log.println(priority, tag, useMsg); + + // If this isn't the last node in the chain, move things along. + if (mNext != null) { + mNext.println(priority, tag, msg, tr); + } + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/MessageOnlyLogFilter.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/MessageOnlyLogFilter.java new file mode 100644 index 000000000..19967dcd4 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/common/logger/MessageOnlyLogFilter.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.example.android.common.logger; + +/** + * Simple {@link LogNode} filter, removes everything except the message. + * Useful for situations like on-screen log output where you don't want a lot of metadata displayed, + * just easy-to-read message updates as they're happening. + */ +public class MessageOnlyLogFilter implements LogNode { + + LogNode mNext; + + /** + * Takes the "next" LogNode as a parameter, to simplify chaining. + * + * @param next The next LogNode in the pipeline. + */ + public MessageOnlyLogFilter(LogNode next) { + mNext = next; + } + + public MessageOnlyLogFilter() { + } + + @Override + public void println(int priority, String tag, String msg, Throwable tr) { + if (mNext != null) { + getNext().println(Log.NONE, null, msg, null); + } + } + + /** + * Returns the next LogNode in the chain. + */ + public LogNode getNext() { + return mNext; + } + + /** + * Sets the LogNode data will be sent to.. + */ + public void setNext(LogNode node) { + mNext = node; + } + +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/DropTargetFragment.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/DropTargetFragment.java new file mode 100644 index 000000000..9705e2b1e --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/DropTargetFragment.java @@ -0,0 +1,178 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.android.droptarget; + +import com.example.android.common.logger.Log; + +import android.app.Activity; +import android.content.ClipDescription; +import android.content.ContentResolver; +import android.net.Uri; +import android.os.Bundle; +import android.os.PersistableBundle; +import android.support.annotation.Nullable; +import android.support.v13.app.ActivityCompat; +import android.support.v13.view.DragAndDropPermissionsCompat; +import android.support.v4.app.Fragment; +import android.view.DragEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.ImageView; + +/** + * This sample demonstrates data can be moved between views in different applications via + * drag and drop. + *

This is the Target app for the drag and drop process. This app uses a + * {@link android.widget.ImageView} as the drop target. Images onto this + * view from the DragSource app that is also part of this sample. + *

+ * There is also a {@link android.widget.EditText} widget that can accept dropped text (no + * extra setup is necessary). + * To access content URIs requiring permissions, the target app needs to request the + * {@link android.view.DragAndDropPermissions} from the Activity via + * {@link ActivityCompat#requestDragAndDropPermissions(Activity, DragEvent)}. This permission will + * stay either as long as the activity is alive, or until the release() method is called on the + * {@link android.view.DragAndDropPermissions} object. + */ +public class DropTargetFragment extends Fragment { + + private static final String IMAGE_URI = "IMAGE_URI"; + + public static final String EXTRA_IMAGE_INFO = "IMAGE_INFO"; + + private static final String TAG = "DropTargetFragment"; + + private Uri mImageUri; + + private CheckBox mReleasePermissionCheckBox; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + + View rootView = inflater.inflate(R.layout.fragment_droptarget, container, false); + final ImageView imageView = (ImageView) rootView.findViewById(R.id.image_target); + + ImageDragListener imageDragListener = new PermissionAwareImageDragListener(); + + imageView.setOnDragListener(imageDragListener); + + // Restore the application state if an image was being displayed. + if (savedInstanceState != null) { + final String uriString = savedInstanceState.getString(IMAGE_URI); + if (uriString != null) { + mImageUri = Uri.parse(uriString); + imageView.setImageURI(mImageUri); + } + } + + mReleasePermissionCheckBox = (CheckBox) rootView.findViewById(R.id.release_checkbox); + + return rootView; + } + + @Override + public void onSaveInstanceState(Bundle savedInstanceState) { + if (mImageUri != null) { + savedInstanceState.putString(IMAGE_URI, mImageUri.toString()); + } + super.onSaveInstanceState(savedInstanceState); + } + + private class PermissionAwareImageDragListener extends ImageDragListener { + + @Override + protected void processLocation(float x, float y) { + // Callback is received when the dragged image enters the drop area. + } + + @Override + protected boolean setImageUri(View view, DragEvent event, Uri uri) { + // Read the string from the clip description extras. + Log.d(TAG, "ClipDescription extra: " + getExtra(event)); + + Log.d(TAG, "Setting image source to: " + uri.toString()); + mImageUri = uri; + + if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) { + // Accessing a "content" scheme Uri requires a permission grant. + DragAndDropPermissionsCompat dropPermissions = ActivityCompat + .requestDragAndDropPermissions(getActivity(), event); + Log.d(TAG, "Requesting permissions."); + + if (dropPermissions == null) { + // Permission could not be obtained. + Log.d(TAG, "Drop permission request failed."); + return false; + } + + final boolean result = super.setImageUri(view, event, uri); + + if (mReleasePermissionCheckBox.isChecked()) { + /* Release the permissions if you are done with the URI. + Note that you may need to hold onto the permission until later if other + operations are performed on the content. For instance, releasing the + permissions here will prevent onCreateView from properly restoring the + ImageView state. + If permissions are not explicitly released, the permission grant will be + revoked when the activity is destroyed. + */ + dropPermissions.release(); + Log.d(TAG, "Permissions released."); + } + + return result; + } else { + // Other schemes (such as "android.resource") do not require a permission grant. + return super.setImageUri(view, event, uri); + } + } + + @Override + public boolean onDrag(View view, DragEvent event) { + // DragTarget is peeking into the MIME types of the dragged event in order to ignore + // non-image drags completely. + // DragSource does not do that but rejects non-image content once a drop has happened. + ClipDescription clipDescription = event.getClipDescription(); + if (clipDescription != null && !clipDescription.hasMimeType("image/*")) { + return false; + } + // Callback received when image is being dragged. + return super.onDrag(view, event); + } + } + + /** + * DragEvents can contain additional data packaged in a {@link PersistableBundle}. + * Extract the extras from the event and return the String stored for the + * {@link #EXTRA_IMAGE_INFO} entry. + */ + private String getExtra(DragEvent event) { + // The extras are contained in the ClipDescription in the DragEvent. + ClipDescription clipDescription = event.getClipDescription(); + if (clipDescription != null) { + PersistableBundle extras = clipDescription.getExtras(); + if (extras != null) { + return extras.getString(EXTRA_IMAGE_INFO); + } + } + return null; + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/ImageDragListener.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/ImageDragListener.java new file mode 100644 index 000000000..84a8b254d --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/ImageDragListener.java @@ -0,0 +1,96 @@ +/* +* Copyright 2016, The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package com.example.android.droptarget; + +import android.content.ClipData; +import android.net.Uri; +import android.view.DragEvent; +import android.view.View; +import android.widget.ImageView; + +public class ImageDragListener implements View.OnDragListener { + + private static final int COLOR_INACTIVE = 0xFF888888; + + private static final int COLOR_ACTIVE = 0xFFCCCCCC; + + private static final int COLOR_HOVER = 0xFFEEEEEE; + + @Override + public boolean onDrag(View view, DragEvent event) { + switch (event.getAction()) { + case DragEvent.ACTION_DRAG_STARTED: + setTargetColor(view, COLOR_ACTIVE); + return true; + + case DragEvent.ACTION_DRAG_ENTERED: + setTargetColor(view, COLOR_HOVER); + return true; + + case DragEvent.ACTION_DRAG_LOCATION: + processLocation(event.getX(), event.getY()); + return true; + + case DragEvent.ACTION_DRAG_EXITED: + setTargetColor(view, COLOR_ACTIVE); + return true; + + case DragEvent.ACTION_DROP: + return processDrop(view, event); + + case DragEvent.ACTION_DRAG_ENDED: + setTargetColor(view, COLOR_INACTIVE); + return true; + + default: + break; + } + + return false; + } + + private void setTargetColor(View view, int color) { + view.setBackgroundColor(color); + } + + private boolean processDrop(View view, DragEvent event) { + ClipData clipData = event.getClipData(); + if (clipData == null || clipData.getItemCount() == 0) { + return false; + } + ClipData.Item item = clipData.getItemAt(0); + if (item == null) { + return false; + } + Uri uri = item.getUri(); + if (uri == null) { + return false; + } + return setImageUri(view, event, uri); + } + + protected void processLocation(float x, float y) { + } + + protected boolean setImageUri(View view, DragEvent event, Uri uri) { + if (!(view instanceof ImageView)) { + return false; + } + ((ImageView) view).setImageURI(uri); + return true; + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/MainActivity.java b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/MainActivity.java new file mode 100644 index 000000000..462f49b87 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/DropTarget/src/com.example.android/droptarget/MainActivity.java @@ -0,0 +1,110 @@ +/* +* Copyright 2013 The Android Open Source Project +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + + +package com.example.android.droptarget; + +import android.os.Bundle; +import android.support.v4.app.FragmentTransaction; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.ViewAnimator; + +import com.example.android.common.activities.SampleActivityBase; +import com.example.android.common.logger.Log; +import com.example.android.common.logger.LogFragment; +import com.example.android.common.logger.LogWrapper; +import com.example.android.common.logger.MessageOnlyLogFilter; + +/** + * A simple launcher activity containing a summary sample description, sample log and a custom + * {@link android.support.v4.app.Fragment} which can display a view. + *

+ * For devices with displays with a width of 720dp or greater, the sample log is always visible, + * on other devices it's visibility is controlled by an item on the Action Bar. + */ +public class MainActivity extends SampleActivityBase { + + public static final String TAG = "MainActivity"; + + // Whether the Log Fragment is currently shown + private boolean mLogShown; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + if (savedInstanceState == null) { + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + DropTargetFragment fragment = new DropTargetFragment(); + transaction.replace(R.id.sample_content_fragment, fragment); + transaction.commit(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + return true; + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + MenuItem logToggle = menu.findItem(R.id.menu_toggle_log); + logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator); + logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log); + + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch(item.getItemId()) { + case R.id.menu_toggle_log: + mLogShown = !mLogShown; + ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output); + if (mLogShown) { + output.setDisplayedChild(1); + } else { + output.setDisplayedChild(0); + } + supportInvalidateOptionsMenu(); + return true; + } + return super.onOptionsItemSelected(item); + } + + /** Create a chain of targets that will receive log data */ + @Override + public void initializeLogging() { + // Wraps Android's native log framework. + LogWrapper logWrapper = new LogWrapper(); + // Using Log, front-end to the logging chain, emulates android.util.log method signatures. + Log.setLogNode(logWrapper); + + // Filter strips out everything except the message text. + MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter(); + logWrapper.setNext(msgFilter); + + // On screen logging via a fragment with a TextView. + LogFragment logFragment = (LogFragment) getSupportFragmentManager() + .findFragmentById(R.id.log_fragment); + msgFilter.setNext(logFragment.getLogView()); + + Log.i(TAG, "Ready"); + } +} diff --git a/samples/browseable/DragAndDropAcrossApps/_index.jd b/samples/browseable/DragAndDropAcrossApps/_index.jd new file mode 100644 index 000000000..d780944c0 --- /dev/null +++ b/samples/browseable/DragAndDropAcrossApps/_index.jd @@ -0,0 +1,18 @@ + +page.tags="DragAndDropAcrossApps-new" +sample.group=ui +@jd:body + +

+ +This sample demonstrates how data can be moved between views within an +app or between different apps via drag and drop. +This sample contains two separate Android applications: DragSource and +DropTarget. DragSource contains images and text that can be dropped into the DropTarget +app. Images are shared between the two apps through a URI for which the receiving app +must request permission first, before it can be used. + +It also demonstrates the use of the DragStartHelper from the v13 support library to easily +handle drag and drop events. + +

diff --git a/samples/browseable/RenderScriptIntrinsic/res/values/attrs.xml b/samples/browseable/RenderScriptIntrinsic/res/values/attrs.xml deleted file mode 100644 index e67df0a37..000000000 --- a/samples/browseable/RenderScriptIntrinsic/res/values/attrs.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/samples/browseable/StorageProvider/_index.jd b/samples/browseable/StorageProvider/_index.jd index ef6f64621..9af4ec5ce 100644 --- a/samples/browseable/StorageProvider/_index.jd +++ b/samples/browseable/StorageProvider/_index.jd @@ -5,7 +5,7 @@ sample.group=Content

- \nA simple implementation of a documents provider using the storage access framework in - Android 4.4. +A simple implementation of a documents provider using the storage access framework in +Android 4.4.

diff --git a/samples/browseable/StorageProvider/res/values/base-strings.xml b/samples/browseable/StorageProvider/res/values/base-strings.xml index 5fd804c44..d80a40a6d 100644 --- a/samples/browseable/StorageProvider/res/values/base-strings.xml +++ b/samples/browseable/StorageProvider/res/values/base-strings.xml @@ -21,8 +21,8 @@ diff --git a/samples/browseable/WatchFace/Wearable/AndroidManifest.xml b/samples/browseable/WatchFace/Wearable/AndroidManifest.xml index a92229711..7dd5b69a9 100644 --- a/samples/browseable/WatchFace/Wearable/AndroidManifest.xml +++ b/samples/browseable/WatchFace/Wearable/AndroidManifest.xml @@ -14,125 +14,132 @@ See the License for the specific language governing permissions and limitations under the License. --> - + + android:targetSdkVersion="23"/> - + - + + + + - + - + + + + + - + android:label="@string/app_name"> + android:value="@integer/google_play_services_version"/> - + + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_analog"/> + android:resource="@drawable/preview_analog_circular"/> + android:value="com.example.android.wearable.watchface.CONFIG_ANALOG"/> - + - + + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_analog"/> + android:resource="@drawable/preview_analog_circular"/> - + - + + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_opengl"/> + android:resource="@drawable/preview_opengl_circular"/> + android:value="com.example.android.wearable.watchface.CONFIG_OPENGL"/> - + - + + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_card_bounds"/> + android:resource="@drawable/preview_card_bounds_circular"/> + android:value="com.example.android.wearable.watchface.CONFIG_CARD_BOUNDS"/> - + - + - + + @@ -171,47 +180,47 @@ + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_interactive"/> + android:resource="@drawable/preview_interactive_circular"/> - + - + + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_digital"/> + android:resource="@drawable/preview_digital_circular"/> + android:value="com.example.android.wearable.watchface.CONFIG_DIGITAL"/> + android:value="com.example.android.wearable.watchface.CONFIG_DIGITAL"/> - + - + @@ -223,95 +232,99 @@ + android:label="@string/digital_config_name"> - + - - + + + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_calendar"/> + android:resource="@drawable/preview_calendar_circular"/> - + - + - + - - + + + + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_distance"/> + android:resource="@drawable/preview_distance_circular"/> + android:value="com.example.android.wearable.watchface.CONFIG_FIT_DISTANCE"/> - + - + + android:permission="android.permission.BIND_WALLPAPER"> + android:resource="@xml/watch_face"/> + android:resource="@drawable/preview_fit"/> + android:resource="@drawable/preview_fit_circular"/> - + - + + android:label="@string/title_activity_calendar_watch_face_permission"> - + android:permission="com.google.android.wearable.permission.BIND_COMPLICATION_PROVIDER"> @@ -322,19 +335,24 @@ + android:value="600"/> + + - + \ No newline at end of file diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/ComplicationSimpleConfigActivity.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/ComplicationSimpleConfigActivity.java index 66e208c2e..6d4e521a1 100644 --- a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/ComplicationSimpleConfigActivity.java +++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/ComplicationSimpleConfigActivity.java @@ -22,6 +22,8 @@ import android.content.Intent; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.wearable.complications.ComplicationHelperActivity; +import android.support.wearable.complications.ComplicationProviderInfo; import android.support.wearable.complications.ProviderChooserIntent; import android.support.wearable.view.WearableListView; import android.util.Log; @@ -64,6 +66,13 @@ public class ComplicationSimpleConfigActivity extends Activity implements protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PROVIDER_CHOOSER_REQUEST_CODE && resultCode == RESULT_OK) { + + // Retrieves information for selected Complication provider. + ComplicationProviderInfo complicationProviderInfo = + data.getParcelableExtra(ProviderChooserIntent.EXTRA_PROVIDER_INFO); + + Log.d(TAG, "Selected Provider: " + complicationProviderInfo); + finish(); } } @@ -77,10 +86,16 @@ public class ComplicationSimpleConfigActivity extends Activity implements Integer tag = (Integer) viewHolder.itemView.getTag(); ComplicationItem complicationItem = mAdapter.getItem(tag); - startActivityForResult(ProviderChooserIntent.createProviderChooserIntent( - complicationItem.watchFace, - complicationItem.complicationId, - complicationItem.supportedTypes), PROVIDER_CHOOSER_REQUEST_CODE); + // Note: If you were previously using ProviderChooserIntent.createProviderChooserIntent() + // (now deprecated), you will want to switch to + // ComplicationHelperActivity.createProviderChooserHelperIntent() + startActivityForResult( + ComplicationHelperActivity.createProviderChooserHelperIntent( + getApplicationContext(), + complicationItem.watchFace, + complicationItem.complicationId, + complicationItem.supportedTypes), + PROVIDER_CHOOSER_REQUEST_CODE); } private List getComplicationItems() { @@ -187,5 +202,4 @@ public class ComplicationSimpleConfigActivity extends Activity implements return mItems.get(position); } } - } \ No newline at end of file diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/ComplicationSimpleWatchFaceService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/ComplicationSimpleWatchFaceService.java index 9eca2c33b..4905293dd 100644 --- a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/ComplicationSimpleWatchFaceService.java +++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/ComplicationSimpleWatchFaceService.java @@ -18,6 +18,7 @@ package com.example.android.wearable.watchface; import android.app.PendingIntent; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -35,6 +36,7 @@ import android.os.Handler; import android.os.Message; import android.support.v7.graphics.Palette; import android.support.wearable.complications.ComplicationData; +import android.support.wearable.complications.ComplicationHelperActivity; import android.support.wearable.complications.ComplicationText; import android.support.wearable.watchface.CanvasWatchFaceService; import android.support.wearable.watchface.WatchFaceService; @@ -362,16 +364,34 @@ public class ComplicationSimpleWatchFaceService extends CanvasWatchFaceService { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "onComplicationTap()"); } + ComplicationData complicationData = mActiveComplicationDataSparseArray.get(complicationId); - if ((complicationData != null) && (complicationData.getTapAction() != null)) { - try { - complicationData.getTapAction().send(); - } catch (PendingIntent.CanceledException e) { - Log.e(TAG, "On complication tap action error " + e); + if (complicationData != null) { + + if (complicationData.getTapAction() != null) { + try { + complicationData.getTapAction().send(); + } catch (PendingIntent.CanceledException e) { + Log.e(TAG, "On complication tap action error " + e); + } + + } else if (complicationData.getType() == ComplicationData.TYPE_NO_PERMISSION) { + + // Watch face does not have permission to receive complication data, so launch + // permission request. + ComponentName componentName = new ComponentName( + getApplicationContext(), + ComplicationSimpleWatchFaceService.class); + + Intent permissionRequestIntent = + ComplicationHelperActivity.createPermissionRequestHelperIntent( + getApplicationContext(), componentName); + + startActivity(permissionRequestIntent); } - invalidate(); + } else { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "No PendingIntent for complication " + complicationId + "."); @@ -551,50 +571,57 @@ public class ComplicationSimpleWatchFaceService extends CanvasWatchFaceService { complicationData = mActiveComplicationDataSparseArray.get(COMPLICATION_IDS[i]); if ((complicationData != null) - && (complicationData.isActive(currentTimeMillis)) - && (complicationData.getType() == ComplicationData.TYPE_SHORT_TEXT)) { + && (complicationData.isActive(currentTimeMillis))) { - ComplicationText mainText = complicationData.getShortText(); - ComplicationText subText = complicationData.getShortTitle(); + // Both Short Text and No Permission Types can be rendered with the same code. + // No Permission will display "--" with an Intent to launch a permission prompt. + // If you want to support more types, just add a "else if" below with your + // rendering code inside. + if (complicationData.getType() == ComplicationData.TYPE_SHORT_TEXT + || complicationData.getType() == ComplicationData.TYPE_NO_PERMISSION) { - CharSequence complicationMessage = - mainText.getText(getApplicationContext(), currentTimeMillis); + ComplicationText mainText = complicationData.getShortText(); + ComplicationText subText = complicationData.getShortTitle(); - /* In most cases you would want the subText (Title) under the mainText (Text), - * but to keep it simple for the code lab, we are concatenating them all on one - * line. - */ - if (subText != null) { - complicationMessage = TextUtils.concat( - complicationMessage, - " ", - subText.getText(getApplicationContext(), currentTimeMillis)); - } + CharSequence complicationMessage = + mainText.getText(getApplicationContext(), currentTimeMillis); - //Log.d(TAG, "Comp id: " + COMPLICATION_IDS[i] + "\t" + complicationMessage); - double textWidth = - mComplicationPaint.measureText( + /* In most cases you would want the subText (Title) under the + * mainText (Text), but to keep it simple for the code lab, we are + * concatenating them all on one line. + */ + if (subText != null) { + complicationMessage = TextUtils.concat( complicationMessage, - 0, - complicationMessage.length()); + " ", + subText.getText(getApplicationContext(), currentTimeMillis)); + } - int complicationsX; + //Log.d(TAG, "Com id: " + COMPLICATION_IDS[i] + "\t" + complicationMessage); + double textWidth = + mComplicationPaint.measureText( + complicationMessage, + 0, + complicationMessage.length()); - if (COMPLICATION_IDS[i] == LEFT_DIAL_COMPLICATION) { - complicationsX = (int) ((mWidth / 2) - textWidth) / 2; - } else { - // RIGHT_DIAL_COMPLICATION calculations - int offset = (int) ((mWidth / 2) - textWidth) / 2; - complicationsX = (mWidth / 2) + offset; + int complicationsX; + + if (COMPLICATION_IDS[i] == LEFT_DIAL_COMPLICATION) { + complicationsX = (int) ((mWidth / 2) - textWidth) / 2; + } else { + // RIGHT_DIAL_COMPLICATION calculations + int offset = (int) ((mWidth / 2) - textWidth) / 2; + complicationsX = (mWidth / 2) + offset; + } + + canvas.drawText( + complicationMessage, + 0, + complicationMessage.length(), + complicationsX, + mComplicationsY, + mComplicationPaint); } - - canvas.drawText( - complicationMessage, - 0, - complicationMessage.length(), - complicationsX, - mComplicationsY, - mComplicationPaint); } } } diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/provider/RandomNumberProviderService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/provider/RandomNumberProviderService.java index 916f90fd9..17d03c272 100644 --- a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/provider/RandomNumberProviderService.java +++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/provider/RandomNumberProviderService.java @@ -1,5 +1,7 @@ package com.example.android.wearable.watchface.provider; +import android.app.PendingIntent; +import android.content.Intent; import android.support.wearable.complications.ComplicationData; import android.support.wearable.complications.ComplicationManager; import android.support.wearable.complications.ComplicationProviderService; @@ -42,7 +44,7 @@ public class RandomNumberProviderService extends ComplicationProviderService { @Override public void onComplicationUpdate( int complicationId, int dataType, ComplicationManager complicationManager) { - Log.d(TAG, "onComplicationUpdate()"); + Log.d(TAG, "onComplicationUpdate() id: " + complicationId); // Retrieve your data, in this case, we simply create a random number to display. @@ -51,6 +53,24 @@ public class RandomNumberProviderService extends ComplicationProviderService { String randomNumberText = String.format(Locale.getDefault(), "%d!", randomNumber); + // Create Tap Action so that the user can trigger an update by tapping the complication. + Intent updateIntent = + new Intent(getApplicationContext(), UpdateComplicationDataService.class); + updateIntent.setAction(UpdateComplicationDataService.ACTION_UPDATE_COMPLICATION); + // We pass the complication id, so we can only update the specific complication tapped. + updateIntent.putExtra(UpdateComplicationDataService.EXTRA_COMPLICATION_ID, complicationId); + + PendingIntent pendingIntent = PendingIntent.getService( + getApplicationContext(), + // Set the requestCode to the complication id. This ensures the system doesn't + // combine other PendingIntents with the same context with this one (basically it + // would then reuse the Extra you set in the initial PendingIntent). If you don't + // do this and multiple complications with your data are active, every PendingIntent + // assigned for tap, would use the same complication id (first one created). + complicationId, + updateIntent, + 0); + ComplicationData complicationData = null; switch (dataType) { @@ -60,17 +80,20 @@ public class RandomNumberProviderService extends ComplicationProviderService { .setMinValue(0) .setMaxValue(10) .setShortText(ComplicationText.plainText(randomNumberText)) + .setTapAction(pendingIntent) .build(); break; case ComplicationData.TYPE_SHORT_TEXT: complicationData = new ComplicationData.Builder(ComplicationData.TYPE_SHORT_TEXT) .setShortText(ComplicationText.plainText(randomNumberText)) + .setTapAction(pendingIntent) .build(); break; case ComplicationData.TYPE_LONG_TEXT: complicationData = new ComplicationData.Builder(ComplicationData.TYPE_LONG_TEXT) .setLongText( ComplicationText.plainText("Random Number: " + randomNumberText)) + .setTapAction(pendingIntent) .build(); break; default: diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/provider/UpdateComplicationDataService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/provider/UpdateComplicationDataService.java new file mode 100644 index 000000000..203e491c2 --- /dev/null +++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/provider/UpdateComplicationDataService.java @@ -0,0 +1,63 @@ +package com.example.android.wearable.watchface.provider; + +import android.app.IntentService; +import android.content.ComponentName; +import android.content.Intent; +import android.support.wearable.complications.ProviderUpdateRequester; +import android.util.Log; + +/** + * Simple {@link IntentService} subclass for asynchronously requesting an update for the random + * number complication (triggered via TapAction on complication). + */ +public class UpdateComplicationDataService extends IntentService { + + private static final String TAG = "UpdateCompService"; + + public static final String ACTION_UPDATE_COMPLICATION = + "com.example.android.wearable.watchface.provider.action.UPDATE_COMPLICATION"; + + public static final String EXTRA_COMPLICATION_ID = + "com.example.android.wearable.watchface.provider.action.COMPLICATION_ID"; + + public UpdateComplicationDataService() { + super("UpdateComplicationDataService"); + } + + @Override + protected void onHandleIntent(Intent intent) { + + if (intent != null) { + + final String action = intent.getAction(); + + if (ACTION_UPDATE_COMPLICATION.equals(action)) { + + int complicationId = intent.getIntExtra(EXTRA_COMPLICATION_ID, -1); + handleActionUpdateComplicationData(complicationId); + } + } + } + + /** + * Handle action UpdateComplicationData in the provided background thread with the provided + * parameters. + */ + private void handleActionUpdateComplicationData(int complicationId) { + + Log.d(TAG, "Complication id to update via service: " + complicationId); + + ComponentName componentName = + new ComponentName(getApplicationContext(), RandomNumberProviderService.class); + + ProviderUpdateRequester providerUpdateRequester = + new ProviderUpdateRequester(getApplicationContext(), componentName); + + if (complicationId > 0) { + // This method only updates the specific complication tapped on the watch, if you + // wanted to update all active complications associated with your data, you would + // call providerUpdateRequester.requestUpdateAll(). + providerUpdateRequester.requestUpdate(complicationId); + } + } +} \ No newline at end of file diff --git a/samples/browseable/WearDrawers/AndroidManifest.xml b/samples/browseable/WearDrawers/AndroidManifest.xml index 3044d1906..eaf9dbdbf 100644 --- a/samples/browseable/WearDrawers/AndroidManifest.xml +++ b/samples/browseable/WearDrawers/AndroidManifest.xml @@ -21,7 +21,6 @@ android:label="@string/app_name"> - diff --git a/samples/browseable/WearNotifications/Application/AndroidManifest.xml b/samples/browseable/WearNotifications/Application/AndroidManifest.xml new file mode 100644 index 000000000..20c44cc12 --- /dev/null +++ b/samples/browseable/WearNotifications/Application/AndroidManifest.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/browseable/WearNotifications/Application/res/drawable-hdpi/earth.png b/samples/browseable/WearNotifications/Application/res/drawable-hdpi/earth.png new file mode 100644 index 0000000000000000000000000000000000000000..13abd77a5967370afd6dab1cdd91928ef047a5ed GIT binary patch literal 155081 zcmagFb983Gvncw-b|#oO`C{9)C&t8fzSy>HPB^h9wv9<9wr%_6ckVg&-ap=YZ?C=A z?(S9Us@kioYgb47P>@7|{|*lT0Fb1m#FPO5FuMOdu;5=K4@9`6UoTu|aZP6xdoyP@ zLq}79u!+5qDY3Mzp}DEDsiBF7!>B1A004n*sjBI$DKE!kY;Vh8_#YSscU#aGHUPjU z=ngV8wl;MpHZnE0wBskeZ0{x|wlv`<)nJ!rk_U;JT3AYXI-06@DySNJS{rklkO~SA z^SSeU5wJCNHY9epwXt*Japx!fFSHiW+Q~n3BsJ){pF*^e* zy)hFrGcgAT12Y>t2M049F$)tj3nSCl%|Xx1#>39R!@^1Y-xui@H%AjQ9%V6!|K|18 z<0rLnb_Ve5&wsxp^?3dGe7BAw~Ar7}i$Ll7e~0~4dI?SJO=U(im@ z%BKHEjQ>|?CshxSDWkHflf8?h@s~Z!$o>cUOLza@jQ#`oB@K_5y|Ig}shzX57(eOP z2!n~G36C%fr!Y4+Cp$AU+m{x_IfO;H#l$6;#U;czS;a({MgIp^+Rn+@(9YQOe{e1T z4=&sPCoYeuqp6{@y`!qVz0Lnv?}vrGv%QmrJ&0ITg@ah$(Ad)MKmGrx_P-@Hb+mLf zHIZ<%wO}{$-+tE$!zP#J<%Z=I3snh}B+Vaw3!m92o zYn_(yCd)2_4;QP=YiZhT<;};o>J#9|{$N6ZkWw<3!jTlF$_3Ige}t8Vvk?CxFV~yQ zCEF%+V}9&!p?sni6T#E=ZO5<#36BB55dD{7Sm)N~_&Zfy7IVG2eA*WeJJK@lS!f%| zJ(jNiJmYy zKLXN{rgu4K{rYHQjgN`m0yyh~cCWczpG+m--eM0uL=x|qc6V==$M1f$IyvyUxxd|6 zU9)?0kpLgdu3cCpC>P`X1V2TkKIAzbZ8Nz=$eS3XaiL0Q{e zIGpZ8UE&VGTcUhAz(P9d%YZBQ?|sNM=FWQfV5B`i6ffSdcDBN=WOIibwu%$p?kS}c zk^Ssyui}%giI9vvJ-k0Iwqx!{sbLu1pEUb0kchaEu0YFwsbhKG+?=tKcZ6ZXnw`#; z6skciq6dgx7d)+JSU7mo64@^J8=N|ZiFyF(Lv(4u_(|qW!H>QBJ3d z>|wsbvxvR8=vYI(d&SS+P8bQ^T&M*EgO&+e7QQc@j?Ll9i>SI1zs)f_Fb~;84rM^eo?{XS$3Jj5H>gmW`J8sx;Ctey}!7=mMlgkU$ zf^Irl;s6y5S|`PPIgD~QZ%5Dtt+cZyJI#RlUgk4Cda1ub;cAp%+eK0$&IkWCBgVqd z%zVk4x5FKPg4^3&lXqtoVgpn`^(ZP+TOZHQYf`aUwmy^Nf#M3d6`qokMDw!XS$>Uh7 z$*|jmm>BBwpMR3w#yR827KClb{GG_TCHBb88c3~I*<%bL;2zxLkiIBCjDg6)dgLbK zb}`@}gEhOLH6K~3oW<+*6Jt|60N{NdqSANtnExu9aGjnoVnN=XEaZ?pei;b_yv?kc zDsi$`^Ml=ir#|gckV3oylaIi^Q_B5-HdA;bL&G zAU}IQS&u8Y1^-Qe>sH*&wz*+t=E11SYEIa-rf}K~h-1s0+hszt2O@nFP#y`}4{(6@ zy&u8%4YayJ8x`k(mx&`k3Ot=wij(9$-6Ih|Px`!aW1W7bhcxsp_bKY|$X4PC$>y5$ zH#2q{IXm$202@wsvMv0*OZSaLa#^Juz)aqA+mLWAT|nwL{*3Uk5$YV+6Y}!5Bpv_g z{#G!v1NmU14K?B8mpMBZLH{a6fxJERoDPS;?>LT7d1zTWqciwg2W79&rk{I-@yR*5 zT7-TCic~z9Nl5N7Oef|%Hh1saZoE1su^gMJZy7WMM9VLk#m*#^RW9s#mgr(}Ms&sE z?o>un2Giwdn%G5~i)cG;gl7fIQFxTIC5|dmiTZNHZEjPxosQJjTGj~YM@>z%U27`k zVmoH~Ut6-I#RNXJ{>oAYa{^z)2+Eo(F5Aq2G(#qmWSdPa;$*UfaNEa`Zw1p&20Yw<8{Qm-HO}p6e#Oq zboLC+CZZwMIC?jl^PxwwJwy+dQ5i*jEbcLBGu4^D)A$5|*Q?8~Z{Db}2di|GS=_z? z^*Ipq-Nc4Gf(e;0+Xb)kDV*a`vxN`th<(@IgHK2~b-hv5=fAm$h7m{qPAthqV=9dA z3-%m%MYLi#pi6S^(3T8aIkr)Avg;aw{+XB)PptB?w5ClITrU?=w2n?v@cAhdI_&8! zi6HTDYWc~a)_V{G4IrF|qr2Vosi*eHH3by<-@T^Vyxr$BG=317OYvYsdx#MvmexeE z<7oxQugT>^u9f+yyJXPwn-6N7Ce0)Lk*oZd$VJ+SsToH_%= z;EK=qFxAjL5o_H2yQg5R0tNJFNWpQsR>Is+wBk&_GY;Z7o^>i~_-*hSoDAw6%@EU3 zGJoG`DF#p5j2B~3AyL@SYq+A2m{MkP18OSe8mpR{vA4n`Itc+?rrE=D_P|bT*($zb zq4YV-I28BtZ;1#ck`#V!04Pj31ixgRrGPUF64y__3AQlNKcSvH%7u0JU>`-ZTEtX! zrkABNZU3mDXvXm6;s+lnT2929&79SLCR&S&AO&CkiQZdw3xtS{v#9!-AO{os2MYpe zD54-8C{2@0oi^ze3e~ktCqG**lRd$Qp|p1m$HL9v#bUXZS4{HVF*#oW|G|cjR|USX zzElT23Y3%?d^cr5^TDc-QB1CK1$u)_qN8miSsMs7H`Ra2praadTJ|wjiVC@7`KG8@ znng>WUR{nGBUN2s5zCsR&P*A2p8nhre_>`A|4)EIQcM7&!IG!^Dt{M9v%8dh$3tgH zf*>yTk-8MYus_mxa9THe$VYqXM1&XQZ4-PrG&~vzyTnZB{!tVAdj{>KK7U;9JJa-X zJ=fGy^Ho@3KgBdobV7JS4`g0Yk1@Y!W}IYVBB_5#5lsOoG|20OKj50@-2&wea?>7HFc47mG#+5lyR_dH7 zt&aY_W~G;_S}RwYPHBo?J<{UH8OD&K&KpViMB=7}FoL>+y$4Wj%c=*Cy-w3CVY^^5 zSb0yPOf4aY-zY1g2?oj9mrZnAZF@Qw;@kA5|Q z4ct@l_IQ_gk~RrJBhfWX5I60KCBvz29VG#BGlUywqo7A5ITK#N={d7>y*)9dNmJ~9 zquXhrY9|qxq?iSw4WNx<5Pz!#7fl0#XS>H zXlPFTDzVl-_&t*Cv^An1`+;ZP9SgRkinv2IS{&6t7`;FED4iK&k}b^T^Ff1+N@QrD zW9d+yP3ZO#c!`_CB+kBE_i$`t5Vv>_d|u6fO{@d(W=k9?Yifgy9TujEZAmAKg|{f( zn6ZsQWz4CHD#=eWIY0em{2o$nnXD?l$Syk1E}e)eE}Tc*!~BHf+ZP@xjT&l*8k}(Y zl6vS7yV)29v3W1zhw84dr6n9+3kpVv7B7iI{!ELmC!(etAc}`b{(J0AMi8Z$%WF#$ z8{@NO7=lDLS};392lkqV>%?8QXB%qk!$!I9!K?^#J6d12NBV5U-FJOE#xm+G<1csp zfcuL>*N%M(MsCknUD-34y2J_$F#V*8_4ha^7MV*Lzk%#n2=iylQS8j9OTBRr`C0s^ zTwqce#}LVk4~!}3&cK|nCP-i97G?(bgJ=1BCMwa`JX%`TwY=H->n%~Lx!p4U`fSRLMLiDpt+ z@RlE>uu=c+@w*?y$DwH194^Z_-4GzZSBg9t%mkfeVG{)8B51V zux9w$aN70;EI$86K40(CmH*pzJVjAFFj&L%i=(idXf&2l^$g-otroy_UzdPtcMTP%(9{% z-aggi^~^`aNh8zpSAvu5x44NYQe!j}0OSjmqtXC5+A!?^+jz`;V}m)Pfa`XdY+7Ec z^RZQxo-BF@_8;ZZ{0J09G0dW1giZjy2BKe2A)MGBTVBKhSOC%nD=fjPCC6ABHFr}U z1Ik`MaF$&j4K1UiCo5E12}h=Bx36D%_$MZ$cpwbyk9!fJI-(xKP#7*-lLs=b%4qHa5&SrlcBPBQ_w4I4 zrZMIs&8yAyFy0Bfq16~r0#C|%^F`Y|*K1S}#sN%MQCszZh~?Hn1%z&{xviVp?XX7gmpF)iSFzFeB? z^RaxWr~R`XNIUo^nUf|Xk`7|o7+mt)uzUSPf~53Bd|I(`d&W(7+%Z7LC=|Sdkb!&) zC?1c=C;H2RrksLSxk_0_ul%Vi4Y+o30VXA)rX;LG_(z**ZIQ5h;q*RK6pyg_v@Mb* zZG6zN`1kS7!ow6u2rRN|_bae<#;(f3r-iPOqHtfQGD@sGEeTB^&OAHgYwJ=#%f&W$#s*g>XqF9^4lMU5TrBMn& zrqfL0Nbb*q>R(FJu&Bm{A{M-2g`u$k%4KwRk=PW=LJJdhQ!c&9_-XQ@+OceO=x<9v zb#Ay5c>=#Slu0>xka|R7RY7_%(%zk^Tnj9tw$NV~J*M7fe+tLJa@UK#xoMvp$y|?% zTSdY5yRj2^iW_t+31s5P0mwCM*#d={MIx>M0^a_fTb;3<*6XcFqwhgiLA|I@a$Lc% zaC(WoY49NOV-{Z$M2K2&bZ=6m3x6Wfb9Bmlps?Ej8UgazMtT52~?5=tGW}K%!@q=H{;)344lobO>FfH?j?;yn8H6IeZv<6nVoBHhA&AC?!l= zTU)?)d%e$t9Fz?kqO<KdZtvHzLHLs^n=oQo*x5OHbs zj}ld&#KHZJR@o18cEAdjgm@i>0xz{y(q0?Cfl|DMU>(MCp|c1Siv^qDLshn0D>8Wa zu1M!Gst+-4l~KPt(*c8Zfb}magx?V>05mISm`o=__N28!2YqFjL<1g72Mya-I_Y>G zK`D4Y$oTO@Dfs-HGS5Cu>Dxm;?;;QH!x_y-6E7B@5^!#7f8MB_(+m1RhpE{IF8Et@ zoGE0i7~C)dx`-L^bv^g+#Sl}IgGxjpl}p^{UgjGJdst}&EK-c*o7fLOV94)mpfu)R z1$)4j4aaGU_BTxn{J|6%>3GORHz?s)z$wUiGpLs;MMf* zzrE{lm6(m65z&~4k9UnPTW*_NkL`|JZ%e19yVc=!{ZY^Na)EaBClQE&Lf1stNE5@q zRW6$Amt~~ml+DGSz!a^*_i%Ye{}LzB%nVN1!i76bJqOpEmzJ}P*9~EJ;Hhi9(3?p>|X^LR_Zbf+$!N#ncjn7Rl+V)yLc}Z3FYD zGkFRfF#TZ)s$rx6oT5LdZaQdwyU06PpF9<>(Ibb%7sxUlJdUAOPJAL4vyvI_xoS5i>!#l5E6 zc1p;)G)K)XXI-%ra*y2g%L@RNPlacPrw-=EE3tgDreGxjyJ*RrF56d13V}_p+8Lrp z%m{~rK`Sylll=W?qTAtp@5JbHF`oB)hFw0NX?Vg`u(;W3cXDz&t;dcSkq8NUy6_%r z-#%#;L-|K<&YE3iF_~DZEhqOBikOTnvdh}~Yo%G=)r4fjL?wkyq>9@5OFvzc3{Ok0 zYpnG5A5eTJe9N8CAZ-{3=07HT%vmA;R666f^E#3)r!Eh**Yd_U;A4%DoBQF?s7%YA zni=BwOQ(uQy|#T7`VjZY4s);o=(ei6iL%v)ntk;6WK=g}!S+oJEELfsO#%&3xPtRe zXZ)Xwl6pb#N-E4hHB9F@Htvm1ug7+KpU0F%{ZA{mOE5kQuy)?a)-9yxE~srorz&cn zrxD@_`LkV%b7|rUI`vdH5@(6HNyEe7iK;D<)(b?FY~LJ6=Ap?>M_I=bYG?H#zoPGV z;Rh3u2sk;_G~?g+>u|O5Vu%TvV=|DrVl<%5>PX~FDK%TE!*#?8nI?~`Dr>r*W)=vTaYU~5-!1|v;{>g}{+MRWD~FJ~Cl z*xip84;Q@whL|?PE}a99q^sW_R@Apb>M63wA%N<|$_GX;sJ2q|^Ov&q21iiS2p0HK z!R0LRDv_Cp|FrS@sVYJ*pb{{E{0Oy|*5&9=zkuPPmVh!B0+{H$%8JF@4)^Oft12Tq zo3lWM)S;$b?pTPajYn|tzqKqv8ZM&u_z03($!KxHl~z26T_{BG z-hxQm5=zQc$v`!SwQa9U-&fw6x7Ei@FES86j;45uR`hOeEzovq)Z9fxM?Fg@4w|N( zkQ0s}X(BQS#q^m}s}VG-2w|pY-bOZ;%A4u$8%#yZ+o#Z=MOXY>#kGlIg$~Go+D;Ee zV?Ys!jkjFz!VC_kkCs1FU#r&|CU`%d~#zOhaV{vBwL!fmQCJ>NHS{hSF4&(~LNxirJwiI_ri2 z$C-%FH&DGeFu+1wLg@m!`+=vN0@ z>^e8jkrUIw5!jI+yvwR9#86jq2!)cdnX15sG0Ds3E`o)L;gz?7sPmJ-a58|&KxrE{ z!j6ZRZm;`!LECe|f$xB9GtGf)jxysy2K(EzqF8OkB1>wLcS**2%KQP*&8HYAzuX5X|{|2gxv0+;e^B%|H$$q}F`t0yFgOy+(vZ=>{)H zd6P*!-U&gq5g4Ags?dL$oqjvge_cj6B#JYhwQTolN1?jk{Q=m3?MkLl1$GpGzZywn z3VuA1_hXt$e@FK8TCI9t$X8xepU!Ug^)a^g@-sDcVLJPxO%NeP${0y{>A_L*vlfh_ zioKlTNm)KdR3k;YL3PK7IAG1!i!$~(QL8ipFNDDxA=e(vJDJqF9KIPRR9fP8+f3-+ z_3?=a;}8Y@RzM$B9o-^WP6X{jvAMvtYNt}0!|qW2Y857%`^0xZ$?Em)-o#2mf}OX~jfksfvq9T|-5d`?#Z zD=_{5X?7cErt%BfPVeU{F6vaJ^y@g(_Faucn~_z7kX2zsxFUaS0EdJ1A;a6A;>XSA zQ<*-~xa{Kv!5y!9a3gJMS*GyxuIXPoEVt$dHt{w`mojZe{qAewzW@R?SZ~+Mjnwk+ zIDMb9^X3h|6O6b z3#2c5(X{z?)Xlr}Kb`ER(NnH<_|>S-1}vw_+m>mq@^W24^ziAIExz^W>uG<3@;E=k z)ic3+B=Sdr^n@KM{%he6e)b3h7A}3|U$FNKsuRK$>mjmIi){||0iA7O6L9WvUo90g zA=|Bcz24h@9^aob23qHm^bpfG?H+43$+OxSh%K`>K~4m{qUd{_ zD*V!6z$)roulmW!ITjKqlW2vjVp|W+rvQnpReiMYD4npM^Ul9XfF;igZ>+M20L2R5 z5x|b~(3>f0g}2>8%m6XICeEKQH&0Vj)ts55VNLm>1ZEs62H!yB?8Zv{8 zDJdv+o4APJ-^m|pq0avOlZ}=wCpT_YE~dkWuESH(o$Cp2Z%V3lw`hkL*R$eaQ#(e= z4%i11z1N)p-FZFS%*yON0GaI`b=@oLM`#9(djIv}C(A*sp~OqH*i5^%y^~-~!5w|= z^0s;q#L-Y@<^JJ+w+IbI(Dy)NA`Awjyhd?d5oK)g-X9Bz!VU~yZ-Yy`2UARn{5485 zJ%}Ii6dtnGrL)=0ze%U6x~{1&*xc0guySgDanbC1gpfC;$i_ue#sHd>)=RcR}0Jpi5J=I3)WON+^|8 z7~}J=NSarYNM@abvO(wuC474mW{l4i8cBKwahl9Y#!;~RxD))!ab<+E>8oQt5VrE# z^#vsyI~OV8c+&3^CZ zeixUKMwaIGmqA%se9{XGQ-o)a3kwLj7+sI+?OVNpsDEFc8t2XPI=_p#o>8u^U$i11 zp~D2ZZaR1~eH8SZW{T~m%R6j_*Rn3rGIeYAPFTLa~z+=5w`8g&qK{c@$Jk@^NCu(_7Q#Cb@p6fAQSsFDu5bj=vAW&_0H;kiOl_nLl4BlkP z;fwz+7aX*xET(gO_!d)d>tlNm)4-k#CfFj|BgOsQYvXbf1P z@N?XK;bi`l4*q-M?Mnm6CA}R>`7U`3hkf`?h!(sHlw3(L_**~Vj0Dec6ikaj$sMgi ze(DjszwjF4`ddaEKT8IGs)iuvOphrgXS9_6hW_HVFP3hJHi~}l-MOBazL5mHdgYgN zQzYiTfN238ya;}%D&vvh$G-mijo(#8$QVmHy%zEL`|F_5@w?kKE0KKGT>jteu$AO|HNFdMpoL$_N}QmvF~9ulmD zVBcX8%C&;G*6Tgjl7>lE`*j^V z&nvdD$s9$s5isL=W;o#l?S4iDNv2w^?!yTGCZ)E2-dCF-{O0-nT5srPR+B(>)jH|-V zp@YeR8C(v$Nire98<*wCjNJ9@l9C+N9CozKgVc#2bp%d~Au6EsW!NG_`{1w0@N*&%}YP zO}f<+WIBUE2e}Sn26dV(=52AmExXH$z{*6^=e3N33<)UF&%}R3cf!{J;dGd?4wzV& z>;(xx5WMRoaV&Nq`$B*#MZQ7~IqIJTh-SnMtXy^rfzrjQ`P68cLe8V0pRrtU9s9!e zS7Y~H0Yq<0X#)DT|HcL#ap3(v%>8`rY@g>C1rR9q{N6b~o8}31I%=cKa8gImv*V%b zhS3vV@W1ter!zFbqCos9v_%na0l%-uzZ^@ke*fk3xe+uu2}5jbJzuOa4GyplRW3_T zno_`l{0e<9S2v#pdCuvT#69LFPxU^;j#8)8Z$m`@Wu`xSj4LJ!EJx)C>5GV|3k!=MILSX!9yHINL-a{v}6^Xw! z{ab}M>q1$kO#l-nx5E%HMvFUpdt*v`eHB#<-{j}( zweHUeH1`*T||9(MrAhKSkdCWKeoim!>4fgTwzPq?;G!FCl1$L9IT`$ z!BFd`Dl7kY`Dl>JV|O~Q(e*Nfw;7#8QcbA35!fGv}e8yfB{|4gQc zi)Eb9UF{y(jpa1KYvcw-HT}v(f||CR;`OU2K=UCVhDkrH&;gv9`L`$pcLY=~YP%>@u_xl6o zy7J45Gelk=^O?sN`jb|8Zwd7YWwjqM7Y3lqZ6B?Cf7{hMvi#;>`c+tVoA3GjH~^}b zrgbMDL1gVtju$vGNnnm;AC0jGMP_kcDe#D zJ1iwq*NwCb$Fi?kvQIBZGNwk8!a*ys6ao)#04@%bEO6e1OOB5I!d;B`n+|2yoc zoYbQQ`*QXsepT^^(1;mAJ1c)ggqMzG8j~>Q+745M7qv9x|95|XKBbt3YnIEb$@aM`NcK3uA~b-=(_jl} z?urkEsvd7vp`xEWL5a?huZf-wA!IVgR$PfqZB>A)#mDcow^xV*UV6_-xX4kc9lJCYclsTB$>LPw?Z1SLI;%1B|U2}k!?uy15OBB8?XN#T1vPy#IzBqmHAAgBHsrjSDn{tJ4*AT zMrvlB&vD2k%xj9Wi)|Th7)N~2qMqNdY?@>}kO7z2CPk!d=8`ubvFcZn-GTod%`ZgJ zmh}EB@rXr4f;04Rt0KbO&xO^^kAvn9AgJB4U4mQQLxp8sz}O6Kvt?I(VFE7+OcI>Z zNt}$EFhG*5I_V|ep$b;;0yI83{!_t~9hfA~?o<`aWvD#i$|lCErKKpb37k8x#%`7x zCzly93geh2P8c-qb*v67nBWt#S5iFD8KRw(?v8A`OAU=wkgHQx>yD-d!u)10W656)^o{AN_%pUn4pWZjll>XjJxHS$LLxPWA8ppfoBaA;^HKz=2K{ z)GdHRhe-bSPrvdCHUnZGSEQOW6h(xM9<(!+cp)MP#9uRa3?@U=?R|X9$p3g?eQC31 zk3D|S>LlC6AMC&>JE$=Ie8Q=>zG3^==5zHh?YpD3=&HMV`e%g=%u$#eEs6Mw49PTX%7%&1g zgzota#pf8s_fucswl8k|#bEBj*@dCCMU{JzDn(T|+^5FejrV+CHfA`lJNn%o;(#|{ zBud@B_7!BkWHl;xfEe^ z;Q+Zn=6P~$-E|r!jhF=A;0`*1-uh>r|&Zf?5ag zrHqLKw)e-=tQxo1?V z^6N=uNDqEMS~j*uny%n;`+bP?(mAhGEo^LH`#v=^UuRf)vVgyLuaA5 zi7VX;GqO%OzA2c4Kr;^b8Y;y=u+9^(=0MRB3@!zXeXb00!rygU?g6{pTYTS^slGRk zr{%JY?RUPzbe-OqD43@lv-JasGpa2~lfCbVCxYm7&r+*Bhl)2SjeP^Wf67UscumBs zoDFvxL}iCqqbb^4xjT1m1_wm9BM=e_zS8Ga`;dSmVU&N1)_=YCdu#Unpnc?geOK3z zTaysB#`#_=DV`#-SfaEgHoAXEs4wsnB>?M1sm7L9l!$7x_n~@3X%ce21Sy9KGuTOE z`c@b=lN{FOD!zK&jb2gBg*3t!RZ3IVRw@u)K`oyv%w~8F_$|o|pJO1l7Xv;}B$x{s zu28rSoPtXj6Ii52J?hXi2ikNfgMCvWx@$i!htf+;etm4_X$raz5c7DQS|@TpRx)tkLe+)T$@g@>%_w8fXTjbvkJ57 z#=+65DYdrIde166(74i>(wG8{^8~;+@1a>)V2ZZX!U7vA5b}^N3G8bS>(d$zb3lbe zCcD{~vHtfRpsRWua0zB*xDlqgmc7N|3nc)9+`wDA+W*V?IZof}WNPZdwZi4N4xxwn zv-$HjPF#3j4E#o!675SZSJyDiMS_*}KTfP!^Tm|aQrPBGZ zU`s}gD>IEOH*#v=)7~>1kKQP%(%E)_0SP!iEO45mYpcVHuF=;4-!x{x6k=KbK#H)7 zdYyJ=)pR)p4a*_=L-hn#v;S(Thwp+?=H1UG?a|J+DFefjgt-v}o&CaVVPI10$@)Qs zMVpdo3egVQZtpoKhnuuaq<7mXCN>ie)=*|l!2?y$ntSHNvY#1&1Q7l*4{^&iYG z?%|Mg*zYKeR*xZnoR#X!Wr-U#3zcueL)q!9IjO8z3Fc{vY-d(fej99y{!q8N?4Nn?Tn!fcqLy)IDQ z^QlHtccn&76VpRjwiMNz#lbw9{ATLt%}=+do^MYzs&%@&?E9}F5_T6;(?q_n=C(Jx z)!rM(az<0;d9Mso$a6^5Bx+Two{W#*k2GIywDnrhjVPPDb+`Kgs*(D0nKh~yxBK)n zsY0n~%72ep9#TdRgy*}%Ifim@S0G zTOTtjRF6r1t8?ihrtoJwil>44POub9_H=LTn{;V|ApR1Q4wI)Lq789hv76Ag;nEd% z2ops%@oEr>dL$0UjJe1j@l`L}-OBm2 z?~4i~H=WN(S!ra-&PA_p&0K{B-ZcN?=;Wk4h~(6KI$*x;T)1X#V`VKgqtn;0^M^i1 zRO65`#TcKfu5(Gtpo>2mrfng3Oe^!Ag-T^XtQDzaiBjm9E!7yiRw!$P5Kp#kX7s%m z;fQC7MTU;?5FS&Yeh%_=HknYvh+SBNm^Ym2u&bUZW172HWUQU5v$w&Daw|Lj7VMyG z3GWfMX5$M<$iB6WA`n;yw7+8eO0MheoX2|%mbj!MSotv_y$!R>k~>6v2ZCAfRGep?k(n+=+zlR|?67s*);r3>2sUR@_f=w%Z7|3# zXHFiBGFV50#{yu9*nZU8+7cocK@X{zM~5gs38L*0`{}n82oG^UEn7mfTg}u~W_Zm# z92!LEeSo0=_Aov z=jv%Ak87fsH51lN*odYwyLzYO~!? zeSO{H`%8uWrVs4Lw9i@HcxFiuSCN4P$dVxh``!wQp?>|+|9wVvKYy;5fz2U&k{A7q zYVbGUH>)$*P}Nd8wuEpvIZ+_7m|=XA^0z`8L$s!q;XOtAqQWF*ng6Hb3@39{BX*#%dJq+8C|iN$3hgh%V-V@g>(D51zHj?Rv$F$rBusEuk)XPI& zYxv!FzoGaYH@k5>ptpAyM10et!)p9x-^|N_uf7N*l|JtxfZUjR=qHwjWweZ3BMK&m zSzB$ZNr-8?(8V* zk=yQ{4JI&A%n#y7BmaM2XQU+kMUQ3rZ^%&dlqO7CP=;d&urJ7L zMGK9Zk%i%LABX*}Zw@{H)zBTBwI^;I`e?W{M@#%@64SWge_$*RF$@Z}z=g-DJM9F+ zy&IIZ^|X+5hG4Mqj=%LU$S!5)j6qj2 zsMAa@U7r??sY?pE->@K(&;WT zDkVo{%w3Ozz#h@V2}KX5)uK%vXX;k#|Hp=_T3~&z;gU{Fn^?83llR)%Bqx;>*!C-=4#t@Ena|OuSI_RP@2C2tYwylj@(%rVcrEG$c0-8 zR=q^I3}Dd{FYr0hP+rjKcZyXjuOo;Z{8jg(@P`T+pSZsZg6$h)V69CSC4l-!6Z;SA zK5JyuDcoF&pe9970Z*U`gziwNZHsn7U}AHwf;9@6nMI+ytK&HpXVu&R zCjw<_AchTA*gfamMi#`m5vbbrO*wvA_!NL0H6HR8@s)URT9b{0Zd{LyJ zZsj0?A$p|_*K6MAqM!5rjT21PCAOxH+JMBbEeua#!>8h#g|HE0xpz^L-3l@_u}kjemx9@ zv#Ht6cJ1S(S-)6J16Zv@^>M@amRJd@>3m^vw)2);D5o#JH-f zHoAz+32D9u_jxrY+^duU7zIY739N6hXw3T5GCh{$XYFK2=Tpu4ueWX+?%eBvawBf1 z6VLuCc5i(|^#2b4SwN=0M@daVf?K!?S(mC4_t8Ojsa&r048mm4>S@Cvp_M(A%PRy+8ZL*I)bYdtd+d zYd3FiT3*x}4u_T(1Je)y6~Gc=++HW`f{gG>(&kE|MtoUGaN5HV9C*ymtgckcrGB?l zuNKQ?V`F1S6qG1*nzeeRR4Nwqfin!kF#S5F+QB*V7<$ScxCl-RyF73ROI-GX9e|LP zYoY>I5+@-L`8Z6Fl?d1d1NbRg?bLRIX@g0zcIFItWYpPA(G*n*4)H+OeicDSm6afeAoG8-v9e1E*Q zFw3V-@|f7;dh|dh!Bvt!H41K+#ylmFAF&r+`ibBBgFg~PlX$xZ4JpPgF;CdD2CAwn z1g1OiGi&|KYPD>3J8i%(JVH%XbR!G@$Jl5h!98-z-`x>GMEN5UA}jST&;V|xk3n~yMC3E1Ql0$+)EUW$^$ahxCt{Rms_ z0ytqrN?K78agnZWlx-Kcju`ZMpM3WD%NHMu{BV1BCkVYKuRXE6x&|j&T|YDMf>+*r z`>Wr4d9U5M|8V!4ue|a0jhnYNHy`e{iJ*ugme2rk0qY`5a>3Nabb(tMH^LGXUIC&D zPFBOsq(r`6tHWgjJ^oJV# zdFhHH7J`fmQV+Mh%5}!cg<(@S$fvz>1ehZU7{DL>>%aKBzyF85e(1NlT9k-USSjc@ z3490a6d3+)r>n@)QoRJg*xKG{cU!BCrAE0Z3z5J@nkEAJuys6`*bq!`QmYme1w)So zvs7DzES{$xNZQPlfqRp z(s#Yx?m!geqG^Ijcd#VJg;^1$n;zjJ_Xr&eTnQE(3yOu=dALWITQOz?C9=0rtYdtRq+lY&S{)s$f4=fG+q7xZcqBuD^2=bmo=Et~9DOke#o-{#Ls?+}eJ4 z^VZE*-uf6!d^V@UiTH$9OXU57;m!JQ%`K z076Tu^;)r5-rwI1d?%$;!lK=FA8{Gfj8^=J3*n|gxB!9Ei2{Bmf_i!org72<#%L~= z!XNg%8ucg57&%4Fgq#Q0Q^oKS)r%Fk#6f_B+pD%Hus+mNHqWb7i;}|AgcvZjRo?UbUe5vr z;!_d;3xhdeQ~(=%Y^wruJl{#uvab<1ttd&R+(vZ5U_P&Ls&0$N1QV^(UXc{QA4^y!^_yHy>i?flthwF-a) zB!H&|h{Dq=7K_=ocDfE|F-@Zg_d6I2z!-(0e{gUBQ$>>aVo?X!t*@@Z_!bPHrX_?^ zx`#%HR**|K4&y*uvaG}ramk_>^nz%pI#3PU8KmIHp$6KjX&SCxPNKBW3I_mAm$AcC zmVm6+DodqGrM3S6_`bjs_Q-u=K3)*c$+=}^YlqclGZ-9^Uw+(ubyAWyPOwZq$fh_b z$sK9D5h%@?!jVZU;pq@?t`deE?kk90V$-!Q0s|KM^S|;NfB(1t;QqaB*>RhuDGO8; zq5^0*L4^6*?pm(znWl2~>=MU?-EOy7Dl}>(lgIqI4-!it1+dqOnl@GkV;q~Nj;!0CA&@J7nW(6Is<19)9r zXdh!gdsH{n1^^UZs%Qf6WR7CIt#{AF^qp;WQU|a4W>|%$rA+ozLtk!Ce zoxiZZy#tET8uohq7SeCrOv1y~p<(Fy4$mb;U3&J)#V0PF1=g?|LpQ*)f%yVE6#y0R-Q9!zFb?kC|DfONUO0aN>=1C%XPq) zy>p9~HOuwjYt7mUm;mgN0Txjd;R;fTDWuEovC}|SiCQX^;Dol-7e%lWy5qPoHuYM? z)MbLokfr-H!dT;uZnCIJxQLXhMxnW~y1%#MxfV|*5e;%;soFRt$miG1=C$0IxGh$g zDS=BjjTO^?D!yJA*c@YWx?*OUIF4GEjxJ`hfGYEQ{4|GNybh3XqZ)3)O*V2JFU`$g z{UO&K3*WR8GY|X@1ReXuU;PJP`OW|F*7XOX@Am)Ih12rZoTH52D@mwUq zF~I>^1NdDK#4r<*^gen+tJ??tsfavl9UMfA4#Vid?!KzY082oE8~8xsz=OLOY{Zr0 zENya&9F*sKuHOZpOX&cVVvNPoVGIfpyd3->&4eq&h*|n*LfkRUQ#7Sos<^fb7_e=> zTB#Az@AVGW&tA0#mSO0!qO=b>VdU0oCE(Vd{p?FuE?*t=>>vF6=U#mAh4yVzJ{o?N4eh9n;Xe_Q|EYzy? zC!e?kRR6WN-q<_XYgB5$Z7G(RGEFt&IKma!Y0)RfN`=wv0P9ezR@456w9#0q)$0Yb zc=_^W+jd&*7MP?;sR9(q^E|8w#+m^TuE3}Tj^HlgOG``b{ar9RS+rrYv-e3grHee? zNvrG`_GwH5_&``>+?x^04G7PZMLP2^?RQMe!%5xEbldqPYonBwmeU0%$S3X(_a01_ zQ;+(@2t3H#Er@#DnfBRRy@=tEQbEhKks}+4Z7EyX&@v-bWuIpN!7s;CLg)V?~`hiHOtc&2zyol}h24NH|H;ihbgcV?E z@DL;Wyns=lB#}W@C5aOS0ZaP0?+TwT!p2e$o`4q9g2=OM8&{TPwIaCWoJ0wL5_`;? zSzQYQ@7k3s-QMQgZ@>N0i(j&a?St0dbI*OQ*Kw+~3S5RPsfH;>iP!J7;IXc)UjXe# z<78m<-g)nx%jeIP3q??MFec?n*=p@-Nd%DcJ*-K9i4bDZPXNSUZB)Mc=IzagJ5E@@>+QF9_XiRRTcz7+gRj;M-H$>T3K(ka7bu`a0vpt*R7|v$Qm5B>^4gR2Y7Ow; zTwVeYZf|dc1!^6%l2oQ@y6(81WBX}oHF!}i#`r2omiu4(fB&yudk+RMCA!IJDCoRa z`HQyxo{70gsRzS$4YgTQXz?Zp#aRN%7!1)Ae~+h78hfV7nH0v?#Fy zpq@anC16lOx+D}k-6j!S2xw6_KBZ}H0PD8+1oflGak6K}J_yp-!-6|e+&_4zie*hR zuRU>bW8J%|;V6VYZ_v zjNS6`Qp(_Xklf&!lC-dWXb<|sju*J?-v0LfP68%U(=T7T_|=zR&WdJC(+vC&OfnF2 zq@c2xjtNEpz;ZR~b+AK09Ce5NBuaP=Y$EUa15lp@vw$lsW%a^ikCn^iO0`-pRcsrx zATR=08jQ;$8C=`aN_BtlA?^&vNx9VzCxGyH?Y97gEM49!W4Svv;Raixk23}Am?gOB zdc-tXd^9)6&2GL#4kMWy$v2^yc;oc@S)D`fR&yH&^SOecTn`*FVybD-niH~iM4YH5 zQN(`XSAO#=zxB_)`_`SB#5D{0aA-S0BJ*siVq(v|B;rszgqU%l9Oxo=iZFk%?w4h| zhVa9{Nf#Ul7n;lUQW4u@Cn*I4JMH1#4PeU?FvC7z%kx7PQ3{?drhE_lo#VnG07wIP z6@~$2U3?RiU*xA5WG|xN*8Ip<0N#Zv#$4hsYg7wY5vG0u@azOp7lWtRkd&kiQ8Det zVI>QQzc8Yh{iG4Lzrd0V0?HCx3QQ(2DR3UR2Jn?jjpp4CZWpwrrN&CFT4+>Os@1w# zDBk+ugGO^nl;u*n3J@JyeK1K69^4;T2fz>`w--9S&enYnYh1mw?I8goE~V5OEd^$2 z6O41T54UVp>3Bi9C#16+f__1m@$ z4i9hw?jH^a6B0N)01^Hk42J+Q&vilnojbc;DiyGmBV`XBZi2Y4)hg%CuEJ!Ifr~33 z1cXw#Qm-}b0T|v8We_i_dI3ghZ+8m~Yg)L2Rc-vDE`V%7o^Yn7bWy{obfp~j4$so5 z+-MEdNkN*K=;(|_Wk++5`L+GiC2WT)xQ>Ewg6ka1oocZ>sS3dL)&eI<43O|MzwjUb z#y|M|cdp+pvUs&>IPTB~S+6NgV4^Y)W*DOcSeQ?Ov>;PaWn2mXE=(4HH`;C-hRlxw z&v$Djv!cU{Q9#Oj4sNj!0|ARU1XPlwTV#fgk4eZ73j{H0((U(RhU@x)k4DlG28&02_yjcp@8iQNcJhwD{i+z#GL+XC@;0l4Qq zR-foPSPuj9LvT0nT~tP55C-6Cz@!WZLq%1~<^PYiH-WO_yv_q(?XO!=N;b9Gk|o*B;>2;}#IeVdoOm*EoXkmP=FFMn8K0a?;&?J%V#kUlS=3IG zA}NXs0D{;WXrMRr_V&H1UM;V-xwjes8z3N4K6bMO0lmCe_1Ayz{l5R+``vgVnwXxP ziN%C$E*1%=AuR}g8#0v=*5E?!z& zy$(+aRwNdS!Oa>*KNd~sSaa5o$E3NrsS6h_RBLtYSH?pl7Gk2nher#ez#(-MfFvMP zf^7o;y$&em{|Ar7IEJ#I(6^O>}}ETy#jVg!;^XX`Op2zKmVQUE1Mz5 z97&2SMRqz}fu+S@(6x-7rUFu;Sx)z};6Mn#yf_}vCR1JeZ;i^Wu!epf8tbzOvISO)gF9`*v#}o1xit?QPn!H=J}^C?dV>RFhYmah z-lW}ba17R?V?6?RbP{W$67d9V-@$=FJ{b1Rk_v-;NMfV0y;Iz9ZN}`&jn+<~Fq+E` zY;W&ezp>PnJB>O-T%Gm-UPKCeaFH6oYm4NB0L6oYGWw=$=q*LYUOl)7*sKA7t}aC| zrsL6Eu+-^&^R+iU5^G8Uu1it`th(Lqunaj^$Zc0;KklHy4`qbJ{i<3&a5d!Z z$;J*5AU}i=diSV8`HYbyIm@)&M<0LoSO4e#xN)=28p>dlkHw@~u?{O2N#>J3^vm_|6#E#Nab*tHyo3LdR4GS0hmfX`Upq{QvQ?x%2)9^b3SzpQl(-9DF zdnQ&$Lx?ji8-5LNreT`^N8ynZF02VcO4tB~)rYG9J3Vpi#83Rhsa99Lxm~HXssuyh zAb7QhWu{mg;_9Z{YSoV%c^GgeSW+QBv~hEN|H1)y;hpXEnd$wpM11MS($%YAerhBV z$Kp8@8YX+)O1D+4H){}-!y(CIf(9A%=&<1iYS=wYLJ)>fUhAm!j$CQBnw?&?sWL*; zqS){J@Ex$j5RgnM0$8KfZUMxA=hN+WgB+jF6*?Uii_RE)!ns@q(|wjvEbp9u@4cmK zH$|pY1KD%H zoFD@FVyO6z#ag4MIf|~z-46VwZi0FA6s3a!FF*m>G%ZZTgH8E@=J;RVKN9pc!f@~a zh7>%W1=r!4w%rG2h1CVvn*~3E)h!Y^uLZ`cVOE5HH*UCF6Ns4vQyRM)3K!fak^M`jD3yBY-n&At;llREG z?43fhr##4)YWqu1HSao9eb7$@CSCFp}K?(56QGl2EGMP2|^D| zqkNJLpN`Tqx{BfefP@EvZ7J|q9Y~biRe<$KV#q@pscS|Lm>Uj}!D=bX#9mz6pKXHZ zVYlpbcO9_t$yY~$2kPujfWgBc|He=e3?T+y4rT%vfWi=q`!*0%J;Vz~4?Z$BHu(12 zZ*`j8M^7H0N$&i)3y&N-?6`KZTn3Xqe0cv0&p$mowNR=S*$|6Wsd}%`r~`}ZwAK9J z1cbrKiOHFnd0r4T!vyyciHW^#i}3>4Tn?hNzzLzSD2U?5<_25^EHW4i%VH8W5*E{m zbV7{7{g@iYy;w5Q?6$xA+M6yJOvIBUMU^WR+p%cW?*z^)m&!%(ceQ#Y#Isx5n>Uu1 zA;h)YEd&L&t-_8cJOHk?zd*T6E*6ag3J3(q-RX2fJWyB~NOHH^338atEmg|!w0b?ob-cN`ea%K)09-CfhGFLOnOrWt zCUCoNnD~GV-v_Kd&Mv`=4}9RRZod?9f4mG9#QJ$hHXQp`|LY&dB4hA8 z(-IR7(mh3HNK#W(hH%nRF%gjnoHe8eu>qBHY=3AogY$jR%^RkDYibnf8v+F`8lt6c z;wg)cI+zX?W+L|K+sM`+(Aii?=h&*OC@MsYKH8Fpz3(W%uD-Gr30}eH4r#k%))I zP^;DGc3UV)>H#J+>-B2AUc=$R{XVdRkPw1Jh{a-B+xZQ5k zGzkyb;9JP$=y9>3+ZH)Dy#D_(?EhnqdK) zE3!H|Ito5lQF?(}gHl|0Yj{5KWL)jZomPX!3IQB#@Yh$`cK@XR2O;e}lTRt)ff+w< zPcuW{$1+0Vt|s8XUuuK_+ND^8Fu(p=|8Z>UsHJoz+Tz%Nrs8RysmT$M&1RE=$b$)) zx(eVBpdRc+25gaK06qdV1rXHj_1bb5?vJ9dRL%AavU=Fw1BPh8*9_FpcEQpN3nydi zme*2sf~Jk01-6R43yudb3-;r9@D?WKjQwL02vEN5xwnpceVG(&S|xnLBasTbIAz)a zW&(ELVyh2!pt=5RU_6mQNifd=iysrBd(p`tTMbqZ5&c1baOk z2BV7c!4MYGS{8gU8jJbh6I&>ntri#|+!rQuOl)q3f5P5?&<7#W52Ssb7Xe=zScKbS zC^i-jPmGO&3AGz-iX=IX0e^{y0FnrQA^hq-K@fJ04RDQPxjjtYYpGPqa&Y(zc872b zHeXPJM+Fkeu+nPCau+c3gQkoA%^2aGCZ@ZT*Qi_h^Y?igaku1Q;LbO04+ZsZwG0v; zILIOH@I7L0722M1wD%e1Zr>7xrMFyw!;}7>`=x(z;^{A#jaq^ySjq)-;ix)KlA^%o zb4f0Uuv6)F@Q8zEdwM?-i$P#&G+Tf`c4gB2$0NgI42MIugRMY{s;H`JIeqY*ss@`< z2g}q@*o2Zby9x9idlYd{Gs`eI0Df2e1S?2(-6MsfL$2))8}zWe8cWP9lD!wk%0g+KYRGlfrq=DF8UUV zk)lGq(}V~u2$AcnH|x#r*w6$=(ibnCZ#UFzb`y__aT3p?! zlv|w!GF#KeDRH_XhJ}bEfnQ=MvZvyy6WC8WomCVK;wnKgVIho(cMsPeut_SJ1~P4E zJJM!ex2K6DVswJ5-~ixi8!#6Z{q$mIvJ?RH01HGtmTjtT@77&_Q|r;E@gnMeUh zftbuNcy^AXEIh1HipOF*l}&(D44#x?na^z*HDYg@`kl(n2jwtspKB6#z@lGqMLt+# z=1vXv`+peKvZ_On>&}4X5NBnJjeBVCrI=msh-IIHYb740>`~0Uq z_xJuyvs4^O@W}5h%h5D}rehHy7Lyp1<#bg%;C3m7bx@ck0M;eT3S1J6)DX8jO|uZt z1R)IDT{rpwLp5FZGXsQ%Q`7rcjE|Ekb*ywoWzaq#0eGMm=HY>{AOpns<#~9b5kRp9 z6FVC`_ye~BmcH0{%7T^qgyRNw;i+F9h?5*>%JZAAu`MXzH{%hz$2r8VJPfB5!euC@C*nw<^!_Y-r6pTQiA3};Lk0smx@Q>yH~GXiAD3_aKy3AWIVQ2 zy2&ua^whK%77K&f;n6~?)vlFGrcw_wln{~>StgLfy3G#oC5sMFTu7kU5J|FNT09>D z5@1^fNg3aK>D%Wnu8)rG4+bUJ!(F+9b#@FX2)wU})<-Er+rb1V%jz0X(6&nPKszl9v#e4i0>KV2P>?}?i!E6w8xW#7uT?4IU~?oJf%}OC-`5BO_b5o*Z6&vl zTOL@neWwQd7R$R;E&CuN{2P{&gjdLu|a6zDm$#lvJP$ni*f)t(;vibZd0JCbN-tKe=w?8#mxVpUf zz1Q9V2coK7j-^CV%4Bn3CIsn9Vi={j;g`WGLZLfbq6HuAW*?UhOw4i|LI?_`VeRZ} zZI?D(A|Q%!KsmK~9ey|z3iW!j>zR{NW2WJt2jb{lI;*P&po>T>5>LcSl~SwO+sP;-E=-J#PH-#>_7AwdXBYx6r4xAw zGVq*f+_(-H8yF%~~gTupP zjb_y_wW;xu{d1F(Qxj*-y#q^`Ove3r=7DafP5B`K{S*-}5t^fu)-4>?}&u6Yw6yXH@(2@dQ{`N9h9S4WK&Au69KL zLN*v-kPiZ@gnySyMWAi)m94GP^2#b~h1r?;WFi^j>B)%^ihxk8LhJ`Fhgzd<0IZh{ zayb1I9v%@;RJji%5OE27OY7+X5Lm#j;HThUre(mg>bkzVb~BdDz>Rmh9UpN7LOiBw z;Xx+i2~ER<3WH|oSau&aVl4s3Sx{Mg}{ zj`!>*{_e*={r5ZN>R_C=`x;A<99G!ci3H#j5w5?j>NT8zgnSL_(GVj#KrP@M48Kng z03-Y<1L8qNq`q$GGLGxhAQ?1b%Wl=w&2sD*}uhj%lU zaIpd}0C9&UQ{*=6Z<3^w$uwO0;NVCymSRaN8jto2Rl>rqKFhE|D6IDkjtxbm7?9JU z!2-)N<#H($5?xdxLS}>k5C>nA3$!M}$MQ}=iio;`wLx;PBgG^s9LE%e;{ZK_S05}CjvhV0GQ`r2^;jYc zNT4Ij`Fs{`^v!q9b`{v!D#K#4Ry-De?9{Ppsq}+4-gx8fb8w^aWTx9~1J7hRc6VwZ z_V`&4s~y1EfTH`l$8XAI21*jS1f&sr*2;zJ! z8WX|-7&CAO6eaTdV4Ptw3is8hY}>XkDE{DviMule_tm7iZ-w`+UEXQ#yCdo3-EIja z?j4u?A&hYE1-+m3C+@tu_aMoApROT&axg9hoRPVQe(g8@Q?*rb7;sSTGeCxXVuuPZSbGip&*-BlClFB=@G;J>h2?_%ssKpow1I7ojZOl^=Q%za zjYlFeDJ%^R=77~Ck_ou-5GP3C7=*ZVI#VbN$+9vxGYiP{$dRL=kR;*AdoGjC;v+{@ zBL6^&3PgnXsYf0=b^Q4H+PZFd1A}8?D6+9$jEDk+Yd{xaF;=TJ!P$6ydv;x3@R9ceVl6 z4GoQi!y%x=)02~pR`n}i`?GSrGcYs-cn@PX;%d6v1?ScGr#xb@hk+kD4y*Azz_Gfa z@f>&f(4l6t$uMY-rqyvIg7VUO048rw5*zp3p2-YHeX*Kv^Fd;E4LI`^3=n=!f znlhYC)$2u~k->q1m6aP;uU%)^P%;^lyDF?$VJKx;27r-dEDd;vqzRz$enKCI(8Z#0 zxFZz|-mhS4G#YTpVpwXn+VIrCtJdnZ@v%`|?=3AYWwQf*JvVp>8om;X$FQJEheh^q zFe$)i#I%y4DeZRCm&qVMoDu#gbb4=zHF>w(urD3xM>B?|Sgb|AD-wDSknnzx5fc8? zU;pz~w8es;U6E|!zAD;?aY&nHT%MPHG(-Km&n+yU1wDYNy+3NxZ?U_cU-f9CG z0s!QZICvS)5-A?pd9QC-YOn8j6rj_N(uVI^euf-u2?(Korh*OZmaStWu1kbio^TmV z)T8UeHd7PBqla40*wPjP)Cl-$dSYK5lUF)`7O*<_N-B}1X+9B4n|gmRKM2oT5F!v0 zx}E02ff=~JO0haWw?Cg9qA7Z8Y^+ci-YJ$+@n|+3zkKEL{M`J)!mJPyLP3dV!vKkc zK>;jT*ZN?VCr+GzOMUCy<(c{YV6l}_S&`LxtF^wlp3NkHG_9_z0eB8Vc#^{7lVcPe z*e;bu3d1Z-L0C(th6V?Qg`mLGz`*3yrB%BhC>E>DX1m#H<_1zmA9hu%2k@&8Z)m8h z7LUh0(*289U;56=FMEtgvRqqk%C{siEELGVIr5B8|4<;@b|LOqJ%osT7bSU|@sXh? zo_M0CD!#Bq6mIPcpZ~-^`qIyhj86DT`?TNt8}4I`Q6HiuAPg?Z_}G+a)|=6&)b4YEQ=!U{FJOJ!UWg{vj+b!A96$YRYNk^j*@U6P8g7LzJ zO()|JW?QWeY%@&Lqsnsvt{{)YEUK?q?+HxOX_3IUwi3Y!Cq zcr4g55P1p8V}e0d2B_Zq5iJUTRU`C#$>3XK41K_LTlH{P-Y{@?Q!jB_4)ON+XW-WH zsrUY*w7r+&gIf1aIhyyrXfU}~wDfj+69Jom2+%C!0)79xU;5Yc2TtqV)>uB;Z8l`)Z0B&Yq3;3URO};kfZ^60%Oro=p}%?MSVljRNXWns3B6KXb6q)iJh>h zl!uZ5mg6}tC4>`gxodlNNR$jLf9u2M#=IYzt``ikaILdb3*(~`X1_NwI=F9sKWy2; z&=BlBF&qW|B8eD3VWA-C+KxUtIt&>0;>E?VAo|5tu-ls>!&yyl4G$H-vDI76T2qZi zqK4K}RIOU6aa=GQ=3&8D9`0_Z+}gRZx+?KWo(pYmu7|NMgkbSxGE9*)*peV{j~+jY z9pXelkofC2ZiYkR!rc6|>sP@&rBj1=%wrj<+#sDk@VBA-2!IS1OI3N6Bb!Yy=MGlY zG8}-)k;2Hx_}~xEzVZE6U)w2G0ZzIerSuf+>Di^};K2GQ-vp144+X)s?Fym6t_=$U z+~e?IVSIEv9FDyH`s<<;#+Xhr0T)NLD5^C%H8C)d0~C-+=eQu3N~QhzQwFfPPN%bb zmI-RBgbWn%DtgfwY+9n~(J-BC<3(ATNr~z0vdbA+d zM-6fWsPI)}Ca@)GPf>e7l;FFaX4SU(yV{#~i_GlpGYs4;rHw?D{RqYw8S!Q3yA@7I!{aDzj-51)MI=l;QO z7PpJznWWcO@zlz)DI8rCD8l~f0?!5v$=2Il*jo?{EYs3-9TiwC3*ZN)0UZQwA8ir!Qf6O+iwuUsiUye4 zBpC{}VE{)t*+5fcu{7-Cuo%f^Gm6~$-Yb8xzEK1)!P1O@RnQ390pjU~xm*3?`ty*w z0P-|762);EN>7Dlj6@=1qocr7A$HXowP-BP^I-^{0AGP=*K1%cYP-|Cu?+vMtgqkH z0k-xu2**g;4OH*OKJ$Jb_&FePcy^6?4d8z&oyIb67Yp89n}h`qg}7pIdv1ObOsrBV zF>G*Gz8Aa$7#I%4GISsXsYFf`Fv$s2&@ZQ_VG*XL#(SFCGc=mT=qib*U;+%Kr>Vd> zMKPu*3Qh;GY`7g&Q6M71#rJX6B=A57RRvH5oCAC4wi>t;eh2yk28=$awwri>s`uU& z2k)NR(cORE9SJe5Ox`Z{c5h2-dq29fdyQ{PBx}e=tQ&e>;qhXP?(0gTpYnn)6MOVIt=Fs$JO z?B>^(0oxY+Q!J8YnUS%ff!x6I@`|E%#R#}kgYZkJ;J4su34G|p$&=&bQ>*LCmens8 zTY%JUJY!JcT{gEi0o%k93GnD7&8R&c$dNBrO9o+^Drz#B#5!bxNhR}*X6MHB4UeEv zPeU^Z9Jp&|GZ|TyfhLVljJs|?@0kqA#KXc1KXLk<^Kb8z)JKjzu3#@b{qFgTtybN( zO)#NPed>kz`PtRA^-MOpw!V7u#AAmKEnK^C&2g+ykZ-kH4Y>iPD2d5%1U|)RLIQ8n z^P74BYQaZW0k%ej!{UW2XWx1EZLR0ggoM%`l%E^%RgWmYPZ3wcbFixrVuirNB6nNu zPPdDoR8U6???0G`XMhKe4iv0DFbf0B z5^IAgQZp1VIomc+n2P{HK! zwWaGqNW{}O&jH>6PhAiMcyQoEu(}WjtM}nS!B0k{7=#nJP5AIh@q>~KKXwV5=LPN& zI=r`bbgvPTBz4;Y1AZIG?yNHJzJtH_YKPvN*tp9G@fCKvI^eDiGVu5R(Z8MD|3t4< z8I(lAQ1L(n&``hMGi@2OLMR{)o*2)m9Sb}t>fvGKk>MxzbbrJT)*<56V_SW|a@;#r zJYb^PToynPM2uK0J~)^M0CRQmQnOX(f;=EGJlxg|QH+E|$?Ww{pFVx?(7~N@b!2FG z>FRaYp@v5C+dDftgj&6~wY5GuJ=ul5*lc36DMbS1upJwspQiP|ckWwQD3>egOnPu+ zs4J_0h}j@FF)0-HJT6!!R^N$=c=S2{7PwpIjXzpXrpZw!L{jaMx%eh3R+i5@~ z1B?QuK01=;7}CT-Eqn3G<)cTBY;N87#y7q>kQpskO6M<~Etl6U!-}L+KX~sAlHe$Z zkUMqH?t>AvS}j;;4MjioN~H+T4v_YxE9bXLrARDa7@Ua5qp*tLzIMkG_@hDsE>^}c zKwATj%~Ets6fK-Ihq`CG1wQa6{0er^1C#D!H9SO{h=5b)w`vtl>o)5}fONJ+LU?64 z%q940Xf^m1Oah^1KMG~I*iiu{N^rqoxwaDu3M0cKPdxVM-0bMq)+PkwPrmT@P(A?; z$hO&m!ien{vfSi@A@GUGWSXKF;LPw)P{qto5tqwFRa2+{6N^cYK6Y*ewQ2x63sFxWTOa$DUs_B7UWLsqhJ)CUgX@P`3nWDDbwF<2P5)7GWQJ z^vPfNrGHi0DM&5cjZHn;`PJoZM~4qVarg2%Iq&r1>DO`{w3Gsk{?UCBO`-^;R+xn;Osm@|XVB z!-o&hBr`QV39KO+5o|jU3WaYhFNJX~f zZ(w~eIPzFDoz7HB6+oN1uCA>uH|iB&cM62=fD?~Hyvmx`#oKMPE9q3?(4qa!W_e_2 zbl=?E%v5%CYy>dUq5Y%zbR-oQS(erM_B(ICXIVIT<@F!DY1)>mXr=8fSk8kBhxZ+x z|BKgtkcy<{=N5K$Ho>wL|FE$G*Vbu^5n*b2V*mbmigw<3`_2pq(>iq z_~eO0wOS<=iH?m9r_&?Y&1G8*jns#5 zw0LFlz`^|-BdD^L&t(evm>A-^Y8wz{1pDP_2wkycw5`+_4r`Ktcfk5XK<;$gn9e0w z@QGlJomTg`r%sQIrO%zaWa#$!i|3Ztx075OSr%*G)0*kpZfgIeEQ_cN1OFlE)_E^=hEft&1MT8Xr)qDRGB2*;o+9fX zfYv9I889s%6$1ls?A};gk!5{) zVmcB@L+I$rwQi^N(BT6|4o`1wY|c*3&M(XrOI28^WIFfmx%V>ZSXZrm`73|;-S2+? z#c#iS@!Ddm+a?I-?D^N?u~Z}`(RAR27hYIcSa5M>lX~&J#m~O**?PS(FqC@y)bX2Z ztLa>JV0ajy`*R;XeeBo)-RMGC{?@l%>swSJkxC?hvZg7L5mDqp7#bXcaN#)w1QzUt zCfw=inRqhwxzB!jYjb;bbpt}Zs>#Td2q2L>xIUBtAw59**a&8r`wmRJ{^k##d*-Q* z(kc|DfH8jb`DZ34$JTFdc$hjyABxVA!$au+YR1``VK8J6+~~;@Ct&*&3i+L#ZFoTK zwkApOh$w>J%w!T#kcze`- z?+U4bJ>$9W=8ZN*hx~~w&gXyr*H1kD$zrh)Cf!7Y?)4OiEGFjq`nriamO?meXnGJ& zpIg{bWa+-m!z$5)->v75P{*1}B!mF(;8#QefSf;5hR7F2;NsE=i6LEv300~Mpcb~} z(s*dm6WHJzfFOjX}dS za=Bc;ufKEV2Y=^p{nWG1KDNBFT5oo2;1U4`LJGV^y;&*Mwza;FbEuVuOW0yK;+QT; z2!PZsU40FL>Od;<_^BhOjz0nbb-T3l%4=t2#S}zoa(oh&^`%$eUR>WC8krv*pK~c! z4AXNn(_mR6L(@O~iJyYF1jzf`duPA$jW6F^+uk>`|Jse~imVq3*~#&2rL-+Y;*Lko z?VG|b0hEj}fA9DI)H1`_Odg^NJcr}QAI<0Tl46laEXaoT%`OxM2YDW2W;7Oi9{C}PJTdG@W+6oA98ZjJx1u=ZG^=8N@~QNQP|#{WW_xf zbYCO%#TaReGG}HF{>rcYPNUb-yGD%0LTt6?=!Px#jIOFN9FJvUHfnf6c9}=UH z1PKI^46JRG0R9$+a+{mA0Kw%3vr<&5H|l~A4q+0X4_BvkbM@1zJ_BS8BBe zIMJ9CT$r2s%AbF|qjo5ojm46UR@L#0p4kBp+S66d(09AVgDgkTB!mt{?E;vjh~UA6 zseKD$JEhX{+WNx&=_3dC@eDhVO9I3ySGtRft2{3Pxr;^OKt!v>%_pCDdUj^v`c(kP zOII$xMH2kZRxy*z4`*j60Di!Xtw1`S3Ua6izf-D&!{NtH9Ze)-Jx%`Y-}!%+mP_%N zn91g&QWAckxU<>mv>~dOtCbM;+HY1X6#$bXVf*(b!bmbH%}$T@HEXOe zl~04~(O{3Be&Wdk2M!!M{1Aa-Xyh;b(%;!PGg+w>*KZbI_~;AyT$HAHNs25kE{RfT zV{u%8et9O)@q7ibHK=llMllGhKQ z8l_D_yvH8Yp0{VN`(L*a?yaNVi#2Zz4Pr}-lOKIn*Yx); zpI=+P_UN(0t2dWb-TcL0{KagxP~6@rSBt)OR6opzo3++Qo_gZ-H-32XKiu4CA3l84cI{SMNygJLDO#&Gd#J~64-5{q+uZ;`A3k*C@yAaPgat75@h49A zRKqrj7k=WI@v$s~>yg2cVx_Wp?P8@;gvAsDc6;+CEUcmT-+lKQ7vxW!I`-cAEA39% zcEG(J8W}0%v+1XwKIJ<4!tC6_{K&DR^Us_7_iM?VQ_tV6*m(h4%m1w6o$~7OvHzV@}nc^pZ(&eu3o+I^ixk1hSJSu{hhPtGnvuZk=c(N ze-wz*_2rupF#*=ymOJpeHVzS^JQSdIDGL5+%W|jQD4LFT;l1bXqO5F1JgSN~_({&4%R~r%s&MH#`6O>t|z;%-{QkpA|&%l~-OJ92iZf1{SYe z1!x*iB+Av=KrWk4CFOQEEQJ;p_Wj_E*T3_=z%N}|ESD>Dvl9~&BSe60 zHX5<0CCNmpmGN8r2;l!NFD8EDH~&3B3%zcy-&3R@ujA2y z3X99K3?MzQKe>yEF8{d2_8aY7Z#Q}93$4SZ(KM4LIruWqv!M__H8TdJWo30MmI&wb z$)&}mcD>ncbsv8C;6Nc~IRUV!)zy`Hy#c6VVtgzSkA}sN<5`I;ZLu4Vg@WD{OZ}gphNZ=U4s?^I*J^9o>_=PV5)B)HDKgBZK zcCm8x+S>AJ@#5ko%e5G+Cdu%8s8p=9T0OJhle^8i+5P|F|M^|G%rAWQi*j38y1IDs z#3O@+0a?{qnu|+eyKil7Z9ent(?59YhhO>nONF5c@CXCBp^clXfC73wl_1ybRVvk1ySjA!N;Z@IrGNPMNs5ky9cs6u?@$ADA2;JAL{{udCj?S<`R;D^n_MU0Yh}+g>)CXf)*Y z)t$G`oXh7^Z@zP8b#;4eblmG(uH%5SgNIw(DR*UUWHcEGL39d=!hk4*fib@E#v1_g zLm>%VZ7eQ^c$6&!mT245pMT>!H*Tzc{9_+8EC-sHfSi z0qkKJHl0cY2p6nZ5W~@U9PpKea_s&1Quh#9;LB$7{0IKNK|Z33z&Ta zV4BkD0{J99tjytk(hna>{Fl7DZ}9!Z;*ZRYJP7RGRuH9jhkJs9v5CN^fBGMPn*wF3@ZfXE^8Dt#+kafoG$shJy|XMJxf}f%!SuMr2M;PY(?Z)$4VLlc7+^ zbuGh0+1Y2FJqCOh*vPrF=Pq8jLVEodKK|tXg^81=_GzZ}-Iw0nSl>K&@BqAiJb_1K zJdf+%>-7rx*uuVvdabpxy6Jk3D1~W~x_0eaSQ7MpuiLJZg!l1}KXv^0L&dFPGLdLC zy0KVnYP!(t8LfIBOf4A1$!GASBVs6*NxyUE(#*_kR1ztV?a3X4&;9_+2+GClbK}GR zo7pP8Pi*OamGiQHhO)~JOl7;_g`6AS#32tq7=m@5!XwnQyFY8@@U3^s00*rZFL{^DY_y7BbW#|MXUfAB~D_4OZozuD|$v#D=>>syP9)ml^jKmPCk3qamrJ{3zy zx@pA{A(vqP{KX%FJ^cBL-`d>i1Z-B|sk!-?V!0ZL!4peyERoH`am*)8ZEY7djXeL} zg>&y+mg0bWvy;OkD@)5j8tT>B=;-L!$cQTUI4%S>$?*)BW>^49sX%pbM4u=q7K}_Es9UDue((7yM-8O1S`lW63>8DP7;uB8*30qm&xpr-} zTB{2o{^ZGHn%;T%*uF-s^(X)B>x+x)@GLuOeQo__JQ6#!f1V#}h`VP_$NsQJSjn(UGzy51q z;$?|%Q~mtWEiZ7@GNIXSkxysl}m+Ds&xU|0d@=odcw@qP0XpLpS!laCzP z-rTV)0*EapPI_v<3Fvr$L4nKryT9-Sj^Q3T_R!W=Syr5lt@WLqVmg(CE9oh6Iw4L? z|HzKmNnxZjvG;x8XbbJs6B z9v)86tZfFozx|89vH#HVQmNW&^@1cg7^~C8P{uIy&dv@Bh6V!IqQY~0h*gws-$W6v zkPyn{bKn}ao&q2TNQGZ@O;1ivvq2nB{olX*ooiROI^8a?%GufJTCK^tvV`1*^l zTwC4(UI*{eY}bLk9NM>ElGtjc9SqVeM||hIZ!E8EFDIqU8k+dvbKN!q3g@5fV2VdEX+^O&dgC% zXnt;9hmGA+*4LM|ah$lK8SR~&jiI4|;&yF&r$JIoGMNm8!xz8#t=XBWn;X}{ zVZon*$j|TFKR!Bn;*p0;y;G@mI$d>pdo!8J7EASHBKGrN{Pa(L{F&*A@ty6`=_eom z_P1XI3_LY8dFATW-~GMcfA7+@mtTGT+V#z~n;QoXP4hxzW_oUTWB}j*029M9rzgk8 zh6V<53D^uCp1?7^9bHWY4J^JGzok%p|;T%XC z_M~I$zOXtLHp25V^j^TW6uIMIQzCg!x!L_9;ci>K^Wa+3zv?WC4{L;XUKC5QJv-ox zPR{=7Kl^vJrlKpRt!RXcYJa=2RP_gUSbdXY+1+Ub{+u!$0;muQrPA@jP%fWMRVu|; zA{q+wovsoJg@OLx+}Majvg_*=S?Ps^pdf}yrSi^pd2_R9TFhp#4i>2DS|*tZ1^Ikt z=%IuAC#Q4Gb{8PoYp=aU5NtM^XPHne8r!ODSDIDVb^85YCXtIr(r|gtKXdB%iG%QV zvZ~c^L3ZW~ZjpsnqQ37&xOh-g^CoPd=9)$aiI9r&1Gy zU|0-hGO>Yd8W#VnU;V~^`p}Zf$SxU_)Dw9~>%NzO-yv&Z(1+V`->IXqp;NM8Q{PQ|SY<6VVub zeRaKW)5Al9TiaW3sQ_ZfM@F!!7AS*9^ill85yCw9{b(fSOJloz+X@Clp5Ir(ps+hb zcy3RZu~ij|fl=IYKIV^_LnFPal@U&FTgcw<`G+=M@f&g0ztfJ{dGqFxg@wtfF-c^Ghf+JGS|XlQ zW#iJ7l_yR;;=1PL>nkILk&irn$n2XpuJ8QumtWkemJm2#9goAaJRcN*e4V>+NwZaw zvu|#!@Dy|M(TCtoU56YT989MZSoY)BP2XIv879${HOCDA{Znz~N&VQ7!$0>kpE-W~ z;Z!DFZ`3Yax&TkL+37G$u&cDTHcLC3vLuGUpSKlleQiyXduPsGT)MFq3Q2$T<*)Bl z+Vy6$fpt8v;(drA2NoWVMF3g{4IC=buPOD9` z?#0XJ&%gU#Piv)9*?2-~cUr&v5B~>-rLI6YyLuHc?e(QarPm&x8vXPO&p-Rr69*4H zluk*{fAsWMzxv{LUV5uk?Y#BQd#Y}J?JF<#0Q|XRESBQg5X**a%fo~%NdR8Zdp1e3 zmZdwupCe(wz!O6SaCWkyVnLz}R)T}dyh zQt@0i3%vctjipRB*6P;2{k@kGvB9;C9YybzcZwv=TGL(2q1^zmVp-_`9Z*%xpM?mB z4DgrC^L)T(jeTso$KiQ^&|DX`E2``PfbGe$2 zhO<{ptZs4~k|F^Ez>0(Wfxnstsx^yJNDPPTu$+x%I2^vYzJYeNZ~x-8%hO}I1N&xg ztgPm;IfSjIA)|tm8Ki>~6EpR8y{C7azW3=*d~9WP1>z4MbQl)MwotCMtMziL(_Y`$ zhO4Z!D(5brSzf!w(0%ZoM;0C#98Ue&*Z%wL^xUBX2b0P8)y0i^Lv6Jiv-_sM_3hU* z-LySN>*>Qoc|fWF|0FTIx>j0RUg;anh56YlSC-(u4Xek60)}Z16lSKUr)40&J#BJy z?6W`h=~lfpH?!}|nRj8uhlU4TEV#q!d7zr5a&2aM65>2Oz>eH4ZLfdgx zh!{&oA3l0GpU;7fa~zk-3}~7ca9N6Sf}w!rm|ywISD$(MbhFj^*0)|NZddfa-DtMz zwFZy*=m4zJ@nffk3KN}9{U@IP$mf3Q>EYoK&vDscpfHeo^w>d;3EFmGZGEFrYcLFX zJZD0LjJTQ7rWFr&!hM?Zseb8cmWzVrtMlJjdFW%x%2b;C;~1_SK*TSPBa|#<%Wa) zumjS?)*LKN-klc!juQ5#EO%f7BZx&wCXeuTCG)&Jl{C91=X$payhy*eW*&$xGEU*fLDrQH&HVppu;juGAxA`Q4C&I|YRIz6?|&~@0C;O;ApDos+8V-w&OZrr%WFo9fVX!-hemo#VR764}kT>kv| zW$@_15F6qppk!+s*Q?b^U++(k9Ee54jjiQkZR^!HUTHQuk`NKXz$bfp-^~r={^I2~ z-ac~%cvL!*cAUOt2TTiVDPV8EbLQgp<+bsNv1d*{F+M)LvT~E9nIi}1dtE(1*c-*g zLT)0P9=DDDsiP;N(b$da>q@tqObb`8UM>s{iBi~K58}W5@t;mj49DZ4t5+6BMn^l{ z4uJNLJ@<4+?t#AmXbO=a$nmPu%VbiuYI|*Mvs&3+SQtBX>LE!K{_HC+j*UU8?*<4>Qs;ZUC$HF`f zPkMTGf4SOz_uShg?L7IBlb0`DTEDpp3-#zD#|0eWlA4^HyLN49V`KgEpa0w!e&$n^ zYV+oLNs2`F?^{Sjhg)6wYhVAy%8ey}9ExmJ%R3a~VlBChT@RXOhJr#O9_#nDL^3fr zn6psDkg{;@u?1n@1SWCIeP^* zS2Q9_j87cge+cjb&jlYo@^B^@o1YyKLcHTz&2DGASfp4Un0g`+WjT@wa(+20PK*Ik zp2}nj`2tHZA)cwU%CP-`RT4N}mIJ>JFq>zB5PpF=S~e={FbroqeK%lt+p?*dIC2m- zEOn=jWly+r{VWy!#W$&2p>4N+h$*pOaTR# z1KwhM`tUFR?%uE%2OdcEFg)}%;S(-gSLe115eAG*4DDG}vA|JfHt zN5*8Oedyr9mFuOE(ZUbkdhOkJ-)HO-I}nPDPx`(|j)g3SthsnwEWu_$n%t*vc0;0C!6MTUWbZf$Mmv&ot1F-0>o z=|PTS=O!kfe&W>06DM|d8sJ}BtsRCifBuV~86C|+3^;%3!ZXjD`2SgZ?;uI8`%JJ* znyRcU?|oNySNoo}<1r2c3{)_@tiJ-BWfM=;>t(P#(-{Y)LeLcRkuPl;|8A_H)n6`q^W=p?iR zh!k6ZZr}t7-4E$VbCAU>6pmg_sXkH){^Lv?_4F<}$cOL~QWxD`ca{lcZ>ISDAN=p0;6x^s5LkGA9-Tw)`Jo`eRvhmw z7bC^1w$#RPbz72oksBW$cDX$YHO8>)wHvoKBZtLejU==fMjk{H1API&v573Am(^w{Y<)vI9`^dwW=Z?&j z%hhOX*X0DB7=&BZtF7fn!HUjAlKs{A{Mu7wZ47fAd$X8|%9V@p85Pl_#Gz zn~lXvVW_`9oysn*t*&qFrxT^KXHG0F-5sAC2SCy3pp8oCDv^We-~8xjnQVUg$b`vc z;sxQ{xzleC~CKFuhK^2-u}+c#;!_5DU`&> z(CEU_vX(L!4Umv643pu_{oWu=kO0UTp~CT;0^>`Se2c~HcC*K0!BuLn+v@XL@`XY& zl{q*}P_!wX&HDmww9?yEojrRNqFGOyhe!I}dh6Zr;E_T;_B-GDy5DOvn{~NthQKsx zh4kEuZ_)-BcIV{8uz}X4Q^g|_b54f?(hma5;cyg+`9RPQ*hi-W>RvaSkk>aah^2CQ z?;wI?U`-2vz!y>g6wBCqZmaY1^IRNZlWF4W_?CwLciov`6!%zOU(GWPU z!!)H@m5oH=I?AX~Q&8&}v~sW3MWcz9I()ss@M2f5*9{GahK9q?l=k=cWAS9SixlE} zYRx2%TsPYouElV&RVMX1_y=*aIJ3dAZfC=4SL7q#LUdh?Dp33*6xnm>#vqe zPk;HTC%$m1S}ni+#=8t(gR%{@2LK^7z*04L7>}?_TdOhp0s)WLTd6jn6?bISt=ntM z8@IESv>>S}D8eAGGQmJ-V4y!5trV->rL`rP8>S(yt*^U1)`^Mnd!pUwrcbw%N@pp` zc=_`A*`wp{U0aAn<6~pvrD}5!UOzCNEmTgQJpmMWadlOR~3tY_xBGz^`$55 zPCL(|^*NH#WHPB%lSMAYvT|}_3JJhUqTA(t;Pi2Vq_?;C4-WR-p1ypgdgbaZQBp6i zY^1Zl>II`=Nset2$7@ge;~$$Q^*cKLq&LWNTCE6#Ew(-Ormee-j~_f;PX;eT|z^b_q; zt-#d;An5Khzx_wEb7%6|QnSe+s{nMBOM(|kQb*l8mVk`o+hV=hfH&*!^Bq4rH8MN^ z1#W*Y3M9B!OE7ecuq|0E=5jf2ph<_v4t)LS>>Pn>mR7E3v-zNBpv4sC=f{^;mRP?2 zh06~f84uno2ltkdMPA~lFxi;Ek8Bp-d`V)QWO^7^*7cHa2K8_@YfAuowRJ?fAe++?KfHajm0 zef_>;^G5)oWph!bx-GXACR#T#61ej26#%z79oqhCwVK;In>L4iZvJRCn_?PewTjT| z=)>sF`Ln0(RwHCmsaU6Jbf5UWt2f_%=NhHc!JEgThelclg@)w>m(v>b=_e2++21;*-f*;_0_YOuk6FYxn1u|nw$0My+M8(Pt1>W@A05J0wSMR2>V zDohfdpkT*_D40^jZVbs#%Gm@htdab%>=<#fgmV~{@vJ@wGV6JLG$L7Jdf*Z21JW03vnSaM=4 ztT#}-9aZ#nP&A!R%kXf>VKXf*FTZ#FT}(k3X^YEdoEQ!m44QJKVKk5)k1dlvJd7T& z9BVNfB$2;Z1u~0`nuuv%Ea{||#n*};YL0Mh6dF}j}<1^Fa%?6WB zXWoA6tyC)N@%WrJ|FPLAi&3Z7>y;`pok{0%g+`;H)9PlYj#|vdP{1)ZJS+-rEk#1R zh#ux-nSf|qT)g}I^RHIQjFzI@4$IEYZX%W3+FU8*vmKEg4)^ygKQ;MW4#U-rMs;&z zT_r>9R(qW8(ZR8iL7xj56H^|KQ-z#{)E=)t1@Ex4Www}aT)*1w@ZbLSS8v_ARw-8j z@t!CgVnzZe}40{~I=LQ(^TM}ZB8 z2fzIEB|&Np4D|h{|NO)M{KLOaW+9XfI-?O&Yc|)mi-kgiDf#_DtHlL`Ul5znyMXm| zx^19j$W9W+@9Bkf>BCnL%cdL7}RPsdy$>py$$H|g<=V!WqjlaJfvEsXfk!k zH=SOa%V(3RG{8}S&(%t0d~_V@;Ct`g*xNlA91I%_x<Y!Oh!{=cN=)3%jGc|^~EwWLPbuKYGt$0Fw+K1Aqz-3x{Dl8AQS`%2x_xgS7JES zXpwDlO{U$I?&%NSC$01;>HFXG*xHAj@K+vD{p=+Cgq%~igDfOE@?%f^-q~|c#iQ|N zjqS8WWdG1r^bA=#3YFOHZDqD4?)*9EeqkK#-YU0t_jYz-I@(q&RRCG~eC|${hw&vy z4clruoz7CJrqPfaYde$UgJ;eTpFKSr4EX-bU;pIQ*KZz1(?G2SzBSVCou41;iEZDj zCUQPk^|(gR(rd5AlF>@F3gyA;^Q98$@sWwC z$=Rv#F^|*m?DIb_Ram3Jl1-<%R zx7OD;jYdN{Q{O#^WlPze$SzcL0pz_USKvDU&Vl9meL5PLe%U_){n6VU*OE zwNx)3?#JymS1z+}wYu6W#q-bq+-`FhiJptUIl3b&C2U@D-@W^=}#q-)p~^&6k4s$VRx8J*0-*_wtu*P7&|bUjoD0U zd~$ScV@vMhE}Q$G{NC@|%vJ~$cvY?1RHKy$nNMvW{U~+2e>W#Nl z3TmJ)SS)8{j2ImqRdkSU7{~Fn&d^0hc1oYqMNt|-6uN3fOJGS1Z;8+hm4KM4B}RoQ zyK)3+hG?7dsf!UNpLC^F=kmK3E`Oz!yU)!iOtBn@290>Yc z|KxX{vD)-qq(-T@w^6gRm*GXxZle>ie52l+7@u;vydJkjDYtj_4qy4jyD&psOMuz| zRn=lfJH?kSo|qaR9UU3c8;w`qdoMf~WSHXm+FiSY{{HvBe(KmUfH8nMF-*E}?qs*8 zT@3?BQRLBMQxBefz-x7kjRs@!ShdWZJb7eoZMDCDAd`>NCjCJ)(h>P@KJ!(R$&$^L zeF2+FR<#(xZZ}D?$Z+h>o_kgjrM|ua80k~T=f_6J`uxGiAAdL+-H*mHjfS+mvUusz zg~Ry%jhpWupFhepS~#ITa%8YlFJHNG<2&E|#?PLA_2)0W!?gI7)m4Z{NWUgqr=fRf zbTp;O=L-rY(dQ3*`uz_*WVYiNk=Yl0+6rjElc+HjRklJtHn~Uv+;Ng00O$0Z?$PO z*umkh$!w|B7?x|M)A`xC*|D*KH{W=_Qmzm551Ncdx7&Mg5ZOD}Rb$$-XV1>ejO!@P zK)(;b=l=cy&{2#ap$@v;c9vz#Mr%G-Fq;hk%W+aut=A!z+kyyLg>?Q!$%5{tDh(!c zu~bIJDd;wS7b1|-kZqnOU_pgqs6d&E}+i&VhLW9&YnA_Ayw;Jk^kdA{&}@p@Or(^zxFj9ga*%Lb56V6VliZL zrPp7->I-o`@bCn;EyeEHAwJ*5N^JeRJy{ ze*BY_m8JLIyYllFUl4f~$mHnA)EA$42%`CoH?L>&wcXwQ!^GaB&q6*kuu#+qG-&L7mAJvPP2`f*l4HVXhWK zYjwbJa>d-eke8voqF@Iy&m&DlByx4nR=rKrnr6MxOEg&!cp!&Bx5*^}KaKY?ppE(e4@Oe(Mrm&@8yBbIadQYu~1 zL)?(K#Y$&VNIgMM6EKdzuHom^YDJ?~>j>&{t!lBEJZ@va=Sn7O%Nv_4$2;vVzt8*j z+ixlWg{a8ANIVwL&CEnG`B(qVVY3B;{n2O=B8DJ|cs#ql6VUopWo;9`2lSzR#(wt>?4n!pF27^I5eC}7ZZs>e{e)k8{WKfC7-L^AGr(9o^BcU?{g*AicR>7AMBNs1)ifB#mKlPI0GBMSg+YBk~N^=qYC zF`bJQ3+0~ijzAE2tyXfm9fyYpfHo~=2SiP=n5)*S@Li}c$U{brd*B~kiPq@={Q|#E zB;pWV8VzMIm>`FH*GG|FW2?miEQe9GJ8V9`w^XjE)he3S3cRR5L`JFCn~@m4$m#XK zeq9_dLW~I_Z=lUyw`*njuE*`C4F;%*g+k_q7hlq7jJ>Pi&yYK62@8UgC)4G_=eN}15~4i!ie#Ee0&gD(mq#IRE2ph+~*?z~c=RQxJQ z{9iW-)o82q!{(^`v@^_yaPE7dB%-!6wwp{7n8pLIG-T9RZL4w?^C830$cDx*;8j7Ey7W#fs|#Q11mU$9&% zrJ|W99=lL1=4qq7$+Q~H>e$3!rBqQVG$>@*Mt|R6rN(^sd*9Aw(p#IGUYF%x{mCEV zDs7|DcKbY6-nlw5G<4zOgFk)l7k~fUPYb1LM+Sr(nw^_N7`v9wmx~N?9g zbs{Y`bRrB_Yc*Oe3~ZZ~3?>Uk;AkmMmVw-Qy-0}PWYpd3cm$zg*(S^s(gNp!k+dNC z5T=ksoWPK0D_YLstCgC`Xq}&%){wZKHcd>9HXE$R+b@V{J7I7zR4nCz&WWOgY4BJw zy|T8NNFCU04ggclCNgZ!7pndJVR%C=5-`&89IMl6Tz1dI#7wDD1Z>q)AAn>;22YTL zk{|+1mU<3BoXA0DASNYsdmacV$ZL%{rO`Gk6%lx$z@ck^|Gy+5+Rpz-YySgR`j55v zKm1B>|3m&@?@{@oRDRD}0_7qQY*Ch<{L=3qnLS%AWke1sJU}~=B$;LF3Z*zU+HW

*XwZNVpGTP=gpu)PyWq!KD6 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�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 +V?3=G6smjB`R-;_it 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

A+SVsx*W%jPmCR%Uk1$cz3;vp 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_alarm_white_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_alarm_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..75e5a46ee3ae8e23bb2eb6042d56f920ce42e3e4 GIT binary patch literal 1201 zcmV;i1Wx;jP)oK!C1DYn9vp$gK+7PX9>FTFtrnMF6s&h)hsda%{a_VjOgmOs%=vw!WNuh3m(Yx+t9vjj22q4aNh zlw0V&UOQ+beIR{7UV8Q0Sj_@moT7$OqJ#+(rIcDu)6D{_`7nKxZ{iY2H`$cw9(sr| z0G4Q#@9EE3=?5Cwj96nH;3(Hw=`(T=2(tJH0QiGP$oyBvQ_Pc;A8=@uoIds;3}!$5 zE0g4-;0;pD^Nh)Js8;!BZRqA`Aq!zR*~CbC7fxQ?&C7mYt_|pZq8#CKDi}cbitWp_ zgjrPIQGl?RLV8jC&33z>9#76j#HzC_j#y*zxr(aWCg_M~u?i5@L4rch!Zr8}itsx~ zbCe?j1qmuig7h0MZo7!tNWFE8^)jouiAVD>% z=gfo7YcC1mEJ)A?(x;|DA*MiTbQ;tI(l{Zrpem3S*z7c@fJKlh%z|Pdbs?Mv2@)W+ zm<62$>6G)JI7sbgK?#s*oCno`)MXYl0#d2-pfZq#&4Q*tiaHM}0%^i5CejFa*7y4br|6{C`1pcUh=JT z^0|iUvYX?WUdvCZ$dfbeeXZCZSPfX*OH~Y_s}J)3Wo_t^#C$viayY>Px(^UmK^YD` z`>8g{IlwKvIuQ0jnU00~Xv%Pe6{VRQtkg+%@E}2mk6Fzk3F6dIMiCJr6j4SUae7GM zB^N7TkepYUA&6<}5iWxSB_yzQnPP;)AUUryhF_!VQ`vQpAVM=km>Q&!T!i}|eL_4> z2Y->tIOo_UHy9Q{Hd&RtMLS&#Gsz;0OfXCr?X-CJ%JxC-XFX^=Xg%m(XF{7Vc$$S@ P00000NkvXXu0mjfEk!fo literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_cancel_white_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_cancel_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..dc32a14f962eff99c96e36d199049b999880b921 GIT binary patch literal 751 zcmV3NJ#@M)WqeNFfA8*cI$F(c%R)hLFl#_5#FS z1cS|F68OK^SS*~!GtbNsi~LWUgdfZqW-`y1exJ2|{TQLZK1Z~8;E9NcCmv{V$R10K zV026Kr73o35Fr(D%QhMRpgc8txYnb}oIlVaEi^UBrw^Lulq8*yOB1xg3rTBJN(VH^ z0clkxND7*uPMTdYmIRdLFKPFij21K@bMz#}G@wE1`0APYOz~Tnbs`5~+DNP)puS%rVL_=9=5(?Fm{rK^Sais)g>c?cCZ&x{O8llgbo~e$8E`= z28g6(fu!L;T>^a}0tHFWfeyoVPys+gQgZ+n?4W&6kqU%r4(!@NM~DfBrl96P#SUtL zmZauD(++w7B}vbLdpqa}lq5X|9_^qAlq5X|I-eZ$2@aY6O*& hE&Q%Ns1NFc{s(_e(O4J`K7#-N002ovPDHLkV1i<~Qp^AV literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed1b5fbf85b9f24daa534299aa385bcf4c338bc GIT binary patch literal 781 zcmV+o1M>WdP)Ct3)Dl8891DzIp)Okfm>FSH1u7JY|`oC*B^iueU0QO7nF zWY9WI*E23sbH>HJ{#!oxGDx21o&(nWp0)C4?mb*M=XhrDG3Dc#jEC7|G1ccbXdF{x zZiDie%DW9JVyfsisD!Dq%OD>O-(64^jjX$%F*L^A1?ABwxC>fAW7S7t7GO^ZG#58~)|$8eRt z(FXZcV=K!`FiVJi&g+6E5dp1TJw&YI zC7x4kA_mQarVx2N3p0&)Z636Y7_btQLoAvH{X}$F3CbXTm-R~IX4Iq6S|-aR1k}af{KVe&Y1_vN)sdMoC%1pFm2E! z_7PP&RXH~~KEK{7Ce&KuFvnLpHbc9uZJ$lWB5f zXrh4zd@|&iVT)P;L$)_PZ?lh9g*z^`g_qGsvrBQ#uMPeIR2T7Nb7Nfn00000 LNkvXXu0mjfS4U@e literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_message_black_18dp.png b/samples/browseable/WearNotifications/Application/res/drawable-hdpi/ic_message_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d921ba2da898468fe42d8619c38dce592df2b529 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i0wmS%+S~(Dot`d^Ar*|t5)20p1svYc{*b|O zhxm#<$#vW(e)^lNam%>v+_Y^kM=ra^g))ZV+w3;~el-M3PdLWQ7qFr?tIqo1f(GGv z3w9~T8|WP1jDK+LTf;&|^%{p#_qc?D1DyI3IS7U|zrX^K8 zYaj=Djz=}bpbDN8SRn=_1bER!3~S>-krXj3CB(TVVo?Lhed z{|IQ4B71FVagCD+X)s{Mde@9Tbpn)9|D_zac+4w$Oo&O??n;Q6(B&mnZj!^3dqfOL z48GPO5qELu4sZB^SQhh|5*fR|BR(KUH0B{WGV*{=NCr*0&(W^%4#}{$T;>QRVkF}} zbDO_(gKvm~zH%LVTw;ni>LVAi_7rj06ReF9hrP$z55!^Lu_kWQK{`kW{Uel8N~vG5 Wub7svB(2u~0000`4Nwz)4UcgkKG*7(Y)B?^IDx8 znYaY&r@K$Cd^OXm`R()7mAh3}sVQ*Y^VF^W+`+cu_DYv8zRv3F4lKR@e~F&dOchpH TqZzk=u4V9a^>bP0l+XkKB-B|K literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-hdpi/tile.9.png b/samples/browseable/WearNotifications/Application/res/drawable-hdpi/tile.9.png new file mode 100644 index 0000000000000000000000000000000000000000..135862883e26eddce2b19db021adf62e10357ad0 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^d_XM3!3HF=W8NDADajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MQNTcjv*DdlK%YvZ_jLY;KT`zX$+@~lcus~rX(d9r71A} z`ThO9P5{3!^Gb##?W|{)7_*qnaG3jle#z^Ewh3!L+OJDkIfKf6TN=vY(nuKH?A%{66&VI)gZ+$idTxvsYedP` zs1%(mIIPEqCUlE*s;0cBsyyIU--5F$B2mQ$VA3sRfxG+xU^odp58yXjr2%`*0=TFz z39K^#;JQ7Hfr?iEa9XEWYLjQ3F=fWQc{3)RvQNKQs@qurnHP(JZtnufydZ>C9yg|F zE_g(%Q1L1N-qC3#V4ZOQ*X}U!Y1WXhIGl1TvfEwUx zF)$BkZwlxD%>7qjTl2sSpsyj2Ic9Bhw`dZuvjBL|FMvNixBR7G7hpWSrUykqonG=6 z;5&BTei-BhVBceF{J_2yYy8QSk;HhF@BOo&%8upN1m%V##lYz|oVjx@u92JSW zylhrxyIAT?z^G^h>;){^B9aZ*FP6Gf2H4XWXjKQ)^@x(KHVwF>r7;lh18`28kgm;V z0PYbfARHqn(%<4Hp8|MYNCUb|0H`N^i*0@aFs7p%5PIbwv*@@@1^;0uECRUfW+4sa z#5e#l=N&SrrbCCCU51Uy0PuBw`I12BazxpAO@~k($Qx3ZnoIfSGy#NGkNV0#PiE9^ zEuv{4Z=-!qnQ+ydSyzlZ=}GHFy72#Y14#Eb@1%;*CbMxa00000NkvXXu0mjfw`*YS literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_cancel_white_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_cancel_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..6ebbc831605f2f3d1a9461a6c13f0f7bbd4e768d GIT binary patch literal 536 zcmV+z0_XjSP)9oFp+@@KNp=; zrH4`mYS1K9dYH>Vi$JU!tsa_x5U6!}vGvrys8Z=IR+T8V%T%s=x%HIG^gyKtREa$q z*iz_yyIZm$0|~b}y&`eVNCpfaaLJ`!ZasE!Il>?VtjPn1OzNG)SR6PHy!0KJMeieX zSLor?e@%TcPD8_-k_mfkFw#F`htG2$ ac76jC-B;5p2Fwru0000np zWyg6U29*`ph^Q(n?h!GotXLspSy}Ohh`O?2j2}dNqoVY-6XZ^s+(X9o>rJF^L5^ct~PVF^qA9Syup? zn175af)|)QdK5q(P0Xr%4DbhYLqSYqe$g)vH!-^u6hwgrW?CNBFmpEoWlspXZ8#ARKW-veLlaDn_gI)#D&nL`^A{gZmv!MXCFn_tA z819pJAP0{~%qfa)-jmp*PbZ+CEfPBv6-R{@i6+w&bPQe0@R7s;BT9#HT68p6V1hCw zN|c#oktQ7nTvU2g_)f%EMwAV&iKr_po)NL6thh_WEoH@3BC5)Yb3~j`c6`CpQXag- wQ&%25!Ly`1xQ%C4d2ks|Re3OoXHcj54_c6)U>kB0s{jB107*qoM6N<$f?iJP@&Et; literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_message_black_18dp.png b/samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_message_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..2156f167321fb2b77e4bfa652ed4dde7a88c4c78 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|m!aZFaLn;`P6~qjTRE$g>G;}&d z3NRS`d)&w=;L2MeYO0`Z)sT3Vk;m0RNY*4ltBT=DCzt$%n<_;$?Xp7aHTWVgGOZ~T qXYbz4wqfB9#t3%D1qU2>85ka@_vt7cIyDt&1%s!npUXO@geCwS1}O^w literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_person_black_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_person_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..360a32f27cd837c6e2036bf8087f3fbd440d26af GIT binary patch literal 307 zcmV-30nGl1P)8`r`AL0Dh?&)4uZS5=#i{jTauwS5FB-rB8cb#+9sDUC`vn+$E-^GHOc!q zDBthD=Sjj#5Cjdxq~xrsG7=)Z+F^peRg%*4_xO9Xrm3%q3EEJC2Qk`MNrYL79E~x{ zk)t_gE97YT2L>|aXogvW91SsxC>>|ohu=KZ5nl9|qBY&o1z!^><&U2;qKj7%W9BTY zW(?^Q{40B$bIC0W3O=g}7Thr4j9rXk2IR<5#s!D8(BYJ4RI?{e=+M9ckEme}>{HV* zZ>UAD9MyaK57e^vI$v>(3|+BRfegK{m5enX2m?V7d;xL&3kk*tXR!bP002ovPDHLk FV1itgfiM67 literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_reply_white_18dp.png b/samples/browseable/WearNotifications/Application/res/drawable-mdpi/ic_reply_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b336e2f4daf5a6407c4225b0b04b5b860dba76d5 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|may(reLp07OCrEgFnBTlXsQ2_CZ_uT@;~K2&*z*kBw_J2zH`H(|NrCvg{!;W?EN2eW2*1( z{7?74*Ps2rI3cx{rRl-`hyR`b+y8s6CNSgw%zys>LI3~& literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_alarm_white_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_alarm_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8102fd2d52d756de94b8bb594d5302f3766649 GIT binary patch literal 1668 zcmV-~27CF5P)c|o%lPCigiDD#KoGheJf`CCcf?#2?jU`JY zs0@=~T*UwO$1q?8=A0}bK^%X;Wb4X8(J?AWTWsm?-raj4*5mm;&(rq#-aUu@aj%z@ zmzS59cWV)2p>lxvM3sBo&W9veppdbE1jm`6++rsGs1OA9?Ezhe-9{2EX3at zN)-;K(TJZuRw@KMO%gx<;XBG63u(ho3->D|ETSDh*LXnLVLb`_{F}-0L6q;YhF3Vu zKe<9TNs@GNnU6TgE>>|b1@ggkF5su1CzUBi@_YRKg%Y_ii4D9*55wu=9oADW7s@z} zzg>)wJ;w1@{Jp|RIZ(t(PGTp;F@8#+9EkD;{th!%c9=o~eiE#c1LN6FE1CL?t&Eie zn@Hj3UrbVP%%c@QpYubd5u=uNven84B1&Tko%m_yJ_SP!{rEZ0RHdIXrgM&5ILj0bAjTi@vq{6_ zbxcV%D2<2cU?>Sb;03CgLj|Qoh)_xeb6CL+PLg0KZOqpIZets6dldu`j&jp=7AuV! zk_@JoeJo*&hQJse1V#u7{#AhsO&JE4!pXlQI>d;9=zI^tne_J2D~mZLm^-mm+<MFn@fL1dlsSrM!E~L83IqoQ zMkSq?u285b6#Wr`D+KBGth;UEi)rUlbcWrjO&drpDjAS-OelwzVX z!Ot=EQmVjkkQL(eVR}lL;9X4nWB~_RVn3!svPXn&OiN?|2U+4VOr4CBEoNitr&tzn zkR?h;V!BthSdHleS;0ZpIEAT3w%Cp71zEvC*4T;ZW!d5orfONiLDs0jR3}@U#WY7& zaF8|TVmc#RT)|W!D>%p+RhXJ&i*8J%vVw!G5y#XiTO=_>WCaIVBZ?^@TO=_>WCaIV zBZ?^@TXbV8l@*-oxKmb$W9pDCE@P^Y6-+&Br$~WOg{eulIE!hHtl;%umMS3TVmc#R z9Ky6hR(Oa;yxwD)0$>%Uw`7aoVcH=}6tazO-1>Quu^I+DF});Ptj2Uw8Q>1;@Vd-$ zZqpDrg=wX1F&k5YG0F&wxq#OR?$IC^M-tOLvPA)1m>yMzi1AB$a7(g>xO}h_QwJku zk9RS>sVs0O2k~lU4I|{j0Za##37)~!%Xnplhxr(D-u+0wpuyDTHKl`R(5z6w;pCH z2e_La+@4mph;kmcOH?XkRMCW6Jq5}h58~Cp1citRoWm`}eF_JA@M@q^A)$(Mc)hH! zFp7G-E-_0X;BK1mIzyqt!&KVw>S2wt#5#KMy2d1hi$x^xbASqEh)U}4)5ko8k7`o* z>7lq&h35Ym2GBPkL6z?S O0000HKVbR?EK!08B3=Y4_z#Fk+$!7OA)Tp}4MY&Hy@#VsJi@3?NAv@5^@ z?+Bv~B^Q9R3<#?}-)IBA<8Q+3J?At5X9e^13Cmi5uNe?UeM%aD4DX1lP13;uzY%2* zg92_6bvJ?lmY5QC6UzPpuZTk}zkn6uQr!vVXs3`KoHCq{{%ge0`h!@0ED+r=EEnlGQc$e1%mE; zfGaYdIaV9aM2D}#ZT?y2&(hp zt{w0Q6bS{@`Ovfj-hd`Sbw0eb1G*4^P;fdQw(NirC=vAM!=4>*07?Y?`7pBsjzEc^ zKOYXid_esF3w_}~#O{BM7G3`ueXTfOpYXyC*ifB6M^TmVKcpk%evcZoh(pgY zegTV&iMoBx2mmoYFHsMA;OQYz_A4eRAk8LG)#hYyfT2X6DC%)a>)7Qo?+LqI%9;mX z&xK6*i*L1$9xt;^SoJ8oIQ%`&CSla(l&j)P1m&>48 zuCT_RNa}K*%Ve}JgX%sdE^?P9FWF*`8HXG)V~;If@PGzYPHSJsjrvIdQ9cPE0VIF~ Z@E@iugGx1QNech~002ovPDHLkV1i%m$Ugu8 literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d9b13489073470027262f357179a7cc9a270b642 GIT binary patch literal 1062 zcmV+>1ljwEP)B^#6K_C-6k{S)Odvh_E5?Hd55^SO(o{{nno6k!4B!@O zxEVoPX$j%t$pzHJMB`0q0WUUf)9p5jl>>$3>-m|PZlLe;&YOw*dH#a$X7}C6%=?b9 z!)9!4#@LL(ZeGAvm*0T>*xKhe;1ssXegm#xtKv7HhOMg4fQQjg@E7nR8oK-i96-Z9 ze*ve_Q1%ya6%7@C0W~yKeFZ#%mV%#v-Dv6Z6Hr1+kDq{1w3Ph>Tt!R8Prwpd7JLLe zil##H0WYDcEBSz4H1#AO@Hv{w$p`#^rpw6&WH^SlPsk({kY$2;<~U1fSh7#*B_c1vRGE2NM0=EIj ziF1cRa+n90JVUGyXV_)HTf~`S3uX}96e-U=R{-b(H;_(X98DSNnnu7Agl%^g&`H>1_5rUW&0(BPzyi`M_5p{H&SD(S z7}Ce~0h352rvZIP-`EHIinPaRKsVAa_5rg<9Zmy^NHg{Uw~^YN1{9E%?E~&1H9HN+ zBHc@WK;tXq_ecDv{xZ5Z(Pi{!`+y0g-bDY%#_a(mJdxPdfF z9-}-h%p?7-cVp`V!iLlXjuO_V7tqE(NGoi`D9$t7Mf#goy#T`@!lo5(?rz{FVIN^M z1KL<3Y*Oj=`a@hKtV*kHfZ<)DMpXjN5cRf;M@&D)CS)u>{WC;eCeRNs6#18^3$$8% z_b(E4izi(@W_^=5*V(qlmFFgLUUm7P`v`GX7$*OKe_KbnOPoU(mjMCe#G9j^+HNq*1VD4IS?KA@ELZI`>zv@7jfk2f_oe|z12|DB(J(`i2d zaR4nnX+H$CEA7XyHl_O@+ycf|z!fx98izqWuR}eJ1JVEABk6`kY*ibtWk~UhG1C8P glE%wn{J);(KWq&sOZGIVjsO4v07*qoM6N<$g8Ad&oB#j- literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_message_black_18dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_message_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..185d6136efd109a07699a3fd9a6a913484aacf46 GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8vZsq)svHD3LU@Tzq=D;&N@VX&h3Tnku^kWg{+0 zpPW}_x8#l6Z|8MQvzUscp7O5JQB4XkTp}mEdFOO0kk66l|j-6?~9x1EYin+HvWh zjh(a$!K9k0^!NfrGjnHhZ{U2sFEBs2bI6raN-3q3Qc9IsCm`g6goI;40&0{Q3ybV> zid;~ix6I?TD>OJm{!zjUJRG&a0Ww4#d>ph)7a6jcDvnv8i=-&V$01iaKvLGh!x;@E zLmN0^kuxMi2|iBPMKTuPfNPv08S7EPx^={$HLME|gPK?uA_ldv?gTL?#<~PCXrKd( z9b0}v`V+qy_cK~U3|hsy5`83NKbgS+f!PDHZ=NLM37y3e8%Tzp;tY=tlCn0_IK(GL zQuLjhIHt-`iqBudL38X6`FLh=l*ez zvdRofDW#OtrdXoJW8SgHAu)aaApEAwC-!*H6Yf)G3g=v>&Nd%OkReKFvqPN<)=hAi z1`(36h)q_wgcZxYBt|grh%N3gLX*@9k(~R$112fl1P}R!6x3H9ahU?G5FrH@agRcH z>~M~Zq-{KMRv|=2Septts_+>ZabLJWPRbl27K$j7i&u!H0x)-rbHq~T+{V}@VzDiZ z?IRY8F!lqn*e{HU<#d1!&;dH2h;)EbN-3q3QcC>=IV&s}(aLsG00000NkvXXu0mjf D>pAVy literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_reply_white_18dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xhdpi/ic_reply_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0424c2bd6d6eaa5fcd3398f71b6e230ffc1caa7b GIT binary patch literal 253 zcmV zU~Fdwq%m1M4)uK)mzoQzo=rJT_^F%Fw{vzaQvoP=Gs*64?5z`yC5|0te ztglo_JlM#YTZ56ps3l~=R%Q4bDkjod4_PXH*Zy-CV1eOQf08V!00000NkvXXu0mjf DTghfP literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_alarm_white_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_alarm_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..f665286f850c6a9dbfa5495b9a7d6889b4deb897 GIT binary patch literal 2492 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 j0XZNCVZ00000NkvXXu0mjfZ624V literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4f56f26bb0fab5f1d9e3184ccfb0e3ecb68a0e GIT binary patch literal 1616 zcmV-W2Cw;vP)@NHZv;~KtQRk~=xLP@Ej3k#h}6??I;N2y{23&Tnk z6Id8ms+h&XjM79CR!T|{U0CTOR_ZBIq@GsV=w%+&M-(4+Ql_#mc$Ox8MYOP=>r}QxkK)1)S)h_7o@0Z)Ch9rB zGL_7;Me*RfT%(e4?$Ry7_n4%TX<8KrzR5qyw?MycF$P#9-x+EY1Ab4wDK^OiHgk@A zqY95l$oF^F$rEaMlYG4ji)LoYbDZ1c5k*drXPS~i;skj{sgh?DI6|I3DjXgl&vB|` zfC4ATvsGd64L%{;-?&XiC~}HyA5c&TJVCZ8*2xg-IZw7nWse#zl4X%iGR8gJB+Gv( z${J6StzQ8!NVdmhivm+*8CMWgahfb2Qzc9EkY$Ox6bNlBlV!Us@mI1ur+_#}me*y6 zJ1FD!1sfC)4b0)TOtY-;8?rpBz&JpbJ+i`S+-}gMz-VCsw=vnEkuPz3SrOn>+{)C; z0>2>3HbsC3$?`K<;3#evDJTL|a~Ze8vcSiZBD*X#;vG`P=i}pzEQ@lsEAO5 zTUov_k6XPWLJ7Ay`NrqCwJIWP#BEl-aUQoeMTBro`wfm@l| z$^_#KUA+ z=57T-J7uywAWIbZge;Q^f-2r2%ZF6S7Eh3EKmqU+*&dZOYWS2ai)@xLwy;E&|4@`Y z9wXa1YGsHzE|Bfl3V~`qBHNo3WrP~W$@VV_3WIL){E31LP~aqa?o&7%C(jWI@{9t< z$nyt?xk7`&Vh8z7v0k1~$2j>OR(KpC-#PA)2W;U2`Gyn&YB)>2 zn+#H=TZk&2;wJh2K~Zs_m1!zDO`C2J+IfdcF7s{0gYR>LN|rfDgT5w89HLAmb8J>z z=wXS<<~Tr$z9R1AAoEmqlkJKRKc~!UEbuB1Qmr+hn(e&CBCD}XpW?(WmRPOJ4ADoO zDqsUU80HGAwa8Azi-(wJEmk76!@`VG#RL|{l`2NCFsxLu7YqGL6k=trLFi-^o@t;f>J0eJh@Jq}}S2mCvp)IJ-w& zd(+*ST5mj;@dhv5sv^58QP%T$)(nqbEMe@@fd`Kn`Ak`I;LnXmeg8}=SER>p*vBKR zs%h}te6<0y82gdtyMJap^`D#YG@3yy;`xznb~y~zopr0IGgt>;M1& literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_person_black_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_person_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..77e3a181662f5ce8ff2b96525cffa79e26cb0e9e GIT binary patch literal 846 zcmV-U1F`&xP)bw2%A)(*V8a_MUT}&-Xw0<(_jcN-3q3Qc5YMlu}A5 zrIb=iDPJTQA;TJ56gWArz!q!FGfXET*Uki+NR2l5h&DngNrpq@0+soSCkT}oGnA1_ zRAQQDLZXKpa)q)yO9=E)M6OtoH*wrJ6{L&JnT=JamozhaZ@-XNg46D5(%7H9mK;nh~Su~IY2yWk1iZ^gEPc~PI(PSjUpcOE)E;5^D8>z9UOOq{W|WR*9n2A zuK1#D&`n50`IsVdi4K?~La21|B_-qn6`3VYD77-qI#uKWRr!q+t%O_$gQQvEE_sg6 z%X60%(hSg!Qc5YMlu}A5<)dqK@e=Rx8Q-$X9kwY@=8P)G?6O0aUs>jJ-sfeyX(A*Z z=0$F@#3p6r5*?9cnVa;|f|J_l=WDW@B6U_F$2SZS#|cfmz!zkxA|6*I$1J@>u~dXt zSl}LFxce;fs%Bc`OiRn02H<-R3P~1lA)=^EcAq{$ZLH0_Qpt+(QD= zeLmqK0;G>^Bw%ebKp-Ue9tmi-NYY^a>>>efk3kyd8lNH-G)EH+5aUP0l78YkK8x@j zVo|qf##al7Wi8>Ow-E~)!zZ2mhgevdB)(Wg9-JPtM>#?)?UW}mE`?a!B*y)KSlrJT zmqjdY2jlh-i#x(Nu{#||2hxFbAYb~w9Xb#I00000@_%iF1cL?*8Z>Copg~ntRaI40 Y6?j-;T}8qF>Hq)$07*qoM6N<$f(6!WrT_o{ literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_reply_white_18dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xxhdpi/ic_reply_white_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb5d49777448ef9309d51b09a07fb9c7adf1a83 GIT binary patch literal 351 zcmV-l0igbgP)02|@5}zLw=Q|(xEaz~Z$LDjoT(18XA+kE^iX$C`1nW}@Y(Uv#LzFc(LfK+t zlqEJn*h71b0WCA|>kF^E3l{C9>czh85O1M>%r5^iS^!hEx(X0cc3ZZ$exEy}7^D-z^p_ xQ3duyD-%Jksp$5(2)D}hacz#L?Q*&PPG3QMCa(AAvCaSh002ovPDHLkV1iJ;n@0cu literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_alarm_white_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_alarm_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..419f4bb4f2a12b68ed0a9942343f019f44d1eaa3 GIT binary patch literal 3399 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_cancel_white_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_cancel_white_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8bea844cd592ccc86c0bf4dac57bc3d0fd1454c3 GIT binary patch literal 2015 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 literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_message_black_18dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_message_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..5456c42f4d8e9467907ee0122c66ae3d2b9dd53c GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw_ItWGhEy=Vy>gKAkb^+$!~a{p z33yLgpt{8Bpa$Do7l9`B(zOY^PLnEM{k~uMz?ygS^EuvE-t3s9ey^8VT8t;;;>7ej zGgb4wWKJ5tcUg3!OJ;-V(QS$gY>(tSzopr0G1VE@&Et; literal 0 HcmV?d00001 diff --git a/samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_person_black_48dp.png b/samples/browseable/WearNotifications/Application/res/drawable-xxxhdpi/ic_person_black_48dp.png new file mode 100644 index 0000000000000000000000000000000000000000..6be3e306391d467d099d25fb302270224c868953 GIT binary patch literal 1121 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE1xWt5x}=AJfkng9#WAFU@y*TC`5~z?$3DLA zNnZTTDbss*upTG3aI?dyQyUZwk7Pu7t7aNx8YDV)BnXH(y-YAz5*j6SrMG*Q!)=pw z6Eb?FlY3Z$xNmGZ<#fs9V#JG*D#z&D#-BSgc}%{T&9!_#)AIcD-|9A#i_iV$Q^En} zX)m3nA^XL^V~%86hp`90tjo$}Q?^XZo%2*Y=b+G+i$0c`s;n|k)wcE2J>~f6!6j1I zWvJ8XRyqIb39gnK$2qn&CGBzTSaQN`U4rI{Zr&4{t`>-U2MWJ&o2KZ)J?+sf4n^-t z&g#?JZdD3JhVb1_$b9wssM-XBxe-#?>PMKCuzDB!p7G8y;IC>vKB@Q4QJah=UW4f^ zJGv^b^ta4#{+1}WZMwUMVBwj=No$@d7IA&vq49q*(=mho?#btMEW0dU#HO9}J>&S7 zLE*N6doJUI%`+CCWALzlwjypq(3wb1FB1pTXB)J51&+#;IWdnmy+)wCadGpc(6WC9@%R#$hef15!dW77K|e zeo5@x)yUvGW3iNAg7&i&z8nmH^ZpA?J3OPA&(Ql*hxHEDQ?4>{$NN4DL>`qrbGS|8 zfnZQ~7Cpx|A zO!hQ!l4V`e@T71?U5@0}k9<3qOv!o3vsYyUtJeo(`HhmEvxQb!I7;8;5lEhunZ$F! zSGshMpP{E95|~&M_rR3zl85&69f$IH3{R(ds6zW|*B^bA?M|Cn&SwTf&ogQZe8{8|{Q+qj}6kI9(1Szmo3WZ?gSYpzeCU1pd53YB(;8!pD% z4dun2C&#IDyRLYs_3ZPml}|M{`57Mn!F+l`TW65dHH~LH!4Ykyp2n#udu(3KJYclN zQ!2vs7*}yaqR!#&!UhA$7nOR+k(W$Qoz$>&nR#r}ir;h8+Ic?eT;HJc#_IJ+hTD?I zHf<@4JNo>aadT=Re}%MsH9xn5`p1=jBOF#8Z~r#o0Mq5Tnl$6@8yHNTE$xIJvWacT zo7kQ&bDSwc*>2;s`i%@`XRT@;GV3gud)W5SpFY+t`zxfLmnAW-6M7!Cf#Eynx!O+F z9eQ(KA7#2DaIQC*@typf%?;1zuw7vIztx?c30Md)H2qo2zEeaKfTYNQj|)JTUktC6o+dq?9H~EB^BF0Ts(zKIf z5J4hr@>BtIUWa@1)q^5EM0qG9O*%bF6Jn|4P8~ZRHV|gNh&14Q97BLv9^V(QOAM?S z;xf1Rj-bRyk1kR<(zwXblU5P{#AL?8G_eO<2@TF^;k1r#T3s%un+$WFQVbIJv?AhJ emStJizv~TwJ`C-NfL~|;0000 + + + + + diff --git a/samples/browseable/WearNotifications/Application/res/layout/activity_big_text_main.xml b/samples/browseable/WearNotifications/Application/res/layout/activity_big_text_main.xml new file mode 100644 index 000000000..5b37603bd --- /dev/null +++ b/samples/browseable/WearNotifications/Application/res/layout/activity_big_text_main.xml @@ -0,0 +1,38 @@ + + + + + + + diff --git a/samples/browseable/WearNotifications/Application/res/layout/activity_inbox_main.xml b/samples/browseable/WearNotifications/Application/res/layout/activity_inbox_main.xml new file mode 100644 index 000000000..0377b4ae8 --- /dev/null +++ b/samples/browseable/WearNotifications/Application/res/layout/activity_inbox_main.xml @@ -0,0 +1,38 @@ + + + + + + + diff --git a/samples/browseable/WearNotifications/Application/res/layout/activity_main.xml b/samples/browseable/WearNotifications/Application/res/layout/activity_main.xml new file mode 100644 index 000000000..c18e102b2 --- /dev/null +++ b/samples/browseable/WearNotifications/Application/res/layout/activity_main.xml @@ -0,0 +1,62 @@ + + + + + + + + + + +