From 645446ab9e01fd200d076254ab3b16e996dcf26a Mon Sep 17 00:00:00 2001 From: Trevor Johns Date: Tue, 16 May 2017 12:03:22 -0700 Subject: [PATCH 1/5] Update dependency versions for 2017-05 samples release Test: gradlew assembleDebug Change-Id: I98f72c70aca763d80ac543be687752574d477a79 --- templates/include/common.ftl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/templates/include/common.ftl b/templates/include/common.ftl index 57fc0a28..7446b15e 100644 --- a/templates/include/common.ftl +++ b/templates/include/common.ftl @@ -78,13 +78,13 @@ <#-- Set the global build tools version --> -<#assign build_tools_version='"25.0.2"'/> +<#assign build_tools_version='"25.0.3"'/> -<#assign play_services_version="10.0.1"/> +<#assign play_services_version="10.2.4"/> <#assign play_services_wearable_dependency="'com.google.android.gms:play-services-wearable:${play_services_version}'"/> -<#assign android_support_v13_dependency="'com.android.support:support-v13:25.1.1'"/> +<#assign android_support_v13_dependency="'com.android.support:support-v13:25.3.1'"/> -<#assign wearable_support_dependency="'com.google.android.support:wearable:2.0.0'"/> +<#assign wearable_support_dependency="'com.google.android.support:wearable:2.0.1'"/> -<#assign wearable_support_provided_dependency="'com.google.android.wearable:wearable:2.0.0'"/> +<#assign wearable_support_provided_dependency="'com.google.android.wearable:wearable:2.0.1'"/> -- GitLab From 86fd639b27899f827ca96296b6bd5bcca7f5df23 Mon Sep 17 00:00:00 2001 From: Trevor Johns Date: Wed, 17 May 2017 02:58:28 -0700 Subject: [PATCH 2/5] Update samples prebuilts for 2017-05 samples push Test: Parent changes tested, prebuilts output only Change-Id: I87d20d7354b8fc9fef7ad9bfb7a349ab4d0511c8 --- .../Application/build.gradle | 4 +- .../gradle/ActionBarCompat-Basic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../ActionBarCompat-ListPopupMenu/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../gradle/ActionBarCompat-Styled/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 4 +- .../Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- .../gradle/ActiveNotifications/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../gradle/ActivityInstrumentation/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../ActivitySceneTransitionBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- .../gradle/AdvancedImmersiveMode/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../AgendaData/Application/build.gradle | 8 +- prebuilts/gradle/AgendaData/README.md | 4 +- .../gradle/AgendaData/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- prebuilts/gradle/AlwaysOn/README.md | 4 +- .../gradle/AlwaysOn/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../gradle/AppRestrictionEnforcer/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../AppRestrictionSchemaFragment.java | 30 +- .../Application/src/main/res/menu/main.xml | 4 +- .../gradle/AppRestrictionSchema/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../AppRestrictions/Application/build.gradle | 4 +- prebuilts/gradle/AppRestrictions/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- prebuilts/gradle/AppShortcuts/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../AppUsageStatistics/.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/AppUsageStatistics/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../AsymmetricFingerprintDialog/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/AutoBackupForApps/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../AutofillFramework/.google/packaging.yaml | 19 + .../Application/build.gradle | 59 + .../Application/src/main/AndroidManifest.xml | 107 ++ .../android/autofillframework/CommonUtil.java | 54 + .../app/CreditCardActivity.java | 99 ++ .../app/CustomVirtualView.java | 296 ++++ .../autofillframework/app/LoginActivity.java | 93 ++ .../autofillframework/app/MainActivity.java | 70 + .../app/VirtualLoginActivity.java | 85 ++ .../app/WelcomeActivity.java | 36 + .../service/AuthActivity.java | 160 ++ .../service/AutofillHelper.java | 100 ++ .../service/MyAutofillService.java | 128 ++ .../service/StructureParser.java | 85 ++ .../datasource/AutofillRepository.java | 41 + .../datasource/LocalAutofillRepository.java | 127 ++ .../service/model/AutofillField.java | 120 ++ .../model/AutofillFieldsCollection.java | 70 + .../service/model/ClientFormData.java | 184 +++ .../service/model/SavedAutofillValue.java | 135 ++ .../service/settings/MyPreferences.java | 91 ++ .../service/settings/SettingsActivity.java | 176 +++ .../src/main/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../drawable/ic_delete_forever_black_24dp.xml | 20 + .../res/drawable/ic_person_black_24dp.xml | 20 + .../src/main/res/layout/activity_main.xml | 46 + .../src/main/res/layout/auth_activity.xml | 62 + .../main/res/layout/credit_card_activity.xml | 108 ++ .../src/main/res/layout/list_item.xml | 26 + .../src/main/res/layout/login_activity.xml | 91 ++ .../src/main/res/layout/settings_activity.xml | 143 ++ .../layout/settings_authentication_dialog.xml | 26 + .../res/layout/virtual_login_activity.xml | 48 + .../src/main/res/layout/welcome_activity.xml | 30 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3323 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2036 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4201 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6861 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9672 bytes .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../main/res/values-v11/template-styles.xml | 22 + .../src/main/res/values-v21/base-colors.xml | 21 + .../res/values-v21/base-template-styles.xml | 24 + .../src/main/res/values/base-strings.xml | 29 + .../src/main/res/values/dimens.xml | 28 + .../src/main/res/values/strings.xml | 106 ++ .../src/main/res/values/styles.xml | 42 + .../src/main/res/values/template-dimens.xml | 32 + .../src/main/res/values/template-styles.xml | 42 + .../src/main/res/xml/autofill_service.xml | 24 + .../gradle/AutofillFramework/CONTRIBUTING.md | 35 + prebuilts/gradle/AutofillFramework/LICENSE | 647 ++++++++ prebuilts/gradle/AutofillFramework/README.md | 144 ++ .../gradle/AutofillFramework/build.gradle | 12 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 49896 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + prebuilts/gradle/AutofillFramework/gradlew | 164 +++ .../gradle/AutofillFramework/gradlew.bat | 90 ++ .../kotlinApp/Application/build.gradle | 62 + .../Application/src/main/AndroidManifest.xml | 107 ++ .../android/autofillframework/CommonUtil.java | 54 + .../app/CreditCardActivity.kt | 88 ++ .../app/CustomVirtualView.kt | 273 ++++ .../autofillframework/app/LoginActivity.kt | 85 ++ .../autofillframework/app/MainActivity.kt | 53 + .../app/VirtualLoginActivity.kt | 77 + .../autofillframework/app/WelcomeActivity.kt | 38 + .../service/AuthActivity.java | 160 ++ .../service/AutofillHelper.java | 100 ++ .../service/MyAutofillService.java | 128 ++ .../service/StructureParser.java | 85 ++ .../datasource/AutofillRepository.java | 41 + .../datasource/LocalAutofillRepository.java | 127 ++ .../service/model/AutofillField.java | 120 ++ .../model/AutofillFieldsCollection.java | 70 + .../service/model/ClientFormData.java | 184 +++ .../service/model/SavedAutofillValue.java | 135 ++ .../service/settings/MyPreferences.java | 91 ++ .../service/settings/SettingsActivity.java | 176 +++ .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 4199 bytes .../src/main/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 2535 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 6022 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 11040 bytes .../drawable/ic_delete_forever_black_24dp.xml | 20 + .../res/drawable/ic_person_black_24dp.xml | 20 + .../src/main/res/layout/activity_main.xml | 46 + .../src/main/res/layout/auth_activity.xml | 62 + .../main/res/layout/credit_card_activity.xml | 108 ++ .../src/main/res/layout/list_item.xml | 26 + .../src/main/res/layout/login_activity.xml | 91 ++ .../src/main/res/layout/settings_activity.xml | 143 ++ .../layout/settings_authentication_dialog.xml | 26 + .../res/layout/virtual_login_activity.xml | 48 + .../src/main/res/layout/welcome_activity.xml | 30 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3323 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2036 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4201 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6861 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9672 bytes .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../main/res/values-v11/template-styles.xml | 22 + .../src/main/res/values-v21/base-colors.xml | 21 + .../res/values-v21/base-template-styles.xml | 24 + .../src/main/res/values/base-strings.xml | 29 + .../src/main/res/values/dimens.xml | 28 + .../src/main/res/values/strings.xml | 106 ++ .../src/main/res/values/styles.xml | 42 + .../src/main/res/values/template-dimens.xml | 32 + .../src/main/res/values/template-styles.xml | 42 + .../src/main/res/xml/autofill_service.xml | 24 + .../AutofillFramework/kotlinApp/build.gradle | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 49896 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../AutofillFramework/kotlinApp/gradlew | 164 +++ .../AutofillFramework/kotlinApp/gradlew.bat | 90 ++ .../kotlinApp/screenshots/1_HomePage.png | Bin 0 -> 42315 bytes .../2_StandardViewAutofillable.png | Bin 0 -> 41286 bytes .../screenshots/3_StandardViewAutofilled.png | Bin 0 -> 43969 bytes .../screenshots/4_WelcomeActivity.png | Bin 0 -> 33993 bytes .../screenshots/5_CustomViewAutofillable.png | Bin 0 -> 42695 bytes .../screenshots/6_CustomViewAutofilled.png | Bin 0 -> 38360 bytes .../screenshots/7_SettingsActivity.png | Bin 0 -> 49842 bytes .../kotlinApp/screenshots/8_AuthNeeded.png | Bin 0 -> 45550 bytes .../kotlinApp/screenshots/9_AuthActivity.png | Bin 0 -> 39052 bytes .../kotlinApp/screenshots/icon-web.png | Bin 0 -> 71715 bytes .../kotlinApp/settings.gradle | 2 + .../screenshots/1_HomePage.png | Bin 0 -> 42315 bytes .../2_StandardViewAutofillable.png | Bin 0 -> 41286 bytes .../screenshots/3_StandardViewAutofilled.png | Bin 0 -> 43969 bytes .../screenshots/4_WelcomeActivity.png | Bin 0 -> 33993 bytes .../screenshots/5_CustomViewAutofillable.png | Bin 0 -> 42695 bytes .../screenshots/6_CustomViewAutofilled.png | Bin 0 -> 38360 bytes .../screenshots/7_SettingsActivity.png | Bin 0 -> 49842 bytes .../screenshots/8_AuthNeeded.png | Bin 0 -> 45550 bytes .../screenshots/9_AuthActivity.png | Bin 0 -> 39052 bytes .../screenshots/icon-web.png | Bin 0 -> 71715 bytes .../gradle/AutofillFramework/settings.gradle | 2 + .../Application/build.gradle | 4 +- prebuilts/gradle/BasicAccessibility/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../gradle/BasicAndroidKeyStore/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/BasicContactables/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/BasicGestureDetect/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/BasicImmersiveMode/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- .../Application/src/main/AndroidManifest.xml | 13 +- .../BasicManagedProfileFragment.java | 25 +- .../EnableProfileActivity.java | 1 - .../SetupProfileFragment.java | 23 +- .../main/res/drawable-hdpi/ic_launcher.png | Bin 3738 -> 0 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 2317 -> 0 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 5208 -> 0 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 9457 -> 0 bytes .../main/res/drawable/ic_launcher_badged.xml | 2 +- .../src/main/res/layout/fragment_main.xml | 2 +- .../res/layout/fragment_setup_profile.xml | 2 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2843 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1850 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3676 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5811 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8554 bytes .../gradle/BasicManagedProfile/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../screenshots/icon-web.png | Bin 58382 -> 32034 bytes .../screenshots/set_up.png | Bin 100391 -> 85818 bytes .../Application/build.gradle | 4 +- .../basicmediadecoder/MainActivity.java | 2 +- .../android/common/media/CameraHelper.java | 3 +- .../common/media/MediaCodecWrapper.java | 28 +- .../src/main/res/menu/action_menu.xml | 8 +- .../src/main/res/values/strings.xml | 4 +- prebuilts/gradle/BasicMediaDecoder/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../BasicMediaRouter/Application/build.gradle | 4 +- .../src/main/res/layout/sample_main.xml | 41 +- .../Application/src/main/res/menu/main.xml | 6 +- prebuilts/gradle/BasicMediaRouter/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../BasicMultitouch/Application/build.gradle | 4 +- prebuilts/gradle/BasicMultitouch/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../BasicNetworking/Application/build.gradle | 4 +- prebuilts/gradle/BasicNetworking/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/BasicNotifications/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/AndroidManifest.xml | 27 - .../Application/build.gradle | 10 +- .../Application/src/main/AndroidManifest.xml | 24 +- .../basicrenderscript/MainActivity.java | 94 +- .../android/common/media/CameraHelper.java | 190 --- .../common/media/MediaCodecWrapper.java | 387 ----- .../main/res/drawable-hdpi/ic_launcher.png | Bin 4440 -> 0 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 2742 -> 0 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 6245 -> 0 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 11130 -> 0 bytes .../src/main/res/layout/main_layout.xml | 25 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3309 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2058 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4133 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6682 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9697 bytes .../src/main/res/values-v11/styles.xml | 24 - .../src/main/res/values-v14/styles.xml | 12 - .../src/main/res/values/colors.xml | 21 +- .../src/main/res/values/styles.xml | 34 +- .../Application/src/main/rs/saturation.rs | 6 +- prebuilts/gradle/BasicRenderScript/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/BasicRenderScript/packaging.yaml | 2 +- .../screenshots/icon-web.png | Bin 69040 -> 36388 bytes .../BasicSyncAdapter/Application/build.gradle | 4 +- prebuilts/gradle/BasicSyncAdapter/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../BasicTransition/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/BasicTransition/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../BatchStepSensor/Application/build.gradle | 4 +- prebuilts/gradle/BatchStepSensor/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../BeamLargeFiles/Application/build.gradle | 4 +- prebuilts/gradle/BeamLargeFiles/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- .../AdvertiserService.java | 31 +- .../gradle/BluetoothAdvertisements/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../BluetoothChat/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/BluetoothChat/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../BluetoothLeGatt/Application/build.gradle | 4 +- prebuilts/gradle/BluetoothLeGatt/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/BorderlessButtons/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Camera2Basic/Application/build.gradle | 4 +- prebuilts/gradle/Camera2Basic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Camera2Raw/Application/build.gradle | 4 +- .../camera2raw/Camera2RawFragment.java | 10 +- .../layout-land/fragment_camera2_basic.xml | 2 +- .../res/layout/fragment_camera2_basic.xml | 2 +- prebuilts/gradle/Camera2Raw/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Camera2Video/Application/build.gradle | 4 +- .../camera2video/Camera2VideoFragment.java | 59 +- prebuilts/gradle/Camera2Video/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../CardEmulation/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/CardEmulation/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../CardReader/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/CardReader/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/CardView/Application/build.gradle | 4 +- prebuilts/gradle/CardView/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../ClippingBasic/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/ClippingBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/CommitContentSampleApp/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/CommitContentSampleIME/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../ConfirmCredential/.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- .../Application/src/main/AndroidManifest.xml | 7 +- .../confirmcredential/MainActivity.java | 9 +- .../src/main/res/layout/activity_main.xml | 5 +- .../src/main/res/values/strings.xml | 9 +- prebuilts/gradle/ConfirmCredential/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 18 + .../ContentProviderPaging/CONTRIBUTING.md | 35 + .../gradle/ContentProviderPaging/LICENSE | 647 ++++++++ prebuilts/gradle/ContentProviderPaging/NOTICE | 16 + .../gradle/ContentProviderPaging/README.md | 75 + .../ContentProviderPaging/app/build.gradle | 1 + .../app/src/main/AndroidManifest.xml | 41 + .../contentproviderpaging/ImageAdapter.java | 113 ++ .../ImageClientFragment.java | 173 +++ .../contentproviderpaging/ImageContract.java | 46 + .../contentproviderpaging/ImageProvider.java | 240 +++ .../ImageViewHolder.java | 38 + .../contentproviderpaging/MainActivity.java | 38 + .../gradle/ContentProviderPaging/build.gradle | 28 + .../ContentProviderPaging/common.gradle | 23 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../gradle/ContentProviderPaging/gradlew | 160 ++ .../gradle/ContentProviderPaging/gradlew.bat | 90 ++ .../kotlinApp/build.gradle | 9 + .../kotlinApp/src/main/AndroidManifest.xml | 41 + .../ImageAdapter.kt | 93 ++ .../ImageClientFragment.kt | 159 ++ .../ImageContract.kt | 43 + .../ImageProvider.kt | 231 +++ .../ImageViewHolder.kt | 32 + .../MainActivity.kt | 37 + .../resources/build.gradle | 29 + .../resources/proguard-rules.pro | 25 + .../resources/src/main/AndroidManifest.xml | 1 + .../src/main/res/drawable/cat_placeholder.png | Bin 0 -> 38015 bytes .../src/main/res/layout/activity_main.xml | 19 + .../main/res/layout/fragment_image_client.xml | 39 + .../src/main/res/layout/viewholder_image.xml | 39 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2833 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5236 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1868 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3642 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3707 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6726 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5966 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10479 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8610 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 13724 bytes .../resources/src/main/res/raw/cat_1.jpg | Bin 0 -> 73353 bytes .../resources/src/main/res/raw/cat_10.jpg | Bin 0 -> 95006 bytes .../resources/src/main/res/raw/cat_11.jpg | Bin 0 -> 59202 bytes .../resources/src/main/res/raw/cat_12.jpg | Bin 0 -> 69928 bytes .../resources/src/main/res/raw/cat_13.jpg | Bin 0 -> 115752 bytes .../resources/src/main/res/raw/cat_2.jpg | Bin 0 -> 47951 bytes .../resources/src/main/res/raw/cat_3.jpg | Bin 0 -> 109826 bytes .../resources/src/main/res/raw/cat_4.jpg | Bin 0 -> 132785 bytes .../resources/src/main/res/raw/cat_5.jpg | Bin 0 -> 92887 bytes .../resources/src/main/res/raw/cat_6.jpg | Bin 0 -> 70394 bytes .../resources/src/main/res/raw/cat_7.jpg | Bin 0 -> 87272 bytes .../resources/src/main/res/raw/cat_8.jpg | Bin 0 -> 105650 bytes .../resources/src/main/res/raw/cat_9.jpg | Bin 0 -> 92636 bytes .../resources/src/main/res/values/arrays.xml | 33 + .../resources/src/main/res/values/colors.xml | 21 + .../resources/src/main/res/values/dimens.xml} | 19 +- .../resources/src/main/res/values/strings.xml | 24 + .../resources/src/main/res/values/styles.xml | 23 + .../screenshots/icon-web.png | Bin 0 -> 1704468 bytes .../screenshots/screenshot-1.png | Bin 0 -> 186700 bytes .../ContentProviderPaging/settings.gradle | 1 + .../CustomChoiceList/Application/build.gradle | 4 +- prebuilts/gradle/CustomChoiceList/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../gradle/CustomNotifications/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../CustomTransition/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/CustomTransition/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/DataLayer/Application/build.gradle | 8 +- prebuilts/gradle/DataLayer/README.md | 4 +- .../gradle/DataLayer/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 8 +- .../gradle/DelayedConfirmation/README.md | 4 +- .../DelayedConfirmation/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../DeviceOwner/Application/build.gradle | 4 +- .../Application/src/main/AndroidManifest.xml | 2 +- .../deviceowner/DeviceOwnerFragment.java | 8 +- .../deviceowner/InstructionFragment.java | 2 +- .../android/deviceowner/MainActivity.java | 8 +- .../src/main/res/values/styles.xml | 25 + prebuilts/gradle/DeviceOwner/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../DirectBoot/Application/build.gradle | 4 +- .../android/directboot/alarms/AlarmUtil.java | 15 +- prebuilts/gradle/DirectBoot/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../DirectShare/Application/build.gradle | 4 +- prebuilts/gradle/DirectShare/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../DirectorySelection/.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/DirectorySelection/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/DisplayingBitmaps/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../gradle/DocumentCentricApps/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/DoneBar/Application/build.gradle | 4 +- prebuilts/gradle/DoneBar/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../DownloadableFonts/.google/packaging.yaml | 20 + .../gradle/DownloadableFonts/CONTRIBUTING.md | 35 + prebuilts/gradle/DownloadableFonts/LICENSE | 647 ++++++++ prebuilts/gradle/DownloadableFonts/NOTICE | 16 + prebuilts/gradle/DownloadableFonts/README.md | 125 ++ .../gradle/DownloadableFonts/app/build.gradle | 28 + .../app/src/main/AndroidManifest.xml | 38 + .../android/downloadablefonts/Constants.java | 35 + .../downloadablefonts/MainActivity.java | 276 ++++ .../downloadablefonts/QueryBuilder.java | 101 ++ .../app/src/main/res/font/lobster_two.xml | 25 + .../app/src/main/res/layout/activity_main.xml | 46 + .../res/layout/bottom_sheet_font_query.xml | 210 +++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2833 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5236 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1868 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3642 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3707 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6726 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5966 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10479 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8610 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 13724 bytes .../app/src/main/res/values/colors.xml | 21 + .../app/src/main/res/values/dimens.xml | 27 + .../app/src/main/res/values/family_names.xml | 838 +++++++++++ .../app/src/main/res/values/font_certs.xml | 32 + .../src/main/res/values/preloaded_fonts.xml | 21 + .../app/src/main/res/values/strings.xml | 30 + .../app/src/main/res/values/styles.xml | 23 + .../gradle/DownloadableFonts/build.gradle | 28 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + prebuilts/gradle/DownloadableFonts/gradlew | 160 ++ .../gradle/DownloadableFonts/gradlew.bat | 90 ++ .../DownloadableFonts/kotlinApp/build.gradle | 37 + .../kotlinApp/src/main/AndroidManifest.xml | 38 + .../android/downloadablefonts/Constants.kt | 35 + .../android/downloadablefonts/MainActivity.kt | 249 ++++ .../android/downloadablefonts/QueryBuilder.kt | 48 + .../src/main/res/font/lobster_two.xml | 25 + .../src/main/res/layout/activity_main.xml | 46 + .../res/layout/bottom_sheet_font_query.xml | 210 +++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2833 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 5236 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1868 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3642 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3707 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 6726 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5966 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 10479 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8610 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 13724 bytes .../kotlinApp/src/main/res/values/colors.xml | 21 + .../kotlinApp/src/main/res/values/dimens.xml | 27 + .../src/main/res/values/family_names.xml | 838 +++++++++++ .../src/main/res/values/font_certs.xml | 32 + .../src/main/res/values/preloaded_fonts.xml | 21 + .../kotlinApp/src/main/res/values/strings.xml | 30 + .../kotlinApp/src/main/res/values/styles.xml | 23 + .../screenshots/icon-web.png | Bin 0 -> 95112 bytes .../screenshots/screenshot-1.png | Bin 0 -> 100906 bytes .../screenshots/screenshot-2.png | Bin 0 -> 98294 bytes .../screenshots/screenshot-3.png | Bin 0 -> 95112 bytes .../gradle/DownloadableFonts/settings.gradle | 1 + .../.google/packaging.yaml | 4 +- .../gradle/DragAndDropAcrossApps/README.md | 24 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../DrawableTinting/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/DrawableTinting/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../ElevationBasic/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/ElevationBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../ElevationDrag/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/ElevationDrag/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/ElizaChat/Application/build.gradle | 4 +- prebuilts/gradle/ElizaChat/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/EmojiCompat/.google/packaging.yaml | 24 + prebuilts/gradle/EmojiCompat/CONTRIBUTING.md | 35 + prebuilts/gradle/EmojiCompat/LICENSE | 647 ++++++++ prebuilts/gradle/EmojiCompat/NOTICE | 16 + prebuilts/gradle/EmojiCompat/README.md | 143 ++ prebuilts/gradle/EmojiCompat/app/build.gradle | 55 + .../gradle/EmojiCompat/app/proguard-rules.pro | 25 + .../android/emojicompat/MainActivityTest.java | 56 + .../app/src/main/AndroidManifest.xml | 42 + .../android/emojicompat/CustomTextView.java | 74 + .../emojicompat/EmojiCompatApplication.java | 70 + .../android/emojicompat/MainActivity.java | 68 + .../app/src/main/res/layout/activity_main.xml | 69 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3545 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2182 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4598 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7372 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10555 bytes .../app/src/main/res/values/colors.xml | 21 + .../app/src/main/res/values/dimens.xml | 21 + .../app/src/main/res/values/font_certs.xml | 32 + .../app/src/main/res/values/strings.xml | 24 + .../app/src/main/res/values/styles.xml | 25 + prebuilts/gradle/EmojiCompat/build.gradle | 45 + .../gradle/EmojiCompat/gradle.properties | 17 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + prebuilts/gradle/EmojiCompat/gradlew | 160 ++ prebuilts/gradle/EmojiCompat/gradlew.bat | 90 ++ .../gradle/EmojiCompat/kotlinApp/build.gradle | 70 + .../EmojiCompat/kotlinApp/proguard-rules.pro | 25 + .../android/emojicompat/MainActivityTest.kt | 51 + .../kotlinApp/src/main/AndroidManifest.xml | 42 + .../android/emojicompat/CustomTextView.kt | 68 + .../emojicompat/EmojiCompatApplication.kt | 69 + .../android/emojicompat/MainActivity.kt | 68 + .../src/main/res/layout/activity_main.xml | 69 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3545 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2182 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4598 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 7372 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10555 bytes .../kotlinApp/src/main/res/values/colors.xml | 21 + .../kotlinApp/src/main/res/values/dimens.xml | 21 + .../src/main/res/values/font_certs.xml | 32 + .../kotlinApp/src/main/res/values/strings.xml | 24 + .../kotlinApp/src/main/res/values/styles.xml | 25 + .../gradle/EmojiCompat/screenshots/1-main.png | Bin 0 -> 101396 bytes .../EmojiCompat/screenshots/icon-web.png | Bin 0 -> 38440 bytes prebuilts/gradle/EmojiCompat/settings.gradle | 2 + .../FindMyPhone/Application/build.gradle | 8 +- prebuilts/gradle/FindMyPhone/README.md | 4 +- .../gradle/FindMyPhone/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../FingerprintDialog/.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/FingerprintDialog/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- prebuilts/gradle/Flashlight/README.md | 4 +- .../gradle/Flashlight/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- .../FloatingActionButtonBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Geofencing/Application/build.gradle | 10 +- prebuilts/gradle/Geofencing/README.md | 4 +- .../gradle/Geofencing/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- prebuilts/gradle/GridViewPager/README.md | 4 +- .../GridViewPager/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../HdrViewfinder/Application/build.gradle | 4 +- .../android/hdrviewfinder/CameraOps.java | 20 +- .../hdrviewfinder/FixedAspectSurfaceView.java | 8 +- .../hdrviewfinder/HdrViewfinderActivity.java | 137 +- .../hdrviewfinder/MessageDialogFragment.java | 8 +- .../hdrviewfinder/ViewfinderProcessor.java | 13 +- .../Application/src/main/res/menu/main.xml | 23 +- prebuilts/gradle/HdrViewfinder/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../HorizontalPaging/Application/build.gradle | 4 +- prebuilts/gradle/HorizontalPaging/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../ImmersiveMode/Application/build.gradle | 4 +- prebuilts/gradle/ImmersiveMode/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Interpolator/Application/build.gradle | 4 +- .../interpolator/InterpolatorFragment.java | 158 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/Interpolator/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Interpolator/{ => screenshots}/after.png | Bin .../Interpolator/{ => screenshots}/before.png | Bin .../JobScheduler/Application/build.gradle | 4 +- prebuilts/gradle/JobScheduler/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- prebuilts/gradle/JumpingJack/README.md | 4 +- .../gradle/JumpingJack/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../LNotifications/Application/build.gradle | 4 +- prebuilts/gradle/LNotifications/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 10 +- .../Application/build.gradle | 17 +- .../Application/src/main/AndroidManifest.xml | 43 +- .../mediabrowserservice/AlbumArtCache.java | 99 +- .../mediabrowserservice/BrowseFragment.java | 190 ++- .../MediaNotificationHelper.java | 86 ++ .../MediaNotificationManager.java | 354 ----- .../MusicPlayerActivity.java | 29 +- .../mediabrowserservice/MusicService.java | 1298 +++++++---------- .../mediabrowserservice/PackageValidator.java | 159 -- .../android/mediabrowserservice/Playback.java | 225 ++- .../mediabrowserservice/QueueAdapter.java | 82 -- .../mediabrowserservice/QueueFragment.java | 295 ---- .../model/MusicProvider.java | 207 +-- .../model/MutableMediaMetadata.java | 54 - .../utils/BitmapHelper.java | 83 -- .../mediabrowserservice/utils/CarHelper.java | 55 - .../mediabrowserservice/utils/LogHelper.java | 97 -- .../utils/MediaIDHelper.java | 115 -- .../utils/QueueHelper.java | 149 -- .../utils/ResourceHelper.java | 53 - .../src/main/res/layout/activity_player.xml | 2 +- .../src/main/res/layout/fragment_list.xml | 35 +- .../src/main/res/layout/media_list_item.xml | 4 +- .../main/res/values/strings_notifications.xml | 2 +- .../src/main/res/values/styles.xml | 16 +- .../res/xml/allowed_media_browser_callers.xml | 174 --- .../gradle/MediaBrowserService/README.md | 6 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../MediaEffects/Application/build.gradle | 4 +- .../android/mediaeffects/GLToolbox.java | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- .../src/main/res/menu/media_effects.xml | 7 +- prebuilts/gradle/MediaEffects/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../MediaRecorder/Application/build.gradle | 6 +- .../Application/src/main/AndroidManifest.xml | 7 +- .../android/common/media/CameraHelper.java | 3 +- .../common/media/MediaCodecWrapper.java | 28 +- .../android/mediarecorder/MainActivity.java | 1 - .../src/main/res/values/strings.xml | 2 - prebuilts/gradle/MediaRecorder/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../MediaRouter/Application/build.gradle | 8 +- .../mediarouter/player/MainActivity.java | 7 +- .../provider/SampleMediaRouteProvider.java | 11 +- .../main/res/layout-land/grid_layout_2.xml | 63 - prebuilts/gradle/MediaRouter/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../MessagingService/.google/packaging.yaml | 2 +- .../MessagingService/Application/build.gradle | 11 +- prebuilts/gradle/MessagingService/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/MidiScope/Application/build.gradle | 4 +- .../android/midiscope/LoggingReceiver.java | 7 +- .../android/midiscope/MainActivity.java | 12 +- .../android/midiscope/MidiPrinter.java | 11 +- .../example/android/midiscope/MidiScope.java | 4 - .../android/midiscope/ScopeLogger.java | 4 +- .../Application/src/main/res/layout/main.xml | 4 +- .../Application/src/main/res/menu/main.xml | 7 +- .../src/main/res/values/styles.xml | 8 +- prebuilts/gradle/MidiScope/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/MidiSynth/Application/build.gradle | 4 +- .../android/midisynth/MainActivity.java | 20 +- .../midisynth/MidiSynthDeviceService.java | 1 - .../Application/src/main/res/layout/main.xml | 4 +- .../Application/src/main/res/menu/main.xml | 7 +- .../src/main/res/values/styles.xml | 8 +- prebuilts/gradle/MidiSynth/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 2 +- .../gradle/MultiWindowPlayground/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../NavigationDrawer/Application/build.gradle | 4 +- prebuilts/gradle/NavigationDrawer/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../NetworkConnect/Application/build.gradle | 4 +- prebuilts/gradle/NetworkConnect/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../NfcProvisioning/Application/build.gradle | 6 +- .../Application/src/main/AndroidManifest.xml | 4 +- .../android/nfcprovisioning/CompatUtils.java | 49 + .../NfcProvisioningFragment.java | 46 +- .../ProvisioningValuesLoader.java | 24 +- .../nfcprovisioning/TextWatcherWrapper.java | 2 +- .../res/layout/fragment_nfc_provisioning.xml | 8 + .../Application/src/main/res/menu/main.xml | 4 +- .../src/main/res/values/strings.xml | 1 + prebuilts/gradle/NfcProvisioning/README.md | 16 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 20 + .../Application/build.gradle | 59 + .../Application/src/main/AndroidManifest.xml | 36 + .../notificationchannels/MainActivity.java | 180 +++ .../NotificationHelper.java | 120 ++ .../src/main/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../src/main/res/layout/activity_main.xml | 112 ++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3069 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1988 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3933 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6323 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8828 bytes .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../main/res/values-v11/template-styles.xml | 22 + .../src/main/res/values-v21/base-colors.xml | 21 + .../res/values-v21/base-template-styles.xml | 24 + .../src/main/res/values-w820dp/dimens.xml | 6 + .../src/main/res/values/base-strings.xml | 30 + .../src/main/res/values/colors.xml | 6 + .../src/main/res/values/dimens.xml | 5 + .../src/main/res/values/strings.xml | 28 + .../src/main/res/values/template-dimens.xml | 32 + .../src/main/res/values/template-styles.xml | 42 + .../NotificationChannels/CONTRIBUTING.md | 35 + prebuilts/gradle/NotificationChannels/LICENSE | 647 ++++++++ .../gradle/NotificationChannels/README.md | 89 ++ .../gradle/NotificationChannels/build.gradle | 12 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 49896 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + prebuilts/gradle/NotificationChannels/gradlew | 164 +++ .../gradle/NotificationChannels/gradlew.bat | 90 ++ .../kotlinApp/Application/build.gradle | 62 + .../Application/src/main/AndroidManifest.xml | 36 + .../notificationchannels/MainActivity.kt | 145 ++ .../NotificationHelper.kt | 116 ++ .../src/main/res/drawable-hdpi/tile.9.png | Bin 0 -> 196 bytes .../src/main/res/layout/activity_main.xml | 112 ++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3069 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1988 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3933 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6323 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8828 bytes .../res/values-sw600dp/template-dimens.xml | 24 + .../res/values-sw600dp/template-styles.xml | 25 + .../main/res/values-v11/template-styles.xml | 22 + .../src/main/res/values-v21/base-colors.xml | 21 + .../res/values-v21/base-template-styles.xml | 24 + .../src/main/res/values-w820dp/dimens.xml | 6 + .../src/main/res/values/base-strings.xml | 30 + .../src/main/res/values/colors.xml | 6 + .../src/main/res/values/dimens.xml | 5 + .../src/main/res/values/strings.xml | 28 + .../src/main/res/values/template-dimens.xml | 32 + .../src/main/res/values/template-styles.xml | 42 + .../kotlinApp/build.gradle | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 49896 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../NotificationChannels/kotlinApp/gradlew | 164 +++ .../kotlinApp/gradlew.bat | 90 ++ .../kotlinApp/screenshots/1-main.png | Bin 0 -> 877685 bytes .../kotlinApp/screenshots/icon-web.png | Bin 0 -> 34383 bytes .../kotlinApp/settings.gradle | 2 + .../screenshots/1-main.png | Bin 0 -> 877685 bytes .../screenshots/icon-web.png | Bin 0 -> 34383 bytes .../NotificationChannels/settings.gradle | 2 + .../Notifications/Application/build.gradle | 8 +- prebuilts/gradle/Notifications/README.md | 4 +- .../Notifications/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../PdfRendererBasic/Application/build.gradle | 4 +- .../Application/src/main/AndroidManifest.xml | 4 +- .../pdfrendererbasic/MainActivity.java | 6 +- .../PdfRendererBasicFragment.java | 39 +- .../main/res/drawable-hdpi/ic_action_info.png | Bin 1025 -> 0 bytes .../main/res/drawable-hdpi/ic_launcher.png | Bin 3976 -> 0 bytes .../main/res/drawable-mdpi/ic_action_info.png | Bin 665 -> 0 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 2373 -> 0 bytes .../res/drawable-xhdpi/ic_action_info.png | Bin 1355 -> 0 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 5478 -> 0 bytes .../res/drawable-xxhdpi/ic_action_info.png | Bin 2265 -> 0 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 9652 -> 0 bytes .../src/main/res/drawable/ic_info.xml | 25 + .../layout/fragment_pdf_renderer_basic.xml | 5 +- .../Application/src/main/res/menu/main.xml | 11 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3487 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2151 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4373 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6981 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 10193 bytes .../src/main/res/values/styles.xml | 23 + prebuilts/gradle/PdfRendererBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../PdfRendererBasic/screenshots/icon-web.png | Bin 60032 -> 36910 bytes .../Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/PermissionRequest/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../PictureInPicture/.google/packaging.yaml | 19 + .../gradle/PictureInPicture/CONTRIBUTING.md | 35 + prebuilts/gradle/PictureInPicture/LICENSE | 647 ++++++++ prebuilts/gradle/PictureInPicture/NOTICE | 16 + prebuilts/gradle/PictureInPicture/README.md | 96 ++ .../gradle/PictureInPicture/app/build.gradle | 30 + .../PictureInPicture/app/proguard-rules.pro | 17 + .../pictureinpicture/MainActivityTest.java | 182 +++ .../app/src/main/AndroidManifest.xml | 40 + .../pictureinpicture/MainActivity.java | 281 ++++ .../pictureinpicture/widget/MovieView.java | 466 ++++++ .../res/drawable/ic_fast_forward_64dp.xml | 22 + .../main/res/drawable/ic_fast_rewind_64dp.xml | 22 + .../src/main/res/drawable/ic_info_24dp.xml | 22 + .../main/res/drawable/ic_minimize_24dp.xml | 22 + .../src/main/res/drawable/ic_pause_24dp.xml | 22 + .../src/main/res/drawable/ic_pause_64dp.xml | 24 + .../drawable/ic_picture_in_picture_alt.xml | 22 + .../main/res/drawable/ic_play_arrow_24dp.xml | 22 + .../main/res/drawable/ic_play_arrow_64dp.xml | 22 + .../app/src/main/res/drawable/shade.xml | 21 + .../app/src/main/res/layout/activity_main.xml | 67 + .../app/src/main/res/layout/view_movie.xml | 77 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3199 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2054 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3935 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6256 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8790 bytes .../app/src/main/res/raw/vid_bigbuckbunny.mp4 | Bin 0 -> 5510872 bytes .../app/src/main/res/values-w820dp/dimens.xml | 22 + .../app/src/main/res/values/attrs.xml | 24 + .../app/src/main/res/values/colors.xml | 21 + .../app/src/main/res/values/dimens.xml | 21 + .../app/src/main/res/values/strings.xml | 34 + .../app/src/main/res/values/styles.xml | 37 + .../gradle/PictureInPicture/build.gradle | 31 + .../gradle/PictureInPicture/gradle.properties | 17 + .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + prebuilts/gradle/PictureInPicture/gradlew | 160 ++ prebuilts/gradle/PictureInPicture/gradlew.bat | 90 ++ .../PictureInPicture/kotlinApp/build.gradle | 43 + .../kotlinApp/proguard-rules.pro | 17 + .../pictureinpicture/MainActivityTest.kt | 152 ++ .../kotlinApp/src/main/AndroidManifest.xml | 40 + .../android/pictureinpicture/MainActivity.kt | 262 ++++ .../pictureinpicture/widget/MovieView.kt | 425 ++++++ .../res/drawable/ic_fast_forward_64dp.xml | 22 + .../main/res/drawable/ic_fast_rewind_64dp.xml | 22 + .../src/main/res/drawable/ic_info_24dp.xml | 22 + .../main/res/drawable/ic_minimize_24dp.xml | 22 + .../src/main/res/drawable/ic_pause_24dp.xml | 22 + .../src/main/res/drawable/ic_pause_64dp.xml | 24 + .../drawable/ic_picture_in_picture_alt.xml | 22 + .../main/res/drawable/ic_play_arrow_24dp.xml | 22 + .../main/res/drawable/ic_play_arrow_64dp.xml | 22 + .../kotlinApp/src/main/res/drawable/shade.xml | 21 + .../src/main/res/layout/activity_main.xml | 67 + .../src/main/res/layout/view_movie.xml | 77 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3199 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2054 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3935 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6256 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 8790 bytes .../src/main/res/raw/vid_bigbuckbunny.mp4 | Bin 0 -> 5510872 bytes .../src/main/res/values-w820dp/dimens.xml | 22 + .../kotlinApp/src/main/res/values/attrs.xml | 24 + .../kotlinApp/src/main/res/values/colors.xml | 21 + .../kotlinApp/src/main/res/values/dimens.xml | 21 + .../kotlinApp/src/main/res/values/strings.xml | 34 + .../kotlinApp/src/main/res/values/styles.xml | 37 + .../PictureInPicture/screenshots/1-main.png | Bin 0 -> 1168244 bytes .../PictureInPicture/screenshots/2-pip.png | Bin 0 -> 455049 bytes .../PictureInPicture/screenshots/icon-web.png | Bin 0 -> 33453 bytes .../gradle/PictureInPicture/settings.gradle | 2 + .../gradle/Quiz/Application/build.gradle | 8 +- prebuilts/gradle/Quiz/README.md | 4 +- prebuilts/gradle/Quiz/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../RecipeAssistant/Application/build.gradle | 4 +- prebuilts/gradle/RecipeAssistant/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../RecyclerView/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/RecyclerView/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 1 - .../Application/build.gradle | 8 +- .../Application/src/main/AndroidManifest.xml | 26 +- .../example/android/common/logger/Log.java | 236 --- .../android/common/logger/LogFragment.java | 109 -- .../android/common/logger/LogNode.java | 39 - .../android/common/logger/LogView.java | 145 -- .../android/common/logger/LogWrapper.java | 75 - .../common/logger/MessageOnlyLogFilter.java | 60 - .../renderscriptintrinsic/MainActivity.java | 141 +- .../ThumbnailRadioButton.java | 30 +- .../main/res/drawable-hdpi/ic_launcher.png | Bin 4440 -> 0 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 2742 -> 0 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 6245 -> 0 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 11130 -> 0 bytes .../src/main/res/layout/main_layout.xml | 45 +- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3305 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2077 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4199 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6772 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9955 bytes .../src/main/res/values-v11/styles.xml | 24 - .../src/main/res/values-v14/styles.xml | 12 - .../src/main/res/values/base-strings.xml | 6 +- .../src/main/res/values/colors.xml | 21 +- .../src/main/res/values/strings.xml | 21 + .../src/main/res/values/styles.xml | 46 +- .../gradle/RenderScriptIntrinsic/README.md | 17 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../screenshots/icon-web.png | Bin 68679 -> 37457 bytes .../RepeatingAlarm/Application/build.gradle | 4 +- prebuilts/gradle/RepeatingAlarm/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../RevealEffectBasicFragment.java | 34 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/RevealEffectBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../RuntimePermissions/.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- prebuilts/gradle/RuntimePermissions/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- .../gradle/RuntimePermissionsBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 8 +- .../gradle/RuntimePermissionsWear/README.md | 4 +- .../Shared/build.gradle | 4 +- .../Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../.google/packaging.yaml | 2 +- .../Application/build.gradle | 4 +- .../gradle/ScopedDirectoryAccess/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../ScreenCapture/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/ScreenCapture/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../gradle/ShareActionProvider/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/SkeletonWearableApp/README.md | 4 +- .../SkeletonWearableApp/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../SlidingTabsBasic/Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/SlidingTabsBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- prebuilts/gradle/SlidingTabsColors/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../SpeedTracker/Application/build.gradle | 12 +- prebuilts/gradle/SpeedTracker/README.md | 4 +- .../gradle/SpeedTracker/Shared/build.gradle | 4 +- .../gradle/SpeedTracker/Wearable/build.gradle | 14 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../StorageClient/Application/build.gradle | 4 +- prebuilts/gradle/StorageClient/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../StorageProvider/Application/build.gradle | 4 +- prebuilts/gradle/StorageProvider/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- .../gradle/SwipeRefreshLayoutBasic/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- .../gradle/SwipeRefreshListFragment/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 4 +- .../Application/src/main/res/menu/main.xml | 4 +- .../SwipeRefreshMultipleViews/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 8 +- .../SynchronizedNotifications/README.md | 4 +- .../Shared/build.gradle | 4 +- .../Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../TextLinkify/Application/build.gradle | 4 +- prebuilts/gradle/TextLinkify/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../TextSwitcher/Application/build.gradle | 4 +- prebuilts/gradle/TextSwitcher/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- prebuilts/gradle/Timer/README.md | 4 +- prebuilts/gradle/Timer/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../gradle/WatchFace/.google/packaging.yaml | 12 + .../gradle/WatchFace/Application/build.gradle | 11 +- .../src/main/res/values/base-strings.xml | 26 +- prebuilts/gradle/WatchFace/README.md | 33 +- .../gradle/WatchFace/Wearable/build.gradle | 17 +- .../Wearable/src/main/AndroidManifest.xml | 202 +-- .../watchface/AnalogWatchFaceService.java | 507 ------- .../CalendarWatchFacePermissionActivity.java | 56 - .../watchface/CalendarWatchFaceService.java | 286 ---- .../watchface/CardBoundsWatchFaceService.java | 103 -- .../ComplicationSimpleConfigActivity.java | 205 --- .../ComplicationSimpleWatchFaceService.java | 771 ---------- .../FitDistanceWatchFaceService.java | 536 ------- .../watchface/FitStepsWatchFaceService.java | 542 ------- .../watchface/SweepWatchFaceService.java | 453 ------ .../AnalogComplicationConfigActivity.java | 91 ++ ...ComplicationConfigRecyclerViewAdapter.java | 795 ++++++++++ .../config/ColorSelectionActivity.java | 65 + .../ColorSelectionRecyclerViewAdapter.java | 121 ++ ...DigitalWatchFaceConfigListenerService.java | 7 +- ...igitalWatchFaceWearableConfigActivity.java | 12 +- .../model/AnalogComplicationConfigData.java | 302 ++++ .../provider/ComplicationToggleReceiver.java | 90 ++ ...tingNumberComplicationProviderService.java | 133 ++ .../provider/RandomNumberProviderService.java | 119 -- .../UpdateComplicationDataService.java | 63 - .../{ => util}/DigitalWatchFaceUtil.java | 6 +- .../{ => util}/Gles2ColoredTriangleList.java | 4 +- .../AnalogComplicationWatchFaceService.java | 863 +++++++++++ .../DigitalWatchFaceService.java | 10 +- .../InteractiveWatchFaceService.java | 6 +- .../OpenGLWatchFaceService.java | 6 +- .../res/drawable-360dpi/add_complication.png | Bin 0 -> 3511 bytes .../drawable-360dpi/added_complication.png | Bin 0 -> 4090 bytes .../added_long_text_complication.png | Bin 0 -> 102661 bytes .../res/drawable-360dpi/settings_overlay.png | Bin 0 -> 7503 bytes .../settings_preview_placeholder.png | Bin 0 -> 7206 bytes .../untappable_complication.png | Bin 0 -> 2135 bytes .../res/drawable-hdpi/add_complication.png | Bin 0 -> 2728 bytes .../res/drawable-hdpi/added_complication.png | Bin 0 -> 36598 bytes .../ic_expand_less_white_18dp.png | Bin 0 -> 149 bytes .../ic_expand_more_white_18dp.png | Bin 0 -> 150 bytes .../res/drawable-hdpi/ic_landscape_white.png | Bin 0 -> 15218 bytes .../ic_notifications_off_white_24dp.png | Bin 0 -> 385 bytes .../ic_notifications_white_24dp.png | Bin 0 -> 234 bytes .../res/drawable-hdpi/icn_complications.png | Bin 0 -> 657 bytes .../src/main/res/drawable-hdpi/icn_styles.png | Bin 0 -> 3219 bytes .../main/res/drawable-hdpi/preview_analog.png | Bin 270205 -> 0 bytes .../drawable-hdpi/preview_analog_circular.png | Bin 217645 -> 0 bytes .../preview_analog_complication.png | Bin 0 -> 3233 bytes .../preview_analog_complication_circular.png | Bin 0 -> 4372 bytes .../res/drawable-hdpi/preview_calendar.png | Bin 1793 -> 0 bytes .../preview_calendar_circular.png | Bin 4572 -> 0 bytes .../res/drawable-hdpi/preview_card_bounds.png | Bin 9853 -> 0 bytes .../preview_card_bounds_circular.png | Bin 24280 -> 0 bytes .../preview_complication_simple.png | Bin 471002 -> 0 bytes .../res/drawable-hdpi/preview_distance.png | Bin 7021 -> 0 bytes .../preview_distance_circular.png | Bin 6052 -> 0 bytes .../main/res/drawable-hdpi/preview_fit.png | Bin 12725 -> 0 bytes .../drawable-hdpi/preview_fit_circular.png | Bin 12623 -> 0 bytes .../ic_expand_less_white_18dp.png | Bin 0 -> 118 bytes .../ic_expand_more_white_18dp.png | Bin 0 -> 122 bytes .../res/drawable-mdpi/ic_landscape_white.png | Bin 0 -> 15143 bytes .../ic_notifications_off_white_24dp.png | Bin 0 -> 279 bytes .../ic_notifications_white_24dp.png | Bin 0 -> 177 bytes .../added_long_text_complication.png | Bin 0 -> 70135 bytes .../ic_expand_less_white_18dp.png | Bin 0 -> 156 bytes .../ic_expand_more_white_18dp.png | Bin 0 -> 159 bytes .../res/drawable-xhdpi/ic_landscape_white.png | Bin 0 -> 15290 bytes .../ic_notifications_off_white_24dp.png | Bin 0 -> 493 bytes .../ic_notifications_white_24dp.png | Bin 0 -> 265 bytes .../res/drawable-xhdpi/icn_complications.png | Bin 0 -> 898 bytes .../ic_expand_less_white_18dp.png | Bin 0 -> 190 bytes .../ic_expand_more_white_18dp.png | Bin 0 -> 194 bytes .../res/drawable-xxhdpi/icn_complications.png | Bin 0 -> 1387 bytes .../ic_expand_less_white_18dp.png | Bin 0 -> 230 bytes .../ic_expand_more_white_18dp.png | Bin 0 -> 237 bytes ...ings_watch_face_preview_arms_and_ticks.xml | 36 + ...settings_watch_face_preview_background.xml | 22 + .../settings_watch_face_preview_highlight.xml | 30 + ...> activity_analog_complication_config.xml} | 25 +- ...ctivity_calendar_watch_face_permission.xml | 58 - .../activity_color_selection_config.xml | 31 + ...activity_complication_simple_list_item.xml | 34 - .../res/layout/activity_digital_config.xml | 2 +- .../res/layout/color_config_list_item.xml | 26 + ...nfig_list_background_complication_item.xml | 23 + .../res/layout/config_list_color_item.xml | 23 + .../layout/config_list_more_options_item.xml | 24 + ...ig_list_preview_and_complications_item.xml | 91 ++ .../layout/config_list_unread_notif_item.xml | 23 + ...item.xml => digital_color_picker_item.xml} | 2 +- .../src/main/res/values-280dpi/dimens.xml | 21 + .../src/main/res/values-280dpi/styles.xml | 27 + .../src/main/res/values-360dpi/dimens.xml | 21 + .../src/main/res/values-360dpi/styles.xml | 27 + .../src/main/res/values-hdpi/dimens.xml | 21 + .../src/main/res/values-hdpi/styles.xml | 27 + .../src/main/res/values-w820dp/dimens.xml | 6 + .../src/main/res/values-xhdpi/dimens.xml | 19 + .../src/main/res/values-xhdpi/styles.xml | 27 + .../Wearable/src/main/res/values/color.xml | 2 +- .../Wearable/src/main/res/values/dimens.xml | 22 +- .../Wearable/src/main/res/values/strings.xml | 39 +- .../Wearable/src/main/res/values/styles.xml | 27 + .../Wearable/src/main/res/xml/watch_face.xml | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../WatchFace/screenshots/analog-face.png | Bin 0 -> 55896 bytes .../analog-watch-side-config-1.png | Bin 0 -> 61297 bytes .../analog-watch-side-config-2.png | Bin 0 -> 55293 bytes .../screenshots/analog_and_sweep_face.png | Bin 270205 -> 0 bytes .../WatchFace/screenshots/calendar_face.png | Bin 3171 -> 0 bytes .../screenshots/card_bounds_face.png | Bin 24589 -> 0 bytes .../screenshots/card_bounds_face2.png | Bin 18637 -> 0 bytes .../screenshots/complication_simple_face.png | Bin 472204 -> 0 bytes .../WatchFace/screenshots/digital-face.png | Bin 0 -> 48275 bytes ...nfig.png => digital-phone-side-config.png} | Bin .../screenshots/digital-watch-side-config.png | Bin 0 -> 51086 bytes .../WatchFace/screenshots/digital_face.png | Bin 7646 -> 0 bytes .../screenshots/digital_watchside_config.png | Bin 9419 -> 0 bytes .../screenshots/interactive-face.png | Bin 0 -> 50296 bytes .../screenshots/interactive_face.png | Bin 13293 -> 0 bytes .../WatchFace/screenshots/tilt-face.png | Bin 0 -> 46161 bytes .../WatchFace/screenshots/tilt_face.png | Bin 2807 -> 0 bytes prebuilts/gradle/WatchViewStub/README.md | 4 +- .../WatchViewStub/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- prebuilts/gradle/WearDrawers/README.md | 4 +- .../gradle/WearDrawers/Wearable/build.gradle | 12 +- .../src/main/res/layout/activity_main.xml | 18 +- .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../WearHighBandwidthNetworking/README.md | 4 +- .../Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 14 +- .../wear/wearnotifications/MainActivity.java | 56 +- prebuilts/gradle/WearNotifications/README.md | 4 +- .../WearNotifications/Wearable/build.gradle | 16 +- .../StandaloneMainActivity.java | 44 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- prebuilts/gradle/WearSpeakerSample/README.md | 4 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 8 +- .../gradle/WearVerifyRemoteApp/README.md | 4 +- .../WearVerifyRemoteApp/Wearable/build.gradle | 12 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../Application/build.gradle | 10 +- .../gradle/XYZTouristAttractions/README.md | 4 +- .../XYZTouristAttractions/Shared/build.gradle | 8 +- .../Wearable/build.gradle | 14 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 1183 files changed, 30826 insertions(+), 9905 deletions(-) create mode 100644 prebuilts/gradle/AutofillFramework/.google/packaging.yaml create mode 100644 prebuilts/gradle/AutofillFramework/Application/build.gradle create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/CommonUtil.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/AuthActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/AutofillHelper.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/StructureParser.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/datasource/AutofillRepository.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/datasource/LocalAutofillRepository.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillField.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillFieldsCollection.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/ClientFormData.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/SavedAutofillValue.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/settings/MyPreferences.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/settings/SettingsActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable-hdpi/tile.9.png create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable/ic_delete_forever_black_24dp.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable/ic_person_black_24dp.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/auth_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/credit_card_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/list_item.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/login_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/settings_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/settings_authentication_dialog.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/virtual_login_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/welcome_activity.xml create mode 100755 prebuilts/gradle/AutofillFramework/Application/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100755 prebuilts/gradle/AutofillFramework/Application/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100755 prebuilts/gradle/AutofillFramework/Application/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100755 prebuilts/gradle/AutofillFramework/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100755 prebuilts/gradle/AutofillFramework/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values-sw600dp/template-dimens.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values-sw600dp/template-styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values-v11/template-styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values-v21/base-colors.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values-v21/base-template-styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values/base-strings.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values/template-dimens.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/values/template-styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/Application/src/main/res/xml/autofill_service.xml create mode 100644 prebuilts/gradle/AutofillFramework/CONTRIBUTING.md create mode 100644 prebuilts/gradle/AutofillFramework/LICENSE create mode 100644 prebuilts/gradle/AutofillFramework/README.md create mode 100644 prebuilts/gradle/AutofillFramework/build.gradle create mode 100644 prebuilts/gradle/AutofillFramework/gradle/wrapper/gradle-wrapper.jar create mode 100644 prebuilts/gradle/AutofillFramework/gradle/wrapper/gradle-wrapper.properties create mode 100755 prebuilts/gradle/AutofillFramework/gradlew create mode 100644 prebuilts/gradle/AutofillFramework/gradlew.bat create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/build.gradle create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/CommonUtil.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.kt create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.kt create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.kt create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.kt create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.kt create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.kt create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/AuthActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/AutofillHelper.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/StructureParser.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/datasource/AutofillRepository.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/datasource/LocalAutofillRepository.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillField.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillFieldsCollection.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/model/ClientFormData.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/model/SavedAutofillValue.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/settings/MyPreferences.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/java/com/example/android/autofillframework/service/settings/SettingsActivity.java create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/drawable-hdpi/tile.9.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/drawable/ic_delete_forever_black_24dp.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/drawable/ic_person_black_24dp.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/auth_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/credit_card_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/list_item.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/login_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/settings_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/settings_authentication_dialog.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/virtual_login_activity.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/layout/welcome_activity.xml create mode 100755 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100755 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100755 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100755 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100755 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values-sw600dp/template-dimens.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values-sw600dp/template-styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values-v11/template-styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values-v21/base-colors.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values-v21/base-template-styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values/base-strings.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values/template-dimens.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/values/template-styles.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/Application/src/main/res/xml/autofill_service.xml create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/build.gradle create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/gradle/wrapper/gradle-wrapper.jar create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/gradle/wrapper/gradle-wrapper.properties create mode 100755 prebuilts/gradle/AutofillFramework/kotlinApp/gradlew create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/gradlew.bat create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/1_HomePage.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/2_StandardViewAutofillable.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/3_StandardViewAutofilled.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/4_WelcomeActivity.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/5_CustomViewAutofillable.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/6_CustomViewAutofilled.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/7_SettingsActivity.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/8_AuthNeeded.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/9_AuthActivity.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/screenshots/icon-web.png create mode 100644 prebuilts/gradle/AutofillFramework/kotlinApp/settings.gradle create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/1_HomePage.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/2_StandardViewAutofillable.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/3_StandardViewAutofilled.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/4_WelcomeActivity.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/5_CustomViewAutofillable.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/6_CustomViewAutofilled.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/7_SettingsActivity.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/8_AuthNeeded.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/9_AuthActivity.png create mode 100644 prebuilts/gradle/AutofillFramework/screenshots/icon-web.png create mode 100644 prebuilts/gradle/AutofillFramework/settings.gradle delete mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/drawable-hdpi/ic_launcher.png delete mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/drawable-mdpi/ic_launcher.png delete mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/drawable-xhdpi/ic_launcher.png delete mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicManagedProfile/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png mode change 100755 => 100644 prebuilts/gradle/BasicManagedProfile/screenshots/icon-web.png delete mode 100644 prebuilts/gradle/BasicRenderScript/Application/AndroidManifest.xml delete mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/java/com/example/android/common/media/CameraHelper.java delete mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/java/com/example/android/common/media/MediaCodecWrapper.java delete mode 100755 prebuilts/gradle/BasicRenderScript/Application/src/main/res/drawable-hdpi/ic_launcher.png delete mode 100755 prebuilts/gradle/BasicRenderScript/Application/src/main/res/drawable-mdpi/ic_launcher.png delete mode 100755 prebuilts/gradle/BasicRenderScript/Application/src/main/res/drawable-xhdpi/ic_launcher.png delete mode 100755 prebuilts/gradle/BasicRenderScript/Application/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/res/values-v11/styles.xml delete mode 100644 prebuilts/gradle/BasicRenderScript/Application/src/main/res/values-v14/styles.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/.google/packaging.yaml create mode 100644 prebuilts/gradle/ContentProviderPaging/CONTRIBUTING.md create mode 100644 prebuilts/gradle/ContentProviderPaging/LICENSE create mode 100644 prebuilts/gradle/ContentProviderPaging/NOTICE create mode 100644 prebuilts/gradle/ContentProviderPaging/README.md create mode 100644 prebuilts/gradle/ContentProviderPaging/app/build.gradle create mode 100644 prebuilts/gradle/ContentProviderPaging/app/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/app/src/main/java/com/example/android/contentproviderpaging/ImageAdapter.java create mode 100644 prebuilts/gradle/ContentProviderPaging/app/src/main/java/com/example/android/contentproviderpaging/ImageClientFragment.java create mode 100644 prebuilts/gradle/ContentProviderPaging/app/src/main/java/com/example/android/contentproviderpaging/ImageContract.java create mode 100644 prebuilts/gradle/ContentProviderPaging/app/src/main/java/com/example/android/contentproviderpaging/ImageProvider.java create mode 100644 prebuilts/gradle/ContentProviderPaging/app/src/main/java/com/example/android/contentproviderpaging/ImageViewHolder.java create mode 100644 prebuilts/gradle/ContentProviderPaging/app/src/main/java/com/example/android/contentproviderpaging/MainActivity.java create mode 100644 prebuilts/gradle/ContentProviderPaging/build.gradle create mode 100644 prebuilts/gradle/ContentProviderPaging/common.gradle create mode 100644 prebuilts/gradle/ContentProviderPaging/gradle/wrapper/gradle-wrapper.jar create mode 100644 prebuilts/gradle/ContentProviderPaging/gradle/wrapper/gradle-wrapper.properties create mode 100755 prebuilts/gradle/ContentProviderPaging/gradlew create mode 100644 prebuilts/gradle/ContentProviderPaging/gradlew.bat create mode 100644 prebuilts/gradle/ContentProviderPaging/kotlinApp/build.gradle create mode 100644 prebuilts/gradle/ContentProviderPaging/kotlinApp/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/kotlinApp/src/main/kotlin/com.example.android.contentproviderpaging/ImageAdapter.kt create mode 100644 prebuilts/gradle/ContentProviderPaging/kotlinApp/src/main/kotlin/com.example.android.contentproviderpaging/ImageClientFragment.kt create mode 100644 prebuilts/gradle/ContentProviderPaging/kotlinApp/src/main/kotlin/com.example.android.contentproviderpaging/ImageContract.kt create mode 100644 prebuilts/gradle/ContentProviderPaging/kotlinApp/src/main/kotlin/com.example.android.contentproviderpaging/ImageProvider.kt create mode 100644 prebuilts/gradle/ContentProviderPaging/kotlinApp/src/main/kotlin/com.example.android.contentproviderpaging/ImageViewHolder.kt create mode 100644 prebuilts/gradle/ContentProviderPaging/kotlinApp/src/main/kotlin/com.example.android.contentproviderpaging/MainActivity.kt create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/build.gradle create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/proguard-rules.pro create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/drawable/cat_placeholder.png create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/layout/fragment_image_client.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/layout/viewholder_image.xml create mode 100755 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_1.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_10.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_11.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_12.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_13.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_2.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_3.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_4.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_5.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_6.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_7.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_8.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/raw/cat_9.jpg create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/values/arrays.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/values/colors.xml rename prebuilts/gradle/{WatchFace/Wearable/src/main/res/values/arrays.xml => ContentProviderPaging/resources/src/main/res/values/dimens.xml} (62%) create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/resources/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/ContentProviderPaging/screenshots/icon-web.png create mode 100644 prebuilts/gradle/ContentProviderPaging/screenshots/screenshot-1.png create mode 100644 prebuilts/gradle/ContentProviderPaging/settings.gradle create mode 100644 prebuilts/gradle/DeviceOwner/Application/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/DownloadableFonts/.google/packaging.yaml create mode 100644 prebuilts/gradle/DownloadableFonts/CONTRIBUTING.md create mode 100644 prebuilts/gradle/DownloadableFonts/LICENSE create mode 100644 prebuilts/gradle/DownloadableFonts/NOTICE create mode 100644 prebuilts/gradle/DownloadableFonts/README.md create mode 100644 prebuilts/gradle/DownloadableFonts/app/build.gradle create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/java/com/example/android/downloadablefonts/Constants.java create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/java/com/example/android/downloadablefonts/MainActivity.java create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/java/com/example/android/downloadablefonts/QueryBuilder.java create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/font/lobster_two.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/layout/bottom_sheet_font_query.xml create mode 100755 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/values/colors.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/values/family_names.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/values/font_certs.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/values/preloaded_fonts.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/DownloadableFonts/app/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/DownloadableFonts/build.gradle create mode 100644 prebuilts/gradle/DownloadableFonts/gradle/wrapper/gradle-wrapper.jar create mode 100644 prebuilts/gradle/DownloadableFonts/gradle/wrapper/gradle-wrapper.properties create mode 100755 prebuilts/gradle/DownloadableFonts/gradlew create mode 100644 prebuilts/gradle/DownloadableFonts/gradlew.bat create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/build.gradle create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/kotlin/com/example/android/downloadablefonts/Constants.kt create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/kotlin/com/example/android/downloadablefonts/MainActivity.kt create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/kotlin/com/example/android/downloadablefonts/QueryBuilder.kt create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/font/lobster_two.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/layout/bottom_sheet_font_query.xml create mode 100755 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100755 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/values/colors.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/values/family_names.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/values/font_certs.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/values/preloaded_fonts.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/DownloadableFonts/kotlinApp/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/DownloadableFonts/screenshots/icon-web.png create mode 100644 prebuilts/gradle/DownloadableFonts/screenshots/screenshot-1.png create mode 100644 prebuilts/gradle/DownloadableFonts/screenshots/screenshot-2.png create mode 100644 prebuilts/gradle/DownloadableFonts/screenshots/screenshot-3.png create mode 100644 prebuilts/gradle/DownloadableFonts/settings.gradle create mode 100644 prebuilts/gradle/EmojiCompat/.google/packaging.yaml create mode 100644 prebuilts/gradle/EmojiCompat/CONTRIBUTING.md create mode 100644 prebuilts/gradle/EmojiCompat/LICENSE create mode 100644 prebuilts/gradle/EmojiCompat/NOTICE create mode 100644 prebuilts/gradle/EmojiCompat/README.md create mode 100644 prebuilts/gradle/EmojiCompat/app/build.gradle create mode 100644 prebuilts/gradle/EmojiCompat/app/proguard-rules.pro create mode 100644 prebuilts/gradle/EmojiCompat/app/src/androidTest/java/com/example/android/emojicompat/MainActivityTest.java create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/java/com/example/android/emojicompat/CustomTextView.java create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/java/com/example/android/emojicompat/EmojiCompatApplication.java create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/java/com/example/android/emojicompat/MainActivity.java create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/values/colors.xml create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/values/font_certs.xml create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/EmojiCompat/app/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/EmojiCompat/build.gradle create mode 100644 prebuilts/gradle/EmojiCompat/gradle.properties create mode 100644 prebuilts/gradle/EmojiCompat/gradle/wrapper/gradle-wrapper.jar create mode 100644 prebuilts/gradle/EmojiCompat/gradle/wrapper/gradle-wrapper.properties create mode 100755 prebuilts/gradle/EmojiCompat/gradlew create mode 100644 prebuilts/gradle/EmojiCompat/gradlew.bat create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/build.gradle create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/proguard-rules.pro create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/androidTest/java/com/example/android/emojicompat/MainActivityTest.kt create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/CustomTextView.kt create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/EmojiCompatApplication.kt create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/java/com/example/android/emojicompat/MainActivity.kt create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/values/colors.xml create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/values/font_certs.xml create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/EmojiCompat/kotlinApp/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/EmojiCompat/screenshots/1-main.png create mode 100644 prebuilts/gradle/EmojiCompat/screenshots/icon-web.png create mode 100644 prebuilts/gradle/EmojiCompat/settings.gradle rename prebuilts/gradle/Interpolator/{ => screenshots}/after.png (100%) rename prebuilts/gradle/Interpolator/{ => screenshots}/before.png (100%) create mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MediaNotificationHelper.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MediaNotificationManager.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/PackageValidator.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/QueueAdapter.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/QueueFragment.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/model/MutableMediaMetadata.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/BitmapHelper.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/CarHelper.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/LogHelper.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/MediaIDHelper.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/QueueHelper.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/ResourceHelper.java delete mode 100644 prebuilts/gradle/MediaBrowserService/Application/src/main/res/xml/allowed_media_browser_callers.xml delete mode 100644 prebuilts/gradle/MediaRouter/Application/src/main/res/layout-land/grid_layout_2.xml create mode 100644 prebuilts/gradle/NfcProvisioning/Application/src/main/java/com/example/android/nfcprovisioning/CompatUtils.java create mode 100644 prebuilts/gradle/NotificationChannels/.google/packaging.yaml create mode 100644 prebuilts/gradle/NotificationChannels/Application/build.gradle create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/java/com/example/android/notificationchannels/MainActivity.java create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/java/com/example/android/notificationchannels/NotificationHelper.java create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/drawable-hdpi/tile.9.png create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values-sw600dp/template-dimens.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values-sw600dp/template-styles.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values-v11/template-styles.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values-v21/base-colors.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values-v21/base-template-styles.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values-w820dp/dimens.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values/base-strings.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values/colors.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values/template-dimens.xml create mode 100644 prebuilts/gradle/NotificationChannels/Application/src/main/res/values/template-styles.xml create mode 100644 prebuilts/gradle/NotificationChannels/CONTRIBUTING.md create mode 100644 prebuilts/gradle/NotificationChannels/LICENSE create mode 100644 prebuilts/gradle/NotificationChannels/README.md create mode 100644 prebuilts/gradle/NotificationChannels/build.gradle create mode 100644 prebuilts/gradle/NotificationChannels/gradle/wrapper/gradle-wrapper.jar create mode 100644 prebuilts/gradle/NotificationChannels/gradle/wrapper/gradle-wrapper.properties create mode 100755 prebuilts/gradle/NotificationChannels/gradlew create mode 100644 prebuilts/gradle/NotificationChannels/gradlew.bat create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/build.gradle create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/java/com/example/android/notificationchannels/MainActivity.kt create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/java/com/example/android/notificationchannels/NotificationHelper.kt create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/drawable-hdpi/tile.9.png create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values-sw600dp/template-dimens.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values-sw600dp/template-styles.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values-v11/template-styles.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values-v21/base-colors.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values-v21/base-template-styles.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values-w820dp/dimens.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values/base-strings.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values/colors.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values/template-dimens.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/Application/src/main/res/values/template-styles.xml create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/build.gradle create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/gradle/wrapper/gradle-wrapper.jar create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/gradle/wrapper/gradle-wrapper.properties create mode 100755 prebuilts/gradle/NotificationChannels/kotlinApp/gradlew create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/gradlew.bat create mode 100755 prebuilts/gradle/NotificationChannels/kotlinApp/screenshots/1-main.png create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/screenshots/icon-web.png create mode 100644 prebuilts/gradle/NotificationChannels/kotlinApp/settings.gradle create mode 100755 prebuilts/gradle/NotificationChannels/screenshots/1-main.png create mode 100644 prebuilts/gradle/NotificationChannels/screenshots/icon-web.png create mode 100644 prebuilts/gradle/NotificationChannels/settings.gradle delete mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable-hdpi/ic_action_info.png delete mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable-hdpi/ic_launcher.png delete mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable-mdpi/ic_action_info.png delete mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable-mdpi/ic_launcher.png delete mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable-xhdpi/ic_action_info.png delete mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable-xhdpi/ic_launcher.png delete mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable-xxhdpi/ic_action_info.png delete mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/drawable/ic_info.xml create mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PdfRendererBasic/Application/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/PictureInPicture/.google/packaging.yaml create mode 100644 prebuilts/gradle/PictureInPicture/CONTRIBUTING.md create mode 100644 prebuilts/gradle/PictureInPicture/LICENSE create mode 100644 prebuilts/gradle/PictureInPicture/NOTICE create mode 100644 prebuilts/gradle/PictureInPicture/README.md create mode 100644 prebuilts/gradle/PictureInPicture/app/build.gradle create mode 100644 prebuilts/gradle/PictureInPicture/app/proguard-rules.pro create mode 100644 prebuilts/gradle/PictureInPicture/app/src/androidTest/java/com/example/android/pictureinpicture/MainActivityTest.java create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/java/com/example/android/pictureinpicture/MainActivity.java create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/java/com/example/android/pictureinpicture/widget/MovieView.java create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_fast_forward_64dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_fast_rewind_64dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_info_24dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_minimize_24dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_pause_24dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_pause_64dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_picture_in_picture_alt.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_play_arrow_24dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/ic_play_arrow_64dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/drawable/shade.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/layout/view_movie.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/raw/vid_bigbuckbunny.mp4 create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/values-w820dp/dimens.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/values/attrs.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/values/colors.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/PictureInPicture/app/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/PictureInPicture/build.gradle create mode 100644 prebuilts/gradle/PictureInPicture/gradle.properties create mode 100644 prebuilts/gradle/PictureInPicture/gradle/wrapper/gradle-wrapper.jar create mode 100644 prebuilts/gradle/PictureInPicture/gradle/wrapper/gradle-wrapper.properties create mode 100755 prebuilts/gradle/PictureInPicture/gradlew create mode 100644 prebuilts/gradle/PictureInPicture/gradlew.bat create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/build.gradle create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/proguard-rules.pro create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/androidTest/java/com/example/android/pictureinpicture/MainActivityTest.kt create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/AndroidManifest.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/java/com/example/android/pictureinpicture/MainActivity.kt create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/java/com/example/android/pictureinpicture/widget/MovieView.kt create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_fast_forward_64dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_fast_rewind_64dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_info_24dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_minimize_24dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_pause_24dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_pause_64dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_picture_in_picture_alt.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_play_arrow_24dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/ic_play_arrow_64dp.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/drawable/shade.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/layout/activity_main.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/layout/view_movie.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/raw/vid_bigbuckbunny.mp4 create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/values-w820dp/dimens.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/values/attrs.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/values/colors.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/values/dimens.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/values/strings.xml create mode 100644 prebuilts/gradle/PictureInPicture/kotlinApp/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/PictureInPicture/screenshots/1-main.png create mode 100644 prebuilts/gradle/PictureInPicture/screenshots/2-pip.png create mode 100644 prebuilts/gradle/PictureInPicture/screenshots/icon-web.png create mode 100644 prebuilts/gradle/PictureInPicture/settings.gradle delete mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/java/com/example/android/common/logger/Log.java delete mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/java/com/example/android/common/logger/LogFragment.java delete mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/java/com/example/android/common/logger/LogNode.java delete mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/java/com/example/android/common/logger/LogView.java delete mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/java/com/example/android/common/logger/LogWrapper.java delete mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java delete mode 100755 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/drawable-hdpi/ic_launcher.png delete mode 100755 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/drawable-mdpi/ic_launcher.png delete mode 100755 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/drawable-xhdpi/ic_launcher.png delete mode 100755 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/values-v11/styles.xml delete mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/values-v14/styles.xml create mode 100644 prebuilts/gradle/RenderScriptIntrinsic/Application/src/main/res/values/strings.xml delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/AnalogWatchFaceService.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/CalendarWatchFacePermissionActivity.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/CalendarWatchFaceService.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/CardBoundsWatchFaceService.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleConfigActivity.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/ComplicationSimpleWatchFaceService.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/FitDistanceWatchFaceService.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/FitStepsWatchFaceService.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/SweepWatchFaceService.java create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/config/AnalogComplicationConfigActivity.java create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/config/AnalogComplicationConfigRecyclerViewAdapter.java create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/config/ColorSelectionActivity.java create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/config/ColorSelectionRecyclerViewAdapter.java rename prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/{ => config}/DigitalWatchFaceConfigListenerService.java (93%) rename prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/{ => config}/DigitalWatchFaceWearableConfigActivity.java (96%) create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/model/AnalogComplicationConfigData.java create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/ComplicationToggleReceiver.java create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/IncrementingNumberComplicationProviderService.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/RandomNumberProviderService.java delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/provider/UpdateComplicationDataService.java rename prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/{ => util}/DigitalWatchFaceUtil.java (97%) rename prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/{ => util}/Gles2ColoredTriangleList.java (99%) create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/watchface/AnalogComplicationWatchFaceService.java rename prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/{ => watchface}/DigitalWatchFaceService.java (98%) rename prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/{ => watchface}/InteractiveWatchFaceService.java (98%) rename prebuilts/gradle/WatchFace/Wearable/src/main/java/com/example/android/wearable/watchface/{ => watchface}/OpenGLWatchFaceService.java (99%) create mode 100755 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-360dpi/add_complication.png create mode 100755 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-360dpi/added_complication.png create mode 100755 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-360dpi/added_long_text_complication.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-360dpi/settings_overlay.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-360dpi/settings_preview_placeholder.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-360dpi/untappable_complication.png create mode 100755 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/add_complication.png create mode 100755 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/added_complication.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/ic_expand_less_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/ic_expand_more_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/ic_landscape_white.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/ic_notifications_off_white_24dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/ic_notifications_white_24dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/icn_complications.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/icn_styles.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_analog.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_analog_circular.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_analog_complication.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_analog_complication_circular.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_calendar.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_calendar_circular.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_card_bounds.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_card_bounds_circular.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_complication_simple.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_distance.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_distance_circular.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_fit.png delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-hdpi/preview_fit_circular.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-mdpi/ic_expand_less_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-mdpi/ic_expand_more_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-mdpi/ic_landscape_white.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-mdpi/ic_notifications_off_white_24dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-mdpi/ic_notifications_white_24dp.png create mode 100755 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xhdpi/added_long_text_complication.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xhdpi/ic_expand_less_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xhdpi/ic_expand_more_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xhdpi/ic_landscape_white.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xhdpi/ic_notifications_off_white_24dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xhdpi/ic_notifications_white_24dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xhdpi/icn_complications.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xxhdpi/ic_expand_less_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xxhdpi/ic_expand_more_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xxhdpi/icn_complications.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xxxhdpi/ic_expand_less_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable-xxxhdpi/ic_expand_more_white_18dp.png create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable/settings_watch_face_preview_arms_and_ticks.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable/settings_watch_face_preview_background.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/drawable/settings_watch_face_preview_highlight.xml rename prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/{activity_complication_simple_config.xml => activity_analog_complication_config.xml} (61%) delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/activity_calendar_watch_face_permission.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/activity_color_selection_config.xml delete mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/activity_complication_simple_list_item.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/color_config_list_item.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/config_list_background_complication_item.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/config_list_color_item.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/config_list_more_options_item.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/config_list_preview_and_complications_item.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/config_list_unread_notif_item.xml rename prebuilts/gradle/WatchFace/Wearable/src/main/res/layout/{color_picker_item.xml => digital_color_picker_item.xml} (96%) create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-280dpi/dimens.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-280dpi/styles.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-360dpi/dimens.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-360dpi/styles.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-hdpi/dimens.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-hdpi/styles.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-w820dp/dimens.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-xhdpi/dimens.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values-xhdpi/styles.xml create mode 100644 prebuilts/gradle/WatchFace/Wearable/src/main/res/values/styles.xml create mode 100644 prebuilts/gradle/WatchFace/screenshots/analog-face.png create mode 100644 prebuilts/gradle/WatchFace/screenshots/analog-watch-side-config-1.png create mode 100644 prebuilts/gradle/WatchFace/screenshots/analog-watch-side-config-2.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/analog_and_sweep_face.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/calendar_face.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/card_bounds_face.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/card_bounds_face2.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/complication_simple_face.png create mode 100644 prebuilts/gradle/WatchFace/screenshots/digital-face.png rename prebuilts/gradle/WatchFace/screenshots/{digital_phoneside_config.png => digital-phone-side-config.png} (100%) create mode 100644 prebuilts/gradle/WatchFace/screenshots/digital-watch-side-config.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/digital_face.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/digital_watchside_config.png create mode 100644 prebuilts/gradle/WatchFace/screenshots/interactive-face.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/interactive_face.png create mode 100644 prebuilts/gradle/WatchFace/screenshots/tilt-face.png delete mode 100644 prebuilts/gradle/WatchFace/screenshots/tilt_face.png diff --git a/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle index e85cdbd0..12dcfb15 100644 --- a/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle +++ b/prebuilts/gradle/ActionBarCompat-Basic/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 7 diff --git a/prebuilts/gradle/ActionBarCompat-Basic/README.md b/prebuilts/gradle/ActionBarCompat-Basic/README.md index b3886689..dd87b25e 100644 --- a/prebuilts/gradle/ActionBarCompat-Basic/README.md +++ b/prebuilts/gradle/ActionBarCompat-Basic/README.md @@ -36,7 +36,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -65,7 +65,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/ActionBarCompat-Basic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActionBarCompat-Basic/gradle/wrapper/gradle-wrapper.properties index 1081cc34..4da4a580 100644 --- a/prebuilts/gradle/ActionBarCompat-Basic/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/ActionBarCompat-Basic/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle index e85cdbd0..12dcfb15 100644 --- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle +++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 7 diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md index 5799f0b3..ab7dc2fe 100644 --- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md +++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/README.md @@ -18,7 +18,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -47,7 +47,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/gradle/wrapper/gradle-wrapper.properties index 1081cc34..4da4a580 100644 --- a/prebuilts/gradle/ActionBarCompat-ListPopupMenu/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/ActionBarCompat-ListPopupMenu/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle b/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle index e85cdbd0..12dcfb15 100644 --- a/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle +++ b/prebuilts/gradle/ActionBarCompat-Styled/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 7 diff --git a/prebuilts/gradle/ActionBarCompat-Styled/README.md b/prebuilts/gradle/ActionBarCompat-Styled/README.md index e84c5828..4cb16df3 100644 --- a/prebuilts/gradle/ActionBarCompat-Styled/README.md +++ b/prebuilts/gradle/ActionBarCompat-Styled/README.md @@ -24,7 +24,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -53,7 +53,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/ActionBarCompat-Styled/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActionBarCompat-Styled/gradle/wrapper/gradle-wrapper.properties index 1081cc34..4da4a580 100644 --- a/prebuilts/gradle/ActionBarCompat-Styled/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/ActionBarCompat-Styled/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/ActiveNotifications/.google/packaging.yaml b/prebuilts/gradle/ActiveNotifications/.google/packaging.yaml index 5bc17de3..1d83dcd9 100644 --- a/prebuilts/gradle/ActiveNotifications/.google/packaging.yaml +++ b/prebuilts/gradle/ActiveNotifications/.google/packaging.yaml @@ -4,9 +4,9 @@ # This file is used by Google as part of our samples packaging process. # End users may safely ignore this file. It has no relevance to other systems. --- -status: DRAFT +status: PUBLISHED technologies: [Android] -categories: [Getting Started, Notification, Android N Preview] +categories: [Notification] languages: [Java] solutions: [Mobile] github: android-ActiveNotifications diff --git a/prebuilts/gradle/ActiveNotifications/Application/build.gradle b/prebuilts/gradle/ActiveNotifications/Application/build.gradle index 6d59159b..be6a1a35 100644 --- a/prebuilts/gradle/ActiveNotifications/Application/build.gradle +++ b/prebuilts/gradle/ActiveNotifications/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 24 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 24 diff --git a/prebuilts/gradle/ActiveNotifications/Application/src/main/res/menu/main.xml b/prebuilts/gradle/ActiveNotifications/Application/src/main/res/menu/main.xml index b49c2c52..29c52f8e 100644 --- a/prebuilts/gradle/ActiveNotifications/Application/src/main/res/menu/main.xml +++ b/prebuilts/gradle/ActiveNotifications/Application/src/main/res/menu/main.xml @@ -14,7 +14,9 @@ limitations under the License. --> - + diff --git a/prebuilts/gradle/ActiveNotifications/README.md b/prebuilts/gradle/ActiveNotifications/README.md index e7ccb7f0..6f202049 100644 --- a/prebuilts/gradle/ActiveNotifications/README.md +++ b/prebuilts/gradle/ActiveNotifications/README.md @@ -32,7 +32,7 @@ Pre-requisites -------------- - Android SDK 24 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -61,7 +61,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/ActiveNotifications/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActiveNotifications/gradle/wrapper/gradle-wrapper.properties index 1081cc34..4da4a580 100644 --- a/prebuilts/gradle/ActiveNotifications/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/ActiveNotifications/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle b/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle index e85cdbd0..12dcfb15 100644 --- a/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle +++ b/prebuilts/gradle/ActivityInstrumentation/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 7 diff --git a/prebuilts/gradle/ActivityInstrumentation/README.md b/prebuilts/gradle/ActivityInstrumentation/README.md index e88fcaf9..b35798d5 100644 --- a/prebuilts/gradle/ActivityInstrumentation/README.md +++ b/prebuilts/gradle/ActivityInstrumentation/README.md @@ -9,7 +9,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Getting Started @@ -33,7 +33,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/ActivityInstrumentation/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActivityInstrumentation/gradle/wrapper/gradle-wrapper.properties index 1081cc34..4da4a580 100644 --- a/prebuilts/gradle/ActivityInstrumentation/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/ActivityInstrumentation/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/ActivitySceneTransitionBasic/Application/build.gradle b/prebuilts/gradle/ActivitySceneTransitionBasic/Application/build.gradle index f74f7cb7..90aaa702 100644 --- a/prebuilts/gradle/ActivitySceneTransitionBasic/Application/build.gradle +++ b/prebuilts/gradle/ActivitySceneTransitionBasic/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -33,7 +33,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 21 diff --git a/prebuilts/gradle/ActivitySceneTransitionBasic/README.md b/prebuilts/gradle/ActivitySceneTransitionBasic/README.md index 21809913..93fe2b9b 100644 --- a/prebuilts/gradle/ActivitySceneTransitionBasic/README.md +++ b/prebuilts/gradle/ActivitySceneTransitionBasic/README.md @@ -20,7 +20,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -49,7 +49,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/ActivitySceneTransitionBasic/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/ActivitySceneTransitionBasic/gradle/wrapper/gradle-wrapper.properties index 693f20ff..aa3b089c 100644 --- a/prebuilts/gradle/ActivitySceneTransitionBasic/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/ActivitySceneTransitionBasic/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle b/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle index 6fbfa076..19aaaded 100644 --- a/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle +++ b/prebuilts/gradle/AdvancedImmersiveMode/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 19 diff --git a/prebuilts/gradle/AdvancedImmersiveMode/Application/src/main/res/menu/main.xml b/prebuilts/gradle/AdvancedImmersiveMode/Application/src/main/res/menu/main.xml index b49c2c52..29c52f8e 100644 --- a/prebuilts/gradle/AdvancedImmersiveMode/Application/src/main/res/menu/main.xml +++ b/prebuilts/gradle/AdvancedImmersiveMode/Application/src/main/res/menu/main.xml @@ -14,7 +14,9 @@ limitations under the License. --> - + diff --git a/prebuilts/gradle/AdvancedImmersiveMode/README.md b/prebuilts/gradle/AdvancedImmersiveMode/README.md index 5c2da275..a03c8e63 100644 --- a/prebuilts/gradle/AdvancedImmersiveMode/README.md +++ b/prebuilts/gradle/AdvancedImmersiveMode/README.md @@ -27,7 +27,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -56,7 +56,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AdvancedImmersiveMode/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AdvancedImmersiveMode/gradle/wrapper/gradle-wrapper.properties index 0e72654a..2d6fb978 100644 --- a/prebuilts/gradle/AdvancedImmersiveMode/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AdvancedImmersiveMode/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AgendaData/Application/build.gradle b/prebuilts/gradle/AgendaData/Application/build.gradle index 96b8c6a6..d053b96b 100644 --- a/prebuilts/gradle/AgendaData/Application/build.gradle +++ b/prebuilts/gradle/AgendaData/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -21,8 +21,8 @@ dependencies { compile "com.android.support:cardview-v7:25.0.1" compile "com.android.support:appcompat-v7:25.0.1" compile 'com.android.support:design:24.0.0' - compile 'com.google.android.gms:play-services-wearable:10.0.1' - compile 'com.android.support:support-v13:25.0.1' + compile 'com.google.android.gms:play-services-wearable:10.2.4' + compile 'com.android.support:support-v13:25.3.1' wearApp project(':Wearable') } @@ -36,7 +36,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 18 diff --git a/prebuilts/gradle/AgendaData/README.md b/prebuilts/gradle/AgendaData/README.md index 1a510be9..c6c27e71 100644 --- a/prebuilts/gradle/AgendaData/README.md +++ b/prebuilts/gradle/AgendaData/README.md @@ -23,7 +23,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -52,7 +52,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AgendaData/Wearable/build.gradle b/prebuilts/gradle/AgendaData/Wearable/build.gradle index 89e2f842..780ff9b1 100644 --- a/prebuilts/gradle/AgendaData/Wearable/build.gradle +++ b/prebuilts/gradle/AgendaData/Wearable/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.3.1' } } @@ -17,12 +17,12 @@ dependencies { - compile 'com.google.android.gms:play-services-wearable:10.0.1' - compile 'com.android.support:support-v13:25.0.1' + compile 'com.google.android.gms:play-services-wearable:10.2.4' + compile 'com.android.support:support-v13:25.3.1' - provided 'com.google.android.wearable:wearable:2.0.0' + provided 'com.google.android.wearable:wearable:2.0.1' - compile 'com.google.android.support:wearable:2.0.0' + compile 'com.google.android.support:wearable:2.0.1' } @@ -37,7 +37,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { versionCode 1 diff --git a/prebuilts/gradle/AgendaData/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AgendaData/gradle/wrapper/gradle-wrapper.properties index 21a31e19..7a7c4663 100644 --- a/prebuilts/gradle/AgendaData/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AgendaData/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AlwaysOn/README.md b/prebuilts/gradle/AlwaysOn/README.md index f0ae15df..e7d88f46 100644 --- a/prebuilts/gradle/AlwaysOn/README.md +++ b/prebuilts/gradle/AlwaysOn/README.md @@ -25,7 +25,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -54,7 +54,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AlwaysOn/Wearable/build.gradle b/prebuilts/gradle/AlwaysOn/Wearable/build.gradle index f8586fb7..9b5c9341 100644 --- a/prebuilts/gradle/AlwaysOn/Wearable/build.gradle +++ b/prebuilts/gradle/AlwaysOn/Wearable/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.3.1' } } @@ -17,12 +17,12 @@ dependencies { - compile 'com.google.android.gms:play-services-wearable:10.0.1' - compile 'com.android.support:support-v13:25.0.1' + compile 'com.google.android.gms:play-services-wearable:10.2.4' + compile 'com.android.support:support-v13:25.3.1' - provided 'com.google.android.wearable:wearable:2.0.0' + provided 'com.google.android.wearable:wearable:2.0.1' - compile 'com.google.android.support:wearable:2.0.0' + compile 'com.google.android.support:wearable:2.0.1' } @@ -37,7 +37,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { versionCode 1 diff --git a/prebuilts/gradle/AlwaysOn/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AlwaysOn/gradle/wrapper/gradle-wrapper.properties index c8203a8d..c2cde241 100644 --- a/prebuilts/gradle/AlwaysOn/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AlwaysOn/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AppRestrictionEnforcer/Application/build.gradle b/prebuilts/gradle/AppRestrictionEnforcer/Application/build.gradle index 0c19226d..a96785ca 100644 --- a/prebuilts/gradle/AppRestrictionEnforcer/Application/build.gradle +++ b/prebuilts/gradle/AppRestrictionEnforcer/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 21 diff --git a/prebuilts/gradle/AppRestrictionEnforcer/README.md b/prebuilts/gradle/AppRestrictionEnforcer/README.md index 684c2c45..c92a3899 100644 --- a/prebuilts/gradle/AppRestrictionEnforcer/README.md +++ b/prebuilts/gradle/AppRestrictionEnforcer/README.md @@ -28,7 +28,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -57,7 +57,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AppRestrictionEnforcer/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppRestrictionEnforcer/gradle/wrapper/gradle-wrapper.properties index 2d393d40..22aa0ef4 100644 --- a/prebuilts/gradle/AppRestrictionEnforcer/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AppRestrictionEnforcer/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/build.gradle b/prebuilts/gradle/AppRestrictionSchema/Application/build.gradle index 0c19226d..a96785ca 100644 --- a/prebuilts/gradle/AppRestrictionSchema/Application/build.gradle +++ b/prebuilts/gradle/AppRestrictionSchema/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 21 diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/java/com/example/android/apprestrictionschema/AppRestrictionSchemaFragment.java b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/java/com/example/android/apprestrictionschema/AppRestrictionSchemaFragment.java index 3f4cea01..8d219656 100644 --- a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/java/com/example/android/apprestrictionschema/AppRestrictionSchemaFragment.java +++ b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/java/com/example/android/apprestrictionschema/AppRestrictionSchemaFragment.java @@ -16,7 +16,10 @@ package com.example.android.apprestrictionschema; +import android.content.BroadcastReceiver; import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.content.RestrictionEntry; import android.content.RestrictionsManager; import android.os.Build; @@ -44,7 +47,7 @@ import java.util.List; public class AppRestrictionSchemaFragment extends Fragment implements View.OnClickListener { // Tag for the logger - private static final String TAG = "AppRestrictionSchemaFragment"; + private static final String TAG = "AppRestrictionSchema"; private static final String KEY_CAN_SAY_HELLO = "can_say_hello"; private static final String KEY_MESSAGE = "message"; @@ -60,6 +63,9 @@ public class AppRestrictionSchemaFragment extends Fragment implements View.OnCli // Message to show when the button is clicked (String restriction) private String mMessage; + // Observes restriction changes + private BroadcastReceiver mBroadcastReceiver; + // UI Components private TextView mTextSayHello; private Button mButtonSayHello; @@ -96,6 +102,28 @@ public class AppRestrictionSchemaFragment extends Fragment implements View.OnCli resolveRestrictions(); } + @Override + public void onStart() { + super.onStart(); + mBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + resolveRestrictions(); + } + }; + getActivity().registerReceiver(mBroadcastReceiver, + new IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED)); + } + + @Override + public void onStop() { + super.onStop(); + if (mBroadcastReceiver != null) { + getActivity().unregisterReceiver(mBroadcastReceiver); + mBroadcastReceiver = null; + } + } + private void resolveRestrictions() { RestrictionsManager manager = (RestrictionsManager) getActivity().getSystemService(Context.RESTRICTIONS_SERVICE); diff --git a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/menu/main.xml b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/menu/main.xml index b49c2c52..29c52f8e 100644 --- a/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/menu/main.xml +++ b/prebuilts/gradle/AppRestrictionSchema/Application/src/main/res/menu/main.xml @@ -14,7 +14,9 @@ limitations under the License. --> - + diff --git a/prebuilts/gradle/AppRestrictionSchema/README.md b/prebuilts/gradle/AppRestrictionSchema/README.md index 4bfbdd24..3f20773c 100644 --- a/prebuilts/gradle/AppRestrictionSchema/README.md +++ b/prebuilts/gradle/AppRestrictionSchema/README.md @@ -55,7 +55,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -84,7 +84,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AppRestrictionSchema/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppRestrictionSchema/gradle/wrapper/gradle-wrapper.properties index e03dde33..819aeb4a 100644 --- a/prebuilts/gradle/AppRestrictionSchema/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AppRestrictionSchema/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AppRestrictions/Application/build.gradle b/prebuilts/gradle/AppRestrictions/Application/build.gradle index 4480abae..60de9682 100644 --- a/prebuilts/gradle/AppRestrictions/Application/build.gradle +++ b/prebuilts/gradle/AppRestrictions/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 18 diff --git a/prebuilts/gradle/AppRestrictions/README.md b/prebuilts/gradle/AppRestrictions/README.md index f682572e..ff6fe287 100644 --- a/prebuilts/gradle/AppRestrictions/README.md +++ b/prebuilts/gradle/AppRestrictions/README.md @@ -28,7 +28,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -57,7 +57,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AppRestrictions/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppRestrictions/gradle/wrapper/gradle-wrapper.properties index 1081cc34..4da4a580 100644 --- a/prebuilts/gradle/AppRestrictions/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AppRestrictions/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AppShortcuts/README.md b/prebuilts/gradle/AppShortcuts/README.md index ceda836e..61ec0d61 100644 --- a/prebuilts/gradle/AppShortcuts/README.md +++ b/prebuilts/gradle/AppShortcuts/README.md @@ -40,7 +40,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -69,7 +69,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AppShortcuts/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppShortcuts/gradle/wrapper/gradle-wrapper.properties index e46bcabe..a3a3b57b 100644 --- a/prebuilts/gradle/AppShortcuts/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AppShortcuts/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AppUsageStatistics/.google/packaging.yaml b/prebuilts/gradle/AppUsageStatistics/.google/packaging.yaml index e7f68564..1e8b8055 100644 --- a/prebuilts/gradle/AppUsageStatistics/.google/packaging.yaml +++ b/prebuilts/gradle/AppUsageStatistics/.google/packaging.yaml @@ -4,7 +4,7 @@ # This file is used by Google as part of our samples packaging process. # End users may safely ignore this file. It has no relevance to other systems. --- -status: DRAFT +status: PUBLISHED technologies: [Android] categories: [System] languages: [Java] diff --git a/prebuilts/gradle/AppUsageStatistics/Application/build.gradle b/prebuilts/gradle/AppUsageStatistics/Application/build.gradle index 409f68c3..e40e49d1 100644 --- a/prebuilts/gradle/AppUsageStatistics/Application/build.gradle +++ b/prebuilts/gradle/AppUsageStatistics/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -34,7 +34,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 21 diff --git a/prebuilts/gradle/AppUsageStatistics/README.md b/prebuilts/gradle/AppUsageStatistics/README.md index 94aafdc3..db467790 100644 --- a/prebuilts/gradle/AppUsageStatistics/README.md +++ b/prebuilts/gradle/AppUsageStatistics/README.md @@ -50,7 +50,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -79,7 +79,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AppUsageStatistics/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AppUsageStatistics/gradle/wrapper/gradle-wrapper.properties index 61688994..4a39e6d5 100644 --- a/prebuilts/gradle/AppUsageStatistics/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AppUsageStatistics/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AsymmetricFingerprintDialog/Application/build.gradle b/prebuilts/gradle/AsymmetricFingerprintDialog/Application/build.gradle index 1e358537..84996ed3 100644 --- a/prebuilts/gradle/AsymmetricFingerprintDialog/Application/build.gradle +++ b/prebuilts/gradle/AsymmetricFingerprintDialog/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -36,7 +36,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 23 diff --git a/prebuilts/gradle/AsymmetricFingerprintDialog/README.md b/prebuilts/gradle/AsymmetricFingerprintDialog/README.md index 96f6b208..ce9e94d7 100644 --- a/prebuilts/gradle/AsymmetricFingerprintDialog/README.md +++ b/prebuilts/gradle/AsymmetricFingerprintDialog/README.md @@ -39,7 +39,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -68,7 +68,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AsymmetricFingerprintDialog/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AsymmetricFingerprintDialog/gradle/wrapper/gradle-wrapper.properties index f4b47eaa..74d071fa 100644 --- a/prebuilts/gradle/AsymmetricFingerprintDialog/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AsymmetricFingerprintDialog/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AutoBackupForApps/Application/build.gradle b/prebuilts/gradle/AutoBackupForApps/Application/build.gradle index f7ed4525..cdcf1063 100644 --- a/prebuilts/gradle/AutoBackupForApps/Application/build.gradle +++ b/prebuilts/gradle/AutoBackupForApps/Application/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.2.3' + classpath 'com.android.tools.build:gradle:2.2.0' } } @@ -32,7 +32,7 @@ List dirs = [ android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 23 diff --git a/prebuilts/gradle/AutoBackupForApps/README.md b/prebuilts/gradle/AutoBackupForApps/README.md index d1c2a510..6a11b3dc 100644 --- a/prebuilts/gradle/AutoBackupForApps/README.md +++ b/prebuilts/gradle/AutoBackupForApps/README.md @@ -27,7 +27,7 @@ Pre-requisites -------------- - Android SDK 25 -- Android Build Tools v25.0.2 +- Android Build Tools v25.0.3 - Android Support Repository Screenshots @@ -56,7 +56,7 @@ submitting a pull request through GitHub. Please see CONTRIBUTING.md for more de License ------- -Copyright 2016 The Android Open Source Project, Inc. +Copyright 2017 The Android Open Source Project, Inc. Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for diff --git a/prebuilts/gradle/AutoBackupForApps/gradle/wrapper/gradle-wrapper.properties b/prebuilts/gradle/AutoBackupForApps/gradle/wrapper/gradle-wrapper.properties index 1081cc34..4da4a580 100644 --- a/prebuilts/gradle/AutoBackupForApps/gradle/wrapper/gradle-wrapper.properties +++ b/prebuilts/gradle/AutoBackupForApps/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip \ No newline at end of file diff --git a/prebuilts/gradle/AutofillFramework/.google/packaging.yaml b/prebuilts/gradle/AutofillFramework/.google/packaging.yaml new file mode 100644 index 00000000..7ec2793a --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/.google/packaging.yaml @@ -0,0 +1,19 @@ + +# GOOGLE SAMPLE PACKAGING DATA +# +# This file is used by Google as part of our samples packaging process. +# End users may safely ignore this file. It has no relevance to other systems. +--- +status: PUBLISHED +technologies: [Android] +categories: [Input, Android O Preview] +languages: [Java] +solutions: [Mobile] +github: android-AutofillFramework +level: ADVANCED +icon: screenshots/icon-web.png +apiRefs: + - android:android.view.View + - android:android.service.autofill.AutoFillService + - android:android.view.autofill.AutoFillManager +license: apache2 diff --git a/prebuilts/gradle/AutofillFramework/Application/build.gradle b/prebuilts/gradle/AutofillFramework/Application/build.gradle new file mode 100644 index 00000000..35233ec8 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/build.gradle @@ -0,0 +1,59 @@ + +buildscript { + repositories { + jcenter() + } + + dependencies { + classpath 'com.android.tools.build:gradle:2.2.0' + } +} + +apply plugin: 'com.android.application' + +repositories { + jcenter() +} + +dependencies { + compile "com.android.support:support-v4:25.0.1" + compile "com.android.support:support-v13:25.0.1" + compile "com.android.support:cardview-v7:25.0.1" + compile "com.android.support:appcompat-v7:25.0.1" +} + +// The sample build uses multiple directories to +// keep boilerplate and common code separate from +// the main sample code. +List dirs = [ + 'main', // main sample code; look here for the interesting stuff. + 'common', // components that are reused by multiple samples + 'template'] // boilerplate code that is generated by the sample template process + +android { + compileSdkVersion "android-O" + buildToolsVersion "25.0.3" + + defaultConfig { + minSdkVersion "O" + targetSdkVersion "O" + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } + + sourceSets { + main { + dirs.each { dir -> + java.srcDirs "src/${dir}/java" + res.srcDirs "src/${dir}/res" + } + } + androidTest.setRoot('tests') + androidTest.java.srcDirs = ['tests/src'] + + } + +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/AndroidManifest.xml b/prebuilts/gradle/AutofillFramework/Application/src/main/AndroidManifest.xml new file mode 100644 index 00000000..28d9c0b5 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/AndroidManifest.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/CommonUtil.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/CommonUtil.java new file mode 100644 index 00000000..54049902 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/CommonUtil.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2017 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.autofillframework; + +import android.os.Bundle; + +import java.util.Arrays; +import java.util.Set; + +public final class CommonUtil { + + public static final String TAG = "AutofillSample"; + + public static final String EXTRA_DATASET_NAME = "dataset_name"; + public static final String EXTRA_FOR_RESPONSE = "for_response"; + + private static void bundleToString(StringBuilder builder, Bundle data) { + final Set keySet = data.keySet(); + builder.append("[Bundle with ").append(keySet.size()).append(" keys:"); + for (String key : keySet) { + builder.append(' ').append(key).append('='); + Object value = data.get(key); + if ((value instanceof Bundle)) { + bundleToString(builder, (Bundle) value); + } else { + builder.append((value instanceof Object[]) + ? Arrays.toString((Object[]) value) : value); + } + } + builder.append(']'); + } + + public static String bundleToString(Bundle data) { + if (data == null) { + return "N/A"; + } + final StringBuilder builder = new StringBuilder(); + bundleToString(builder, data); + return builder.toString(); + } +} \ No newline at end of file diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.java new file mode 100644 index 00000000..a82de4c8 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/CreditCardActivity.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2017 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.autofillframework.app; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.Spinner; + +import com.example.android.autofillframework.R; + +public class CreditCardActivity extends AppCompatActivity { + + private Spinner mCcExpirationDaySpinner; + private Spinner mCcExpirationMonthSpinner; + private Spinner mCcExpirationYearSpinner; + private Button mSubmitButton; + private Button mClearButton; + + public static Intent getStartActivityIntent(Context context) { + Intent intent = new Intent(context, CreditCardActivity.class); + return intent; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.credit_card_activity); + + mSubmitButton = (Button) findViewById(R.id.submit); + mClearButton = (Button) findViewById(R.id.clear); + mCcExpirationDaySpinner = (Spinner) findViewById(R.id.expirationDay); + mCcExpirationMonthSpinner = (Spinner) findViewById(R.id.expirationMonth); + mCcExpirationYearSpinner = (Spinner) findViewById(R.id.expirationYear); + + // Create an ArrayAdapter using the string array and a default spinner layout + ArrayAdapter dayAdapter = ArrayAdapter.createFromResource + (this, R.array.day_array, android.R.layout.simple_spinner_item); + // Specify the layout to use when the list of choices appears + dayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + // Apply the adapter to the spinner + mCcExpirationDaySpinner.setAdapter(dayAdapter); + + ArrayAdapter monthAdapter = ArrayAdapter.createFromResource + (this, R.array.month_array, android.R.layout.simple_spinner_item); + monthAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + mCcExpirationMonthSpinner.setAdapter(monthAdapter); + + ArrayAdapter yearAdapter = ArrayAdapter.createFromResource + (this, R.array.year_array, android.R.layout.simple_spinner_item); + yearAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + mCcExpirationYearSpinner.setAdapter(yearAdapter); + + mSubmitButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + submit(); + } + }); + mClearButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + resetFields(); + } + }); + } + + private void resetFields() { + //TODO + } + + /** + * Launches new Activity and finishes, triggering an autofill save request if the user entered + * any new data. + */ + private void submit() { + Intent intent = WelcomeActivity.getStartActivityIntent(CreditCardActivity.this); + startActivity(intent); + finish(); + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.java new file mode 100644 index 00000000..085f827c --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/CustomVirtualView.java @@ -0,0 +1,296 @@ +/* + * Copyright (C) 2017 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.autofillframework.app; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.util.Log; +import android.util.SparseArray; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewStructure; +import android.view.autofill.AutofillManager; +import android.view.autofill.AutofillValue; +import android.widget.EditText; +import android.widget.TextView; + +import com.example.android.autofillframework.R; + +import java.util.ArrayList; +import java.util.Arrays; + +import static com.example.android.autofillframework.CommonUtil.bundleToString; + + +/** + * Custom View with virtual child views for Username/Password text fields. + */ +public class CustomVirtualView extends View { + + private static final String TAG = "CustomView"; + + private static int nextId; + + private final ArrayList mLines = new ArrayList<>(); + private final SparseArray mItems = new SparseArray<>(); + private final AutofillManager mAfm; + + private Line mFocusedLine; + private Paint mTextPaint; + private int mTextHeight; + private int mTopMargin; + private int mLeftMargin; + private int mVerticalGap; + private int mLineLength; + private int mFocusedColor; + private int mUnfocusedColor; + + private Line mUsernameLine; + private Line mPasswordLine; + + public CustomVirtualView(Context context, AttributeSet attrs) { + super(context, attrs); + + mAfm = context.getSystemService(AutofillManager.class); + + mTextPaint = new Paint(); + + mUnfocusedColor = Color.BLACK; + mFocusedColor = Color.RED; + mTextPaint.setStyle(Style.FILL); + mTopMargin = 100; + mLeftMargin = 100; + mTextHeight = 90; + mVerticalGap = 10; + + mLineLength = mTextHeight + mVerticalGap; + mTextPaint.setTextSize(mTextHeight); + mUsernameLine = addLine("usernameField", context.getString(R.string.username_label), + new String[] {View.AUTOFILL_HINT_USERNAME}, " ", true); + mPasswordLine = addLine("passwordField", context.getString(R.string.password_label), + new String[] {View.AUTOFILL_HINT_PASSWORD}, " ", false); + + Log.d(TAG, "Text height: " + mTextHeight); + } + + @Override + public void autofill(SparseArray values) { + // User has just selected a Dataset from the list of Autofill suggestions and the Dataset's + // AutofillValue gets passed into this method. + Log.d(TAG, "autoFill(): " + values); + for (int i = 0; i < values.size(); i++) { + final int id = values.keyAt(i); + final AutofillValue value = values.valueAt(i); + final Item item = mItems.get(id); + if (item == null) { + Log.w(TAG, "No item for id " + id); + return; + } + if (!item.editable) { + Log.w(TAG, "Item for id " + id + " is not editable: " + item); + return; + } + // Set the item's text to the text wrapped in the AutofillValue. + item.text = value.getTextValue(); + } + postInvalidate(); + } + + @Override + public void onProvideAutofillVirtualStructure(ViewStructure structure, int flags) { + // Build a ViewStructure to pack in AutoFillService requests. + structure.setClassName(getClass().getName()); + int childrenSize = mItems.size(); + Log.d(TAG, "onProvideAutofillVirtualStructure(): flags = " + flags + ", items = " + + childrenSize + ", extras: " + bundleToString(structure.getExtras())); + int index = structure.addChildCount(childrenSize); + for (int i = 0; i < childrenSize; i++) { + Item item = mItems.valueAt(i); + Log.d(TAG, "Adding new child at index " + index + ": " + item); + ViewStructure child = structure.newChild(index); + child.setAutofillId(structure, item.id); + child.setAutofillHints(item.hints); + child.setAutofillType(item.type); + child.setDataIsSensitive(!item.sanitized); + child.setText(item.text); + child.setAutofillValue(AutofillValue.forText(item.text)); + child.setFocused(item.focused); + child.setId(item.id, getContext().getPackageName(), null, item.line.idEntry); + child.setClassName(item.getClassName()); + index++; + } + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + Log.d(TAG, "onDraw: " + mLines.size() + " lines; canvas:" + canvas); + float x; + float y = mTopMargin + mLineLength; + for (int i = 0; i < mLines.size(); i++) { + x = mLeftMargin; + Line line = mLines.get(i); + Log.v(TAG, "Drawing '" + line + "' at " + x + "x" + y); + mTextPaint.setColor(line.fieldTextItem.focused ? mFocusedColor : mUnfocusedColor); + String readOnlyText = line.labelItem.text + ": ["; + String writeText = line.fieldTextItem.text + "]"; + // Paints the label first... + canvas.drawText(readOnlyText, x, y, mTextPaint); + // ...then paints the edit text and sets the proper boundary + float deltaX = mTextPaint.measureText(readOnlyText); + x += deltaX; + line.bounds.set((int) x, (int) (y - mLineLength), + (int) (x + mTextPaint.measureText(writeText)), (int) y); + Log.d(TAG, "setBounds(" + x + ", " + y + "): " + line.bounds); + canvas.drawText(writeText, x, y, mTextPaint); + y += mLineLength; + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + int y = (int) event.getY(); + Log.d(TAG, "Touched: y=" + y + ", range=" + mLineLength + ", top=" + mTopMargin); + int lowerY = mTopMargin; + int upperY = -1; + for (int i = 0; i < mLines.size(); i++) { + upperY = lowerY + mLineLength; + Line line = mLines.get(i); + Log.d(TAG, "Line " + i + " ranges from " + lowerY + " to " + upperY); + if (lowerY <= y && y <= upperY) { + if (mFocusedLine != null) { + Log.d(TAG, "Removing focus from " + mFocusedLine); + mFocusedLine.changeFocus(false); + } + Log.d(TAG, "Changing focus to " + line); + mFocusedLine = line; + mFocusedLine.changeFocus(true); + invalidate(); + break; + } + lowerY += mLineLength; + } + return super.onTouchEvent(event); + } + + public CharSequence getUsernameText() { + return mUsernameLine.fieldTextItem.text; + } + + public CharSequence getPasswordText() { + return mPasswordLine.fieldTextItem.text; + } + + public void resetFields() { + mUsernameLine.reset(); + mPasswordLine.reset(); + postInvalidate(); + } + + private Line addLine(String idEntry, String label, String[] hints, String text, boolean sanitized) { + Line line = new Line(idEntry, label, hints, text, sanitized); + mLines.add(line); + mItems.put(line.labelItem.id, line.labelItem); + mItems.put(line.fieldTextItem.id, line.fieldTextItem); + return line; + } + + private static final class Item { + private final Line line; + private final int id; + private final boolean editable; + private final boolean sanitized; + private final String[] hints; + private final int type; + private CharSequence text; + private boolean focused = false; + + Item(Line line, int id, String[] hints, int type, CharSequence text, boolean editable, boolean sanitized) { + this.line = line; + this.id = id; + this.text = text; + this.editable = editable; + this.sanitized = sanitized; + this.hints = hints; + this.type = type; + } + + @Override + public String toString() { + return id + ": " + text + (editable ? " (editable)" : " (read-only)" + + (sanitized ? " (sanitized)" : " (sensitive")); + } + + public String getClassName() { + return editable ? EditText.class.getName() : TextView.class.getName(); + } + } + + private final class Line { + + // Boundaries of the text field, relative to the CustomView + final Rect bounds = new Rect(); + private Item labelItem; + private Item fieldTextItem; + private String idEntry; + + private Line(String idEntry, String label, String[] hints, String text, boolean sanitized) { + this.idEntry = idEntry; + this.labelItem = new Item(this, ++nextId, null, AUTOFILL_TYPE_NONE, label, false, true); + this.fieldTextItem = new Item(this, ++nextId, hints, AUTOFILL_TYPE_TEXT, text, true, sanitized); + } + + void changeFocus(boolean focused) { + fieldTextItem.focused = focused; + if (focused) { + final Rect absBounds = getAbsCoordinates(); + Log.d(TAG, "focus gained on " + fieldTextItem.id + "; absBounds=" + absBounds); + mAfm.notifyViewEntered(CustomVirtualView.this, fieldTextItem.id, absBounds); + } else { + Log.d(TAG, "focus lost on " + fieldTextItem.id); + mAfm.notifyViewExited(CustomVirtualView.this, fieldTextItem.id); + } + } + + private Rect getAbsCoordinates() { + // Must offset the boundaries so they're relative to the CustomView. + final int offset[] = new int[2]; + getLocationOnScreen(offset); + final Rect absBounds = new Rect(bounds.left + offset[0], + bounds.top + offset[1], + bounds.right + offset[0], bounds.bottom + offset[1]); + Log.v(TAG, "getAbsCoordinates() for " + fieldTextItem.id + ": bounds=" + bounds + + " offset: " + Arrays.toString(offset) + " absBounds: " + absBounds); + return absBounds; + } + + public void reset() { + fieldTextItem.text = " "; + } + + @Override + public String toString() { + return "Label: " + labelItem + " Text: " + fieldTextItem + " Focused: " + + fieldTextItem.focused; + } + } +} \ No newline at end of file diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.java new file mode 100644 index 00000000..3ec87da0 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/LoginActivity.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2017 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.autofillframework.app; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.example.android.autofillframework.R; + +public class LoginActivity extends AppCompatActivity { + + private EditText mUsernameEditText; + private EditText mPasswordEditText; + private Button mLoginButton; + private Button mClearButton; + + public static Intent getStartActivityIntent(Context context) { + Intent intent = new Intent(context, LoginActivity.class); + return intent; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.login_activity); + + mLoginButton = (Button) findViewById(R.id.login); + mClearButton = (Button) findViewById(R.id.clear); + mUsernameEditText = (EditText) findViewById(R.id.usernameField); + mPasswordEditText = (EditText) findViewById(R.id.passwordField); + mLoginButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + login(); + } + }); + mClearButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + resetFields(); + } + }); + } + + private void resetFields() { + mUsernameEditText.setText(""); + mPasswordEditText.setText(""); + } + + /** + * Emulates a login action. + */ + private void login() { + String username = mUsernameEditText.getText().toString(); + String password = mPasswordEditText.getText().toString(); + boolean valid = isValidCredentials(username, password); + if (valid) { + Intent intent = WelcomeActivity.getStartActivityIntent(LoginActivity.this); + startActivity(intent); + finish(); + } else { + Toast.makeText(this, "Authentication failed.", Toast.LENGTH_SHORT).show(); + } + } + + /** + * Dummy implementation for demo purposes. A real service should use secure mechanisms to + * authenticate users. + */ + public boolean isValidCredentials(String username, String password) { + return username != null && password != null && username.equals(password); + } +} \ No newline at end of file diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.java new file mode 100644 index 00000000..4b27010b --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/MainActivity.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2017 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.autofillframework.app; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.view.View; + +import com.example.android.autofillframework.R; + +/** + * This is used to launch sample activities that showcase autofill. + */ +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + findViewById(R.id.standardViewSignInButton).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + standardViewSignIn(); + } + }); + findViewById(R.id.virtualViewSignInButton).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + virtualViewSignIn(); + } + }); + findViewById(R.id.creditCardCheckoutButton).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + creditCardCheckout(); + } + }); + } + + private void creditCardCheckout() { + Intent intent = CreditCardActivity.getStartActivityIntent(this); + startActivity(intent); + } + + private void standardViewSignIn() { + Intent intent = LoginActivity.getStartActivityIntent(this); + startActivity(intent); + } + + private void virtualViewSignIn() { + Intent intent = VirtualLoginActivity.getStartActivityIntent(this); + startActivity(intent); + } +} \ No newline at end of file diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.java new file mode 100644 index 00000000..5a4a4f4e --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/VirtualLoginActivity.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2017 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.autofillframework.app; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.widget.Toast; + +import com.example.android.autofillframework.R; + + +public class VirtualLoginActivity extends AppCompatActivity { + + private CustomVirtualView mCustomVirtualView; + + public static Intent getStartActivityIntent(Context context) { + Intent intent = new Intent(context, VirtualLoginActivity.class); + return intent; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.virtual_login_activity); + + mCustomVirtualView = (CustomVirtualView) findViewById(R.id.custom_view); + findViewById(R.id.login).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + login(); + } + }); + findViewById(R.id.clear).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + resetFields(); + } + }); + } + + private void resetFields() { + mCustomVirtualView.resetFields(); + } + + /** + * Emulates a login action. + */ + private void login() { + String username = mCustomVirtualView.getUsernameText().toString(); + String password = mCustomVirtualView.getPasswordText().toString(); + boolean valid = isValidCredentials(username, password); + if (valid) { + Intent intent = WelcomeActivity.getStartActivityIntent(VirtualLoginActivity.this); + startActivity(intent); + } else { + Toast.makeText(this, "Authentication failed.", Toast.LENGTH_SHORT).show(); + } + } + + /** + * Dummy implementation for demo purposes. A real service should use secure mechanisms to + * authenticate users. + */ + public boolean isValidCredentials(String username, String password) { + return username != null && password != null && username.equals(password); + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.java new file mode 100644 index 00000000..fd3df2f6 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/app/WelcomeActivity.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 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.autofillframework.app; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import com.example.android.autofillframework.R; + +public class WelcomeActivity extends Activity { + + public static Intent getStartActivityIntent(Context context) { + return new Intent(context, WelcomeActivity.class); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.welcome_activity); + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/AuthActivity.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/AuthActivity.java new file mode 100644 index 00000000..768b2ee3 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/AuthActivity.java @@ -0,0 +1,160 @@ +/* + * Copyright (C) 2017 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.autofillframework.service; + +import android.app.Activity; +import android.app.PendingIntent; +import android.app.assist.AssistStructure; +import android.content.Context; +import android.content.Intent; +import android.content.IntentSender; +import android.os.Bundle; +import android.service.autofill.Dataset; +import android.service.autofill.FillResponse; +import android.support.annotation.Nullable; +import android.text.Editable; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.example.android.autofillframework.R; +import com.example.android.autofillframework.service.datasource.LocalAutofillRepository; +import com.example.android.autofillframework.service.model.AutofillFieldsCollection; +import com.example.android.autofillframework.service.model.ClientFormData; +import com.example.android.autofillframework.service.settings.MyPreferences; + +import java.util.HashMap; + +import static android.view.autofill.AutofillManager.EXTRA_ASSIST_STRUCTURE; +import static android.view.autofill.AutofillManager.EXTRA_AUTHENTICATION_RESULT; +import static com.example.android.autofillframework.CommonUtil.EXTRA_DATASET_NAME; +import static com.example.android.autofillframework.CommonUtil.EXTRA_FOR_RESPONSE; +import static com.example.android.autofillframework.CommonUtil.TAG; + +/** + * This Activity controls the UI for logging in to the Autofill service. + * It is launched when an Autofill Response or specific Dataset within the Response requires + * authentication to access. It bundles the result in an Intent. + */ +public class AuthActivity extends Activity { + + // Unique id for dataset intents. + private static int sDatasetPendingIntentId = 0; + + private EditText mMasterPassword; + private Button mCancel; + private Button mLogin; + private Intent mReplyIntent; + + static IntentSender getAuthIntentSenderForResponse(Context context) { + final Intent intent = new Intent(context, AuthActivity.class); + return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT) + .getIntentSender(); + } + + static IntentSender getAuthIntentSenderForDataset(Context context, String datasetName) { + final Intent intent = new Intent(context, AuthActivity.class); + intent.putExtra(EXTRA_DATASET_NAME, datasetName); + intent.putExtra(EXTRA_FOR_RESPONSE, false); + return PendingIntent.getActivity(context, ++sDatasetPendingIntentId, intent, + PendingIntent.FLAG_CANCEL_CURRENT).getIntentSender(); + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.auth_activity); + mCancel = findViewById(R.id.cancel); + mLogin = findViewById(R.id.login); + mMasterPassword = findViewById(R.id.master_password); + mLogin.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + login(); + } + + }); + + mCancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + onFailure(); + AuthActivity.this.finish(); + } + }); + } + + private void login() { + Editable password = mMasterPassword.getText(); + if (password.toString() + .equals(MyPreferences.getInstance(AuthActivity.this).getMasterPassword())) { + onSuccess(); + } else { + Toast.makeText(this, "Password incorrect", Toast.LENGTH_SHORT).show(); + onFailure(); + } + finish(); + } + + @Override + public void finish() { + if (mReplyIntent != null) { + setResult(RESULT_OK, mReplyIntent); + } else { + setResult(RESULT_CANCELED); + } + super.finish(); + } + + private void onFailure() { + Log.w(TAG, "Failed auth."); + mReplyIntent = null; + } + + private void onSuccess() { + Intent intent = getIntent(); + boolean forResponse = intent.getBooleanExtra(EXTRA_FOR_RESPONSE, true); + AssistStructure structure = intent.getParcelableExtra(EXTRA_ASSIST_STRUCTURE); + StructureParser parser = new StructureParser(structure); + parser.parse(); + AutofillFieldsCollection autofillFields = parser.getAutofillFields(); + int saveTypes = parser.getSaveTypes(); + mReplyIntent = new Intent(); + HashMap clientFormDataMap = + LocalAutofillRepository.getInstance(this).getClientFormData + (autofillFields.getFocusedHints(), autofillFields.getAllHints()); + if (forResponse) { + setResponseIntent(AutofillHelper.newResponse + (this, false, autofillFields, saveTypes, clientFormDataMap)); + } else { + String datasetName = intent.getStringExtra(EXTRA_DATASET_NAME); + setDatasetIntent(AutofillHelper.newDataset + (this, autofillFields, clientFormDataMap.get(datasetName))); + } + } + + private void setResponseIntent(FillResponse fillResponse) { + mReplyIntent.putExtra(EXTRA_AUTHENTICATION_RESULT, fillResponse); + } + + private void setDatasetIntent(Dataset dataset) { + mReplyIntent.putExtra(EXTRA_AUTHENTICATION_RESULT, dataset); + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/AutofillHelper.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/AutofillHelper.java new file mode 100644 index 00000000..460729e6 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/AutofillHelper.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2017 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.autofillframework.service; + +import android.content.Context; +import android.content.IntentSender; +import android.service.autofill.Dataset; +import android.service.autofill.FillResponse; +import android.service.autofill.SaveInfo; +import android.util.Log; +import android.view.autofill.AutofillId; +import android.widget.RemoteViews; + +import com.example.android.autofillframework.R; +import com.example.android.autofillframework.service.model.AutofillFieldsCollection; +import com.example.android.autofillframework.service.model.ClientFormData; + +import java.util.HashMap; +import java.util.Set; + +import static com.example.android.autofillframework.CommonUtil.TAG; + +/** + * This is a class containing helper methods for building Autofill Datasets and Responses. + */ +public final class AutofillHelper { + + /** + * Wraps autofill data in a LoginCredential Dataset object which can then be sent back to the + * client View. + */ + public static Dataset newDataset(Context context, + AutofillFieldsCollection autofillFields, ClientFormData clientFormData) { + Dataset.Builder datasetBuilder = new Dataset.Builder + (newRemoteViews(context.getPackageName(), clientFormData.getDatasetName())); + boolean setValueAtLeastOnce = clientFormData.applyToFields(autofillFields, datasetBuilder); + if (setValueAtLeastOnce) { + return datasetBuilder.build(); + } else { + return null; + } + } + + public static RemoteViews newRemoteViews(String packageName, String remoteViewsText) { + RemoteViews presentation = new RemoteViews(packageName, R.layout.list_item); + presentation.setTextViewText(R.id.text1, remoteViewsText); + return presentation; + } + + /** + * Wraps autofill data in a Response object (essentially a series of Datasets) which can then + * be sent back to the client View. + */ + public static FillResponse newResponse(Context context, + boolean datasetAuth, AutofillFieldsCollection autofillFields, int saveType, + HashMap clientFormDataMap) { + FillResponse.Builder responseBuilder = new FillResponse.Builder(); + if (clientFormDataMap != null) { + Set datasetNames = clientFormDataMap.keySet(); + for (String datasetName : datasetNames) { + ClientFormData clientFormData = clientFormDataMap.get(datasetName); + if (datasetAuth) { + Dataset.Builder datasetBuilder = + new Dataset.Builder(newRemoteViews + (context.getPackageName(), clientFormData.getDatasetName())); + IntentSender sender = AuthActivity + .getAuthIntentSenderForDataset(context, clientFormData.getDatasetName()); + datasetBuilder.setAuthentication(sender); + responseBuilder.addDataset(datasetBuilder.build()); + } else { + Dataset dataset = newDataset(context, autofillFields, clientFormData); + if (dataset != null) { + responseBuilder.addDataset(dataset); + } + } + } + } + if (saveType != 0) { + AutofillId[] autofillIds = autofillFields.getAutofillIds(); + responseBuilder.setSaveInfo(new SaveInfo.Builder(saveType, autofillIds).build()); + return responseBuilder.build(); + } else { + Log.d(TAG, "These fields are not meant to be saved by autofill."); + return null; + } + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java new file mode 100644 index 00000000..61e42050 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/MyAutofillService.java @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2017 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.autofillframework.service; + +import android.app.assist.AssistStructure; +import android.content.IntentSender; +import android.os.Bundle; +import android.os.CancellationSignal; +import android.service.autofill.AutofillService; +import android.service.autofill.FillCallback; +import android.service.autofill.FillContext; +import android.service.autofill.FillRequest; +import android.service.autofill.FillResponse; +import android.service.autofill.SaveCallback; +import android.service.autofill.SaveRequest; +import android.util.Log; +import android.widget.RemoteViews; + +import com.example.android.autofillframework.R; +import com.example.android.autofillframework.service.datasource.LocalAutofillRepository; +import com.example.android.autofillframework.service.model.AutofillFieldsCollection; +import com.example.android.autofillframework.service.model.ClientFormData; +import com.example.android.autofillframework.service.settings.MyPreferences; + +import java.util.HashMap; +import java.util.List; + +import static com.example.android.autofillframework.CommonUtil.TAG; +import static com.example.android.autofillframework.CommonUtil.bundleToString; + +public class MyAutofillService extends AutofillService { + + @Override + public void onFillRequest(AssistStructure assistStructure, Bundle bundle, int i, + CancellationSignal cancellationSignal, FillCallback fillCallback) { + /* Deprecated, ignore */ + } + + @Override + public void onSaveRequest(AssistStructure assistStructure, Bundle bundle, + SaveCallback saveCallback) { + /* Deprecated, ignore */ + } + + @Override + public void onFillRequest(FillRequest request, CancellationSignal cancellationSignal, + FillCallback callback) { + AssistStructure structure = request.getStructure(); + final Bundle data = request.getClientState(); + Log.d(TAG, "onFillRequest(): data=" + bundleToString(data)); + + // Temporary hack for disabling autofill for components in this autofill service. + // i.e. we don't want to autofill components in AuthActivity. + if (structure.getActivityComponent().toShortString() + .contains("com.example.android.autofillframework.service")) { + callback.onSuccess(null); + return; + } + cancellationSignal.setOnCancelListener(new CancellationSignal.OnCancelListener() { + @Override + public void onCancel() { + Log.w(TAG, "Cancel autofill not implemented in this sample."); + } + }); + // Parse AutoFill data in Activity + StructureParser parser = new StructureParser(structure); + parser.parse(); + AutofillFieldsCollection autofillFields = parser.getAutofillFields(); + int saveTypes = parser.getSaveTypes(); + + FillResponse.Builder responseBuilder = new FillResponse.Builder(); + // Check user's settings for authenticating Responses and Datasets. + boolean responseAuth = MyPreferences.getInstance(this).isResponseAuth(); + if (responseAuth) { + // If the entire Autofill Response is authenticated, AuthActivity is used + // to generate Response. + IntentSender sender = AuthActivity.getAuthIntentSenderForResponse(this); + RemoteViews presentation = AutofillHelper + .newRemoteViews(getPackageName(), getString(R.string.autofill_sign_in_prompt)); + responseBuilder + .setAuthentication(autofillFields.getAutofillIds(), sender, presentation); + callback.onSuccess(responseBuilder.build()); + } else { + boolean datasetAuth = MyPreferences.getInstance(this).isDatasetAuth(); + HashMap clientFormDataMap = + LocalAutofillRepository.getInstance(this).getClientFormData + (autofillFields.getFocusedHints(), autofillFields.getAllHints()); + FillResponse response = AutofillHelper.newResponse + (this, datasetAuth, autofillFields, saveTypes, clientFormDataMap); + callback.onSuccess(response); + } + } + + @Override + public void onSaveRequest(SaveRequest request, SaveCallback callback) { + List context = request.getFillContexts(); + final AssistStructure structure = context.get(context.size() - 1).getStructure(); + final Bundle data = request.getClientState(); + Log.d(TAG, "onSaveRequest(): data=" + bundleToString(data)); + StructureParser parser = new StructureParser(structure); + parser.parse(); + ClientFormData clientFormData = parser.getClientFormData(); + LocalAutofillRepository.getInstance(this).saveClientFormData(clientFormData); + } + + @Override + public void onConnected() { + Log.d(TAG, "onConnected"); + } + + @Override + public void onDisconnected() { + Log.d(TAG, "onDisconnected"); + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/StructureParser.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/StructureParser.java new file mode 100644 index 00000000..b6294449 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/StructureParser.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2017 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.autofillframework.service; + +import android.app.assist.AssistStructure; +import android.app.assist.AssistStructure.ViewNode; +import android.app.assist.AssistStructure.WindowNode; +import android.util.Log; + +import com.example.android.autofillframework.service.model.AutofillField; +import com.example.android.autofillframework.service.model.AutofillFieldsCollection; +import com.example.android.autofillframework.service.model.ClientFormData; +import com.example.android.autofillframework.service.model.SavedAutofillValue; + +import static com.example.android.autofillframework.CommonUtil.TAG; + +/** + * Parser for an AssistStructure object. This is invoked when the Autofill Service receives an + * AssistStructure from the client Activity, representing its View hierarchy. In this + * sample, it parses the hierarchy and records + */ +final class StructureParser { + private final AutofillFieldsCollection mAutofillFields = new AutofillFieldsCollection(); + private final AssistStructure mStructure; + private ClientFormData mClientFormData; + + StructureParser(AssistStructure structure) { + mStructure = structure; + + } + + /** + * Traverse AssistStructure and add ViewNode metadata to a flat list. + */ + void parse() { + Log.d(TAG, "Parsing structure for " + mStructure.getActivityComponent()); + int nodes = mStructure.getWindowNodeCount(); + mClientFormData = new ClientFormData(); + for (int i = 0; i < nodes; i++) { + WindowNode node = mStructure.getWindowNodeAt(i); + ViewNode view = node.getRootViewNode(); + parseLocked(view); + } + } + + private void parseLocked(ViewNode viewNode) { + if (viewNode.getAutofillHints() != null && viewNode.getAutofillHints().length > 0) { + //TODO check to make sure hints are supported by service. + mAutofillFields.add(new AutofillField(viewNode)); + mClientFormData + .set(viewNode.getAutofillHints(), SavedAutofillValue.fromViewNode(viewNode)); + } + int childrenSize = viewNode.getChildCount(); + if (childrenSize > 0) { + for (int i = 0; i < childrenSize; i++) { + parseLocked(viewNode.getChildAt(i)); + } + } + } + + public AutofillFieldsCollection getAutofillFields() { + return mAutofillFields; + } + + public int getSaveTypes() { + return mAutofillFields.getSaveType(); + } + + public ClientFormData getClientFormData() { + return mClientFormData; + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/datasource/AutofillRepository.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/datasource/AutofillRepository.java new file mode 100644 index 00000000..8de8b647 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/datasource/AutofillRepository.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2017 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.autofillframework.service.datasource; + +import com.example.android.autofillframework.service.model.ClientFormData; + +import java.util.HashMap; +import java.util.List; + +public interface AutofillRepository { + + /** + * Gets saved ClientFormData that contains some objects that can autofill fields with these + * {@code autofillHints}. + */ + HashMap getClientFormData(List focusedAutofillHints, + List allAutofillHints); + + /** + * Saves LoginCredential under this datasetName. + */ + void saveClientFormData(ClientFormData clientFormData); + + /** + * Clears all data. + */ + void clear(); +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/datasource/LocalAutofillRepository.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/datasource/LocalAutofillRepository.java new file mode 100644 index 00000000..8336fe1e --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/datasource/LocalAutofillRepository.java @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2017 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.autofillframework.service.datasource; + +import android.content.Context; +import android.content.SharedPreferences; +import android.util.ArraySet; + +import com.example.android.autofillframework.service.model.ClientFormData; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Set; + +/** + * Singleton autofill data repository, that stores autofill fields to SharedPreferences. + * DISCLAIMER, you should not store sensitive fields like user data unencrypted. This is only done + * here for simplicity and learning purposes. + */ +public class LocalAutofillRepository implements AutofillRepository { + private static final String SHARED_PREF_KEY = "com.example.android.autofillframework.service"; + private static final String CLIENT_FORM_DATA_KEY = "loginCredentialDatasets"; + private static final String DATASET_NUMBER_KEY = "datasetNumber"; + + private static LocalAutofillRepository sInstance; + + private final SharedPreferences mPrefs; + + // TODO prepend with autofill data set in Settings. + private LocalAutofillRepository(Context context) { + mPrefs = context.getApplicationContext() + .getSharedPreferences(SHARED_PREF_KEY, Context.MODE_PRIVATE); + } + + public static LocalAutofillRepository getInstance(Context context) { + if (sInstance == null) { + sInstance = new LocalAutofillRepository(context); + } + return sInstance; + } + + @Override + public HashMap getClientFormData(List focusedAutofillHints, + List allAutofillHints) { + try { + // TODO use sqlite instead. + boolean hasDataForFocusedAutofillHints = false; + HashMap clientFormDataMap = new HashMap<>(); + Set clientFormDataStringSet = getAllAutofillDataStringSet(); + for (String clientFormDataString : clientFormDataStringSet) { + ClientFormData clientFormData = ClientFormData + .fromJson(new JSONObject(clientFormDataString)); + if (clientFormData != null) { + if (clientFormData.helpsWithHints(focusedAutofillHints)) { + hasDataForFocusedAutofillHints = true; + } + if (clientFormData.helpsWithHints(allAutofillHints)) { + clientFormDataMap.put(clientFormData.getDatasetName(), clientFormData); + } + } + } + if (hasDataForFocusedAutofillHints) { + return clientFormDataMap; + } else { + return null; + } + } catch (JSONException e) { + return null; + } + } + + @Override + public void saveClientFormData(ClientFormData clientFormData) { + //TODO use sqlite instead. + String datasetName = "dataset-" + getDatasetNumber(); + clientFormData.setDatasetName(datasetName); + Set allAutofillData = getAllAutofillDataStringSet(); + allAutofillData.add(clientFormData.toJson().toString()); + saveAllAutofillDataStringSet(allAutofillData); + incrementDatasetNumber(); + } + + @Override + public void clear() { + mPrefs.edit().remove(CLIENT_FORM_DATA_KEY).apply(); + } + + private Set getAllAutofillDataStringSet() { + return mPrefs.getStringSet(CLIENT_FORM_DATA_KEY, new ArraySet()); + } + + private void saveAllAutofillDataStringSet(Set allAutofillDataStringSet) { + mPrefs.edit().putStringSet(CLIENT_FORM_DATA_KEY, allAutofillDataStringSet).apply(); + } + + /** + * For simplicity, datasets will be named in the form "dataset-X" where X means + * this was the Xth dataset saved. + */ + private int getDatasetNumber() { + return mPrefs.getInt(DATASET_NUMBER_KEY, 0); + } + + /** + * Every time a dataset is saved, this should be called to increment the dataset number. + * (only important for this service's dataset naming scheme). + */ + private void incrementDatasetNumber() { + mPrefs.edit().putInt(DATASET_NUMBER_KEY, getDatasetNumber() + 1).apply(); + } +} \ No newline at end of file diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillField.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillField.java new file mode 100644 index 00000000..4d4de2bc --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillField.java @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2017 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.autofillframework.service.model; + +import android.app.assist.AssistStructure; +import android.service.autofill.SaveInfo; +import android.view.View; +import android.view.autofill.AutofillId; +import android.view.autofill.AutofillValue; + +/** + * Class that represents a field that can be autofilled. It will contain a description + * (what type data the field holds), an AutoFillId (an ID unique to the rest of the ViewStructure), + * and a value (what data is currently in the field). + */ +public class AutofillField { + private int mSaveType = 0; + private String[] mHints; + private AutofillId mId; + private int mAutofillType; + private String[] mAutofillOptions; + private boolean mFocused; + + public AutofillField(AssistStructure.ViewNode view) { + mId = view.getAutofillId(); + setHints(view.getAutofillHints()); + mAutofillType = view.getAutofillType(); + mAutofillOptions = view.getAutofillOptions(); + mFocused = view.isFocused(); + } + + public String[] getHints() { + return mHints; + } + + public void setHints(String[] hints) { + mHints = hints; + updateSaveTypeFromHints(); + } + + public int getSaveType() { + return mSaveType; + } + + public AutofillId getId() { + return mId; + } + + public void setId(AutofillId id) { + mId = id; + } + + public int getAutofillType() { + return mAutofillType; + } + + public int getAutofillOptionIndex(String value) { + for (int i = 0; i < mAutofillOptions.length; i++) { + if (mAutofillOptions[i].equals(value)) { + return i; + } + } + return -1; + } + + public boolean isFocused() { + return mFocused; + } + + private void updateSaveTypeFromHints() { + mSaveType = 0; + if (mHints == null) { + return; + } + for (String hint : mHints) { + switch (hint) { + case View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE: + case View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY: + case View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH: + case View.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR: + case View.AUTOFILL_HINT_CREDIT_CARD_NUMBER: + case View.AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE: + mSaveType |= SaveInfo.SAVE_DATA_TYPE_CREDIT_CARD; + break; + case View.AUTOFILL_HINT_EMAIL_ADDRESS: + mSaveType |= SaveInfo.SAVE_DATA_TYPE_EMAIL_ADDRESS; + break; + case View.AUTOFILL_HINT_PHONE: + case View.AUTOFILL_HINT_NAME: + mSaveType |= SaveInfo.SAVE_DATA_TYPE_GENERIC; + break; + case View.AUTOFILL_HINT_PASSWORD: + mSaveType |= SaveInfo.SAVE_DATA_TYPE_PASSWORD; + mSaveType &= ~SaveInfo.SAVE_DATA_TYPE_EMAIL_ADDRESS; + mSaveType &= ~SaveInfo.SAVE_DATA_TYPE_USERNAME; + break; + case View.AUTOFILL_HINT_POSTAL_ADDRESS: + case View.AUTOFILL_HINT_POSTAL_CODE: + mSaveType |= SaveInfo.SAVE_DATA_TYPE_ADDRESS; + break; + case View.AUTOFILL_HINT_USERNAME: + mSaveType |= SaveInfo.SAVE_DATA_TYPE_USERNAME; + break; + } + } + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillFieldsCollection.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillFieldsCollection.java new file mode 100644 index 00000000..0354b989 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/AutofillFieldsCollection.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2017 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.autofillframework.service.model; + +import android.view.autofill.AutofillId; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +public final class AutofillFieldsCollection { + + private final List mAutofillIds = new ArrayList<>(); + private final HashMap> mAutofillHintsToFieldsMap = new HashMap<>(); + private final List mAllAutofillHints = new ArrayList<>(); + private final List mFocusedAutofillHints = new ArrayList<>(); + private int size = 0; + private int mSaveType = 0; + + public void add(AutofillField autofillField) { + mSaveType |= autofillField.getSaveType(); + size++; + mAutofillIds.add(autofillField.getId()); + List hintsList = Arrays.asList(autofillField.getHints()); + mAllAutofillHints.addAll(hintsList); + if (autofillField.isFocused()) { + mFocusedAutofillHints.addAll(hintsList); + } + for (String hint : autofillField.getHints()) { + if (mAutofillHintsToFieldsMap.get(hint) == null) { + mAutofillHintsToFieldsMap.put(hint, new ArrayList()); + } + mAutofillHintsToFieldsMap.get(hint).add(autofillField); + } + } + + public int getSaveType() { + return mSaveType; + } + + public AutofillId[] getAutofillIds() { + return mAutofillIds.toArray(new AutofillId[size]); + } + + public List getFieldsForHint(String hint) { + return mAutofillHintsToFieldsMap.get(hint); + } + + public List getFocusedHints() { + return mFocusedAutofillHints; + } + + public List getAllHints() { + return mAllAutofillHints; + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/ClientFormData.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/ClientFormData.java new file mode 100644 index 00000000..aa57e935 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/ClientFormData.java @@ -0,0 +1,184 @@ +/* + * Copyright (C) 2017 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.autofillframework.service.model; + +import android.service.autofill.Dataset; +import android.support.annotation.NonNull; +import android.util.Log; +import android.view.View; +import android.view.autofill.AutofillId; +import android.view.autofill.AutofillValue; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +/** + * ClientFormData is the model that holds all of the data on a client app's page, plus the dataset + * name associated with it. + */ +public final class ClientFormData { + private static final String TAG = "ClientFormData"; + private final HashMap hintMap; + private String datasetName; + + public ClientFormData() { + this(null, new HashMap()); + } + + public ClientFormData(String datasetName, HashMap hintMap) { + this.hintMap = hintMap; + this.datasetName = datasetName; + } + + public static ClientFormData fromJson(JSONObject jsonObject) { + HashMap hintMap = new HashMap<>(); + try { + String datasetName = jsonObject.has("datasetName") ? + jsonObject.getString("datasetName") : null; + JSONObject valuesJson = jsonObject.getJSONObject("values"); + Iterator hints = valuesJson.keys(); + while (hints.hasNext()) { + String hint = hints.next(); + JSONObject valueAsJson = valuesJson + .getJSONObject(hint); + if (valueAsJson != null) { + SavedAutofillValue savedAutofillValue = SavedAutofillValue.fromJson(valueAsJson); + hintMap.put(hint, savedAutofillValue); + } + } + return new ClientFormData(datasetName, hintMap); + } catch (JSONException e) { + Log.d(TAG, e.getMessage()); + return null; + } + } + + /** + * Returns the name of the {@link Dataset}. + */ + public String getDatasetName() { + return this.datasetName; + } + + /** + * Sets the {@link Dataset} name. + */ + public void setDatasetName(String datasetName) { + this.datasetName = datasetName; + } + + /** + * Sets values for a list of hints. + */ + public void set(@NonNull String[] autofillHints, @NonNull SavedAutofillValue autofillValue) { + if (autofillHints.length < 1) { + return; + } + for (int i = 0; i < autofillHints.length; i++) { + hintMap.put(autofillHints[i], autofillValue); + } + } + + /** + * Populates a {@link Dataset.Builder} with appropriate values for each {@link AutofillId} + * in a {@code AutofillFieldsCollection}. + */ + public boolean applyToFields(AutofillFieldsCollection autofillFieldsCollection, + Dataset.Builder datasetBuilder) { + boolean setValueAtLeastOnce = false; + List allHints = autofillFieldsCollection.getAllHints(); + for (int hintIndex = 0; hintIndex < allHints.size(); hintIndex++) { + String hint = allHints.get(hintIndex); + List autofillFields = autofillFieldsCollection.getFieldsForHint(hint); + if (autofillFields == null) { + continue; + } + for (int autofillFieldIndex = 0; autofillFieldIndex < autofillFields.size(); autofillFieldIndex++) { + AutofillField autofillField = autofillFields.get(autofillFieldIndex); + AutofillId autofillId = autofillField.getId(); + int autofillType = autofillField.getAutofillType(); + SavedAutofillValue savedAutofillValue = hintMap.get(hint); + switch (autofillType) { + case View.AUTOFILL_TYPE_LIST: + int listValue = autofillField.getAutofillOptionIndex(savedAutofillValue.getTextValue()); + if (listValue != -1) { + datasetBuilder.setValue(autofillId, AutofillValue.forList(listValue)); + setValueAtLeastOnce = true; + } + break; + case View.AUTOFILL_TYPE_DATE: + long dateValue = savedAutofillValue.getDateValue(); + if (dateValue != -1) { + datasetBuilder.setValue(autofillId, AutofillValue.forDate(dateValue)); + setValueAtLeastOnce = true; + } + break; + case View.AUTOFILL_TYPE_TEXT: + String textValue = savedAutofillValue.getTextValue(); + if (textValue != null) { + datasetBuilder.setValue(autofillId, AutofillValue.forText(textValue)); + setValueAtLeastOnce = true; + } + break; + case View.AUTOFILL_TYPE_TOGGLE: + if (savedAutofillValue.hasToggleValue()) { + boolean toggleValue = savedAutofillValue.getToggleValue(); + datasetBuilder.setValue(autofillId, AutofillValue.forToggle(toggleValue)); + setValueAtLeastOnce = true; + } + break; + case View.AUTOFILL_TYPE_NONE: + default: + Log.w(TAG, "Invalid autofill type - " + autofillType); + break; + } + } + } + return setValueAtLeastOnce; + } + + public JSONObject toJson() { + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("datasetName", datasetName != null ? datasetName : JSONObject.NULL); + JSONObject jsonValues = new JSONObject(); + Set hints = hintMap.keySet(); + for (String hint : hints) { + SavedAutofillValue value = hintMap.get(hint); + jsonValues.put(hint, value != null ? value.toJson() : JSONObject.NULL); + } + jsonObject.put("values", jsonValues); + } catch (JSONException e) { + Log.e(TAG, e.getMessage()); + } + return jsonObject; + } + + public boolean helpsWithHints(List autofillHints) { + for (int i = 0; i < autofillHints.size(); i++) { + String autofillHint = autofillHints.get(i); + if (hintMap.get(autofillHint) != null && !hintMap.get(autofillHint).isNull()) { + return true; + } + } + return false; + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/SavedAutofillValue.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/SavedAutofillValue.java new file mode 100644 index 00000000..73e0c81e --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/model/SavedAutofillValue.java @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2017 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.autofillframework.service.model; + +import android.app.assist.AssistStructure; +import android.util.Log; +import android.view.autofill.AutofillValue; + +import org.json.JSONException; +import org.json.JSONObject; + +public class SavedAutofillValue { + private static final String TAG = "SavedAutofillValue"; + private String textValue = null; + private Long dateValue = -1L; + private Boolean toggleValue = false; + private boolean hasToggleValue = false; + + public static SavedAutofillValue fromJson(JSONObject jsonObject) { + if (jsonObject == null) { + return null; + } + try { + SavedAutofillValue savedAutofillValue = new SavedAutofillValue(); + + savedAutofillValue.textValue = + !jsonObject.isNull("textValue") ? jsonObject.getString("textValue") : null; + savedAutofillValue.dateValue = + !jsonObject.isNull("dateValue") ? jsonObject.getLong("dateValue") : null; + savedAutofillValue.setToggleValue + (!jsonObject.isNull("toggleValue") ? jsonObject.getBoolean("toggleValue") : null); + return savedAutofillValue; + } catch (JSONException e) { + Log.e(TAG, e.getMessage()); + return null; + } + } + + public static SavedAutofillValue fromViewNode(AssistStructure.ViewNode viewNode) { + SavedAutofillValue savedAutofillValue = new SavedAutofillValue(); + AutofillValue autofillValue = viewNode.getAutofillValue(); + if (autofillValue != null) { + if (autofillValue.isList()) { + String[] autofillOptions = viewNode.getAutofillOptions(); + int index = autofillValue.getListValue(); + if (autofillOptions != null && autofillOptions.length > 0) { + savedAutofillValue.textValue = autofillOptions[index]; + } + } else if (autofillValue.isDate()) { + savedAutofillValue.dateValue = autofillValue.getDateValue(); + } else if (autofillValue.isText()) { + // Using toString of AutofillValue.getTextValue in order to save it to + // SharedPreferences. + savedAutofillValue.textValue = autofillValue.getTextValue().toString(); + } + } + return savedAutofillValue; + } + + public JSONObject toJson() { + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put("textValue", textValue != null ? textValue : JSONObject.NULL); + jsonObject.put("dateValue", dateValue != null ? dateValue : JSONObject.NULL); + jsonObject.put("toggleValue", toggleValue != null ? toggleValue : JSONObject.NULL); + return jsonObject; + } catch (JSONException e) { + Log.e(TAG, e.getMessage()); + return null; + } + } + + public String getTextValue() { + return textValue; + } + + public long getDateValue() { + return dateValue; + } + + + public boolean getToggleValue() { + return toggleValue; + } + + public void setToggleValue(Boolean toggleValue) { + this.toggleValue = toggleValue; + hasToggleValue = toggleValue != null; + } + + + public boolean isNull() { + return textValue == null && dateValue == -1L && !hasToggleValue; + } + + public boolean hasToggleValue() { + return hasToggleValue; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + SavedAutofillValue that = (SavedAutofillValue) o; + + if (textValue != null ? !textValue.equals(that.textValue) : that.textValue != null) + return false; + if (dateValue != null ? !dateValue.equals(that.dateValue) : that.dateValue != null) + return false; + return toggleValue != null ? toggleValue.equals(that.toggleValue) : that.toggleValue == null; + + } + + @Override + public int hashCode() { + int result = textValue != null ? textValue.hashCode() : 0; + result = 31 * result + (dateValue != null ? dateValue.hashCode() : 0); + result = 31 * result + (toggleValue != null ? toggleValue.hashCode() : 0); + return result; + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/settings/MyPreferences.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/settings/MyPreferences.java new file mode 100644 index 00000000..3926530e --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/settings/MyPreferences.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2017 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.autofillframework.service.settings; + +import android.content.Context; +import android.content.SharedPreferences; +import android.service.autofill.Dataset; +import android.service.autofill.FillResponse; +import android.support.annotation.NonNull; + +public class MyPreferences { + private static final String TAG = "MyPreferences"; + + private static final String RESPONSE_AUTH_KEY = "response_auth"; + private static final String DATASET_AUTH_KEY = "dataset_auth"; + private static final String MASTER_PASSWORD_KEY = "master_password"; + + private static MyPreferences sInstance; + private final SharedPreferences mPrefs; + + private MyPreferences(Context context) { + mPrefs = context.getApplicationContext().getSharedPreferences("my-settings", + Context.MODE_PRIVATE); + } + + public static MyPreferences getInstance(Context context) { + if (sInstance == null) { + sInstance = new MyPreferences(context); + } + return sInstance; + } + + /** + * Gets whether {@link FillResponse}s should require authentication. + */ + public boolean isResponseAuth() { + return mPrefs.getBoolean(RESPONSE_AUTH_KEY, false); + } + + /** + * Enables/disables authentication for the entire autofill {@link FillResponse}. + */ + public void setResponseAuth(boolean responseAuth) { + mPrefs.edit().putBoolean(RESPONSE_AUTH_KEY, responseAuth).apply(); + } + + /** + * Gets whether {@link Dataset}s should require authentication. + */ + public boolean isDatasetAuth() { + return mPrefs.getBoolean(DATASET_AUTH_KEY, false); + } + + /** + * Enables/disables authentication for individual autofill {@link Dataset}s. + */ + public void setDatasetAuth(boolean datasetAuth) { + mPrefs.edit().putBoolean(DATASET_AUTH_KEY, datasetAuth).apply(); + } + + /** + * Gets autofill master username. + */ + public String getMasterPassword() { + return mPrefs.getString(MASTER_PASSWORD_KEY, null); + } + + /** + * Sets autofill master password. + */ + public void setMasterPassword(@NonNull String masterPassword) { + mPrefs.edit().putString(MASTER_PASSWORD_KEY, masterPassword).apply(); + } + + public void clearCredentials() { + mPrefs.edit().remove(MASTER_PASSWORD_KEY).apply(); + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/settings/SettingsActivity.java b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/settings/SettingsActivity.java new file mode 100644 index 00000000..6387d36b --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/java/com/example/android/autofillframework/service/settings/SettingsActivity.java @@ -0,0 +1,176 @@ +/* + * Copyright (C) 2017 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.autofillframework.service.settings; + +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.v7.app.AlertDialog; +import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.Switch; +import android.widget.TextView; + +import com.example.android.autofillframework.R; +import com.example.android.autofillframework.service.datasource.LocalAutofillRepository; + +public class SettingsActivity extends AppCompatActivity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.settings_activity); + final MyPreferences preferences = MyPreferences.getInstance(this); + setupSettingsSwitch(R.id.settings_auth_responses_container, + R.id.settings_auth_responses_label, + R.id.settings_auth_responses_switch, + preferences.isResponseAuth(), + new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + preferences.setResponseAuth(b); + } + }); + setupSettingsSwitch(R.id.settings_auth_datasets_container, + R.id.settings_auth_datasets_label, + R.id.settings_auth_datasets_switch, + preferences.isDatasetAuth(), + new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + preferences.setDatasetAuth(b); + } + }); + setupSettingsButton(R.id.settings_clear_data_container, + R.id.settings_clear_data_label, + R.id.settings_clear_data_icon, + new View.OnClickListener() { + @Override + public void onClick(View view) { + buildClearDataDialog().show(); + } + }); + + setupSettingsButton(R.id.settings_auth_credentials_container, + R.id.settings_auth_credentials_label, + R.id.settings_auth_credentials_icon, + new View.OnClickListener() { + @Override + public void onClick(View view) { + if (preferences.getMasterPassword() != null) { + buildCurrentCredentialsDialog().show(); + } else { + buildNewCredentialsDialog().show(); + } + } + }); + } + + private AlertDialog buildClearDataDialog() { + return new AlertDialog.Builder(SettingsActivity.this) + .setMessage(R.string.settings_clear_data_confirmation) + .setTitle(R.string.settings_clear_data_confirmation_title) + .setNegativeButton(R.string.cancel, null) + .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + LocalAutofillRepository.getInstance + (SettingsActivity.this).clear(); + MyPreferences.getInstance(SettingsActivity.this) + .clearCredentials(); + dialog.dismiss(); + } + }) + .create(); + } + + private AlertDialog.Builder prepareCredentialsDialog() { + return new AlertDialog.Builder(SettingsActivity.this) + .setTitle(R.string.settings_auth_change_credentials_title) + .setNegativeButton(R.string.cancel, null); + } + + private AlertDialog buildCurrentCredentialsDialog() { + final EditText currentPasswordField = LayoutInflater + .from(SettingsActivity.this) + .inflate(R.layout.settings_authentication_dialog, null) + .findViewById(R.id.master_password_field); + return prepareCredentialsDialog() + .setMessage(R.string.settings_auth_enter_current_password) + .setView(currentPasswordField) + .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String password = currentPasswordField.getText().toString(); + if (MyPreferences.getInstance(SettingsActivity.this).getMasterPassword() + .equals(password)) { + buildNewCredentialsDialog().show(); + dialog.dismiss(); + } + } + }) + .create(); + } + + private AlertDialog buildNewCredentialsDialog() { + final EditText newPasswordField = LayoutInflater + .from(SettingsActivity.this) + .inflate(R.layout.settings_authentication_dialog, null) + .findViewById(R.id.master_password_field); + return prepareCredentialsDialog() + .setMessage(R.string.settings_auth_enter_new_password) + .setView(newPasswordField) + .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String password = newPasswordField.getText().toString(); + MyPreferences.getInstance(SettingsActivity.this).setMasterPassword(password); + dialog.dismiss(); + } + }) + .create(); + } + + private void setupSettingsSwitch(int containerId, int labelId, int switchId, boolean checked, + CompoundButton.OnCheckedChangeListener checkedChangeListener) { + ViewGroup container = (ViewGroup) findViewById(containerId); + String switchLabel = ((TextView) container.findViewById(labelId)).getText().toString(); + final Switch switchView = container.findViewById(switchId); + switchView.setContentDescription(switchLabel); + switchView.setChecked(checked); + container.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + switchView.performClick(); + } + }); + switchView.setOnCheckedChangeListener(checkedChangeListener); + } + + private void setupSettingsButton(int containerId, int labelId, int imageViewId, + final View.OnClickListener onClickListener) { + ViewGroup container = (ViewGroup) findViewById(containerId); + String buttonLabel = ((TextView) container.findViewById(labelId)).getText().toString(); + final ImageView imageView = container.findViewById(imageViewId); + imageView.setContentDescription(buttonLabel); + container.setOnClickListener(onClickListener); + } +} diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable-hdpi/tile.9.png b/prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable-hdpi/tile.9.png new file mode 100644 index 0000000000000000000000000000000000000000..135862883e26eddce2b19db021adf62e10357ad0 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0y~yVBlk5U=ZS9V_;y&j(Km$z`!6`;u=vBoS#-wo>-L1 z;Fyx1l&avFo0y&&l$w}QS$HzlhJk@0&C|s(q~cc6pa1{unavKIIKeTE;goUGRQAl2 zq$Hy>1;#(WzrWWB;1_0I$*`oI_3RR37LyqcbN|mTd7aQUVeLozbqPyn_8$0=v}Aqn zldP13V*V`*C#snR`kmdCz5WP$)t%^KWa44C{6H?Vv+L*@1_lNOPgg&ebxsLQ03X#y ARsaA1 literal 0 HcmV?d00001 diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable/ic_delete_forever_black_24dp.xml b/prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable/ic_delete_forever_black_24dp.xml new file mode 100644 index 00000000..4d2afb01 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable/ic_delete_forever_black_24dp.xml @@ -0,0 +1,20 @@ + + + + diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable/ic_person_black_24dp.xml b/prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable/ic_person_black_24dp.xml new file mode 100644 index 00000000..6534d9f0 --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/res/drawable/ic_person_black_24dp.xml @@ -0,0 +1,20 @@ + + + + diff --git a/prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/activity_main.xml b/prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000..26d0657d --- /dev/null +++ b/prebuilts/gradle/AutofillFramework/Application/src/main/res/layout/activity_main.xml @@ -0,0 +1,46 @@ + + + + +