Add a script to interactively manage FastPairTestDataCache in FastPairTestDataProviderService.
This script could help Eng team to test Mainline FastPair flow with
flexibility. You can modify the JSON file as you want and send/clear the
test data cache that return to the Nearby Mainline module for
onXXX calls (ex: onLoadFastPairAntispoofKeyDeviceMetadata).
Sample Usages:
1. Send FastPairAntispoofKeyDeviceMetadata for PixelBuds-A to FastPairTestDataCache
./fast_pair_data_provider_shell.sh -m=718c17 -a=../test_data/fastpair/pixelbuds-a_antispoofkey_devicemeta_json.txt
2. Send FastPairAccountDevicesMetadata for PixelBuds-A to FastPairTestDataCache
./fast_pair_data_provider_shell.sh -d=../test_data/fastpair/pixelbuds-a_account_devicemeta_json.txt
3. Send FastPairAntispoofKeyDeviceMetadata for Provider Simulator to FastPairTestDataCache
./fast_pair_data_provider_shell.sh -m=00000c -a=../test_data/fastpair/simulator_antispoofkey_devicemeta_json.txt
4. Send FastPairAccountDevicesMetadata for Provider Simulator to FastPairTestDataCache
./fast_pair_data_provider_shell.sh -d=../test_data/fastpair/simulator_account_devicemeta_json.txt
5. Clear FastPairTestDataCache
./fast_pair_data_provider_shell.sh -c
Test: Sample Usages commands in fast_pair_data_provider_shell.sh
Bug: 214015364
Ignore-AOSP-First: nearby_not_in_aosp_yet
Change-Id: Ia5d3383ce6d6db36a4a99d36ade0b5ce27a9fd86
diff --git a/nearby/tests/multidevices/host/test_data/fastpair/pixelbuds-a_account_devicemeta_json.txt b/nearby/tests/multidevices/host/test_data/fastpair/pixelbuds-a_account_devicemeta_json.txt
new file mode 100644
index 0000000..6be58df
--- /dev/null
+++ b/nearby/tests/multidevices/host/test_data/fastpair/pixelbuds-a_account_devicemeta_json.txt
@@ -0,0 +1,66 @@
+[
+ {
+ "account_key": "BPy5AaSyMfrFvMNgr6f7GA==",
+ "sha256_account_key_public_address": "jNGRz+Ni6ZuLd8hVF3lmGoJnF5byXBUyVi9CmnrF1so=",
+ "fast_pair_device_metadata": {
+ "image_url": "https:\/\/lh3.googleusercontent.com\/2PffmZiopo2AjT8sshX0Se3jV-91cp4yOCIay2bBvZqKoKGVy5B4uyzdHsde6UrUSGaoCqV-h4edd5ZljA4oSGc",
+ "intent_uri": "intent:#Intent;action=com.google.android.gms.nearby.discovery%3AACTION_MAGIC_PAIR;package=com.google.android.gms;component=com.google.android.gms\/.nearby.discovery.service.DiscoveryService;S.com.google.android.gms.nearby.discovery%3AEXTRA_COMPANION_APP=com.google.android.apps.wearables.maestro.companion;end",
+ "ble_tx_power": 0,
+ "trigger_distance": 0,
+ "device_type": 0,
+ "left_bud_url": "",
+ "right_bud_url": "",
+ "case_url": "",
+ "initial_notification_description": "Tap to pair. Earbuds will be tied to %s",
+ "initial_notification_description_no_account": "Tap to pair with this device",
+ "initial_pairing_description": "Pixel Buds A-Series will appear on devices linked with ericth.nearby.dogfood@gmail.com",
+ "connect_success_companion_app_installed": "Your device is ready to be set up",
+ "connect_success_companion_app_not_installed": "Download the device app on Google Play to see all available features",
+ "subsequent_pairing_description": "Connect %s to this phone",
+ "retroactive_pairing_description": "Save device to %s for faster pairing to your other devices",
+ "wait_launch_companion_app_description": "This will take a few moments",
+ "fail_connect_go_to_settings_description": "Try manually pairing to the device by going to Settings",
+ "confirm_pin_title": "",
+ "confirm_pin_description": "",
+ "sync_contacts_title": "",
+ "sync_contacts_description": "",
+ "sync_sms_title": "",
+ "sync_sms_description": "",
+ "assistant_setup_half_sheet": "Get hands-free help on the go from Google Assistant",
+ "assistant_setup_notification": "Tap to set up your Google Assistant",
+ "fast_pair_tv_connect_device_no_account_description": "Select connect to pair your %s with this device"
+ },
+ "fast_pair_discovery_item": {
+ "id": "",
+ "type": 6,
+ "mac_address": "",
+ "action_url": "intent:#Intent;action=com.google.android.gms.nearby.discovery%3AACTION_MAGIC_PAIR;package=com.google.android.gms;component=com.google.android.gms\/.nearby.discovery.service.DiscoveryService;S.com.google.android.gms.nearby.discovery%3AEXTRA_COMPANION_APP=com.google.android.apps.wearables.maestro.companion;end",
+ "device_name": "",
+ "title": "Pixel Buds A-Series",
+ "description": "Tap to pair with this device",
+ "display_url": "",
+ "last_observation_timestamp_millis": 0,
+ "first_observation_timestamp_millis": 0,
+ "state": 1,
+ "action_url_type": 2,
+ "rssi": 0,
+ "pending_app_install_timestamp_millis": 0,
+ "tx_power": 0,
+ "app_name": "",
+ "group_id": "",
+ "attachment_type": 0,
+ "package_name": "",
+ "feature_graphic_url": "",
+ "trigger_id": "",
+ "icon_png": "",
+ "icon_fife_url": "https:\/\/lh3.googleusercontent.com\/2PffmZiopo2AjT8sshX0Se3jV-91cp4yOCIay2bBvZqKoKGVy5B4uyzdHsde6UrUSGaoCqV-h4edd5ZljA4oSGc",
+ "debug_message": "",
+ "debug_category": 0,
+ "lost_millis": 0,
+ "last_user_experience": 0,
+ "ble_record_bytes": "",
+ "entity_id": "",
+ "authentication_public_key_secp256r1": "z+grhW8lWVA34JUQhXOxMrk1WqVy+VpEDd2K+01ZJvS6KdV0OUg7FRMzq+ITuOqKO\/2TIRKEAEfMKdyk2Ob1Vw=="
+ }
+ }
+]
\ No newline at end of file
diff --git a/nearby/tests/multidevices/host/test_data/fastpair/pixelbuds-a_antispoofkey_devicemeta_json.txt b/nearby/tests/multidevices/host/test_data/fastpair/pixelbuds-a_antispoofkey_devicemeta_json.txt
new file mode 100644
index 0000000..c03d000
--- /dev/null
+++ b/nearby/tests/multidevices/host/test_data/fastpair/pixelbuds-a_antispoofkey_devicemeta_json.txt
@@ -0,0 +1,38 @@
+{
+ "anti_spoofing_public_key_str": "z+grhW8lWVA34JUQhXOxMrk1WqVy+VpEDd2K+01ZJvS6KdV0OUg7FRMzq+ITuOqKO\/2TIRKEAEfMKdyk2Ob1Vw==",
+ "fast_pair_device_metadata": {
+ "image_url": "https:\/\/lh3.googleusercontent.com\/2PffmZiopo2AjT8sshX0Se3jV-91cp4yOCIay2bBvZqKoKGVy5B4uyzdHsde6UrUSGaoCqV-h4edd5ZljA4oSGc",
+ "intent_uri": "intent:#Intent;action=com.google.android.gms.nearby.discovery%3AACTION_MAGIC_PAIR;package=com.google.android.gms;component=com.google.android.gms\/.nearby.discovery.service.DiscoveryService;S.com.google.android.gms.nearby.discovery%3AEXTRA_COMPANION_APP=com.google.android.apps.wearables.maestro.companion;end",
+ "ble_tx_power": -11,
+ "trigger_distance": 0.6000000238418579,
+ "device_type": 7,
+ "name": "Pixel Buds A-Series",
+ "left_bud_url": "https:\/\/lh3.googleusercontent.com\/O8SVJ5E7CXUkpkym7ibZbp6wypuO7HaTFcslT_FjmEzJX4KHoIY_kzLTdK2kwJXiDBgg8cC__sG-JJ5aVnQtFjQ",
+ "right_bud_url": "https:\/\/lh3.googleusercontent.com\/X_FsRmEKH_fgKzvopyrlyWJAdczRel42Tih7p9-e-U48gBTaggGVQx70K27TzlqIaqYVuaNpTnGoUsKIgiy4WA",
+ "case_url": "https:\/\/lh3.googleusercontent.com\/mNZ7CGplQSpZhoY79jXDQU4B65eY2f0SndnYZLk1PSm8zKTYeRU7REmrLL_pptD6HpVI2F_oQ6xhhtZKOvB8EQ",
+ "locale": "en-US",
+ "initial_notification_description": "Tap to pair. Earbuds will be tied to %s",
+ "initial_notification_description_no_account": "Tap to pair with this device",
+ "open_companion_app_description": "Tap to finish setup",
+ "update_companion_app_description": "Tap to update device settings and finish setup",
+ "download_companion_app_description": "Tap to download device app on Google Play and see all features",
+ "unable_to_connect_title": "Unable to connect",
+ "unable_to_connect_description": "Try manually pairing to the device",
+ "initial_pairing_description": "%s will appear on devices linked with %s",
+ "connect_success_companion_app_installed": "Your device is ready to be set up",
+ "connect_success_companion_app_not_installed": "Download the device app on Google Play to see all available features",
+ "subsequent_pairing_description": "Connect %s to this phone",
+ "retroactive_pairing_description": "Save device to %s for faster pairing to your other devices",
+ "wait_launch_companion_app_description": "This will take a few moments",
+ "fail_connect_go_to_settings_description": "Try manually pairing to the device by going to Settings",
+ "confirm_pin_title": "",
+ "confirm_pin_description": "",
+ "sync_contacts_title": "",
+ "sync_contacts_description": "",
+ "sync_sms_title": "",
+ "sync_sms_description": "",
+ "assistant_setup_half_sheet": "Get hands-free help on the go from Google Assistant",
+ "assistant_setup_notification": "Tap to set up your Google Assistant",
+ "fast_pair_tv_connect_device_no_account_description": "Select connect to pair your %s with this device"
+ }
+}
\ No newline at end of file
diff --git a/nearby/tests/multidevices/host/test_data/fastpair/simulator_account_devicemeta_json.txt b/nearby/tests/multidevices/host/test_data/fastpair/simulator_account_devicemeta_json.txt
new file mode 100644
index 0000000..392c443
--- /dev/null
+++ b/nearby/tests/multidevices/host/test_data/fastpair/simulator_account_devicemeta_json.txt
@@ -0,0 +1,66 @@
+[
+ {
+ "account_key": "BPy5AaSyMfrFvMNgr6f7GA==",
+ "sha256_account_key_public_address": "jNGRz+Ni6ZuLd8hVF3lmGoJnF5byXBUyVi9CmnrF1so=",
+ "fast_pair_device_metadata": {
+ "assistant_setup_half_sheet": "Get hands-free help on the go from Google Assistant",
+ "assistant_setup_notification": "Tap to set up your Google Assistant",
+ "ble_tx_power": 0,
+ "case_url": "",
+ "confirm_pin_description": "",
+ "confirm_pin_title": "",
+ "connect_success_companion_app_installed": "Your device is ready to be set up",
+ "connect_success_companion_app_not_installed": "Download the device app on Google Play to see all available features",
+ "device_type": 0,
+ "fail_connect_go_to_settings_description": "Try manually pairing to the device by going to Settings",
+ "fast_pair_tv_connect_device_no_account_description": "Select connect to pair your %s with this device",
+ "image_url": "https://lh3.googleusercontent.com/2PffmZiopo2AjT8sshX0Se3jV-91cp4yOCIay2bBvZqKoKGVy5B4uyzdHsde6UrUSGaoCqV-h4edd5ZljA4oSGc",
+ "initial_notification_description": "Tap to pair. Earbuds will be tied to %s",
+ "initial_notification_description_no_account": "Tap to pair with this device",
+ "initial_pairing_description": "Pixel Buds A-Series will appear on devices linked with ericth.nearby.dogfood@gmail.com",
+ "intent_uri": "intent:#Intent;action=com.google.android.gms.nearby.discovery%3AACTION_MAGIC_PAIR;package=com.google.android.gms;component=com.google.android.gms/.nearby.discovery.service.DiscoveryService;S.com.google.android.gms.nearby.discovery%3AEXTRA_COMPANION_APP=com.google.android.apps.wearables.maestro.companion;end",
+ "left_bud_url": "",
+ "retroactive_pairing_description": "Save device to %s for faster pairing to your other devices",
+ "right_bud_url": "",
+ "subsequent_pairing_description": "Connect %s to this phone",
+ "sync_contacts_description": "",
+ "sync_contacts_title": "",
+ "sync_sms_description": "",
+ "sync_sms_title": "",
+ "trigger_distance": 0,
+ "wait_launch_companion_app_description": "This will take a few moments"
+ },
+ "fast_pair_discovery_item": {
+ "action_url": "intent:#Intent;action=com.google.android.gms.nearby.discovery%3AACTION_MAGIC_PAIR;package=com.google.android.gms;component=com.google.android.gms/.nearby.discovery.service.DiscoveryService;S.com.google.android.gms.nearby.discovery%3AEXTRA_COMPANION_APP=com.google.android.apps.wearables.maestro.companion;end",
+ "action_url_type": 2,
+ "app_name": "",
+ "attachment_type": 0,
+ "authentication_public_key_secp256r1": "z+grhW8lWVA34JUQhXOxMrk1WqVy+VpEDd2K+01ZJvS6KdV0OUg7FRMzq+ITuOqKO/2TIRKEAEfMKdyk2Ob1Vw==",
+ "ble_record_bytes": "",
+ "debug_category": 0,
+ "debug_message": "",
+ "description": "Tap to pair with this device",
+ "device_name": "",
+ "display_url": "",
+ "entity_id": "",
+ "feature_graphic_url": "",
+ "first_observation_timestamp_millis": 0,
+ "group_id": "",
+ "icon_fife_url": "https://lh3.googleusercontent.com/2PffmZiopo2AjT8sshX0Se3jV-91cp4yOCIay2bBvZqKoKGVy5B4uyzdHsde6UrUSGaoCqV-h4edd5ZljA4oSGc",
+ "icon_png": "",
+ "id": "",
+ "last_observation_timestamp_millis": 0,
+ "last_user_experience": 0,
+ "lost_millis": 0,
+ "mac_address": "",
+ "package_name": "",
+ "pending_app_install_timestamp_millis": 0,
+ "rssi": 0,
+ "state": 1,
+ "title": "Pixel Buds A-Series",
+ "trigger_id": "",
+ "tx_power": 0,
+ "type": 6
+ }
+ }
+]
\ No newline at end of file
diff --git a/nearby/tests/multidevices/host/tool/fast_pair_data_provider_shell.sh b/nearby/tests/multidevices/host/tool/fast_pair_data_provider_shell.sh
new file mode 100755
index 0000000..a74c1a9
--- /dev/null
+++ b/nearby/tests/multidevices/host/tool/fast_pair_data_provider_shell.sh
@@ -0,0 +1,107 @@
+#!/bin/bash
+
+#
+# Copyright (C) 2022 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.
+
+# A script to interactively manage FastPairTestDataCache of FastPairTestDataProviderService.
+#
+# FastPairTestDataProviderService (../../clients/test_service/fastpair_seeker_data_provider/) is a
+# run-Time configurable FastPairDataProviderService. It has a FastPairTestDataManager to receive
+# Intent broadcast to add/clear the FastPairTestDataCache. This cache provides the data to return to
+# the Nearby Mainline module for onXXX calls (ex: onLoadFastPairAntispoofKeyDeviceMetadata).
+#
+# To use this tool, make sure you:
+# 1. Flash the ROM your built to the device
+# 2. Build and install NearbyFastPairSeekerDataProvider to the device
+# m NearbyFastPairSeekerDataProvider
+# adb install -r -g ${ANDROID_PRODUCT_OUT}/system/app/NearbyFastPairSeekerDataProvider/NearbyFastPairSeekerDataProvider.apk
+# 3. Check FastPairService can connect to the FastPairTestDataProviderService.
+# adb logcat ServiceMonitor:* *:S
+# (ex: ServiceMonitor: [FAST_PAIR_DATA_PROVIDER] connected to {
+# android.nearby.fastpair.seeker.dataprovider/android.nearby.fastpair.seeker.dataprovider.FastPairTestDataProviderService})
+#
+# Sample Usages:
+# 1. Send FastPairAntispoofKeyDeviceMetadata for PixelBuds-A to FastPairTestDataCache
+# ./fast_pair_data_provider_shell.sh -m=718c17 -a=../test_data/fastpair/pixelbuds-a_antispoofkey_devicemeta_json.txt
+# 2. Send FastPairAccountDevicesMetadata for PixelBuds-A to FastPairTestDataCache
+# ./fast_pair_data_provider_shell.sh -d=../test_data/fastpair/pixelbuds-a_account_devicemeta_json.txt
+# 3. Send FastPairAntispoofKeyDeviceMetadata for Provider Simulator to FastPairTestDataCache
+# ./fast_pair_data_provider_shell.sh -m=00000c -a=../test_data/fastpair/simulator_antispoofkey_devicemeta_json.txt
+# 4. Send FastPairAccountDevicesMetadata for Provider Simulator to FastPairTestDataCache
+# ./fast_pair_data_provider_shell.sh -d=../test_data/fastpair/simulator_account_devicemeta_json.txt
+# 5. Clear FastPairTestDataCache
+# ./fast_pair_data_provider_shell.sh -c
+#
+# Check logcat:
+# adb logcat FastPairTestDataManager:* FastPairTestDataProviderService:* *:S
+
+for i in "$@"; do
+ case $i in
+ -a=*|--ask=*)
+ ASK_FILE="${i#*=}"
+ shift # past argument=value
+ ;;
+ -m=*|--model=*)
+ MODEL_ID="${i#*=}"
+ shift # past argument=value
+ ;;
+ -d=*|--adm=*)
+ ADM_FILE="${i#*=}"
+ shift # past argument=value
+ ;;
+ -c)
+ CLEAR="true"
+ shift # past argument
+ ;;
+ -*|--*)
+ echo "Unknown option $i"
+ exit 1
+ ;;
+ *)
+ ;;
+ esac
+done
+
+readonly ACTION_BASE="android.nearby.fastpair.seeker.action"
+readonly ACTION_SEND_ANTISPOOF_KEY_DEVICE_METADATA="$ACTION_BASE.ACTION_SEND_ANTISPOOF_KEY_DEVICE_METADATA"
+readonly ACTION_SEND_ACCOUNT_KEY_DEVICE_METADATA="$ACTION_BASE.ACCOUNT_KEY_DEVICE_METADATA"
+readonly ACTION_RESET_TEST_DATA_CACHE="$ACTION_BASE.RESET"
+readonly DATA_JSON_STRING_KEY="json"
+readonly DATA_MODEL_ID_STRING_KEY="modelId"
+
+if [[ -n "${ASK_FILE}" ]] && [[ -n "${MODEL_ID}" ]]; then
+ echo "Sending AntispoofKeyDeviceMetadata for model ${MODEL_ID} to the FastPairTestDataCache..."
+ ASK_JSON_TEXT=$(tr -d '\n' < "$ASK_FILE")
+ CMD="am broadcast -a $ACTION_SEND_ANTISPOOF_KEY_DEVICE_METADATA "
+ CMD+="-e $DATA_MODEL_ID_STRING_KEY '$MODEL_ID' "
+ CMD+="-e $DATA_JSON_STRING_KEY '\"'$ASK_JSON_TEXT'\"'"
+ CMD="adb shell \"$CMD\""
+ echo "$CMD" && eval "$CMD"
+fi
+
+if [ -n "${ADM_FILE}" ]; then
+ echo "Sending AccountKeyDeviceMetadata to the FastPairTestDataCache..."
+ ADM_JSON_TEXT=$(tr -d '\n' < "$ADM_FILE")
+ CMD="am broadcast -a $ACTION_SEND_ACCOUNT_KEY_DEVICE_METADATA "
+ CMD+="-e $DATA_JSON_STRING_KEY '\"'$ADM_JSON_TEXT'\"'"
+ CMD="adb shell \"$CMD\""
+ echo "$CMD" && eval "$CMD"
+fi
+
+if [ -n "${CLEAR}" ]; then
+ echo "Cleaning FastPairTestDataCache..."
+ CMD="adb shell am broadcast -a $ACTION_RESET_TEST_DATA_CACHE"
+ echo "$CMD" && eval "$CMD"
+fi