<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 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.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="app_name">CTS Verifier</string>

    <string name="title_version">CTS Verifier %1$s</string>

    <string name="pass_button_text">Pass</string>
    <string name="info_button_text">Info</string>
    <string name="fail_button_text">Fail</string>
    <string name="next_button_text">Next</string>
    <string name="go_button_text">Go</string>

    <string name="retry_button_text">Retry</string>
    <string name="finish_button_text">Finish</string>
    <string name="fail_and_next_button_text">Fail and Next</string>

    <!-- Strings for TestListActivity -->
    <string name="test_category_audio">Audio</string>
    <string name="test_category_camera">Camera</string>
    <string name="test_category_car">Car</string>
    <string name="test_category_device_admin">Device Administration</string>
    <string name="test_category_hardware">Hardware</string>
    <string name="test_category_networking">Networking</string>
    <string name="test_category_sensors">Sensors</string>
    <string name="test_category_location">Location</string>
    <string name="test_category_security">Security</string>
    <string name="test_category_streaming">Streaming</string>
    <string name="test_category_features">Features</string>
    <string name="test_category_deskclock">Clock</string>
    <string name="test_category_jobscheduler">Job Scheduler</string>
    <string name="test_category_telecom">Telecom</string>
    <string name="test_category_telephony">Telephony</string>
    <string name="test_category_tv">TV</string>
    <string name="test_category_instant_apps">Instant Apps</string>
    <string name="test_category_other">Other</string>
    <string name="clear">Clear</string>
    <string name="test_results_clear_title">Remove all test results?</string>
    <string name="test_results_clear_yes">Yes</string>
    <string name="test_results_clear_cancel">Cancel</string>
    <string name="test_results_cleared">Test results cleared.</string>
    <string name="view">View</string>
    <string name="test_results_error">Couldn\'t create test results report. Try running the
        following command if you haven\'t yet.\n\"adb shell appops set com.android.cts.verifier
        android:read_device_identifiers allow\" </string>
    <string name="runtime_permissions_error">Please grant runtime permissions, otherwise, tests might fail.</string>
    <string name="export">Export</string>
    <string name="no_storage">Cannot save report to external storage, see log for details.</string>
    <string name="report_saved">Report saved to: %s</string>

    <!-- Strings for IntentDrivenTestActivity -->
    <string name="intent_not_resolved">Intent Not Resolved</string>
    <string name="intent_not_resolved_info">The following intent could not be resolved: %1$s</string>

    <!-- Strings for ReportViewerActivity -->
    <string name="report_viewer">Report Viewer</string>

    <string name="result_success">Test passed!</string>
    <string name="result_failure">Test failed!</string>

    <!-- String shared between BackupTestActivity and BackupAccessibilityTestActivity -->
    <string name="bu_loading">Loading...</string>
    <string name="bu_generate_error">Error occurred while generating test data...</string>
    <string name="bu_settings">Settings</string>

    <!-- Strings for Device Administration tests -->
    <string name="da_policy_serialization_test">Policy Serialization Test</string>
    <string name="da_policy_serialization_info">This test checks that a device policy is properly
        saved and loaded across reboots.\n\nPress the \"Generate Policy\" button to create
        a random policy. Then press the \"Apply Policy\" button to apply the policy. Reboot the
        device and verify that all rows in the policy list are green. Red items indicate policy
        settings that were not loaded properly.
    </string>
    <string name="da_uninstall_test">Device Admin Uninstall Test</string>
    <string name="da_uninstall_test_info">This test checks that an active device administrator
        can be easily uninstalled from the application details screen in a way similar to other
        apps. This test requires CtsEmptyDeviceAdmin.apk to be installed on the device.
    </string>
    <string name="da_tapjacking_test">Device Admin Tapjacking Test</string>
    <string name="da_tapjacking_test_info">This test checks that an activity cannot tapjack the
        user by obscuring the device admin details while prompting the user to activate the admin.
    </string>
    <string name="car_dock_test">Car Dock Test</string>
    <string name="car_dock_test_desc">This test ensures that car mode opens the app associated with
        car dock when going into car mode.\n\n
        Click on "Enable Car Mode" to start the test. Clicking on the button will either bring up a
        disambiguation dialog asking which app to open or immediately open the CAR_DOCK application.
        Select the "CTS Verifier" app and then "Always" if the dialog pops up.
        This will open the CAR_DOCK application.\n\n
        In the CAR_DOCK application, press the home button, which will enable the pass button if the
        framework correctly tries to open the CAR_DOCK app again.</string>
    <string name="car_mode_enable">Enable Car Mode</string>
    <string name="car_dock_activity_text">Press the Home button</string>
    <string name="da_no_policy">1. Press the \"Generate Policy\" to create a random device
        policy\n\n2. Press \"Apply Policy\" to put the policy into effect.\n\n3. Reboot your
        device and return to this test in the CTS Verifier.
    </string>
    <string name="da_generate_policy">Generate Policy</string>
    <string name="da_apply_policy">Apply Policy</string>
    <string name="da_random_policy">Random policy generated.</string>
    <string name="da_policy_reboot">Reboot your device and return to this CTS Verifier test.</string>
    <string name="da_password_quality">Password Quality</string>
    <string name="da_password_quality_alphabetic">Alphabetic</string>
    <string name="da_password_quality_alphanumeric">Alphanumeric</string>
    <string name="da_password_quality_numeric">Numeric</string>
    <string name="da_password_quality_something">Something</string>
    <string name="da_password_minimum_length">Minimum Password Length</string>
    <string name="da_maximum_failed_passwords_for_wipe">Maximum Failed Passwords for Wipe</string>
    <string name="da_maximum_time_to_lock">Maximum Time to Lock</string>
    <string name="da_policy_info">Expected value: %1$s\nActual value: %2$s</string>

    <string name="da_screen_lock_test">Screen Lock Test</string>
    <string name="da_screen_lock_info">This test checks that the DevicePolicyManager\'s lockNow
        method immediately locks the screen. It should lock the screen immediately despite any
        settings that may specify a timeout.\n\nClick the \"Force Lock\" button to lock the screen.
        Your screen should be locked and require the password to be entered.
    </string>
    <string name="da_force_lock">Force Lock</string>
    <string name="da_lock_success">It appears the screen was locked successfully!</string>
    <string name="da_lock_error">It does not look like the screen was locked...</string>

    <string name="da_install_admin_instructions">
        Please install the \'Test Device Admin\' app (packaged as CtsEmptyDeviceAdmin.apk) on the device.
    </string>
    <string name="da_admin_installed_status_text">\'Test Device Admin\' installed on the device.</string>
    <string name="da_enable_admin_instructions">Add \'Test Device Admin\' as an active administrator on the device.
        Tap the button below to review the device admin details and activate the administrator.
    </string>
    <string name="da_enable_admin_button_text">Enable admin</string>
    <string name="da_uninstall_admin_instructions">Attempt to uninstall the app from the application details page of the \'Test Device Admin\' app.
        You should see another screen showing the device admin details before you can uninstall the app from the device.
        Wait till the app is uninstalled before returning to this page.
    </string>
    <string name="da_uninstall_admin_button_text">Launch settings</string>

    <string name="da_tapjacking_overlay_app_description">This activity attempts to tapjack the activity below.\n
        Any security sensitive controls below should not respond to taps as long as this activity is visible.</string>
    <string name="da_tapjacking_instructions">
        1. Launch the device admin add screen by pressing the button below.\n
        2. Wait for an overlaying transparent activity to show up obscuring the device admin details window.\n
        3. The button to activate the admin should be disabled and should not register any taps.\n
        4. Press \'back\' to exit the overlaying transparent activity.\n
        5. Press \'back\' to exit the device admin details and return to this screen.\n
        Pass the test if the device admin could not be activated while the details
        window was being obscured.
    </string>
    <string name="da_tapjacking_button_text">Enable device admin</string>

    <!-- Strings for RecentTaskRemovalTestActivity -->
    <string name="remove_from_recents_test">Recent Task Removal Test</string>
    <string name="remove_from_recents_test_info">
        This test verifies that an app whose task is removed from recents is not also force-stopped
        without explicit user consent. This test requires CtsForceStopHelper.apk to be installed.
    </string>
    <string name="fs_test_app_install_instructions">Please install the \'Force stop helper app\' on the device.</string>
    <string name="fs_test_app_installed_text">\'Force stop helper app\' installed on device. Proceed to the following steps.</string>
    <string name="fs_test_app_launch_instructions">
        Tap the button to launch the helper activity. Then return to this screen.
    </string>
    <string name="fs_launch_test_app_button_text">Launch test activity</string>
    <string name="fs_test_app_recents_instructions">
        Open recents and remove the task of the activity started in the previous step and return to this screen.
        Deny any dialog that is shown asking for permission to force-stop or kill the app.
    </string>
    <string name="fs_force_stop_verification_pending">Verifying... Please wait.</string>

    <!-- Strings for BiometricTest -->
    <string name="biometric_test">Biometric Test</string>
    <string name="biometric_test_info">
        This test ensures that biometrics can be authenticated when templates are enrolled.
    </string>
    <string name="biometric_enroll">Enroll</string>
    <string name="biometric_start_test1">Start Test 1</string>
    <string name="biometric_start_test2">Start Test 2</string>
    <string name="biometric_start_test3">Start Test 3</string>
    <string name="biometric_start_test4">Start Test 4</string>
    <string name="biometric_start_test5">Start Test 5</string>
    <string name="biometric_test_strings_title">Instructions</string>
    <string name="biometric_test_strings_instructions">For the next test, please write down the numbers shown in the title, subtitle, description, and negative button fields. After authenticating, please enter the strings in the appropriate box.</string>
    <string name="biometric_test_strings_verify_title">Please enter the numbers you recorded</string>

    <!-- Strings for lock bound keys test -->
    <string name="sec_lock_bound_key_test">Lock Bound Keys Test</string>
    <string name="sec_lock_bound_key_test_info">
        This test ensures that Keystore cryptographic keys that are bound to lock screen authentication
        are unusable without a recent enough authentication. You need to set up a screen lock in order to
        complete this test. If available, this test should be run by using fingerprint authentication
        as well as PIN/pattern/password authentication.
    </string>

    <string name="sec_fingerprint_bound_key_test">Fingerprint Bound Keys Test</string>
    <string name="sec_fingerprint_bound_key_test_info">
        This test ensures that Keystore cryptographic keys that are bound to fingerprint authentication
        are unusable without an authentication. You need to set up a fingerprint order to
        complete this test.
    </string>
    <string name="sec_fp_dialog_message">Authenticate now with fingerprint</string>
    <string name="sec_fp_auth_failed">Authentication failed</string>
    <string name="sec_start_test">Start Test</string>

    <string name="sec_biometric_prompt_bound_key_test">Biometric Prompt Bound Keys Test</string>
    <string name="sec_biometric_prompt_bound_key_test_info">
        This test ensures that Keystore cryptographic keys that are bound to biometric authentication
        are unusable without an authentication.
    </string>

    <!-- Strings for BluetoothActivity -->
    <string name="bluetooth_test">Bluetooth Test</string>
    <string name="bluetooth_test_info">
        The Bluetooth Control tests check whether or not the device
        can disable and enable Bluetooth properly.
        \n\nThe Bluetooth tests require two devices, and Bluetooth data is exchanged between them.
        \nThere are two types of connections: Insecure and Secure. There are two types of roles: Server and Client. You must pass all connection and role combinations.
        \nThis is a list of the tests:
        \nThis Device x Other Device
        \n\n\"Bluetooth LE Insecure Client Test\" x \"Bluetooth LE Insecure Server Test\"
        \n\n\"Bluetooth LE Insecure Server Test\" x \"Bluetooth LE Insecure Client Test\"
        \n\n\"Bluetooth LE Secure Client Test\" x \"Bluetooth LE Secure Server Test\"
        \n\n\"Bluetooth LE Secure Server Test\" x \"Bluetooth LE Secure Client Test\"
        \n\n\"Bluetooth LE CoC Insecure Server Test\" x \"Bluetooth LE CoC Insecure Client Test\"
        \n\n\"Bluetooth LE CoC Insecure Client Test\" x \"Bluetooth LE CoC Insecure Server Test\"
        \n\n\"Bluetooth LE CoC Secure Server Test\" x \"Bluetooth LE CoC Secure Client Test\"
        \n\n\"Bluetooth LE CoC Secure Client Test\" x \"Bluetooth LE CoC Secure Server Test\"
        \n\nThe Device Communication tests require two
        devices to pair and exchange messages. The two devices must be:
        \n\n1. a candidate device implementation running the software build to be tested
        \n\n2. a separate device implementation already known to be compatible
    </string>

    <string name="bt_control">Bluetooth Control</string>
    <string name="bt_device_communication">Device Communication</string>
    <string name="bt_le">Bluetooth LE</string>
    <string name="bt_hid">Bluetooth HID</string>
    <string name="bt_le_coc">Bluetooth LE CoC</string>

    <string name="bt_toggle_bluetooth">Toggle Bluetooth</string>
    <string name="bt_toggle_instructions">Disable and enable Bluetooth to successfully complete this test.</string>
    <string name="bt_enable_bluetooth">Enable Bluetooth</string>
    <string name="bt_disable_bluetooth">Disable Bluetooth</string>
    <string name="bt_disabling">Disabling Bluetooth...</string>
    <string name="bt_disabling_error">Could not disable Bluetooth...</string>

    <string name="ble_coc_insecure_client_test_list_name">Bluetooth LE CoC Insecure Client Test</string>
    <string name="ble_coc_insecure_client_test_list_info">
        The Bluetooth LE CoC test must be done simultaneously on two devices. This device is the client.
        All tests listed here must be done without pairing. Tap \"Bluetooth LE CoC Insecure Server Test\" on the other device.
        \n\nTap \"01 Bluetooth LE CoC Client Test\" on this device, then tap \"01 Bluetooth LE CoC Server Test\" on the other device.
        \nWhen the test is complete, move to the next item. You must complete all tests.
    </string>
    <string name="ble_coc_insecure_client_test_info">
        The Bluetooth LE CoC test must be done simultaneously on two devices. This device is the client.
        All tests listed here must be done without pairing.
    </string>
    <string name="ble_coc_insecure_server_test_list_name">Bluetooth LE CoC Insecure Server Test</string>
    <string name="ble_coc_insecure_server_test_list_info">
        This test is mostly automated, but requires some user interaction.
        Once the list items below have check marks, the test is complete.
        \n\nTap \"01 Bluetooth LE CoC Server Test\" on this device, then tap \"01 Bluetooth LE CoC Client Test\" on the other device.
        \nWhen the test is complete, move to the next item. You must complete all tests.
    </string>

    <string name="ble_coc_secure_client_test_list_name">Bluetooth LE CoC Secure Client Test</string>
    <string name="ble_coc_secure_client_test_list_info">
        The Bluetooth LE CoC test must be done simultaneously on two devices. This device is the client.
        All tests listed here must be done without pairing. Tap \"Bluetooth LE CoC Secure Server Test\" on the other device.
        \n\nTap \"01 Bluetooth LE CoC Client Test\" on this device, then tap \"01 Bluetooth LE CoC Server Test\" on the other device.
        \nWhen the test is complete, move to the next item. You must complete all tests.
    </string>
    <string name="ble_coc_secure_client_test_info">
        The Bluetooth LE CoC test must be done simultaneously on two devices. This device is the client.
        All tests listed here must be done without pairing.
    </string>
    <string name="ble_coc_secure_server_test_list_name">Bluetooth LE CoC Secure Server Test</string>
    <string name="ble_coc_secure_server_test_list_info">
        This test is mostly automated, but requires some user interaction.
        Once the list items below have check marks, the test is complete.
        \n\nTap \"01 Bluetooth LE CoC Server Test\" on this device, then tap \"01 Bluetooth LE CoC Client Test\" on the other device.
        \nWhen the test is complete, move to the next item. You must complete all tests.
    </string>

    <!-- BLE CoC client side strings -->
    <string name="ble_coc_client_test_name">01 Bluetooth LE CoC Client Test</string>
    <string name="ble_coc_client_le_connect">Bluetooth LE Client Connect</string>
    <string name="ble_coc_client_get_psm">Get peer PSM value</string>
    <string name="ble_coc_client_coc_connect">LE CoC client Connect</string>
    <string name="ble_coc_client_check_connection_type">Check connection type</string>
    <string name="ble_coc_client_send_data_8bytes">Send 8 bytes</string>
    <string name="ble_coc_client_receive_data_8bytes">Receive 8 bytes</string>
    <string name="ble_coc_client_data_exchange">Send and receive large data buffer</string>

    <!-- BLE CoC server side strings -->
    <string name="ble_coc_server_start_name">01 Bluetooth LE CoC Server Test</string>
    <string name="ble_coc_server_le_connect">Bluetooth LE Server Connect</string>
    <string name="ble_coc_server_create_listener">Create LE CoC listener</string>
    <string name="ble_coc_server_psm_read">Waiting on PSM to be read</string>
    <string name="ble_coc_server_connection">Waiting on LE CoC connection</string>
    <string name="ble_coc_server_check_connection_type">Check connection type</string>
    <string name="ble_coc_server_receive_data_8bytes">Waiting to receive 8 bytes</string>
    <string name="ble_coc_server_send_data_8bytes">Sending 8 bytes</string>
    <string name="ble_coc_server_data_exchange">Send and receive large data buffer</string>

    <string name="bt_connection_access_server">Connection Access Server</string>
    <string name="bt_connection_access_client">Connection Access Client</string>
    <string name="bt_connection_access_server_info">
        Start the CTS Verifier on another device, start the Bluetooth test, and choose
        \"Connection Access Client\" to setup the test.
        \n\nFirst, unpair the devices via Bluetooth settings. Then connect the devices together
        using the \"Make Discoverable\" and \"Pick Server\" buttons.
        \n\nA connection access request should appear on the server and enable the pass button.
    </string>
    <string name="bt_connection_access_client_info">
        Start the CTS Verifier on another device, start the Bluetooth test, and choose
        \"Connection Access Server\" to complete the test.
        \n\nMake the device acting as the server discoverable and connect to it via the
        \"Pick Server\" button. Check that the server displays the connection access request
        dialog. The client device does not need to do anything else.
    </string>
    <string name="bt_ca_dialog">Was the connection access request dialog shown?</string>
    <string name="bt_ca_tips">
        Tap the \"Bluetooth Settings\" button and check that both devices are not paired
        before running the test.
        \n\nUse the \"Make Discoverable\" and \"Pick Server\" buttons to connect the two Bluetooth
        devices together and start the test.
    </string>

    <!-- Strings for HidHost and HidDevice activity -->
    <string name="bt_hid_host_test_name">Bluetooth HID Host Test</string>
    <string name="bt_hid_host_test_info">
        Start the CTS Verifier on another device, start the Bluetooth test, and choose
        \"Bluetooth HID Device\" to complete the test.
        \n\nClick \"Register app\" and \"Make discoverable\" on another device first, and click
        \"Select device\". Choose the device from device picker. If the remote device is already
        paired, unpair it first from system Settings.
        \n\nAfter the remote device completes the \"Send_report\" command, text \"bluetooth\" should
        appear in the EditText. Mark the test as passed.
        \n\n If the device under test (DUT) does not have Bluetooth HID Host service or HID Device
        service enabled, mark the test as passed.
    </string>
    <string name="bt_hid_host">Bluetooth HID Host</string>
    <string name="bt_hid_host_select_device">Select device</string>

    <string name="bt_hid_device_test_name">Bluetooth HID Device Test</string>
    <string name="bt_hid_device_test_info">
        Start the CTS Verifier on another device, start the Bluetooth test, and choose
        \"Bluetooth HID Host\" to complete the test.
        \n\nFirst, click the \"Register app\" button, and click the \"Make discoverable\" button.
        \n\nThen, on another device, click the \"Select device" button, and choose this device.
        \n\nWait until the dialog shows up for pairing two devices.
        \n\nFinally, click the \"Test send_report\", \"Test reply_report\", \"Test report_error\".
        \n\nIf all the commands are successful, then click \"Unregister app\" and mark the test as
        passed.
        \n\n If the device under test (DUT) does not have Bluetooth HID Host service or HID Device
        service enabled, mark the test as passed.
    </string>

    <string name="bt_hid_device">Bluetooth HID Device</string>
    <string name="bt_hid_device_register">Register app</string>
    <string name="bt_hid_device_unregister">Unregister app</string>
    <string name="bt_hid_device_send_report">Test Send_report</string>
    <string name="bt_hid_device_reply_report">Test Reply_report</string>
    <string name="bt_hid_device_report_error">Test Report_error</string>


    <string name="bt_secure_server">Secure Server</string>
    <string name="bt_secure_server_instructions">Start the CTS Verifier on another device, start the Bluetooth test, and choose \"Secure Client\" to complete the test.</string>
    <string name="bt_insecure_server">Insecure Server</string>
    <string name="bt_insecure_server_instructions">Start the CTS Verifier on another device, start the Bluetooth test, and choose \"Insecure Client\" to complete the test.</string>
    <string name="bt_waiting">Waiting for client...</string>
    <string name="bt_listening">Listening...</string>
    <string name="bt_connecting">Connecting...</string>
    <string name="bt_connected">Connected</string>
    <string name="bt_received_messages">Received Messages</string>
    <string name="bt_sent_messages">Sent Messages</string>
    <string name="bt_no_messages">No messages</string>
    <string name="bt_make_discoverable">Make Discoverable</string>
    <string name="bt_pick_server">Pick Server</string>
    <string name="bt_insecure_pairing_error_title">Pairing dialog shown?</string>
    <string name="bt_insecure_pairing_error_message">Insecure connections should not show the pairing dialog!</string>
    <string name="bt_advertise_unsupported_title">Advertising is not supported</string>
    <string name="bt_advertise_unsupported_message">Advertising is not supported on this device.\nTest finishes.</string>
    <string name="bt_open_failed_title">BLE open failed</string>
    <string name="bt_open_failed_message">Cannot open BLE GattService.\nTest finishes.</string>
    <string name="bt_add_service_failed_title">Add service failed</string>
    <string name="bt_add_service_failed_message">Failed to add services.\nTest finishes.</string>

    <string name="bt_secure_client">Secure Client</string>
    <string name="bt_insecure_client">Insecure Client</string>

    <string name="bt_device_picker">Device Picker</string>
    <string name="bt_paired_devices">Paired Devices</string>
    <string name="bt_new_devices">New Devices</string>
    <string name="bt_no_devices">No devices</string>
    <string name="bt_scan">Scan for Devices</string>
    <string name="bt_scanning">Scanning...</string>
    <string name="bt_unpair">Device must be unpaired via Bluetooth settings before completing the test.\n\nUnpair the device in settings, make the server discoverable, and rescan to pick this device.</string>
    <string name="bt_settings">Bluetooth Settings</string>

    <!-- BLE client side strings -->
    <string name="ble_client_service_name">Bluetooth LE GATT Client Handler Service</string>
    <string name="ble_client_test_name">01 Bluetooth LE Client Test</string>
    <string name="ble_client_connect_name">Bluetooth LE Client Connect</string>
    <string name="ble_discover_service_name">Bluetooth LE Discover Service</string>
    <string name="ble_read_characteristic_name">Bluetooth LE Read Characteristic</string>
    <string name="ble_write_characteristic_name">Bluetooth LE Write Characteristic</string>
    <string name="ble_reliable_write_name">Bluetooth LE Reliable Write</string>
    <string name="ble_reliable_write_bad_resp_name">Bluetooth LE Reliable Write (receive bad response)</string>
    <string name="ble_notify_characteristic_name">Bluetooth LE Notify Characteristic</string>
    <string name="ble_read_descriptor_name">Bluetooth LE Read Descriptor</string>
    <string name="ble_write_descriptor_name">Bluetooth LE Write Descriptor</string>
    <string name="ble_read_rssi_name">Bluetooth LE Read RSSI</string>
    <string name="ble_client_disconnect_name">Bluetooth LE Client Disconnect</string>
    <string name="ble_insecure_client_test_info">
        The Bluetooth LE test must be done simultaneously on two devices. This device is the client.
        All tests listed here must be done without pairing.
    </string>
    <string name="ble_client_send_connect_info">Type in the Bluetooth address of the remote device to connect to, and verify that the devices are connected.</string>
    <string name="ble_discover_service_info">Verify that the service is discovered when you press the "Discover Service" button.</string>
    <string name="ble_read_write_info">Write values to and read values from the server to verify that the write and read functionalities are working correctly.</string>
    <string name="ble_reliable_write_info">A Reliable Write has two steps.\n\n1) Write to the device. This will trigger a callback from the server to verify that the value written was correct.\n2) Execute the write, if the value written is valid.</string>
    <string name="ble_notify_characteristic_info">Start accepting notifications, and verify that notifications are being reported correctly. The server should be notifying this device with the time every second.</string>
    <string name="ble_read_rssi_info">Press button to read the RSSI value. Verify that the RSSI changes as you move the two devices further apart or closer together.</string>
    <string name="ble_client_disconnect_info">Verify that the device is disconnected when you press the "Disconnect" button</string>
    <string name="ble_address">Bluetooth address</string>
    <string name="ble_connect">Connect</string>
    <string name="ble_discover_service">Discover service</string>
    <string name="ble_write_hint">Nothing to write yet</string>
    <string name="ble_read_hint">Nothing read yet</string>
    <string name="ble_write">Write</string>
    <string name="ble_read">Read</string>
    <string name="ble_begin_write">Begin write</string>
    <string name="ble_execute_write">Execute write</string>
    <string name="ble_begin_notification">Begin notification</string>
    <string name="ble_stop_notification">Stop notification</string>
    <string name="ble_waiting_notification">Waiting on notification</string>
    <string name="ble_read_rssi">Read RSSI</string>
    <string name="ble_disconnect">Disconnect</string>
    <string name="ble_test_text">TEST</string>
    <string name="ble_test_finished">Test finished</string>
    <string name="ble_test_next">Next</string>
    <string name="ble_test_running">Test Running</string>
    <string name="ble_test_running_message">This test requires a few minutes. Don\'t interrupt the test.</string>
    <string name="ble_mtu_23_name">Bluetooth LE Request MTU(23bytes)</string>
    <string name="ble_mtu_512_name">Bluetooth LE Request MTU(512bytes)</string>

    <!-- BLE server side strings -->
    <string name="ble_server_service_name">Bluetooth LE GATT Server Handler Service</string>
    <string name="ble_server_start_name">01 Bluetooth LE Server Test</string>
    <string name="ble_server_start_info">
        The Bluetooth LE test must be done simultaneously on two devices, a server device and a client device. This device is the server.
    </string>
    <string name="ble_server_receiving_connect">Waiting on connection from Bluetooth LE client.</string>
    <string name="ble_server_add_service">Adding service to Bluetooth LE server.</string>
    <string name="ble_server_write_characteristic">Waiting on write characteristic request</string>
    <string name="ble_server_read_characteristic">Waiting on read characteristic request</string>
    <string name="ble_server_write_descriptor">Waiting on write descriptor request</string>
    <string name="ble_server_read_descriptor">Waiting on read descriptor request</string>
    <string name="ble_server_reliable_write">Waiting on reliable write from client</string>
    <string name="ble_server_reliable_write_bad_resp">Waiting on reliable write from client (send bad response)</string>
    <string name="ble_server_receiving_disconnect">Waiting on disconnection from Bluetooth LE client</string>
    <string name="ble_connection_priority_server_name">02 Bluetooth LE Connection Priority Server Test</string>
    <string name="ble_connection_priority_server_info">Bluetooth LE Connection Priority Server receive message from message in 3 different priority.</string>
    <string name="ble_server_notify_characteristic">Waiting on notify characteristic request</string>
    <string name="ble_server_write_characteristic_without_permission">Waiting on write characteristic request without permission</string>
    <string name="ble_server_read_characteristic_without_permission">Waiting on read characteristic request without permission</string>
    <string name="ble_server_write_descriptor_without_permission">Waiting on write descriptor request without permission</string>
    <string name="ble_server_read_descriptor_without_permission"> Waiting on read descriptor request without permission</string>
    <string name="ble_server_write_characteristic_need_encrypted">Waiting on write encrypted characteristic request</string>
    <string name="ble_server_read_characteristic_need_encrypted">Waiting on read encryptedcharacteristic request</string>
    <string name="ble_server_write_descriptor_need_encrypted">Waiting on write encrypted descriptor request</string>
    <string name="ble_server_read_descriptor_need_encrypted"> Waiting on read encrypted descriptor request</string>
    <string name="ble_server_indicate_characteristic">Waiting on indicate characteristic request</string>
    <string name="ble_server_mtu_23bytes">Waiting on MTU request(23 bytes)</string>
    <string name="ble_server_mtu_512bytes">Waiting on MTU request(512 bytes)</string>
    <string name="ble_encrypted_server_name">03 Bluetooth LE Encrypted Server Test</string>
    <string name="ble_encrypted_server_info">Bluetooth LE Encrypted Server Waiting on read/write characteristic and descriptor request need encrypted.</string>
    <string name="ble_insecure_server_enctypted_info">Bluetooth LE Server is in operation.\nThis test does not change server state.\n\nIf Bluetooth pairing request was notified by system, you must cancel it.\n\nOnce the client tests are all successful, please change the state of the server-side to the "success".</string>
    <string name="ble_insecure_server_test_list_name">Bluetooth LE Insecure Server Test</string>
    <string name="ble_insecure_server_test_list_info">
        This test is mostly automated, but requires some user interaction.
        Once the list items below have check marks, the test is complete.
        \n\nTap \"01 Bluetooth LE Server Test\" on this device, then tap \"01 Bluetooth LE Client Test\" on the other device.
        \nWhen the test is complete, move to the next item. You must complete all tests.
    </string>
    <string name="ble_secure_server_test_list_name">Bluetooth LE Secure Server Test</string>
    <string name="ble_secure_server_test_list_info">
        This test is mostly automated, but requires some user interaction.
        You can pass this test once the list items below are checked.
        \n\nTap \"01 Bluetooth LE Server Test\" on this device, then tap \"01 Bluetooth LE Client Test \"on other device.
        \nTest completed, then test next item. You must be done all tests.
    </string>

    <!-- BLE advertiser side strings -->
    <string name="ble_advertiser_test_name">Bluetooth LE Advertiser Test</string>
    <string name="ble_advertiser_test_info">
        The Bluetooth LE Advertiser Test and Scanner Test is a paired test.
        \nTap \"Bluetooth LE Advertiser Test\" on this device. Once it is passed, tap \"Bluetooth LE Scanner Test\".
        \nTap \"Bluetooth LE Scanner Test\" on this device. Once it is passed, tap \"Bluetooth LE Advertiser Test\".
    </string>
    <string name="ble_advertiser_service_name">Bluetooth LE Advertiser Handler Service</string>
    <string name="ble_privacy_mac_name">Bluetooth LE Privacy Mac</string>
    <string name="ble_privacy_mac_info">Bluetooth LE Advertiser should advertise in non-repeating MAC address.</string>
    <string name="ble_advertiser_privacy_mac_instruction">Click start to start advertising, you can disconnect USB and lock the screen of advertiser. Counts and mac address will show on scanner. You may receive message that this device does not support Bluetooth LE advertising.</string>
    <string name="ble_power_level_name">Bluetooth LE Tx Power Level</string>
    <string name="ble_power_level_info">Bluetooth LE Advertiser advertises in 4 different power levels. Scanner should receive them in different strength of Rssi, cannot receive weak signals beyond several feet.</string>
    <string name="ble_advertiser_power_level_instruction">
        Click start to start multi-advertising. Data packets are advertised in 4 different power levels.
        You may receive a message that this device does not support multi-advertising.
        If the advertiser does not advertise in 4 power levels, and you do not receive an error message,
        you may not have stopped advertising in the previous test, or this device may not support 4 advertisers at the same time.
        Try rebooting the device and running the test again to free those advertisers in use.
    </string>
    <string name="ble_advertiser_scan_filter_name">Bluetooth LE Hardware Scan Filter</string>
    <string name="ble_advertiser_scan_filter_info">Bluetooth LE Advertiser advertises with 2 different data separately. One can wake up the scanner, the other cannot. This test cares about behavior on scanner only.</string>
    <string name="ble_advertiser_scannable">Scannable advertising</string>
    <string name="ble_advertiser_scannable_instruction">Start scannable advertising, expect scanner consume more power on Monsoon monitor, or see log of GattService from scanner logcat.</string>
    <string name="ble_advertiser_unscannable">Unscannble advertising</string>
    <string name="ble_advertiser_unscannable_instruction">Start unscannable advertising, expect scanner stay calm on Monsoon monitor, no log of GattService from scanner logcat.</string>
    <string name="ble_advertiser_start">Start</string>
    <string name="ble_advertiser_stop">Stop</string>

    <!-- BLE scanner side strings -->
    <string name="ble_scanner_test_name">Bluetooth LE Scanner Test</string>
    <string name="ble_scanner_service_name">Bluetooth LE Scanner Handler Service</string>
    <string name="ble_scanner_test_info">The Bluetooth LE test must be done simultaneously on two devices, an advertiser and a scanner. This device is the scanner.</string>
    <string name="ble_scanner_privacy_mac">Hold for 15 min to see if receive a different MAC address from advertiser.</string>
    <string name="ble_scanner_privacy_mac_instruction">Mac address, counts are shown on screen. It should continuously receive data packet from advertiser. Every 15 min, a new mac address should show up, which prevents mac address disclosure.</string>
    <string name="ble_ultra_low">Ultra low</string>
    <string name="ble_low">Low</string>
    <string name="ble_medium">Medium</string>
    <string name="ble_high">High</string>
    <string name="ble_scanner_power_level_instruction">Count: Ultra low &lt; low &lt; medium &lt; high\nRssi: Ultra low &lt; low &lt; medium &lt; high\nDistance to see count freezing: Ultra low &lt; low &lt; medium &lt; high\nA common error is ultra low, low and medium behave similarly, with similar rssi, freeze at similar distance.\n\n All power level receive a mac address.</string>
    <string name="ble_scanner_scan_filter_name">BLE Hardware Scan Filter</string>
    <string name="ble_scanner_scan_filter_info">Lock the screen of scanner, and connect to monsoon. It will not wake up when advertiser is advertising unscannable, and scanner is scanning with filter.</string>
    <string name="ble_scanner_scan_filter_instruction">Scan filter is to scan data with service UUID = 0x6666 only. If you scan without scan filter, data with service UUID = 0x5555 and 0x6666 will show up on screen.\nFor monsoon test:\n\tClick scan with filter, lock the screen, connect to monsoon. It will not wake up when advertiser is advertising unscannable data packets, but will show a peak in power usage when advertiser is advertising scannable data.\nFor logcat test:\n\tClick scan with filter, logcat the scanner. No data will be received by GattService when advertiser is advertising unscannable data.</string>
    <string name="ble_scan_with_filter">Scan with filter</string>
    <string name="ble_scan_without_filter">Scan without filter</string>
    <string name="ble_scan_start">Start scan</string>
    <string name="ble_scan_stop">Stop scan</string>

    <!-- BLE connection priority test strings -->
    <string name="ble_client_connection_priority">Testing connection priority switching </string>
    <string name="ble_server_connection_priority_result_passed">All test passed</string>
    <string name="ble_server_connection_priority_result_failed">Test failed.</string>
    <string name="ble_server_connection_priority_result_intervals">
        Transfer interval time (msec):\nHIGH=%1$d\nBALANCED=%2$d\nLOW=%3$d\n\nRequirements:\n HIGH &lt;= BALANCED &lt;= LOW
    </string>

    <!-- BLE Test Name -->
    <string name="ble_secure_client_test_name">Bluetooth LE Secure Client Test</string>
    <string name="ble_insecure_client_test_name">Bluetooth LE Insecure Client Test</string>
    <string name="ble_secure_server_test_name">Bluetooth LE Secure Server Test</string>
    <string name="ble_insecure_server_test_name">Bluetooth LE Insecure Server Test</string>

    <string name="ble_coc_secure_client_test_name">Bluetooth LE CoC Secure Client Test</string>
    <string name="ble_coc_insecure_client_test_name">Bluetooth LE CoC Insecure Client Test</string>
    <string name="ble_coc_secure_server_test_name">Bluetooth LE CoC Secure Server Test</string>
    <string name="ble_coc_insecure_server_test_name">Bluetooth LE CoC Insecure Server Test</string>

    <string name="ble_read_characteristic_nopermission_name">Bluetooth LE Read Characteristic Without Perrmission</string>
    <string name="ble_write_characteristic_nopermission_name">Bluetooth LE Write Characteristic Without Permission</string>
    <string name="ble_read_descriptor_nopermission_name">Bluetooth LE Read Descriptor Without Perrmission</string>
    <string name="ble_write_descriptor_nopermission_name">Bluetooth LE Write Descriptor Without Permission</string>
    <string name="ble_connection_priority_client_name">02 Bluetooth LE Connection Priority Client Test</string>
    <string name="ble_connection_priority_client_info">Bluetooth LE Connection Priority Client send message in 3 different priority.</string>
    <string name="ble_read_authenticated_characteristic_name">Bluetooth LE Read Encrypted Characteristic</string>
    <string name="ble_write_authenticated_characteristic_name">Bluetooth LE Write Encrypted Characteristic</string>
    <string name="ble_read_authenticated_descriptor_name">Bluetooth LE Read Encrypted Descriptor</string>
    <string name="ble_write_authenticated_descriptor_name">Bluetooth LE Write Encrypted Descriptor</string>
    <string name="ble_connection_priority_client_description">Client Switching Connection Priority</string>
    <string name="ble_indicate_characteristic_name">Bluetooth LE Indicate Characteristic</string>
    <string name="ble_encrypted_client_name">03 Bluetooth LE Encrypted Client Test</string>
    <string name="ble_encrypted_client_info">Bluetooth LE Encrypted Client read/write on characteristic and descriptor need encrypted.</string>
    <string name="ble_insecure_client_test_list_name">Bluetooth LE Insecure Client Test</string>
    <string name="ble_insecure_client_test_list_info">
        The Bluetooth LE test must be done simultaneously on two devices. This device is the client.
        All tests listed here must be done without pairing. Tap \"Bluetooth LE Insecure Server Test\" on the other device.
        \n\nTap \"01 Bluetooth LE Client Test\" on this device, then tap \"01 Bluetooth LE Server Test\" on the other device.
        \nWhen the test is complete, move to the next item. You must complete all tests.
    </string>
    <string name="ble_secure_client_test_list_name">Bluetooth LE Secure Client Test</string>
    <string name="ble_secure_client_test_list_info">
        The Bluetooth LE test must be done simultaneously on two devices.
        This device is the client. All tests listed here must be done with pairing.
        \n\nTap \"01 Bluetooth LE Client Test\" on this device, then tap \"01 Bluetooth LE Server Test\" on the other device.
        \nWhen the test is complete, move to the next item. You must complete all tests.
    </string>
    <string name="ble_encrypted_client_no_encrypted_characteristic">Error!\nThe Characteristics unencrypted.</string>
    <string name="ble_encrypted_client_no_encrypted_descriptor">Error!\nThe Descriptor unencrypted.</string>
    <string name="ble_encrypted_client_fail_write_encrypted_characteristic">It failed to write to Characteristic.</string>
    <string name="ble_encrypted_client_fail_write_encrypted_descriptor">It failed to write to Descriptor.</string>
    <string name="ble_encrypted_client_fail_read_encrypted_characteristic">It failed to read the Characteristic.</string>
    <string name="ble_encrypted_client_fail_read_encrypted_descriptor">It failed to read the Descriptor.</string>
    <string name="ble_secure_client_test_info">
        The Bluetooth LE test must be done simultaneously on two devices. This device is the client.
        All tests listed here must be done with pairing.
    </string>

    <string name="ble_bluetooth_disable_title">Bluetooth Disable!</string>
    <string name="ble_bluetooth_disable_message">Please set bluetooth enable.</string>

    <string name="ble_bluetooth_mismatch_title">Bluetooth pairing state is a mismatch!</string>
    <string name="ble_bluetooth_mismatch_secure_message">
        And even though it has already been trying to run a test of Secure, the device has not been paired.
        \nGo setting mode, set Bluetooth to pair other device.
    </string>
    <string name="ble_bluetooth_mismatch_insecure_message">
        And even though it has already been trying to run a test of Insecure, the device has already been paired.
        \nGo setting mode, set Bluetooth to unpair other device.
    </string>

    <string name="ble_mtu_mismatch_message">MTU is not correct.(Request:%1$d, Actual:%2$d)</string>
    <string name="ble_mtu_fail_message">MTU test: failed to receive data</string>

    <string name="companion_test">Companion Device Test</string>
    <string name="companion_test_info">
        This test checks that APIs to manage companion devices are working correctly,
        including showing the dialog to the user to verify a device, as well as updating an internal
        record once the user made the choice and then removing it.\n\n
        Before proceeding, make sure you have a bluetooth device nearby and discoverable.
        Also, make sure that bluetooth is turned on on this device.
        Once you press the button, wait for a dialog to pop up and select your device from the list.
    </string>

    <!-- Strings for FeatureSummaryActivity -->
    <string name="feature_summary">Hardware/Software Feature Summary</string>
    <string name="feature_summary_info">This is a test for...</string>
    <string name="fs_disallowed">WARNING: device reports a disallowed feature name</string>
    <string name="fs_missing_wifi_telephony">WARNING: device reports neither WiFi nor telephony</string>
    <string name="fs_no_data">No data.</string>
    <string name="fs_legend_good">standard feature reported by device</string>
    <string name="fs_legend_indeterminate">optional feature not reported by device</string>
    <string name="fs_legend_warning">non-standard feature reported by device</string>
    <string name="fs_legend_error">required feature not reported, or forbidden feature reported</string>

    <string name="empty"></string>

    <!-- Strings for HifiUltrasoundTestActivity -->
    <string name="hifi_ultrasound_test">Hifi Ultrasound Microphone Test</string>
    <string name="hifi_ultrasound_test_info">
        This is a test for near-ultrasound (18500Hz - 20000Hz) microphone response.\n
        This test requires two devices.\n</string>
    <string name="hifi_ultrasound_test_play">PLAY</string>
    <string name="hifi_ultrasound_test_record">RECORD</string>
    <string name="hifi_ultrasound_test_plot">PLOT</string>
    <string name="hifi_ultrasound_test_dismiss">DISMISS</string>
    <string name="hifi_ultrasound_test_ok">OK</string>
    <string name="hifi_ultrasound_test_instruction1">
        Open Hifi Ultrasound Microphone Test on the test device and the reference device.\n
        Set the media volume of the reference device at 70% and hold it with one hand.\n
        Hold the testing device with the other hand\n
        Press the RECORD button on the testing device, then the PLAY button on the reference device within one second.\n
        After the test, report result on the testing (recording) device.\n</string>
    <string name="hifi_ultrasound_test_pass">PASS</string>
    <string name="hifi_ultrasound_test_fail">FAIL</string>
    <string name="hifi_ultrasound_test_default_false_string">false</string>
    <string name="hifi_ultrasound_test_mic_no_support">
        Device does not support near-ultrasound recording.\n
        Please report PASS.\n</string>
    <string name="hifi_ultrasound_test_spkr_no_support">
        Device does not support near-ultrasound playback.\n
        If this is your reference device, please use a different reference device.\n</string>

    <string name="hifi_ultrasound_speaker_test">Hifi Ultrasound Speaker Test</string>
    <string name="hifi_ultrasound_speaker_test_info">
        This is a test for near-ultrasound (18500Hz - 20000Hz) speaker response.\n
        This test requires two devices.\n</string>
    <string name="hifi_ultrasound_speaker_test_instruction1">
        Open Hifi Ultrasound Speaker Test on the test device and the reference device.\n
        Set the media volume of the testing device at 70% and hold it with one hand.\n
        Hold the reference device with the other hand\n
        Press the RECORD button on the reference device, then the PLAY button on the testing device within one second.\n
        After the test, report result on the testing (playback) device.\n</string>
    <string name="hifi_ultrasound_speaker_test_mic_no_support">
        Device does not support near-ultrasound recording.\n
        If this is your reference device, please use a different reference device.\n</string>
    <string name="hifi_ultrasound_speaker_test_spkr_no_support">
        Device does not support near-ultrasound playback.\n
        Please report PASS.\n</string>
    <string name="hifi_ultrasound_speaker_test_test_side">
        Please wait for the result on the reference device then report here.</string>
    <string name="hifi_ultrasound_speaker_test_reference_side">
        Please report on the testing device.\n</string>

    <!-- Strings for Location tests -->
    <string name="location_gps_test">GPS Test</string>
    <string name="location_gps_test_info">This test verifies basic GPS behavior
        and callback scheduling.
        Make sure the device has line of sight to GPS satellites
        (for example, outside, or near a window)
        and then press OK to run the automated tests.</string>
    <string name="location_listener_activity">Location listener</string>

    <!-- Strings for Location GNSS tests -->
    <string name="location_gnss_constellation_type_test">GNSS Measurement Constellation Test</string>
    <string name="location_gnss_measure_no_location_test">GNSS Measurement Before Location Test</string>
    <string name="location_gnss_reg_test">GNSS Measurement Registration Test</string>
    <string name="location_gnss_value_test">GNSS Measurement Values Test</string>
    <string name="location_pseudorange_value_test">GNSS Pseudorange Test</string>
    <string name="location_gnss_ttff_test">GNSS TTFF Test</string>
    <string name="location_gnss_nav_msg_test">GNSS Navigation Message Test</string>
    <string name="location_gnss_status_test">GNSS Status Test</string>
    <string name="location_gnss_test_info">This test verifies basic GNSS behavior.
        Make sure the device has line of sight to GNSS satellites
        (for example, stationary on a windowsill.  If needed, try again, outside, also with the
        device stationary, and with at least some view of the sky.) and then press Next to run
        the automated tests.</string>
    <string name="location_emergency_call_test_info">This test verifies whether basic features
        (wifi, sms, gps) works correctly during the emergency call. Make sure the device is using
        a special white listed sim card. The wifi and GPS should be on and have internet connection.
        Press the pass button to skip this test if outside US/Canada.
    </string>
    <string name="emergency_call_confirm_info">This test will dial 911! Please make sure to use a
        whitelisted sim card to run this test!
    </string>
    <string name="emergency_call_skip_info">Current device doesn\'t support cellular network. Skipping the Test.
    </string>
    <string name="emergency_call_emergency_number_hint_text">
        Emergency Number:
    </string>
    <string name="emergency_call_current_number_hint_text">
        Current Number:
    </string>
    <string name="emergency_call_dial_text">
        Dial 911
    </string>
    <string name="emergency_call_emergency_number_text">
        911
    </string>
    <string name="location_gnss_test_retry_info">If this test fails, please make sure the device
        has line of sight to GNSS satellites (for example, stationary on a windowsill. If needed,
        try again, outside, also with the device stationary, with as much view of the sky as
        possible.) </string>
    <string name="location_emergency_call_gps_test">Emergency Call GPS Test</string>
    <string name="location_emergency_call_message_test">Emergency Call Message Test</string>
    <string name="location_emergency_call_wifi_test">Emergency Call Wifi Test</string>

    <!-- Strings for ConnectivityBackgroundTestActivity -->
    <string name="network_background_test">Network Background Connectivity Test</string>
    <string name="network_background_test_instructions">
        This test verifies that IPv6 network connectivity continues to work
        when the screen is off or is idle for some time.\n\n

        1. Join a Wi-Fi network with IPv6 Internet access.\n
        2. If the device has battery power, disconnect all power connectors.\n
        3. Turn the screen off if possible.\n
        4. Wait until the screen turns on or the test result is displayed (it will take at least two minutes).\n
        5. If necessary, unlock the device.\n
        6. Please mark the test according to the result status indicated.\n
    </string>
    <string name="network_background_test_start">Start</string>

    <!-- Strings for net.MultiNetworkConnectivityTestActivity -->
    <string name="multinetwork_connectivity_test">Multinetwork connectivity Test</string>
    <string name="multinetwork_connectivity_test_instructions">
        This test verifies that, when a phone has internet connectivity via mobile network
        is connected to a Wi-Fi access point that doesn\'t have internet or loses internet access,
        it restores the internet activity over the mobile cell network, while connected to the
        Wi-Fi access point. \n\n

        1. Setup a wireless access point with ability to turn on and off internet access.
        2. Have SIM or cellular data connectivity on the phone being tested.
        3. Execute the tests with the instructions outlined in the test
        4. When the test completes, it will finish and mark it passed. If it fails, it will mark it \n
           as failed.

    </string>
    <string name="multinetwork_connectivity_test_pre_requisites">Prerequisite - Setup a Wi-Fi access point with WPA PSK in which we can turn on or off internet access. Delete that access point from this device if it exists already. </string>
    <string name="multinetwork_connectivity_test_start">Start</string>
    <string name="multinetwork_connectivity_test_ap_name">Wi-Fi SSID</string>
    <string name="multinetwork_connectivity_test_ap_passphrase">WPA 2 passphrase</string>
    <string name="multinetwork_connectivity_test_continue">Confirm and continue with test.</string>
    <string name="multinetwork_connectivity_test_rerun">Completed. Re-run.</string>
    <string name="multinetwork_connectivity_test_running">Running.</string>
    <string name="multinetwork_connectivity_test_connect_cellular">Connecting to cellular network.</string>
    <string name="multinetwork_connectivity_test_connect_wifi">Connecting to Wi-Fi network.</string>
    <string name="multinetwork_connectivity_test_complete">Test completed.</string>
    <string name="multinetwork_connectivity_test_progress_1">Waiting for Wi-Fi to lose connectivity.</string>
    <string name="multinetwork_connectivity_test_progress_2">Waiting to check connectivity.</string>
    <string name="multinetwork_connectivity_test_progress_3">Waiting to make sure Wi-Fi has connectivity.</string>
    <string name="multinetwork_connectivity_test_1_desc">Test 1 - Connect to Wi-Fi with no internet doesnt disable current connectivity (new API)</string>
    <string name="multinetwork_connectivity_test_2_desc">Test 2 - Connect to Wi-Fi with no internet doesnt disable current connectivity (legacy API)</string>
    <string name="multinetwork_connectivity_test_3_desc">Test 3 - When connected to Wi-Fi, on losing connectivity, restores mobile connectivity (legacy API)</string>
    <string name="multinetwork_status_wifi_connect_success">Wi-Fi connect success.</string>
    <string name="multinetwork_status_mobile_connect_success">Mobile net connect success.</string>
    <string name="multinetwork_status_wifi_connect_timed_out">Wi-Fi connect timed out.</string>
    <string name="multinetwork_status_wifi_connect_wrong_ap">Wi-Fi connected to wrong access point.</string>
    <string name="multinetwork_status_mobile_connect_timed_out">Mobile network connect timed out.</string>
    <string name="multinetwork_status_mobile_restore_success">Mobile restore succeeded.</string>
    <string name="multinetwork_status_mobile_restore_failed">Mobile restore failed.</string>
    <string name="multinetwork_connectivity_test_1_prereq">Make sure that the Hotspot does not have internet access.</string>
    <string name="multinetwork_connectivity_test_2_prereq_1">Make sure that the Hotspot has internet access.</string>
    <string name="multinetwork_connectivity_test_2_prereq_2">Make sure that the Hotspot does not have internet access. When prompted to go back to using mobile data, choose ok.</string>
    <string name="multinetwork_connectivity_test_all_prereq_1">Looks like your device does not support telephony or mobile data. If yes, you can mark test passed and proceed.</string>
    <string name="multinetwork_connectivity_test_all_prereq_2">Need mobile data to proceed. Please insert a mobile data capable sim and repeat the test. By marking test as passed, you acknowledge that the device cannot do mobile data.</string>
    <string name="multinetwork_status_wifi_connectivity_failed">Wi-Fi connectivity failed.</string>
    <string name="multinetwork_connectivity_overlay_permission_message">This test requires the CTS verifier to have the system overlay permission, please enable it in the next screen.</string>
    <string name="multinetwork_connectivity_overlay_permission_positive">Settings</string>
    <string name="multinetwork_connectivity_overlay_permission_negative">Cancel</string>
    <!-- Strings for NfcTestActivity -->
    <string name="nfc_test">NFC Test</string>
    <string name="nfc_test_info">The Peer-to-Peer Data Exchange tests require two devices with
        NFC enabled to exchange messages. One device must be the candidate device running the
        software build to be tested, while the other device must be an implementation already
        known to be compatible.\n\nThe Tag Verification tests check that your
        device can properly read and write to tags of different technologies. The MIFARE
        Ultralight test is only applicable for devices that support it.
        \n\nThe Host-based card emulation tests check that your device has properly implemented
             host-based card emulation.
    </string>

    <string name="nfc_not_enabled">NFC is not enabled!</string>
    <string name="nfc_not_enabled_message">These tests require NFC to be enabled. Click the
        button below to goto Settings and enable it.</string>
    <string name="nfc_settings">NFC Settings</string>

    <string name="ndef_push_not_enabled">NDEF Push is not enabled!</string>
    <string name="ndef_push_not_enabled_message">These tests require Android Beam to be enabled.
        Click the button below to goto NFC Sharing Settings and enable it.</string>
    <string name="ndef_push_settings">NFC Sharing Settings</string>

    <string name="nfc_pee_2_pee">Peer-to-Peer Data Exchange</string>
    <string name="nfc_ndef_push_sender">NDEF Push Sender</string>
    <string name="nfc_ndef_push_receiver">NDEF Push Receiver</string>
    <string name="nfc_llcp_version_check">LLCP version check</string>

    <string name="nfc_tag_verification">Tag Verification</string>
    <string name="nfc_ndef">NDEF</string>
    <string name="nfc_mifare_ultralight">MIFARE Ultralight</string>

    <string name="nfc_ndef_push_sender_info">Start the \"CTS Verifier NDEF Receiver\" test on
        another device and touch the devices back to back. The receiver should show a
        dialog indicating it has successfully received the correct message!</string>
    <string name="nfc_ndef_push_sender_instructions">Touch this device to the back of another
        device running the \"CTS Verifier NDEF Receiver\"...</string>

    <string name="nfc_ndef_push_receiver_info">Start the \"CTS Verifier NDEF Sender\" test on
        another device and touch the devices back to back. The receiver should show a
        dialog indicating it has successfully received the correct message!</string>
    <string name="nfc_ndef_push_receiver_instructions">Touch this device to the back of another
        device running the \"CTS Verifier NDEF Sender\"...</string>
    <string name="nfc_ndef_push_receive_success">Successfully received the correct NDEF push
        message.</string>
    <string name="nfc_ndef_push_receive_failure">Failed to receive the correct NDEF push
        message.</string>

    <string name="nfc_llcp_version_check_info">This test requires two candidate devices
       with NFC enabled to exchange P2P messages. Start the \"LLCP version check\" test on
       the other candidate device also, and touch the devices back to back. This test
       then verifies that the candidate device correctly advises the LLCP version as 1.2</string>
    <string name="nfc_llcp_version_check_failure">The candidate devices does not report LLCP
       version 1.2 or higher.</string>
    <string name="nfc_llcp_version_check_success">The candidate device has a valid LLCP version.</string>
    <string name="nfc_tag_verifier">NFC Tag Verifier</string>
    <string name="nfc_tag_verifier_info">Follow the on-screen instructions to write and read
        a tag of the chosen technology.</string>

    <string name="nfc_scan_tag">Place device on a writable %s tag...</string>
    <string name="nfc_write_tag_title">Writable tag discovered!</string>
    <string name="nfc_write_tag_message">Press OK to write to this tag...</string>
    <string name="nfc_scan_tag_again">Tap the same %s tag again to confirm that its contents match...</string>
    <string name="nfc_wrong_tag_title">Wrong type of tag scanned</string>
    <string name="nfc_no_tech">No tag technologies detected...</string>

    <string name="nfc_writing_tag">Writing NFC tag...</string>
    <string name="nfc_writing_tag_error">Error writing NFC tag...</string>
    <string name="nfc_reading_tag">Reading NFC tag...</string>
    <string name="nfc_reading_tag_error">Error reading NFC tag...</string>

    <string name="nfc_result_message">Written data:\n%1$s\n\nRead data:\n%2$s</string>
    <string name="nfc_ndef_content">Id: %1$s\nMime: %2$s\nPayload: %3$s</string>

    <string name="nfc_hce">Host-based card emulation</string>
    <string name="nfc_hce_f">Host-based Felica card emulation</string>
    <string name="nfc_hce_reader_tests">HCE reader tests</string>
    <string name="nfc_hce_f_reader_tests">HCE Felica reader tests</string>
    <string name="nfc_hce_emulator_tests">HCE emulator tests</string>
    <string name="nfc_hce_f_emulator_tests">HCE Felica emulator tests</string>
    <string name="nfc_hce_f_emulator">HCE Felica emulator</string>
    <string name="nfc_hce_f_reader">HCE Felica reader</string>
    <string name="nfc_hce_emulator_test_info">The host-based card emulation
        tests require two devices to be completed. The HCE emulator tests are used
        to actually test the host-based card emulation feature of the device-under-test. So the
        device running the emulator tests must be the candidate device running the software
        to be tested. \n\nFor each emulator test, there is a corresponding "reader test"
        in the "HCE reader tests" section. The "reader test" acts as a NFC terminal/POS
        and makes sure the device-under-test implements card emulation correctly.</string>
    <string name="nfc_hce_reader_test_info">The host-based card emulation
        tests require two devices to be completed. The HCE emulator tests are used
        to actually test the host-based card emulation feature of the device-under-test. So the
        device running the emulator tests must be the candidate device running the software
        to be tested. \n\nFor each emulator test, there is a corresponding "reader test"
        in the "HCE reader tests" section. The "reader test" acts as a NFC terminal/POS
        and makes sure the device-under-test implements card emulation correctly.
    </string>
    <string name="nfc_hce_type_selection">By default HCE applications must run on type A. If your device is restricted to type B (for example, because of a type B only UICC), select "Type B" from the drop-down box above. Note that all tests must be completed in the same mode (either "Type A" or "Type B").</string>
    <string name="nfc_hce_please_wait">Please wait</string>
    <string name="nfc_hce_setting_up">Setting up card emulation services...</string>

    <string name="nfc_hce_default_route_emulator">Default route (Emulator)</string>
    <string name="nfc_hce_default_route_reader">Default route (Reader)</string>
    <string name="nfc_hce_default_route_emulator_help">This test verifies that the default route for ISO-DEP (ISO14443-4) frames is the host CPU. It does this by selecting an AID that any Android HCE phone will respond to if the select command is routed to the host. Please verify that there is no rule in the routing table that points this AID to the host. This test may be passed if the "PASS" button on the reader side lights up after tapping the devices together.</string>

    <string name="nfc_hce_protocol_params_emulator">Protocol parameters (Emulator)</string>
    <string name="nfc_hce_protocol_params_reader">Protocol parameters (Reader)</string>
    <string name="nfc_hce_protocol_params_emulator_help">This test verifies that the Nfc-A and ISO-DEP protocol parameters are being set correctly. The test may be passed when no FAIL entries show up in the results below. Note that the reader device may be different from the device under test - the DUT itself does not need to be able to act as the reader for this test. \n\n Note that for each test there are 3 possible outcomes:\n1) OK -> test has passed;\n2) FAIL -> test has failed and this must be fixed;\n3) FAIL EMVCO -> this protocol parameter is deviating from the requirements in the EMV Contactless Communication Protocol specification.\n\nWhile it is allowed to ship a HCE implementation with EMVCo failures, it may not perform optimal when EMVco based payment HCE apps are run on the device.</string>

    <string name="nfc_hce_single_payment_emulator">Single payment (Emulator)</string>
    <string name="nfc_hce_single_payment_reader">Single payment (Reader)</string>

    <string name="nfc_hce_dual_payment_emulator">Two payment services (Emulator)</string>
    <string name="nfc_hce_dual_payment_reader">Two payment services (Reader)</string>

    <string name="nfc_hce_change_default_emulator">Change default payment service (Emulator)</string>
    <string name="nfc_hce_change_default_reader">Change default payment service (Reader)</string>

    <string name="nfc_hce_tap_reader_title">Tap reader</string>
    <string name="nfc_hce_tap_reader_message">Select the corresponding reader test on the remote device, click OK on this dialog, and tap devices together. The pass button will be enabled if the test passes.</string>

    <string name="nfc_hce_single_non_payment_emulator">Single non-payment (Emulator)</string>
    <string name="nfc_hce_single_non_payment_reader">Single non-payment (Reader)</string>

    <string name="nfc_hce_dual_non_payment_emulator">Two non-payment services (Emulator)</string>
    <string name="nfc_hce_dual_non_payment_reader">Two non-payment services (Reader)</string>

    <string name="nfc_hce_conflicting_non_payment_emulator">Two conflicting non-payment services (Emulator)</string>
    <string name="nfc_hce_conflicting_non_payment_reader">Two conflicting non-payment services (Reader)</string>

    <string name="nfc_hce_foreground_non_payment_emulator">Foreground override non-payment services (Emulator)</string>
    <string name="nfc_hce_foreground_non_payment_reader">Foreground override non-payment services (Reader)</string>
    <string name="nfc_hce_foreground_non_payment_help">This test enables two non-payment services with conflicting AIDs. It then uses Androids API to allow the foreground app to set a preference for a specific service. This should prevent a popup dialog from showing. If you see a popup dialog during this asking you to select an app, this test has failed.</string>

    <string name="nfc_hce_foreground_payment_emulator">Foreground override payment services (Emulator)</string>
    <string name="nfc_hce_foreground_payment_reader">Foreground override payment services (Reader)</string>
    <string name="nfc_hce_foreground_payment_help">This test enables two payment services, and asks you to set one as the default service. It then uses Androids API to allow the foreground app to set a preference for the non-default service. This will cause the non-default payment service to be invoked.</string>
    <string name="nfc_hce_change_favor_foreground">This test requires the \"Use default\" setting to be set to \"Except when another payment app is open\". Tap OK to go to Tap and Pay settings and make sure the \"Use default\" setting is set to \"Except when another payment app is open\".</string>
    <string name="nfc_hce_offhost_service_emulator">Off-host service (Emulator)</string>
    <string name="nfc_hce_offhost_service_reader">Off-host service (Reader)</string>
    <string name="nfc_hce_offhost_emulator_help">This tests enables a service that declares some AIDs to reside off-host. This test only needs to be passed if your device has a secure element (either embedded or UICC.). The responses from the secure element are not verified by the test - it is up to the tester to verify the responses are as expected.</string>

    <string name="nfc_hce_on_and_offhost_service_emulator">On and off-host services (Emulator)</string>
    <string name="nfc_hce_on_and_offhost_service_reader">On and off-host services (Reader)</string>
    <string name="nfc_hce_on_and_offhost_emulator_help">This tests enables a service that declares some AIDs to reside off-host, and another service that runs on host. It then first sends an APDU sequence that goes off-host, and subsequently some APDUs that should go to the on-host service. This test only needs to be passed if your device has a secure element (either embedded or UICC.). The pass button will be enabled if the on-host sequence is performed as expected. The responses from the secure element are not verified by the test - it is up to the tester to verify the responses are as expected. </string>

    <string name="nfc_hce_tap_test_emulator">50 successful taps test (Emulator)</string>
    <string name="nfc_hce_tap_test_reader">50 successful taps test (Reader)</string>
    <string name="nfc_hce_tap_test_emulator_help">This test requires you to complete at least 50 HCE taps, to ensure stability of the HCE feature. The NFC service and controller should not crash or hang during any of the 50 taps.</string>
    <string name="nfc_hce_throughput_emulator">HCE throughput test (Emulator)</string>
    <string name="nfc_hce_throughput_reader">HCE throughput test (Reader)</string>
    <string name="nfc_hce_throughput_emulator_help">This tests verifies that your HCE implementation can reach a decent throughput. While Android does not have any requirements on HCE performance, many HCE applications such as transport and payment apps do. If the average APDU roundtrip time is more than 50ms, please take a look at your implementation to see where the delay is coming from.</string>
    <string name="nfc_hce_change_preinstalled_wallet">The device has an installed payment application that is currently set as default. To complete the test, you will be asked whether you want to make another app the default app. Select yes.</string>
    <string name="nfc_hce_change_default_help">You will now be asked whether you want to make Payment Service #1 the default app. Select yes.</string>
    <string name="nfc_hce_conflicting_non_payment_help">When tapping the first time, you will be shown a dialog that asks you to choose between TransportService #1 and TransportService #2. Select TransportService #2. Verify a dialog is shown that asks you to tap again to complete. Now tap again, and if communication with TransportService #2 is successfull the pass button will be enabled."</string>

    <string name="nfc_hce_payment_dynamic_aids_emulator">Dynamic payment AIDs (Emulator)</string>
    <string name="nfc_hce_payment_dynamic_aids_reader">Dynamic payment AIDs (Reader)</string>
    <string name="nfc_hce_payment_dynamic_aids_help">This test tries to register dynamic AIDs for a payment service.</string>

    <string name="nfc_hce_large_num_aids_emulator">Large number of AIDs (Emulator)</string>
    <string name="nfc_hce_large_num_aids_reader">Large number of AIDs (Reader)</string>
    <string name="nfc_hce_large_num_aids_help">This test tries to register a large number of different AIDs, to make sure there are no limitations on the maximum amount of HCE apps on the device. Note that this test may take a few seconds to complete; please be patient.</string>

    <string name="nfc_hce_payment_prefix_aids_emulator">Payment prefix AIDs (Emulator)</string>
    <string name="nfc_hce_payment_prefix_aids_reader">Payment prefix AIDs (Reader)</string>
    <string name="nfc_hce_payment_prefix_aids_help">This test statically registers prefix AIDs for a payment service.</string>

    <string name="nfc_hce_payment_prefix_aids_emulator_2">Payment prefix AIDs 2 (Emulator)</string>
    <string name="nfc_hce_payment_prefix_aids_reader_2">Payment prefix AIDs 2 (Reader)</string>

    <string name="nfc_hce_other_prefix_aids_emulator">Other prefix AIDs (Emulator)</string>
    <string name="nfc_hce_other_prefix_aids_reader">Other prefix AIDs (Reader)</string>
    <string name="nfc_hce_other_prefix_aids_help">This test dynamically registers prefix AIDs for a non-payment service.</string>

    <string name="nfc_hce_other_conflicting_prefix_aids_emulator">Conflicting non-payment prefix AIDs (Emulator)</string>
    <string name="nfc_hce_other_conflicting_prefix_aids_reader">Conflicting non-payment prefix AIDs (Reader)</string>
    <string name="nfc_hce_other_conflicting_prefix_aids_help">This test registers conflicting prefix AIDs and makes sure AID conflict detection with prefix AIDs works properly. When tapping the first time, you will be shown a dialog that asks you to choose between TransportService #1 and TransportService #2. Select TransportService #2. Verify a dialog is shown that asks you to tap again to complete. Now tap again, and if communication with TransportService #2 is successfull the pass button will be enabled."</string>

    <string name="nfc_payment_service_desc">NFC Payment service</string>
    <string name="ppse">PPSE</string>
    <string name="mastercard">MasterCard</string>
    <string name="visa">Visa</string>
    <string name="paymentService1">Payment Service #1</string>
    <string name="paymentService2">Payment Service #2</string>
    <string name="transportService1">TransportService #1</string>
    <string name="transportService2">TransportService #2</string>
    <string name="accessService">AccessService</string>
    <string name="offhostService">OffhostService</string>
    <string name="felicaservice">Felica Service</string>

    <!-- Strings for Sensor Test Activities -->
    <string name="snsr_device_admin_receiver">Sensor Tests Device Admin Receiver</string>
    <string name="snsr_test_summary">Tests passed: %1$d, Tests skipped: %2$d, Tests failed: %3$d</string>
    <string name="snsr_test_complete">Test completed without errors.</string>
    <string name="snsr_test_complete_with_errors">Test completed with errors which indicates
      the device does not meet Android compatibility requirement.
      This will degrade user experience and cause applications to misbehave.
      To help debugging, please take a bug report and back up contents under
      /sdcard/sensorTests of the device under test.
    </string>
    <string name="snsr_test_pass">PASS</string>
    <string name="snsr_test_skipped">SKIPPED</string>
    <string name="snsr_test_fail">FAIL</string>
    <string name="snsr_execution_time">Test execution time %1$s sec</string>
    <string name="snsr_rvcvxchk_test">Rotation Vector CV Crosscheck</string>
    <string name="snsr_rvcvxchk_test_rec">Rotation Vector CV Recording</string>

    <!-- Strings to interact with users in Sensor Tests -->
    <string name="snsr_test_play_sound">A sound will be played once the verification is complete...</string>
    <string name="snsr_no_interaction">Leave the device on top of a flat surface.</string>
    <string name="snsr_interaction_needed">Once the test begins, you will have to wave your hand over the front of the device.</string>
    <string name="snsr_device_steady">Keep the device steady.</string>
    <string name="snsr_keep_device_rotating_clockwise">Once the test begins, you will have to keep rotating the device clockwise.</string>
    <string name="snsr_wait_for_user">Press \'Next\' to continue.</string>
    <string name="snsr_wait_to_begin">Press \'Next\' to begin.</string>
    <string name="snsr_wait_to_retry">Press \'Retry\' to rerun or \'Fail and Next\' to skip to next.</string>
    <string name="snsr_wait_to_finish">Press \'Retry\' to rerun or \'Finish\' to end.</string>
    <string name="snsr_on_complete_return">After completing the task, go back to this test.</string>
    <string name="snsr_movement_expected">Movement was expected during the test. Found=%1$b.</string>
    <string name="snsr_sensor_feature_deactivation">IMPORTANT NOTE: Please also turn off any special features in the
        device that use sensors (wake up gestures, motion triggered events, moves, etc).
        Not doing so is expected to cause test failures. Once you are done, you can begin the test.</string>
    <string name="snsr_setting_mode_request">You will be redirected to set \'%1$s\' to: %2$s.</string>
    <string name="snsr_setting_mode_set">\'%1$s\' set to: %2$s.</string>
    <string name="snsr_setting_mode_not_set">\'%1$s\' not set to: %2$s.</string>
    <string name="snsr_setting_airplane_mode">Airplane mode</string>
    <string name="snsr_setting_screen_brightness_mode">Adaptive Brightness</string>
    <string name="snsr_setting_auto_rotate_screen_mode">Auto-rotate screen</string>
    <string name="snsr_setting_keep_screen_on">Stay awake</string>
    <string name="snsr_setting_location_mode">Location</string>
    <string name="snsr_setting_ambient_display">Ambient Display</string>
    <string name="snsr_pass_on_error">Pass Anyway</string>
    <string name="snsr_run_automated_tests">The screen will be turned off to execute the tests,
        when tests complete, the device will vibrate and the screen will be turned back on.</string>

    <!-- Accelerometer -->
    <string name="snsr_accel_test">Accelerometer Test</string>
    <string name="snsr_accel_test_info">This test verifies that the accelerometer is working properly. As you move the device around through space, the triangle should always point down (i.e. in the direction of gravity.) If it does not, the accelerometer is improperly configured.</string>
    <string name="snsr_accel_m_test">Accelerometer Measurement Tests</string>
    <string name="snsr_accel_test_face_up">Place the device on a flat surface with the screen
        facing the ceiling.</string>
    <string name="snsr_accel_test_face_down">Place the device on a flat surface with the screen
        facing it.</string>
    <string name="snsr_accel_test_right_side">Place the device in a flat surface resting vertically
        on its right side.</string>
    <string name="snsr_accel_test_left_side">Place the device in a flat surface resting vertically
        on its left side.</string>
    <string name="snsr_accel_test_top_side">Place the device in a flat surface resting vertically
        on its top side.</string>
    <string name="snsr_accel_test_bottom_side">Place the device in a flat surface resting vertically
        on its bottom side.</string>

    <!-- Gyroscope -->
    <string name="snsr_gyro_test">Gyroscope Test</string>
    <string name="snsr_gyro_test_info">This test verifies that the gyroscope is working properly.\n\nRotate your device as shown by the 3D block. A green background or a check mark indicates that the gyroscope\'s value is correct. A red background or a X mark indicates that the gyroscope\'s value is not right.\n\nThere are 6 parts of the test corresponding to each rotation. Press Pass for all the stages to complete this test.</string>
    <string name="snsr_gyro_test_progress">Test %1$d of %2$d</string>
    <string name="snsr_gyro_test_no_gyro_title">No gyroscope?</string>
    <string name="snsr_gyro_test_no_gyro_message">It doesn\'t seem like you have a gyroscope, so you don\'t need to run this test.</string>
    <string name="snsr_gyro_test_degrees_title">Wrong units?</string>
    <string name="snsr_gyro_test_degrees_message">These values looks like degrees per second. These should be radians per second!</string>
    <string name="snsr_gyro_m_test">Gyroscope Measurement Test</string>
    <string name="snsr_gyro_device_placement">Place the device in a flat surface with the screen
        facing the ceiling. Read the instructions for each scenario, before you perform the
        test.</string>
    <string name="snsr_gyro_device_static">Leave the device static.</string>
    <string name="snsr_gyro_rotate_device">Once you begin the test, you will need to rotate the
        device 360deg (one time) in the direction show by the animation, then place it back on the
        flat surface.</string>

    <!-- Heart Rate -->
    <string name="snsr_heartrate_test">Heart Rate Test</string>
    <string name="snsr_heartrate_test_info">This test verifies that the heart rate monitor is working properly.\n\nWait for at least 1 minute before verifying.\n\nVerify that the resting heart rate is between 0 and 100.</string>
    <string name="snsr_heartrate_test_no_heartrate_title">No heart rate monitor?</string>
    <string name="snsr_heartrate_test_no_heartrate_message">It doesn\'t seem like you have a heart rate monitor, so you don\'t need to run this test.</string>

    <!-- Magnetic Field -->
    <string name="snsr_mag_m_test">Magnetic Field Measurement Tests</string>
    <string name="snsr_mag_verify_norm">Verifying the Norm...</string>
    <string name="snsr_mag_verify_offset">Verifying the Offset...</string>
    <string name="snsr_mag_verify_std_dev">Verifying the Standard Deviation...</string>
    <string name="snsr_mag_verify_calibrated_uncalibrated">Verifying the relationship between
        calibrated and uncalibrated measurements...</string>
    <string name="snsr_mag_calibration_description">Please calibrate the Magnetometer by moving
        it in 8 shapes in different orientations. Click \"Next\" to start and click \"Next\" once again to end calibration.</string>
    <string name="snsr_mag_calibration_complete">When done, leave the device in a flat surface, far
        from all metallic objects (if the test does not pass, try re-running it outdoors).</string>
    <string name="snsr_mag_measurement">-&gt; (%1$.2f, %2$.2f, %3$.2f) : %4$.2f uT</string>

    <!-- Sensor Value Accuracy -->
    <string name="snsr_rot_vec_test">Rotation Vector Accuracy Test</string>
    <string name="snsr_event_length">Sensor(%3$s). Event values expected to have size=%1$d. Found=%2$d.</string>
    <string name="snsr_event_value">Sensor(%3$s). Event value[0] expected to be of value=%1$f. Found=%2$f.</string>
    <string name="snsr_event_time">Sensor(%5$s). Event timestamp expected to be synchronized with SystemClock.elapsedRealtimeNanos(). Event received at=%1$d. Event timestamp=%2$d. Delta=%3$d. Threshold=%4$d.</string>

    <!-- Sensor Batching -->
    <string name="snsr_batch_test">Sensor Batching Manual Tests</string>
    <string name="snsr_batching_walking_needed">Once the test begins, you will have to take the
        device in your hand and walk.</string>

    <!-- Sensor Synchronization -->
    <string name="snsr_synch_test">Sensor Synchronization Test</string>

    <!-- Step Counter and Detector -->
    <string name="snsr_step_counter_test">Step Counter and Detector Tests</string>
    <string name="snsr_step_counter_test_walking">Once the test begins, you will need to walk, and tap on the screen with each step you take.</string>
    <string name="snsr_step_counter_test_still">Once the test begins, you will need to remain still and hold the device still in your hand.</string>
    <string name="snsr_step_counter_expected_steps">At least %1$d steps are expected to be reported. Reported=%2$d.</string>
    <string name="snsr_step_counter_detected_reported">Steps reported by user=%1$d. Steps counted=%2$d. Delta=%3$d. Tolerance=%4$d.</string>
    <string name="snsr_step_detector_detected_reported">Steps reported by user=%1$d. Steps detected=%2$d. Delta=%3$d. Tolerance=%4$d.</string>
    <string name="snsr_step_counter_event_changed">Step counter expected to increase monotonically, with a delta > 0. Found=%1$d. Timestamp=%2$d.</string>
    <string name="snsr_step_reported">%1$d | User reported step.</string>
    <string name="snsr_step_counter_event">%1$d | Step Counter event. count=%2$d.</string>
    <string name="snsr_step_detector_event">%1$d | Step Detector event.</string>

    <!-- Step Counter and Detector Permission -->
    <string name="snsr_step_permission_test">Step Permission Test</string>
    <string name="snsr_step_permission_disable">Please change the \'Physical Activity\' permission for CtsVerifier to \'Deny\'</string>
    <string name="snsr_step_permission_enable">Please change the \'Physical Activity\' permission for CtsVerifier to \'Allow\'</string>
    <string name="snsr_step_permission_walk">Please begin walking while holding the device. A sound will play when you may stop walking</string>

    <!-- Device suspend tests -->
    <string name="snsr_device_suspend_test">Device Suspend Tests</string>
    <string name="snsr_device_did_not_go_into_suspend">Device did not go into suspend mode during test execution </string>
    <string name="snsr_batch_did_not_arrive_at_expected_time">Batch did not arrive at the expected time estimatedBatchArrivalMs=%1$d
    firstEventReceivedMs=%2$d diffMs=%3$d toleranceMs=%4$d </string>
    <string name="snsr_device_suspend_test_instr">One you begin the test, disconnect USB, turn off the display and allow
    the device to go into suspend mode. The screen will turn on and a sound will be played once all the tests are completed.</string>
    <string name="snsr_device_suspend_service">Device Suspend Service</string>
    <string name="snsr_device_suspend_service_active">Device Suspend Test Active</string>
    <string name="snsr_device_suspend_service_notification">Device Suspend Test is using sensors.</string>

    <!-- Significant Motion -->
    <string name="snsr_significant_motion_test">Significant Motion Tests</string>
    <string name="snsr_significant_motion_event_arrival">Event expected to trigger. Triggered=%1$s.</string>
    <string name="snsr_significant_motion_event_type">Event expected to be of type=%1$d. Found=%2$d.</string>
    <string name="snsr_significant_motion_event_unexpected">Event not expected to trigger. Triggered=%1$s.</string>
    <string name="snsr_significant_motion_disable_info">Significant Motion is expected to disable itself after it triggers once.</string>
    <string name="snsr_significant_motion_test_trigger">Once you begin the test, you will need to walk for Significant Motion to be detected.</string>
    <string name="snsr_significant_motion_test_cancel">Once you begin the test, you will need to walk to ensure Significant Motion is not reported after trigger canceled.</string>
    <string name="snsr_significant_motion_test_vibration">Leave the device in a level surface. Once you begin the test, the device will vibrate to ensure that Significant Motion is not triggered.</string>
    <string name="snsr_significant_motion_test_in_hand">Once you begin the test, hold the device in your hand while you perform natural hand movements.</string>
    <string name="snsr_significant_motion_test_sitting">Once you begin the test, keep the device in your pocket and move naturally while sitting in a chair.</string>
    <string name="snsr_significant_motion_test_deactivation">Once you begin the test, you will need to walk to ensure Significant Motion triggers only once.</string>
    <string name="snsr_significant_motion_registration">Expected to be able to register for TriggerSensor. Found=%1$b.</string>
    <string name="snsr_significant_motion_cancelation">Expected to be able to cancel TriggerSensor. Found=%b.</string>
    <string name="snsr_significant_motion_ap_suspend">One you begin the test, disconnect USB, turn off the display and allow the device to go into suspend.
    You will need to walk to ensure that Significant Motion triggers. The screen will turn on and a sound will be played once the test completes.</string>
    <string name="snsr_device_did_not_wake_up_at_trigger">Device did not wakeup at trigger time. wakeTime=%1$d ms triggerTime=%2$d ms</string>

    <!-- Event sanitization for idle UIDs -->
    <string name="snsr_event_sanitization_test">Event sanitization for idle UID test</string>
    <string name="snsr_event_sanitization_test_setup">Run the \'adb shell cmd sensorservice set-uid-state com.android.cts.verifier idle\' shell command
        to emulate the CtsVerifier UID being idle.</string>
    <string name="snsr_event_sanitization_test_cleanup">Run the \'adb shell cmd sensorservice reset-uid-state com.android.cts.verifier\' shell command
        to stop emulating the CtsVerifier UID being idle. Failing to do that would lead to other tests failing!</string>
    <string name="snsr_significant_motion_test_uid_idle">Move around with the device to try triggering significant motion</string>
    <string name="snsr_significant_motion_test_uid_idle_expectation">No trigger events should be generated while idle</string>
    <string name="snsr_proximity_test_uid_idle">Touch the proximity sensor to try triggering it</string>
    <string name="snsr_proximity_test_uid_idle_expectation">No on-change events should be generated while idle</string>

    <!-- Low Latency Off-Body Detect -->
    <string name="snsr_offbody_sensor_test">Off Body Sensor Tests</string>
    <string name="snsr_offbody_sensor_registration">Registration failed for low latency offbody detect sensor.\n</string>
    <string name="snsr_offbody_event_arrival">Expected to receive a low latency offbody detect event. Found=%b.</string>
    <string name="snsr_offbody_event_type">Event expected to be of type=%1$d. Found=%2$d.</string>
    <string name="snsr_offbody_event_invalid_value">Invalid value received for offbody state; Expected value %1$d or %2$d. Found=%2$d.</string>
    <string name="snsr_offbody_event_wrong_value">Expected to receive an event having value=%1$d. Found=%2$d.</string>
    <string name="snsr_offbody_event_unexpected">Event not expected to trigger. Triggered=%1$s.</string>
    <string name="snsr_offbody_response_timing_violation">%1$s event maximum allowed latency is %2$d. Found=%3$d ms.</string>
    <string name="snsr_offbody_state_change">Offbody state changed to %1$d. Timestamp=%2$d.</string>
    <string name="snsr_start_offbody_sensor_test_instr">Put watch on your wrist and then click Next button.</string>
    <string name="snsr_start_onbody_sensor_test_instr">Remove the watch from your wrist and then click Next button.</string>
    <string name="snsr_offbody_detect_test_instr">Click Next button, then immediate remove the watch from your wrist after the countdown reaches 0.</string>
    <string name="snsr_offbody_detect_test_countdown">Countdown: %1$d.</string>
    <string name="snsr_onbody_detect_test_instr">Click Next button, then immediately attach the watch on your wrist.</string>
    <string name="snsr_ap_wake_offbody_detect_test_instr">Click Next button, then palm the screen. Wait a few seconds after screen blackens, then remove watch from wrist.</string>

    <!-- Strings for Sensor CTS tests inside CtsVerifier -->
    <string name="snsr_single_sensor_tests">CTS Single Sensor Tests</string>
    <string name="snsr_sensor_integration_tests">CTS Sensor Integration Tests</string>
    <string name="snsr_sensor_test">CTS Sensor Test</string>
    <string name="snsr_sensor_batching_tests">CTS Sensor Batching Tests</string>

    <!-- String for DynamicSensorDiscoveryTest -->
    <string name="snsr_dynamic_sensor_discovery_test">Dynamic Sensor Discovery Test</string>

    <!-- Strings for Sample Test Activities -->
    <string name="share_button_text">Share</string>
    <string name="sample_framework_test">Sample Framework Test</string>
    <string name="sample_test">Sample Test</string>
    <string name="sample_test_info">This test verifies that bluetooth sharing is working properly.\nThe test assumes the Device Under Test has bluetooth enabled and is already paired with a second device, also with bluetooth enabled.\nStart this test by clicking share, choose bluetooth from the options, and then select a device to share with.\nNote: This is a sample test, used to demonstrate how to write CTS Verifier tests, so just click pass.</string>

    <!-- Strings for UsbDebuggingDialogTapjackingTest -->
    <string name="usb_tapjacking_button_text">Show overlay</string>
    <string name="usb_tapjacking_test">Usb Debugging Dialog Tapjacking Test</string>
    <string name="usb_tapjacking_test_info">This test verifies that tapjacking on the usb dialog is not possible by disallowing users from accepting usb debugging pemissions when dialog is obscured.</string>
    <string name="usb_tapjacking_test_instructions">
        1. Connect device via usb to computer.\n
        2. Click \"Show overlay\" button.  Settings may appear if the CTS Verifier app doesn\'t have display over apps permission.  Enable this permission and then click back to navigate back to the app.\n
        3. Trigger USB debugging dialog (from computer terminal): \"adb shell am start -e fingerprints placeholder -e key placeholder %s\"\n
        4. USB debugging dialog should appear.  If the overlay cannot be seen above the USB debugging dialog, PASS this test (no need to proceed to Step 5).  Else, if the overlay does appear on top saying \"This message covers the USB debugging RSA prompt\", continue to Step 5.\n
        5. Try clicking OK. \n
        Test pass if you cannot click OK when the text quoted above is on top of the USB debugging dialog.  Toast should appear saying there is an overlay so Settings cannot verify your response. \n
        Note: Fake message overlay may remain on screen until you leave the test. This is working as intended. \n
    </string>
    <string name="usb_tapjacking_usb_debugging_component">com.android.systemui/.UsbDebuggingActivityAlias</string>
    <string name="usb_tapjacking_overlay_message">This message covers the USB debugging RSA prompt</string>
    <string name="usb_tapjacking_error_toast">Please restart the application and try again.</string>
    <string name="usb_tapjacking_error_toast2">Please enable display over apps permission for this application before proceeding.</string>

    <!-- Strings for Camera Orientation -->
    <string name="camera_orientation">Camera Orientation</string>
    <string name="co_info">This test verifies the orientation capabilities of
    camera preview and capture.\n - The left view shows a preview window rotated
    clockwise by a given magnitude of degrees.\n - The right view, after taking
    a photo, shows the captured image.\n - For each camera and orientation, both
    the left and right views should appear rotated clockwise by the amount of
    degrees specified. Choose \"Pass\" if this is the case. Otherwise, choose
    \"Fail\".\n - For front-facing cameras, the test will horizontally mirror
    the captured image prior to rotation, in attempt to make the left and right
    views appear the same.\n - The physical orientation of the device does not
    matter.\n - Read the message above the \"Take Photo\" button for
    step-by-step instructions.
    </string>
    <string name="co_preview_label">Camera preview</string>
    <string name="co_format_label">Oriented photo</string>
    <string name="co_camera_label">Camera:</string>
    <string name="co_orientation_label">Orientation</string>
    <string name="co_orientation_direction_label">clockwise</string>
    <string name="co_instruction_heading_label">Instruction:</string>
    <string name="co_instruction_text_photo_label">Take a photo</string>
    <string name="co_instruction_text_passfail_label">Choose \"Pass\" if the left view is oriented the same as the right view. Otherwise, choose \"Fail\".</string>
    <string name="co_instruction_text_extra_label">(mirrored horizontally prior to rotation, since camera is front-facing)</string>
    <string name="co_photo_button_caption">Take Photo</string>

    <!-- Strings for Camera Intents -->
    <string name="camera_intents">Camera Intents</string>
    <string name="ci_info">
    This test verifies that the default camera app is firing intents
    after pictures/videos are taken. It also verifies that when the
    default camera app is invoked via intents, the launch intents work,
    ,broadcast intents are received when appropriate per the SDK
    documentation and also, that the intent results do not have location
    information in them. Before starting with the tests, please go to the
    Settings app and deny location permissions to the CtsVerifier app, and
    after finishing with the camera intent tests, please go to the Settings app and
    restore location permissions, otherwise, other tests may fail.\n\n
    - Read the message above the \"Start Test\" button for
    step-by-step instructions.
    </string>
    <string name="ci_preview_label">Camera preview</string>
    <string name="ci_format_label">Oriented photo</string>
    <string name="ci_camera_label">Camera:</string>
    <string name="ci_intents_label">Intents Test</string>
    <string name="ci_intents_direction_label">clockwise</string>
    <string name="ci_instruction_heading_label">Instructions:</string>
    <string name="ci_location_permissions_error">Please give CTS Verifier location permissions before clicking on the pass / fail button</string>
    <string name="ci_location_permissions_fail_error">Please give CTS Verifier location permissions if the fail button needs to be clicked</string>
    <string name="ci_directory_creation_error">CTS Verifier debug directory could not be created, please try again</string>
    <string name="ci_instruction_text_photo_label">READ BEFORE STARTING TEST</string>
    <string name="ci_instruction_text_passfail_label">Choose \"Pass\" if the right intent is fired after taking a photo from the camera app. Otherwise, choose \"Fail\".</string>
    <string name="ci_instruction_text_app_picture_label">\n

    1. Click Open Settings and deny location permissions to CTS Verifier and return. \n
    2. Click Start Test. \n
    3. Go to home screen (HOME key). \n
    4. Launch Camera application. \n
    5. Capture photo within 1 minute. \n
    6. Return to CTS verifier app. \n
    7. Pass button will light up if intent and URI triggers were fired.\n
    8. Click "Pass" if possible, otherwise open settings app, allow location again and click "Fail".
    </string>
    <string name="ci_instruction_text_app_video_label">\n
    1. Click Start Test. \n
    2. Go to home screen (HOME key). \n
    3. Launch Camera application. \n
    4. Capture video within 1 minute. \n
    5. Return to CTS verifier app. \n
    6. Pass button will light up if intent and URI triggers were fired.\n
    7. Click "Pass" if possible, otherwise open settings app, allow location again and click "Fail".
    </string>
    <string name="ci_instruction_text_intent_picture_label">\n
    1. Click Start Test.\n
    2. Camera app will launch, prompting to take photo.\n
    3. Capture/confirm photo using camera app controls within 1 minute.\n
    4. Pass button will light up if intent and URI trigger were NOT received.\n
    5. Click "Pass" if possible, otherwise open settings app, allow location again and click "Fail".
    </string>
    <string name="ci_instruction_text_intent_video_label">\n
    1. Click Start Test.\n
    2. Camera app will launch, prompting to take video.\n
    3. Capture/confirm video using camera app controls within 1 minute.\n
    4. Return to the CTS Verifier app. Click Open Settings and give back CTS Verifier location permissions \n
    (Note this must be done before clicking on Pass / Fail).\n
    5. Click "Pass" if possible.
    </string>
    <string name="ci_start_test_button_caption">Start Test</string>
    <string name="ci_settings_button_caption">Open Settings</string>

    <!-- Strings for Camera Formats -->
    <string name="camera_format">Camera Formats</string>
    <string name="cf_info">This test checks that all the supported
    output formats for camera preview callbacks work correctly, and
    that the mandatory formats are available. \n - The left view shows
    a standard preview window. \n - The right view shows the output
    processed from camera preview callbacks. \n - For each camera,
    resolution, and format combination in the dropdowns, the right
    view should look the same as the left, and neither should have
    streaks, lines, or other artifacts. \n - For front-facing cameras,
    the right view must be horizontally mirrored relative to the left
    view.\n - Note that the frame rate of the right view may be much
    lower than on the left; this is not an indication of a failed
    test.\n - The next button triggers the next resolution and format
    combination of the current camera to show; this is optional.
    </string>
    <string name="cf_preview_label">Normal preview</string>
    <string name="cf_format_label">Processed callback data</string>
    <string name="cf_next_button">Next</string>

    <!-- Strings for Camera Video -->
    <string name="record_button_text">Test</string>
    <string name="camera_video">Camera Video</string>
    <string name="video_info"> This test checks video capture
    at different resolutions. \n - The left view window shows the preview.
    \n - Pressing the test button will trigger three
    seconds of video recording. Playback will show up in the right view
    window after recording is complete. \n - Use the spinners to choose
    camera and resolution combinations. The playback should be similar
    to what you saw in preview. \n - The next button triggers test for the next
    untested resolution of the currently selected camera. - After all possible
    combinations are tested, the pass button will be enabled. You may press the
    pass button to indicate a pass. \n - You may press fail button any time
    during the test to indicate failure. \n
    </string>
    <string name="video_capture_label">Video capture</string>
    <string name="video_playback_label">Video playback</string>
    <string name="dialog_fail_test">Test failed</string>
    <string name="fail_quit">Fail and quit</string>
    <string name="cancel">Cancel</string>
    <string name="status_ready">Ready</string>
    <string name="status_recording">Recording</string>
    <string name="status_playback">Playing back</string>

    <!-- Strings for USB accessory test activity -->
    <string name="usb_accessory_test">USB Accessory Test</string>
    <string name="usb_accessory_test_info">
        1. Install the Cts Verifier USB Companion app on a separate helper device.
        \n\n2. Start the accessory test companion in the Cts Verifier USB Companion.
        \n\n3. Connect the two devices. If using a OTG adapter make sure the adapter is directly connected to the helper device. If using an Type-C cable make sure that the helper device is set as "supply power to the attached device".
        \n\n4. Confirm access to the USB device on the helper device.
        \n\n5. Confirm access to the USB accessory on this device
        \n\n6. Confirm access to the USB device on the helper again.
        \n\n7. Test will run and complete automatically in less than 30 seconds.
        \n\n8. Cancel all further dialogs on this device
    </string>
    <string name="usb_accessory_test_step1">
        In this specific order:
        \n1. Install the Cts Verifier USB Companion app on a separate helper device.
        \n2. Start the accessory test companion in the Cts Verifier USB Companion.
        \n3. Connect the two devices. If using a OTG adapter make sure the adapter is directly connected to the helper device. If using an Type-C cable make sure that the helper device is set as "supply power to the attached device".
        \n4. Confirm access to the USB device on the helper device. Only confirm once.
        \n5. Confirm access to the USB accessory on this device.
        \n6. Confirm access to the USB device on the helper device again.
        \n\nResult: A progress indicator should appear or test will finish.
    </string>
    <string name="usb_accessory_test_step2">
        Test is running and will complete automatically in less than 30 seconds.
    </string>

    <!-- String for the USB device test activity -->
    <string name="usb_device_test">USB Device Test</string>
    <string name="usb_device_test_info">
        1. Install the Cts Verifier USB Companion app on a separate helper device.
        \n\n2. Start the device test companion in the Cts Verifier USB Companion.
        \n\n3. Connect the two devices. If using a OTG adapter make sure the adapter is directly connected to this device. If using an Type-C cable make sure that this device is set as "supply power to the attached device".
        \n\n4. Confirm access to the USB device on this device. Do <u>not</u> make this app the default app for the device.
        \n\n5. Confirm access to the USB accessory on the helper device.
        \n\n6. Confirm access to the USB device on this device again. Do <u>not</u> make this app the default app for the device.
        \n\n7. Test will run and complete automatically in less than 30 seconds.
        \n\n8. Cancel all further dialogs on the helper device.
    </string>
    <string name="usb_device_test_step1">
        In this specific order:
        \n1. Install the Cts Verifier USB Companion app on a separate helper device.
        \n2. Start the device test companion in the Cts Verifier USB Companion.
        \n3. Connect the two devices. If using a OTG adapter make sure the adapter is directly connected to this device. If using an Type-C cable make sure that this device is set as "supply power to the attached device".
        \n\nResult: A dialog should show up on this device asking for access to a USB device.
    </string>
    <string name="usb_device_test_step2">
        Confirm access to the USB device on this device. Do <u>not</u> make this app the default app for the device.
        \n\nResult: Dialogs should show up on this device and on the helper device asking for access to a USB device/accessory.
    </string>
    <string name="usb_device_test_step3">
        1. Confirm access to the USB accessory on the helper device.
        \n2. Confirm access to the USB device on this device again. Do <u>not</u> make this app the default app for the device.
        \n\nResult: A progress indicator should appear or test will finish.
    </string>
    <string name="usb_device_test_step4">
        Test is running and will complete automatically in a less than 30 seconds.
    </string>
    <string name="usb_device_unexpected">Usb companion device is not as expected %1$s. Please retry test.</string>

    <!-- Strings for MTP host test activity -->
    <string name="mtp_host_test">MTP Host Test</string>
    <string name="mtp_host_test_info">The CTS-verifier tests the MTP host feature with another Android device. Please connect another Android device to this Android device by using OTG cable or USB type C cable, then follow the instructions on this screen. Note the test creates/deletes files in the connected Android device.</string>
    <string name="mtp_host_device_lookup_message">Connect MTP device.\nPlease connect another Android device to this device by using USB OTG cable or USB type C cable.\nOpen \"Use USB for\" dialog from the notification in the other Android device and choose \"File Transfer\" option.\nThen press the next button.</string>
    <string name="mtp_host_grant_permission_message">Grant permission.\nReply a dialog asking device permission.</string>
    <string name="mtp_host_test_read_event_message">Test MtpDevice#readEvent.\nTake a picture at the connected device.</string>
    <string name="mtp_host_test_send_object_message">Test MtpDevice#sendObject.</string>
    <string name="mtp_host_test_file_browse_message">Test MTP file browsing.\nCheck if the UI to browse files in the connected devices was shown automatically. If not, tap a notification on this device saying the other MTP device is connected. If different application launched, go to the applicaiton settings by clicking the App Settings button, open the detailes settings page of the app, clear the default action settings, and retry. </string>
    <string name="mtp_app_settings">App Settings</string>

    <!-- Strings for the Camera ITS test activity -->
    <string name="camera_its_test">Camera ITS Test</string>
    <string name="camera_its_test_info">
        1. Connect your Android device to a computer with adb installed via a USB cable.
        \n\n2. Setup the CameraITS test environment by following the setup instructions in the
        README file found in the CameraITS directory included in the CTS Verifier bundle
        (cd CameraITS; source build/envsetup.sh;).
        \n\n3. Setup the test scene described in the CameraITS README file, and aim the camera
        at it.
        \n\n4. Run the full ITS test suite on all possible camera Ids.
        (cd CameraITS; python tools/run_all_tests.py).  Once all
        of the tests have been run, the \'PASS\' button will be enabled if all of the tests have
        succeeded. Please note that these tests can take more than 2 hours to run on some devices.
    </string>
    <string name="no_camera_manager">
        No camera manager exists!  This test device is in a bad state.
    </string>
    <string name="all_exempted_devices">
        All cameras on this device are exempted from ITS - Pass.
    </string>
    <string name="its_test_passed">All Camera ITS tests passed.  Pass button enabled!</string>
    <string name="its_test_failed">Some Camera ITS tests failed.</string>
    <string name="its_version_mismatch">
        CtsVerifier and ITS script version mismatch. Please update CtsVerifier and ITS script.
    </string>
    <string name="its_test_progress">ITS test progress will be shown here.</string>

    <!-- Strings for the Camera Flashlight test activity -->
    <string name="camera_flashlight_test">Camera Flashlight</string>
    <string name="camera_flashlight_info">
        This test checks the flashlight functionality. It will turn on and off the flashlight of
        each camera device that has a flash unit. Follow the instructions on screen and observe the
        flashlight status changing.
    </string>
    <string name="camera_flashlight_start_button">Start</string>
    <string name="camera_flashlight_next_button">Next</string>
    <string name="camera_flashlight_done_button">Done</string>
    <string name="camera_flashlight_on_button">On</string>
    <string name="camera_flashlight_off_button">Off</string>
    <string name="camera_flashlight_start_text">Press Start to start flashlight test.</string>
    <string name="camera_flashlight_question_text">Is Camera %1$s flashlight on or off?</string>
    <string name="camera_flashlight_next_text">Ok. Press next.</string>
    <string name="camera_flashlight_failed_text">Test failed. Press Done or Fail button.</string>
    <string name="camera_flashlight_passed_text">All tests passed. Press Done or Pass button.
    </string>

    <!-- Strings for the Camera Performance test activity -->
    <string name="camera_performance_test">Camera Performance</string>
    <string name="camera_performance_test_info">
        This activity will run performance test cases. For optimal and consistent results please
        make sure that all camera sensors are pointing in a direction with sufficiently bright
        light source.
    </string>
    <string name="camera_performance_spinner_text">Running CTS performance test case...</string>
    <string name="camera_performance_result_title">Test Result</string>

    <!-- Strings for StreamingVideoActivity -->
    <string name="streaming_video">Streaming Video Quality Verifier</string>
    <string name="streaming_video_info">This is a test for assessing the quality of streaming videos.  Play each stream and verify that the video is smooth and in sync with the audio, and that there are no quality problems.</string>
    <string name="sv_no_data">No videos.</string>
    <string name="sv_failed_title">Test Failed</string>
    <string name="sv_failed_message">Unable to play stream.  See log for details.</string>

    <!-- Strings for TestListActivity -->
    <string name="wifi_test">Wi-Fi Test</string>
    <string name="wifi_test_info">
        The Wi-Fi tests requires an open (no security) access point in the environment along with the DUT.
        \nPlease perform a network settings reset between each test to reset platform\'s internal state which
        might interfere with the test flow.\nNavigate to \"Settings -> System -> Reset Options -> Reset Wi-Fi,
        mobile &amp; Bluetooth\" to perform a network settings reset.
    </string>
    <string name="wifi_location_not_enabled">Wi-Fi / Location Mode is not enabled</string>
    <string name="wifi_location_not_enabled_message">These tests require Wi-Fi and Location Mode to be enabled.
        Click the button below to go to system settings and enable Wi-Fi and Location Mode.</string>
    <string name="wifi_settings">Wi-Fi Settings</string>
    <string name="location_settings">Location Settings</string>
    <string name="wifi_setup_error">
        Test failed.\n\nSet up error. Check whether Wi-Fi is enabled.</string>
    <string name="wifi_unexpected_error">
        Test failed.\n\nUnexpected error. Check logcat.</string>

    <string name="wifi_status_initiating_scan">Initiating scan.</string>
    <string name="wifi_status_scan_failure">Unable to initiate scan or find any open network in scan results.</string>
    <string name="wifi_status_connected_to_other_network">Connected to some other network on the device. Please ensure that there is no saved networks on the device.</string>
    <string name="wifi_status_initiating_network_request">Initiating network request.</string>
    <string name="wifi_status_network_wait_for_available">Waiting for network connection. Please click the network in the dialog that pops up for approving the request.</string>
    <string name="wifi_status_network_available">"Connected to network."</string>
    <string name="wifi_status_network_wait_for_unavailable">"Ensuring device does not connect to any network. You should see an empty dialog that pops up for approving the request."</string>
    <string name="wifi_status_network_unavailable">"Did not connect to any network."</string>
    <string name="wifi_status_network_wait_for_lost">Ensuring device does not disconnect from the network until the request is released.</string>
    <string name="wifi_status_network_lost">Disconnected from the network.</string>
    <string name="wifi_status_network_cb_timeout">Network callback timed out.</string>

    <string name="wifi_status_suggestion_add">Adding suggestions to the device.</string>
    <string name="wifi_status_suggestion_add_failure">Failed to add suggestions.</string>
    <string name="wifi_status_suggestion_remove">Removing suggestions from the device.</string>
    <string name="wifi_status_suggestion_remove_failure">Failed to remove suggestions.</string>
    <string name="wifi_status_suggestion_wait_for_connect">Waiting for network connection. Please click \"Allow\" in the notification that pops up for approving the request.</string>
    <string name="wifi_status_suggestion_connect">Connected to the network.</string>
    <string name="wifi_status_suggestion_wait_for_post_connect_bcast">Waiting for post connection broadcast.</string>
    <string name="wifi_status_suggestion_post_connect_bcast">Received post connection broadcast.</string>
    <string name="wifi_status_suggestion_post_connect_bcast_failure">Failed to receive post connection broadcast.</string>
    <string name="wifi_status_suggestion_wait_for_disconnect">Ensuring device does not disconnect from the network after removing suggestions.</string>
    <string name="wifi_status_suggestion_disconnected">Disconnected from the network.</string>

    <string name="wifi_status_test_success">Test completed successfully!</string>
    <string name="wifi_status_test_failed">Test failed!</string>

    <string name="wifi_test_network_request">Network Request tests</string>
    <string name="wifi_test_network_request_specific">Network Request with a specific SSID and BSSID.</string>
    <string name="wifi_test_network_request_specific_info">Tests whether the API can be used to a connect to network with a specific SSID and BSSID specified in the request.</string>
    <string name="wifi_test_network_request_pattern">Network Request with a SSID and BSSID pattern.</string>
    <string name="wifi_test_network_request_pattern_info">Tests whether the API can be used to a connect to network with a SSID and BSSID pattern specified in the request.</string>
    <string name="wifi_test_network_request_unavailable">Network Request with a specific network that is unavailable.</string>
    <string name="wifi_test_network_request_unavailable_info">Tests that the API fails to connect when an unavailable network is specified in the request.</string>

    <string name="wifi_test_network_suggestion">Network Suggestion tests</string>
    <string name="wifi_test_network_suggestion_ssid">Network suggestion with SSID.</string>
    <string name="wifi_test_network_suggestion_ssid_info">Tests whether the API can be used to suggest a network with SSID to the device and the device connects to it.</string>
    <string name="wifi_test_network_suggestion_ssid_bssid">Network suggestion with SSID and BSSID.</string>
    <string name="wifi_test_network_suggestion_ssid_bssid_info">Tests whether the API can be used to suggest a network with SSID and specific BSSID to the device and the device connects to it.</string>
    <string name="wifi_test_network_suggestion_ssid_post_connect">Network suggestion with SSID and post connection broadcast.</string>
    <string name="wifi_test_network_suggestion_ssid_post_connect_info">Tests whether the API can be used to suggest a network with SSID to the device and the device connects to it and sends the post connect broadcast back to the app.</string>

    <!-- Strings for P2pTestActivity -->
    <string name="p2p_test">Wi-Fi Direct Test</string>
    <string name="p2p_test_info">
        The Wi-Fi Direct tests require two devices with Wi-Fi Direct enabled to exchange
        messages. One device must be the candidate device running the software build to
        be tested, while the other device must be an implementation already known to be
        compatible.\n\nOne device should start the requester test, and the other should
        start the responder test. Your device must pass both requester and responder
        tests.
        </string>
    <string name="p2p_group_formation">Group Formation</string>
    <string name="p2p_join">Group Join</string>
    <string name="p2p_service_discovery">Service Discovery</string>

    <string name="p2p_go_neg_responder_test">GO Negotiation Responder Test</string>
    <string name="p2p_go_neg_requester_test">GO Negotiation Requester Test</string>
    <string name="p2p_group_owner_test">Group Owner Test</string>
    <string name="p2p_join_with_config">Group Join with Config</string>
    <string name="p2p_join_with_config_2g_band">Group Join with Config 2G Band</string>
    <string name="p2p_join_with_config_fixed_frequency">
        Group Join with Config Fixed Frequency</string>
    <string name="p2p_group_owner_with_config_test">Group Owner With Config Test</string>
    <string name="p2p_group_owner_with_config_2g_band_test">
        Group Owner With Config 2G Band Test</string>
    <string name="p2p_group_owner_with_config_fixed_frequency_test">
        Group Owner With Config Fixed Frequency Test</string>
    <string name="p2p_group_client_test">Group Client Test</string>
    <string name="p2p_group_client_with_config_test">Group Client With Config Test</string>
    <string name="p2p_group_client_with_config_2g_band_test">
        Group Client With Config 2G Band Test</string>
    <string name="p2p_group_client_with_config_fixed_frequency_test">
        Group Client With Config Fixed Frequency Test</string>
    <string name="p2p_service_discovery_responder_test">
        Service Discovery Responder Test</string>
    <string name="p2p_service_discovery_requester_test">
        Service Discovery Requester Test</string>

    <string name="p2p_go_neg_responder">GO Negotiation Responder</string>
    <string name="p2p_go_neg_requester">GO Negotiation Requester</string>
    <string name="p2p_accept_client">Group Owner</string>
    <string name="p2p_join_go">Group Client</string>
    <string name="p2p_service_discovery_responder">Service Discovery Responder</string>
    <string name="p2p_service_discovery_requester">Service Discovery Requester</string>

    <string name="p2p_go_neg_responder_info">
        Go to the Security and Location settings and ensure that Location is enabled. Then go to the
        Wi-Fi settings and forget all remembered networks.  Then start the \"GO Negotiation
        Requester Test\" on the other device and follow
        the instructions.</string>
    <string name="p2p_accept_client_info">
        Go to the Security and Location settings and ensure that Location is enabled. Then go to the
        Wi-Fi settings and forget all remembered networks.  Then start the \"Group Client Test\" on
        the other device and follow
        the instructions.</string>
    <string name="p2p_service_discovery_responder_info">
        Start the \"Service Discovery Requester Test\" on the other device and follow
        the instructions.</string>

    <string name="p2p_go_neg_requester_info">
        Go to the Security and Location settings and ensure that Location is enabled. Then go to the
        Wi-Fi settings and forget all remembered networks.  Then start the \"GO Negotiation
        Responder Test\" on the other device.
        Then run each test individually by clicking on its name.</string>
    <string name="p2p_join_go_info">
        Go to the Security and Location settings and ensure that Location is enabled. Then go to the
        Wi-Fi settings and forget all remembered networks.  Then start the \"Group Owner Test\" on
        the other device.
        Then run each test individually by clicking on its name.</string>
    <string name="p2p_service_discovery_requester_info">
        Go to the Security and Location settings and ensure that Location is enabled. Then go to the
        Wi-Fi settings and forget all remembered networks.  Then start the \"Service Discovery
        Responder Test\" on the other device.
        Then run each test individually by clicking on its name.</string>

    <string name="p2p_not_enabled">Wi-Fi is not enabled</string>
    <string name="p2p_not_enabled_message">These tests require Wi-Fi to be enabled.
        Click the button below to go to system settings and enable Wi-Fi.</string>
    <string name="p2p_settings">Wi-Fi Direct Settings</string>

    <string name="p2p_result_success">Test passed successfully.</string>

    <string name="p2p_go_neg_responder_ready">
        The go negotiation responder is now ready to start.
        Go to the Security and Location settings and ensure that Location is enabled. Then go to the
        Wi-Fi settings and forget all remembered networks.  Then start the \"GO Negotiation
        Requester Test\" on the other device.
        Keep the screen here until all tests on the other device are
        finished.</string>
    <string name="p2p_go_ready">
        The group owner is now ready to start.
        Go to the Security and Location settings and ensure that Location is enabled. Then go to the
        Wi-Fi settings and forget all remembered networks.  Then start the \"Join Group Test\" on
        the other device.
        Keep the screen here until all tests on the other device are
        finished.</string>
    <string name="p2p_service_responder_ready">
        The service responder is now ready to start.
        Go to the Security and Location settings and ensure that Location is enabled. Then go to the
        Wi-Fi settings and forget all remembered networks.  Then start the \"Service Discovery
        Requester Test\" on the other device.
        Keep the screen here until all tests on the other device are
        finished.</string>

    <string name="p2p_setup_error">
        Test failed.\n\nSet up error. Check whether Wi-Fi can be enabled.</string>
    <string name="p2p_unexpected_error">
        Test failed.\n\nUnexpected error. Check logcat.</string>
    <string name="p2p_add_local_service_error">
        Test failed.\n\nFailed to add local service.</string>
    <string name="p2p_add_service_request_error">
        Test failed.\n\nFailed to add service request.</string>
    <string name="p2p_remove_service_request_error">
        Test failed.\n\nFailed to remove service request.</string>
    <string name="p2p_clear_service_requests_error">
        Test failed.\n\nFailed to clear service requests.</string>
    <string name="p2p_connect_error">
        Test failed.\n\nFailed to start a p2p connection to the target device.</string>
    <string name="p2p_remove_group_error">
        Test failed.\n\nFailed to remove a p2p group.</string>
    <string name="p2p_discover_peers_error">
        Test failed.\n\nFailed to discover peers.</string>
    <string name="p2p_discover_services_error">
        Test failed.\n\nFailed to discover services.</string>
    <string name="p2p_ceate_group_error">
        Test failed.\n\nFailed to start up group owner.</string>
    <string name="p2p_no_service_requests_error">
        Test failed.\n\n\"NO_SERVICE_REQUESTS\" error did not occur.</string>
    <string name="p2p_receive_invalid_response_error">
        Test failed.\n\nReceived an invalid message or could not receive
         the expected message.\n\n</string>
    <string name="p2p_target_not_found_error">Test failed.\n\n
        The target responder device was NOT found. Start up the responder
        test on the other device, then run the test again.</string>
    <string name="p2p_target_invalid_role_error">Test failed.\n\n
        The target responder must be p2p device. However, the target responder
        device was group owner. Check the test case on the other device.</string>
    <string name="p2p_target_invalid_role_error2">Test failed.\n\n
        The target responder must be group owner. However, the target responder
        device was p2p device. Check the test case on the other device.</string>
    <string name="p2p_connection_error">
        Test failed.\n\nFailed to establish a p2p connection.</string>
    <string name="p2p_detect_disconnection_error">
        Test failed.\n\nFailed to detect client disconnection.</string>
    <string name="p2p_disconnect_error">
        Test failed.\n\nFailed to disconnect a p2p connection.</string>

    <string name="p2p_search_target">Search Target</string>
    <string name="p2p_searching_target">Searching for target device ...</string>
    <string name="p2p_checking_serv_capab">Checking the service discovery
        capability ...</string>
    <string name="p2p_connecting_with_pbc">Trying to connect the target device ...\n\n
        Click the \"OK\" button on the other device to accept the connection
        request from this device.</string>
    <string name="p2p_connecting_with_pin">Trying to connect the target device ...\n\n
        Enter the pin number on the other device.</string>
    <string name="p2p_waiting_for_peer_to_connect">Waiting for peer to
        connect ...</string>
    <string name="p2p_waiting_for_peer_to_disconnect">Waiting for peer
        to disconnect ...</string>

    <!-- Strings for TestListActivity -->
    <string name="aware_test">Wi-Fi Aware Test</string>
    <string name="aware_test_info">
        The Wi-Fi Aware tests require two devices with Wi-Fi enabled. One device must
        be the candidate device running the software build to be tested, while the other
        device must be an implementation already known to be compatible.\n\nThere are
        tests for Publisher and Subscriber, Responder and Initiator. One device should
        start in a role, and the other should start in the complementary
        role. Your device must pass the tests in all roles.
    </string>
    <string name="aware_not_enabled">Wi-Fi / Location Mode is not enabled</string>
    <string name="aware_not_enabled_message">These tests require Wi-Fi and Location Mode to be enabled.
        Click the button below to go to system settings and enable Wi-Fi and Location Mode.</string>
    <string name="aware_settings">Wi-Fi Settings</string>
    <string name="aware_setup_error">
        Test failed.\n\nSet up error. Check whether Wi-Fi is enabled.</string>
    <string name="aware_unexpected_error">
        Test failed.\n\nUnexpected error. Check logcat.</string>

    <string name="aware_dp_ib_open_unsolicited">Data Path: Open: Unsolicited/Passive</string>
    <string name="aware_dp_ib_passphrase_unsolicited">Data Path: Passphrase: Unsolicited/Passive</string>
    <string name="aware_dp_ib_open_solicited">Data Path: Open: Solicited/Active</string>
    <string name="aware_dp_ib_passphrase_solicited">Data Path: Passphrase: Solicited/Active</string>
    <string name="aware_discovery_ranging">Discovery with Ranging</string>
    <string name="aware_publish">Publish</string>
    <string name="aware_subscribe">Subscribe</string>

    <string name="aware_dp_oob_open">Data Path (OOB): Open</string>
    <string name="aware_dp_oob_passphrase">Data Path (OOB): Passphrase</string>
    <string name="aware_responder">Responder</string>
    <string name="aware_initiator">Initiator</string>

    <string name="aware_status_attached">Attached ...</string>
    <string name="aware_status_attach_fail">Attach failure!</string>
    <string name="aware_status_attach_timeout">Attach failure - timed out!</string>
    <string name="aware_status_identity">Discovery (Identity) MAC address: %1$s ...</string>
    <string name="aware_status_identity_fail">Identity listener failure - timed out!</string>
    <string name="aware_status_subscribe_started">Subscribe discovery session started ...</string>
    <string name="aware_status_subscribe_failed">Subscribe failure!</string>
    <string name="aware_status_subscribe_timeout">Subscribe failure - timed out!</string>
    <string name="aware_status_subscribe_null_session">Subscribe failure - null session!</string>
    <string name="aware_status_publish_started">Publish discovery session started ...</string>
    <string name="aware_status_publish_failed">Publish failure!</string>
    <string name="aware_status_publish_timeout">Publish failure - timed out!</string>
    <string name="aware_status_publish_null_session">Publish failure - null session!</string>
    <string name="aware_status_discovery">Service discovered ...</string>
    <string name="aware_status_discovery_with_info">Service discovered ... peer MAC : %1$s</string>
    <string name="aware_status_discovery_timeout">Service discovery failure - timed out!</string>
    <string name="aware_status_discovery_fail">Service discovery failure - parameter mismatch!</string>
    <string name="aware_status_send_success">Sent message successfully ...</string>
    <string name="aware_status_send_failed">Send message failure!</string>
    <string name="aware_status_send_timeout">Send message failure - timed out!</string>
    <string name="aware_status_send_fail_parameter">Send message failure - mismatched ids!</string>
    <string name="aware_status_received">Received message ...</string>
    <string name="aware_status_starting_rtt">Starting RTT operations ...</string>
    <string name="aware_status_waiting_for_peer_rtt">Pausing to let other device perform RTT ...</string>
    <string name="aware_status_received_peer_rtt_done">Other device done with RTT ...</string>
    <string name="aware_status_received_mac">Received peer MAC address: %1$s ...</string>
    <string name="aware_status_receive_timeout">Receive message failure - timed out!</string>
    <string name="aware_status_receive_failure">Receive message failure - didn\'t receive expected message!</string>
    <string name="aware_status_network_requested">Network requested ...</string>
    <string name="aware_status_network_success">Network formed ...</string>
    <string name="aware_status_network_failed">Network request failure - timed out!</string>
    <string name="aware_status_network_failed_leak">Failure: Network request success - but leaked information!</string>
    <string name="aware_status_sleeping_wait_for_responder">Pausing to let Responder time to set up ...</string>
    <string name="aware_status_ranging_peer_failure">Ranging to PeerHandle failure: %1$d failures of %2$d attempts!</string>
    <string name="aware_status_ranging_mac_failure">Ranging to MAC address failure: %1$d failures of %2$d attempts!</string>
    <string name="aware_status_ranging_peer_success">Ranging to PeerHandle success: %1$d successes of %2$d attempts!</string>
    <string name="aware_status_ranging_mac_success">Ranging to MAC address success: %1$d successes of %2$d attempts!</string>
    <string name="aware_status_lifecycle_failed">Discovery lifecycle FAILURE!</string>
    <string name="aware_status_lifecycle_ok">Discovery lifecycle validated!</string>

    <string name="aware_status_socket_failure">Failure on socket connection setup!</string>
    <string name="aware_status_socket_server_socket_started">ServerSocket started on port %1$d!</string>
    <string name="aware_status_socket_server_info_rx">Peer server info: IPv6=%1$s @ port=%2$d!</string>
    <string name="aware_status_socket_server_message_from_peer">Message from peer: \'%1$s\'</string>

    <string name="aware_data_path_open_unsolicited_publish">Data Path: Open: Unsolicited Publish</string>
    <string name="aware_data_path_open_unsolicited_publish_info">The publisher is now ready.\n\nOn the other device: start the \'Data Path: Open: Unsolicited/Passive\' / \'Subscribe\' test.</string>
    <string name="aware_data_path_open_passive_subscribe">Data Path: Open: Passive Subscribe</string>

    <string name="aware_data_path_passphrase_unsolicited_publish">Data Path: Passphrase: Unsolicited Publish</string>
    <string name="aware_data_path_passphrase_unsolicited_publish_info">The publisher is now ready.\n\nOn the other device: start the \'Data Path: Passphrase: Unsolicited/Passive\' / \'Subscribe\' test.</string>
    <string name="aware_data_path_passphrase_passive_subscribe">Data Path: Passphrase: Passive Subscribe</string>

    <string name="aware_data_path_open_solicited_publish">Data Path: Open: Solicited Publish</string>
    <string name="aware_data_path_open_solicited_publish_info">The publisher is now ready.\n\nOn the other device: start the \'Data Path: Open: Solicited/Active\' / \'Subscribe\' test.</string>
    <string name="aware_data_path_open_active_subscribe">Data Path: Open: Active Subscribe</string>

    <string name="aware_data_path_passphrase_solicited_publish">Data Path: Passphrase: Solicited Publish</string>
    <string name="aware_data_path_passphrase_solicited_publish_info">The publisher is now ready.\n\nOn the other device: start the \'Data Path: Passphrase: Solicited/Active\' / \'Subscribe\' test.</string>
    <string name="aware_data_path_passphrase_active_subscribe">Data Path: Passphrase: Active Subscribe</string>

    <string name="aware_data_path_oob_open_responder">Data Path (OOB): Open: Responder</string>
    <string name="aware_data_path_oob_open_responder_info">The responder is now ready.\n\nOn the other device: start the \'Data Path (OOB): Open\' / \'Initiator\' test.</string>
    <string name="aware_data_path_oob_open_initiator">Data Path (OOB): Open: Initiator</string>

    <string name="aware_data_path_oob_passphrase_responder">Data Path (OOB): Passphrase: Responder</string>
    <string name="aware_data_path_oob_passphrase_responder_info">The responder is now ready.\n\nOn the other device: start the \'Data Path (OOB): Passphrase\' / \'Initiator\' test.</string>
    <string name="aware_data_path_oob_passphrase_initiator">Data Path (OOB): Passphrase: Initiator</string>

    <string name="aware_discovery_ranging_publish">Discovery with Ranging: Publish</string>
    <string name="aware_discovery_ranging_publish_info">The publisher is now ready.\n\nOn the other device: start the \'Discovery with Ranging\' / \'Subscribe\' test.</string>
    <string name="aware_discovery_ranging_subscribe">Discovery with Ranging: Subscribe</string>

    <string name="camera_fov_calibration">Camera FOV Calibration</string>
    <string name="camera_fov_calibration_done">Done</string>
    <string name="camera_fov_general_settings">General settings</string>
    <string name="camera_fov_label_options">Settings</string>
    <string name="camera_fov_tap_to_take_photo">Tap to calibrate</string>
    <string name="camera_fov_marker_distance">Marker distance (in cm)</string>
    <string name="camera_fov_marker_distance_description">The distance in centimeters between
        the solid lines on the target pattern.</string>
    <string name="camera_fov_target_distance">Target distance (in cm)</string>
    <string name="camera_fov_target_distance_description">The distance in centimeters from the
        device to the target pattern.</string>
    <string name="camera_fov_settings_button_text">Setup</string>
    <string name="camera_fov_change_preview_sizes_button_text">Preview Sizes</string>
    <string name="camera_fov_choose_preview_size_for_camera">Choose preview size for camera %1$s</string>
    <string name="camera_fov_displayed_fov_label">Displayed FOV : </string>
    <string name="camera_fov_reported_fov_label">Reported  FOV : </string>
    <string name="camera_fov_reported_fov_problem">Reported FOV problem</string>
    <string name="camera_fov_reported_fov_problem_message">The reported FOV before takePicture() is
        different from when onPictureTaken() is called.\nAs picture size has not been changed, the
        reported FOV should be identical at both times.\n\nFOV before/after: %1$f / %2$f</string>

    <string name="camera_fov_panorama_wallpaper_title">Photo Sphere Live Wallpaper</string>
    <string name="camera_fov_panorama_wallpaper_description">This live wallapper displays photo
        spheres.</string>
    <string name="camera_fov_select_panorama">Select panorama</string>
    <string name="camera_fov_select_panorama_description">Select a panorama to display in the
       live wallpaper.</string>
    <string name="camera_fov_reset_panorama">Reset panorama</string>
    <string name="camera_fov_reset_panorama_description">Resets the panorama to show the demo
        file.</string>
    <string name="camera_fov_enable_compass_mode">Enable compass mode</string>
    <string name="camera_fov_enable_compass_mode_description">If enabled, the panorama orients
        itself according to the current rotation of the device.</string>

    <string name="test_category_notifications">Notifications</string>
    <string name="test_category_tiles">Tiles</string>
    <string name="package_priority_test">Notification Package Priority Test</string>
    <string name="package_priority_info">This test checks that the NotificationManagerService respects
        user preferences about relative package priorities.
    </string>
    <string name="package_priority_bot">Verifying that the CTS Robot helper package is installed.</string>
    <string name="package_priority_high">Find \"%s\" in the \"Notifications\" settings panel, and allow it to Override Do Not Disturb.</string>
    <string name="package_priority_default">Find \"%s\" in the \"Notifications\" settings panel, and disallow it to Override Do Not Disturb.</string>
    <string name="package_priority_user_order">Check that ranker respects user priorities.</string>

    <string name="shortcut_reset_test">Shortcut Reset Rate-limiting Test</string>
    <string name="shortcut_reset_info">This test checks that when an inline-reply happens, ShortcutManager\'s rate-limiting
        is reset.</string>
    <string name="shortcut_reset_bot">Verifying that the CTS Robot helper package is installed.</string>
    <string name="shortcut_reset_start">Showing the notification.</string>
    <string name="shortcut_reset_prompt_inline_reply">Open the notification shade,
        find the \"Shortcut Reset Rate-limiting Test\" notification, type something in the inline-reply field and
        press the send button.</string>
    <string name="shortcut_reset_check_result">Check ShortcutManager rate-limit has been reset.</string>

    <string name="attention_test">Notification Attention Management Test</string>
    <string name="attention_info">This test checks that the NotificationManagerService is
        respecting user preferences about notification ranking and filtering.
    </string>
    <string name="ringer_mode_tests">Ringer Mode Tests</string>
    <string name="ringer_mode_info">This test checks that Audio manager functionality that requires
        particular ringer mode states works properly.
    </string>
    <string name="ringer_mode_pass_test">These tests are handled by CTS.</string>
    <string name="test_sound_effects">Test sound effects</string>
    <string name="test_vibrate_notification">Test vibrate notification</string>
    <string name="test_vibrate_ringer">Test vibrate ringer</string>
    <string name="test_access_ringer_mode">Test access ringer mode</string>
    <string name="test_ringer_mode_policy_access">Test ringer mode policy access</string>
    <string name="test_volume_dnd_affected_stream">Test volume change</string>
    <string name="test_mute_dnd_affected_streams">Test mute streams</string>
    <string name="test_ringer_manager">Test RingtoneManager</string>
    <string name="enable_sound_effects">Please enable sound effects in Sound settings.</string>
    <string name="attention_ready">I\'m done</string>
    <string name="attention_filter_any">Please enable \"Do not disturb\" by tapping the Quick Settings tile.</string>
    <string name="attention_filter_all">Please disable \"Do not disturb\" by tapping the Quick Settings tile.</string>
    <string name="attention_filter_priority">Please enable \"Do not disturb\" by tapping the Quick
        Settings tile.  Then, long press the same tile and customize the setting to allow messages
        from starred contacts only.</string>
    <string name="attention_filter_priority_mimic_alarms_only">Please enable Priority-Only \"Do not disturb\"
        by tapping the Quick Settings tile.  Then, long press the same tile and customize the setting to allow sounds
        from Alarms and Media (if applicable) only.</string>
    <string name="attention_create_contacts">Create contacts for notification annotations.</string>
    <string name="attention_delete_contacts">Delete test contacts.</string>
    <string name="attention_default_order">Check that ranker defaults to time order.</string>
    <string name="attention_priority_order">Check that ranker respects developers priorities.</string>
    <string name="attention_ambient_bit">Check that the ambient bit is set appropriately.</string>
    <string name="attention_lookup_order">Check that ranker respects Lookup URIs for contacts.</string>
    <string name="attention_email_order">Check that ranker respects mailto URIs for contacts.</string>
    <string name="attention_phone_order">Check that ranker respects telephone URIs for contacts.</string>
    <string name="attention_interruption_order">Check that ranker temporarily boosts interruptions.
    This test takes 30 seconds to complete.</string>
    <string name="attention_none_are_filtered_messages">Check that \"All\" mode doesn\'t filter any notifications (messages).</string>
    <string name="attention_none_are_filtered_diff_categories">Check that \"All\" mode doesn\'t filter any notifications (event, reminder, alarm).</string>
    <string name="attention_some_are_filtered_messages">Check that \"Priority\" mode doesn\'t filter priority notifications (messages from starred contacts).</string>
    <string name="attention_some_are_filtered_alarms">Check that \"Priority\" mode doesn\'t filter priority notifications (alarms).</string>
    <string name="attention_some_are_filtered_media_system_other">Check that \"Priority\" mode doesn\'t filter priority notifications (media, system, other).</string>
    <string name="attention_all_are_filtered">Check that \"None\" mode filters all notifications.</string>
    <string name="attention_cannot_disallow_alarms_or_media">Check that apps targeted with Pre-P SDK can\'t disallow alarms or media from bypassing DND.</string>
    <string name="nls_test">Notification Listener Test</string>
    <string name="nas_test">Notification Assistant Test</string>
    <string name="nls_service_name">Notification Listener for CTS Verifier</string>
    <string name="nls_info">This test checks that a NotificationListenerService can be enabled
        and disabled, and that once enabled the service is able to receive notifications and
        dismiss them.
    </string>
    <string name="nas_service_name">Notification Assistant for CTS Verifier</string>
    <string name="nas_info">This test checks that a NotificationAssistantService can be enabled
        and disabled, and that once enabled the service is able to receive notifications and
        dismiss them.
    </string>
    <string name="msg_extras_preserved">Check that Message extras Bundle was preserved.</string>
    <string name="tile_service_name">Tile Service for CTS Verifier</string>
    <string name="tiles_test">Tile Service Test</string>
    <string name="tiles_info">This test checks that a Tile Service added by a third party
        application is not immediately added to the current Quick Settings tiles but can be added
        by the user.
    </string>
    <string name="tiles_adding_tile">Check that Tile Service is enabled</string>
    <string name="tiles_not_added">Open Quick Settings and check that the Tile Service for CTS
        Verifier is not visible in any page</string>
    <string name="tiles_in_customizer">Open Quick Settings and click the button to customize Quick
        Settings. Check that the Tile Service for CTS Verifier is available to be added</string>
    <string name="tiles_removing_tile">Check that Tile Service is disabled</string>
    <string name="vr_tests">VR Tests</string>
    <string name="test_category_vr">VR</string>
    <string name="vr_test_title">VR Listener Test</string>
    <string name="vr_service_name">VR Listener for CTS Verifier</string>
    <string name="vr_info">This test checks that a VrListenerService can be enabled and disabled, and
        and that it receives the correct lifecycle callbacks when entering and exiting VR mode.
    </string>
    <string name="vr_start_settings">Launch Settings</string>
    <string name="vr_start_vr_activity">Launch VR mode activity</string>
    <string name="vr_start_double_vr_activity">Launch Two VR mode activities</string>
    <string name="vr_start_vr_activity_desc">Click the button to launch the VR mode activity.</string>
    <string name="vr_start_vr_double_activity_desc">Click the button to launch two consecutive VR mode activities.</string>
    <string name="vr_check_disabled">Check that the CTS VR helper service is disabled by default.</string>
    <string name="vr_enable_service">Please enable \"VR Listener for CTS Verifier\"
        under Apps > Gear Icon > Special Access > VR Helper Services and return here.</string>
        <string name="vr_disable_service">Please disable \"VR Listener for CTS Verifier\"
        under Apps > Gear Icon > Special Access > VR Helper Services and return here.</string>
    <string name="nas_enable_service">Please enable \"Notification Assistant for CTS Verifier\"
        under Apps > Gear Icon > Default > Notification Assistant and return here.</string>
    <string name="nas_disable_service">Please disable \"Notification Assistant for CTS Verifier\"
        under Apps > Gear Icon > Default > Notification Assistant and return here.</string>
    <string name="nls_enable_service">Please enable \"Notification Listener for CTS Verifier\"
        under Apps > Gear Icon > Special Access > Notification Access and return here.</string>
    <string name="nls_block_app">Please block the linked application and return here.</string>
    <string name="nls_unblock_app">Please unblock the linked application and return here.</string>
    <string name="nls_block_channel">Please block the linked notification channel and return here.</string>
    <string name="nls_block_group">Please block the linked notification channel group and return here.</string>
    <string name="nls_cannot_enable_service">Please make sure you cannot enable
        \"Notification Listener for CTS Verifier\" and return here.</string>
    <string name="nls_disable_service">Please disable \"Notification Listener for CTS Verifier\"
        under Apps > Gear Icon > Special Access > Notification Access and return here.</string>
    <string name="nls_start_settings">Launch Settings</string>
    <string name="nls_service_started">Service should start once enabled.</string>
    <string name="nas_note_enqueued_received">Check that notification was enqueued.</string>
    <string name="nls_note_received">Check that notification was received.</string>
    <string name="nls_payload_intact">Check that notification payload was intact.</string>
    <string name="nls_audibly_alerted">Check that notification audibly alerting was reported correctly.</string>
    <string name="nas_adjustment_payload_intact">Check that the Assistant can adjust notifications.</string>
    <string name="nas_adjustment_enqueue_payload_intact">Check that the Assistant can adjust notifications on enqueue.</string>
    <string name="nas_create_channel">Check that the Assistant can create a Notification Channel for another app.</string>
    <string name="nas_update_channel">Check that the Assistant can update a Notification Channel for another app.</string>
    <string name="nas_block_channel">Check that the Assistant can block a Notification Channel.</string>
    <string name="nas_delete_channel">Check that the Assistant can delete a Notification Channel for another app.</string>
    <string name="nas_snooze_context">Check that the Assistant can snooze a notification until a given context.</string>
    <string name="nls_clear_one">Check that service can clear a notification.</string>
    <string name="nls_clear_one_reason">Check that service can clear a notification and receive the correct reason for dismissal.</string>
    <string name="nls_clear_one_stats">Check that service does not receive notification stats.</string>
    <string name="nls_clear_all">Check that service can clear all notifications.</string>
    <string name="nls_service_stopped">Service should stop once disabled.</string>
    <string name="nls_note_missed">Check that notification was not received.</string>
    <string name="nls_snooze">Check the service can be snoozed.</string>
    <string name="nls_unsnooze">Check the service can be unsnoozed.</string>
    <string name="nls_hints">Check that the listener can set hints.</string>
    <string name="nls_snooze_one">Check that service can snooze a notification.</string>
    <string name="nls_snooze_one_time">Check that service can snooze a notification for a given time.</string>
    <string name="nls_get_snoozed">Check that service can retrieve snoozed notifications.</string>
    <string name="nls_unsnooze_one">Check that service can unsnooze a notification.</string>
    <string name="nas_note_missed_enqueued">Check that notification was not enqueued.</string>
    <string name="cp_test">Condition Provider test</string>
    <string name="cp_service_name">Condition Provider for CTS Verifier</string>
    <string name="cp_info">This test checks that on non-low ram a ConditionProviderService can be enabled
        and disabled, and that once enabled the service is able to create, query, edit, and delete
        automatic zen rules. On low ram devices condition providers should not be bound.
    </string>
    <string name="cp_cannot_enable_service">Please make sure you cannot enable \"CTS Verifier\" under Do Not Disturb access and return here.</string>
    <string name="cp_enable_service">Please enable \"CTS Verifier\" under Do Not Disturb access and return here.</string>
    <string name="cp_disable_service">Please disable \"CTS Verifier\" under Do Not Disturb access and return here.</string>
    <string name="cp_start_settings">Launch Settings</string>
    <string name="cp_create_rule">Creating Automatic Zen Rule</string>
    <string name="cp_create_rule_with_zen_policy">Creating Automatic Zen Rule with Zen Policy</string>
    <string name="cp_update_rule">Updating Automatic Zen Rule</string>
    <string name="cp_update_rule_use_zen_policy">Updating Automatic Rule to Use Zen Policy</string>
    <string name="cp_subscribe_rule">Subscribing to Automatic Zen Rule</string>
    <string name="cp_service_started">Service should start once enabled.</string>
    <string name="cp_service_stopped">Service should stop once disabled.</string>
    <string name="cp_unsubscribe_rule">Unsubscribing to Automatic Zen Rule</string>
    <string name="cp_delete_rule">Deleting Automatic Zen Rule</string>
    <string name="cp_get_rules">Retrieving Automatic Zen Rules</string>
    <string name="cp_get_rule">Retrieving Automatic Zen Rule</string>

    <string name="cacert_test">CA Cert Notification Test</string>
    <string name="cacert_info">This test checks that when a CA Certificate is installed, the user is notified.</string>
    <string name="cacert_do_something">Do it</string>
    <string name="cacert_done">Done</string>
    <string name="cacert_install_cert">Use the CertInstaller to install the certificate "MyCA.cer" from device storage. When it opens, choose any name and tap "Okay". If this button does nothing, pass the test and move on.</string>
    <string name="cacert_check_cert_in_settings">Visit the user-installed trusted credentials page and confirm that the "Internet Widgits Pty Ltd" cert appears in the list.</string>
    <string name="cacert_remove_screen_lock">You may have been prompted to set a screen lock when installing the certificate. If so, remove it. If not, you may skip this step.</string>
    <string name="cacert_check_notification">Look at the system notifications. Confirm that:\n
1. There is a notification saying a certificate authority is installed.\n
2. Tapping that notification brings up a more detailed explanation and a button to check trusted credentials.\n
3. Tapping that button brings up the Trusted Credentials page you just visited.</string>
    <string name="cacert_dismiss_notification">Open the notification and follow the link to remove CA certificates. If removing CA certificates does not dismiss the notification, fail the test.</string>

    <string name="caboot_test">CA Cert Notification on Boot test</string>
    <string name="caboot_info">This test is to confirm that when the user has installed a trusted credential, the system notifies the user when it boots.</string>
    <string name="caboot_check_cert_installed">Please check here to see whether a certificate is already installed. If this button does nothing, pass the test and move on.</string>
    <string name="caboot_check_creds">Check Credentials</string>
    <string name="caboot_if_not_installed">Only if there is no credential currently installed, install one.</string>
    <string name="caboot_install_cert">Install credential</string>
    <string name="caboot_remove_screen_lock">Remove screen lock</string>
    <string name="caboot_reboot_desc">Please reboot the device and return to this test.</string>
    <string name="caboot_after_boot">AFTER REBOOTING: Check that there is a notification that the network may be monitored. Opening that notification should show a dialog box giving more information, with a button to check trusted credentials. This should open up the same view of trusted credentials that you get via the "Check credentials" button.</string>

    <!-- Strings for KeyChain -->
    <string name="keychain_test">KeyChain Storage Test</string>
    <string name="keychain_info">This test checks that credentials installed to the system can be granted, retrieved, and used to create valid HTTPS connections.</string>
    <string name="keychain_reset">Reset</string>
    <string name="keychain_skip">Skip</string>
    <string name="keychain_setup_desc">The first step sets up an internal KeyStore and generates credentials to use for the remainder of the test.\n\n
 Tap \'Next\' to begin.</string>
    <string name="keychain_install_desc">Credentials generated. Tap \'Next\' to install them to the system keychain.\n\n
The container for the credentials will not be protected with a password; if prompted for one, leave that field blank.\n\n
During installation you may be prompted for a name - accept the default suggestion.\n\n
In the case that these credentials were already installed, you may skip this step.</string>
    <string name="keychain_https_desc">The last test involves setting up an HTTPS connection using credentials from the KeyChain.\n\n
You should be prompted to select credentials; choose the ones you just installed in the previous step.</string>
    <string name="keychain_reset_desc">Before marking this test as passed, tap \'Next\' to open security settings to clear credentials:\n
 1. Open Encryption and credentials.\n
 2. Tap Clear credentials.</string>

    <!-- Strings for Widget -->
    <string name="widget_framework_test">Widget Framework Test</string>
    <string name="widget_framework_test_info">This test checks some basic features of the widget
        framework. In order to perform the test, press the Home button. Add the widget
        titled "CTS Verifier" to the home screen. Follow the instructions in the widget.</string>
    <string name="widget_name">Widget Framework Test</string>
    <string name="widget_pass">Pass</string>
    <string name="widget_fail">Fail</string>

    <string name="provisioning_byod_non_market_apps">Non-market app installation restrictions</string>
    <string name="provisioning_byod_non_market_apps_info">
        This test exercises user restrictions on installation of non-market apps. Follow
        instructions in each test.
    </string>

    <string name="provisioning_byod_nonmarket_allow">Enable non-market apps</string>
    <string name="provisioning_byod_nonmarket_allow_info">
        This test verifies that non-market apps can be installed if permitted.\n
        1. A package installation UI should appear.\n
        2. If \'Cts Verifier\' is not allowed to install apps, a warning dialog will appear
        blocking the install. In this case go to step 3, else skip to step 4.\n
        3. Allow \'Cts Verifier\' to install apps. Return to package installer.\n
        4. Accept the installation and verify that it succeeds (no error message is displayed).
    </string>

    <string name="provisioning_byod_nonmarket_deny">Disable non-market apps</string>
    <string name="provisioning_byod_nonmarket_deny_info">
        This test verifies that non-market apps cannot be installed unless permitted.\n
        1. A package installation UI should appear.\n
        2. Verify that the installation of the package is refused.
    </string>

    <string name="provisioning_byod_nonmarket_allow_global">Enable non-market apps (global restriction)</string>
    <string name="provisioning_byod_nonmarket_allow_global_info">
        This test verifies that non-market apps can be installed if permitted by device-wide block.\n
        1. A package installation UI should appear.\n
        2. If \'Cts Verifier\' is not allowed to install apps, a warning dialog will appear
        blocking the install. In this case go to step 3, else skip to step 4.\n
        3. Allow \'Cts Verifier\' to install apps. Return to package installer.\n
        4. Accept the installation and verify that it succeeds (no error message is displayed).
    </string>

    <string name="provisioning_byod_nonmarket_deny_global">Disable non-market apps (global restriction)</string>
    <string name="provisioning_byod_nonmarket_deny_global_info">
        This test verifies that non-market apps cannot be installed unless permitted by device-wide block.\n
        1. A package installation UI should appear.\n
        2. Verify that the installation of the package is refused.
    </string>

    <string name="provisioning_byod_nonmarket_allow_global_primary">Enable primary user non-market apps (global restriction)</string>
    <string name="provisioning_byod_nonmarket_allow_global_primary_info">
        This test verifies that non-market apps from the primary user can be installed if permitted.\n
        1. You should have received NotificationBot.apk together with the CTS verifier. If you built
        the CTS verifier yourself, build the NotificationBot.apk by issuing the following command on
        the host:\n
        make NotificationBot\n
        2. Upload the NotificationBot.apk to your device by issuing the following command on the
        host:\n
        adb push /path/to/NotificationBot.apk /data/local/tmp/\n
        3. Press \"Go\" to install NotificationBot.apk in your personal profile. A package
        installation UI should appear.\n
        4. If \'Cts Verifier\' is not allowed to install apps, a warning dialog will appear
        blocking the install. In this case go to step 5, else skip to step 6.\n
        5. Allow \'Cts Verifier\' to install apps. Return to package installer.\n
        6. Accept the installation and verify that it succeeds (no error message is displayed).
    </string>

    <string name="provisioning_byod_nonmarket_deny_global_primary">Disable primary user non-market apps (global restriction)</string>
    <string name="provisioning_byod_nonmarket_deny_global_primary_info">
        This test verifies that non-market apps from the primary user cannot be installed unless permitted.\n
        1. You should have received NotificationBot.apk together with the CTS verifier. If you built
        the CTS verifier yourself, build the NotificationBot.apk by issuing the following command on
        the host:\n
        make NotificationBot\n
        2. Upload the NotificationBot.apk to your device by issuing the following command on the
        host:\n
        adb push /path/to/NotificationBot.apk /data/local/tmp/\n
        3. Press \"Go\" to install NotificationBot.apk in your personal profile. A package
        installation UI should appear.\n
        4. Verify that the installation of the package is refused.
    </string>

    <string name="provisioning_byod_capture_image_support">Camera support cross profile image capture</string>
    <string name="provisioning_byod_capture_image_support_info">
        This test verifies that images can be captured from the managed profile using the primary profile camera.\n
        1. Capture a picture using the camera.\n
        2. Verify that the captured picture is shown.\n
        3. Click on the close button.
    </string>
    <string name="provisioning_byod_capture_video_support_with_extra_output">Camera support cross profile video capture (with extra output path)</string>
    <string name="provisioning_byod_capture_video_support_info">
        This test verifies that videos can be captured from the managed profile using the primary profile camera.\n
        1. Capture a video using the camera.\n
        2. Click on the play button.\n
        3. Verify that the captured video is played.\n
        4. Click on the close button.
    </string>
    <string name="provisioning_byod_capture_video_support_without_extra_output">Camera support cross profile video capture (without extra output path)</string>
    <string name="provisioning_byod_capture_audio_support">Sound recorder support cross profile audio capture</string>
    <string name="provisioning_byod_capture_audio_support_info">
        This test verifies that audio can be captured from the managed profile using the primary profile sound recorder.\n
        1. Capture audio.\n
        2. Click on the play button.\n
        3. Verify that the captured audio is played.\n
        4. Click on the close button.\n
        If this device does not support audio recording, please skip this test and mark it passing.\n
    </string>
    <string name="provisioning_byod_dismiss_result_dialog">Close</string>
    <string name="provisioning_byod_play">Play</string>
    <string name="provisioning_byod_verify_image_title">Verify captured image</string>
    <string name="provisioning_byod_verify_video_title">Verify captured video</string>
    <string name="provisioning_byod_verify_audio_title">Verify captured audio</string>
    <string name="provisioning_byod_no_image_capture_resolver">No image capture app present. Skip test.</string>
    <string name="provisioning_byod_no_video_capture_resolver">No video capture app present. Skip test.</string>
    <string name="provisioning_byod_no_audio_capture_resolver">No audio capture app present. Skip test.</string>
    <string name="provisioning_byod_capture_media_error">Error while capturing media from managed profile.</string>
    <string name="provisioning_byod_capture_image_error">Error while capturing image from managed profile.</string>

    <string name="provisioning_byod_auth_bound_key">Authentication-bound keys</string>
    <string name="provisioning_byod_auth_bound_key_info">
        This test verifies keystore cryptographic keys can be bound to device credentials.
        These keys should only be available if there was a recent enough authentication.
    </string>
    <string name="provisioning_byod_auth_bound_key_instruction">
        This test verifies keystore cryptographic keys can be bound to device lockscreen challenge or fingerprints (if available).
        These keys should only be available if there was a recent enough authentication. \n

        1. Press "Set up" to open Security settings. (If this device has a separate app for work
        settings, ignore this button and open that app manually from the launcher.) Create a
        lockscreen password and if available, enroll a fingerprint under "Work profile security".\n
        2. Go through the list of tests.\n
        3. Mark the overall test pass or fail.\n
        4. Once the set of tests are completed, remove the lockscreen challenge.
    </string>
    <string name="provisioning_byod_auth_bound_key_set_up">Set up</string>
    <string name="provisioning_byod_lockscreen_bound_key">Lockscreen-bound key test</string>
    <string name="provisioning_byod_fingerprint_bound_key">Fingerprint-bound key test</string>
    <string name="provisioning_byod_vpn">VPN test</string>
    <string name="provisioning_byod_always_on_vpn">Always-on VPN Settings</string>
    <string name="provisioning_byod_always_on_vpn_info">
        In this test, you\'ll verify that the Settings UI for always-on VPN is correct for different
        VPN apps.
    </string>
    <string name="provisioning_byod_always_on_vpn_instruction">
        In this test, you\'ll verify the Settings UI for always-on VPN for different VPN apps.
        You should have received three VPN app apks with this CTS Verifier package.
        They\'re named in the form of \"CtsVpnFirewallApp*.apk\".\n

        1. Before the test, make sure CtsVpnFirewallApp isn\'t installed on your device. You can
           uninstall either by UI, or by\n
           \"adb uninstall com.android.cts.vpnfirewall\"\n

        2. Install the first test app, by running\n
           \"adb install /path/to/CtsVpnFirewallAppApi23.apk\"\n

        3. Tap \"Prepare VPN\" button below and consent to the VPN connection.\n

        4. Finish all three test cases listed below.\n

        5. Repeat step 1 to remove CtsVpnFirewallApp.
    </string>
    <string name="provisioning_byod_always_on_vpn_prepare_button">Prepare VPN</string>
    <string name="provisioning_byod_always_on_vpn_vpn_not_found_note">
        Can\'t find VPN app. Did you install it correctly?
    </string>
    <string name="provisioning_byod_always_on_vpn_api23">VPN app targeting SDK 23</string>
    <string name="provisioning_byod_always_on_vpn_api23_instruction">
        1. Re-install CtsVpnFirewallAppApi23.apk (skip this if you already have the correct version
           installed):\n
           \"adb install -r /path/to/CtsVpnFirewallAppApi23.apk\"\n
        2. Tap \"Go\" button below to go to the VPN settings page.\n
        3. Open configuration details page for CtsVpnFirewallApp.\n
        4. Confirm the \"Always-on VPN\" and \"Block connections without VPN\" switches are both off
           and disabled.\n
    </string>
    <string name="provisioning_byod_always_on_vpn_api24">VPN app targeting SDK 24</string>
    <string name="provisioning_byod_always_on_vpn_api24_instruction">
        1. Re-install CtsVpnFirewallAppApi24.apk (skip this if you already have the correct version
           installed):\n
           \"adb install -r /path/to/CtsVpnFirewallAppApi24.apk\"\n
        2. Tap \"Go\" button below to go to the VPN settings page.\n
        3. Open configuration details page for CtsVpnFirewallApp.\n
        4. Confirm\n
           4.1. \"Always-on VPN\" switch is enabled and in off position\n
           4.2. \"Block connections without VPN\" switch is disabled and in off position\n
           4.3. \"Block connections without VPN\" becomes enabled once the \"Always-on VPN\" switch
                is turned on\n
    </string>
    <string name="provisioning_byod_always_on_vpn_not_always_on">VPN app with opt-out</string>
    <string name="provisioning_byod_always_on_vpn_not_always_on_instruction">
        1. Re-install CtsVpnFirewallAppNotAlwaysOn.apk (skip this if you already have the correct
           version installed):\n
           \"adb install -r /path/to/CtsVpnFirewallAppNotAlwaysOn.apk\"\n
        2. Tap \"Go\" button below to go to the VPN settings page.\n
        3. Open configuration details page for CtsVpnFirewallApp.\n
        4. Confirm the \"Always-on VPN\" and \"Block connections without VPN\" switches are both off
           and disabled.\n
    </string>
    <string name="provisioning_byod_select_work_challenge">Select work lock test</string>
    <string name="provisioning_byod_select_work_challenge_description">
        This test verifies that a work lock can be chosen.\n

        1. Verify that you get sent to the page for Choosing a new work lock.\n
        2. Set a new work lock.
    </string>
    <string name="provisioning_byod_confirm_work_credentials">Confirm work lock test</string>
    <string name="provisioning_byod_confirm_work_credentials_description">
        This test verifies that work lock is shown when opening a work app,
        the work lock was set correctly and it is customized according to
        the policies set. You can only do this test after you have done the previous test.\n
        Before running this test press the power button to turn the screen off and then back on and
        swipe to unlock.\n

        1. Open a work app.\n
        2. Verify that a screen asking you for your work credentials is shown.\n
        3. Verify that the background image contains a suitcase.\n
        4. Verify that the background color of the remaining image is blue.\n
        5. Verify that the header text says \"CtsVerifier\".\n
        6. Confirm your credentials and verify that the credentials you entered previously work.\n
        7. The work app should be launched.
    </string>
    <string name="provisioning_byod_confirm_work_credentials_header">
        CtsVerifier
    </string>
    <string name="provisioning_byod_pattern_work_challenge">Confirm pattern lock test</string>
    <string name="provisioning_byod_pattern_work_challenge_description">
        This test verifies that when a work pattern lock is set, a work app can open correctly.

        1. Verify that you get sent to the page for Choosing a new work lock.\n
        2. Set a pattern lock.\n
        3. Press the power button to turn the screen off and then back on and swipe to unlock.\n
        4. Open a work app.\n
        5. Verify that a screen asking you for your work credentials is shown.\n
        6. Confirm your credentials and verify that the credentials you entered previously work.\n
        7. The work app should be launched.
    </string>
    <string name="provisioning_byod_recents">Recents redaction test</string>
    <string name="provisioning_byod_recents_info">
        This test verifies that if a work profile is locked with a separate password, Recents views
        for applications in the work profile are redacted.
    </string>
    <string name="provisioning_byod_recents_instructions">
        This test verifies that if a work profile is locked with a separate password, Recents views
        for applications in the work profile are redacted.\n
        Some devices may not lock as soon as the screen is turned off by default. On such devices,
        use the button below when requested to lock the work profile. Please skip these tests if
        "Recents" is absent.
    </string>
    <string name="provisioning_byod_recents_lock_now">Lock now</string>

    <string name="provisioning_byod_recents_verify_redacted">
        Verify recents are redacted when locked.
    </string>
    <string name="provisioning_byod_recents_verify_redacted_instruction">
        1) Follow the instructions on-screen to set a work password.\n
        2) Turn the screen off and on again, or use the "lock now" button, to lock the work profile.\n
        3) Go to home screen and then open Recents.\n
        4) Confirm that this "CTS Verifier" activity is shown in Recents.\n
        5) Confirm that the contents of the activity <b>are</b> hidden.\n
        6) Return to this page and pass the test.
    </string>
    <string name="provisioning_byod_recents_verify_not_redacted">
        Verify recents are not redacted when unlocked.
    </string>
    <string name="provisioning_byod_recents_verify_not_redacted_instruction">
        1) Press the Go button to go to security settings.\n
        2) Make work profile use one lock with personal profile.\n
        3) Open Recents.\n
        4) Confirm that this "CTS Verifier" activity is shown in Recents.\n
        5) Confirm that the contents of the activity <b>are not</b> hidden.\n
        6) Return to this page and pass the test.
    </string>
    <string name="provisioning_byod_recents_remove_password">
        The work profile still has a separate password. Please make it use one lock with the
        personal profile.
    </string>

    <string name="provisioning_byod_keychain">KeyChain test</string>
    <string name="provisioning_byod_keychain_info_start">
        In this test, you\'ll verify that keys generated by KeyChain keys are as usable as keys
        installed into KeyChain and that they can be hidden from users.\n
        The test has two parts:\n
        1) Testing that a generated key can be selectable by the user.\n
        2) Testing that a generated key can be hidden from users.\n
        \n
        Tap \"Prepare Test\" button below to begin.\n
    </string>
    <string name="provisioning_byod_keychain_info_first_test">
        Once you press \'Go\', a prompt titled \"Choose certificate\" should appear.\n
        Verify that the list in this dialog has one item, starting with \'cts-verifier-gen\'.
        Press \'Select\' to select it.\n
        If the test passes, you\'ll see the text \"Second test ready\" at the bottom.\n
        \n
        Press \'Go\'.\n
    </string>
    <string name="provisioning_byod_keychain_info_second_test">
        Once you press \'Run 2nd test\', the prompt should NOT appear.\n
        Verify that the prompt does not appear at all.\n
        Mark the test as passed if the text at the bottom shows \"PASSED (2/2)\"\n
    </string>

    <!-- Strings for DeskClock -->
    <string name="deskclock_tests">Alarms and Timers Tests</string>
    <string name="deskclock_tests_info">
        The Alarms and Timers tests verify that the Clock app implements the AlarmClock API properly.
    </string>
    <string name="deskclock_group_alarms">Alarms</string>
    <string name="deskclock_group_timers">Timers</string>

    <string name="dc_show_alarms_test">Show Alarms Test</string>
    <string name="dc_show_alarms_test_info">
        This test verifies that the SHOW_ALARMS API works.\n
        1. Press the "Show Alarms" button.\n
        2. Verify that a UI of the clock app is launched and displays the list of alarms\n
    </string>
    <string name="dc_show_alarms_button">Show Alarms</string>

    <string name="dc_set_alarm_with_ui_test">Set Alarm Test</string>
    <string name="dc_set_alarm_with_ui_test_info">
        This test verifies that the ACTION_SET_ALARM with no parameters API works.\n
        1. Press the "Set Alarm" button.\n
        2. Verify that the clock app is launched and displays a UI to manage alarms.\n
    </string>
    <string name="dc_set_alarm_button">Set Alarm</string>
    <string name="dc_set_alarm_verify_button">Verify</string>

    <string name="dc_start_alarm_test">Start Alarm Test</string>
    <string name="dc_start_alarm_test_info">
        This test verifies that the ACTION_SET_ALARM API actually starts an alarm.\n
        1. Press the "Start Alarm" button.\n
        2. Make sure the alarms UI is NOT shown\n
        3. Wait for the alarm to fire (may take up to 2 minutes)\n
        4. Verify that the alarm title is: "Start Alarm Test",\n
           the alarm is silent and vibrating (if the device supports vibrate).\n
        5. Dismiss the alarm.\n
        6. Verify that the alarm is not in the Clock\'s alarms list. The Verify button opens
           the alarm view.\n
    </string>
    <string name="dc_start_alarm_button">Start Alarm</string>

    <string name="dc_full_alarm_test">Full Alarm Test</string>
    <string name="dc_full_alarm_test_info">
        This test verifies that the ACTION_SET_ALARM API supports all extras.\n
        1. Press the "Create Alarm" button.\n
        2. Verify that you see one alarm with the following information:\n
           Name of alarm: Create Alarm Test. \n
           Vibrate: on. (if the device supports vibrate).\n
           Ringtone: silent. (if the device has a speaker).\n
           Time:  01:23. \n
           Repeating on: Monday and Wednesday. \n
    </string>
    <string name="dc_full_alarm_button">Create Alarm</string>

    <string name="dc_set_timer_with_ui_test">Set Timer Test</string>
    <string name="dc_set_timer_with_ui_test_info">
        This test verifies that the ACTION_SET_TIMER API with no paramters open the UI\n
        1. Press the "Set Timer" button.\n
        2. Verify that the an app is launched and displays a UI to manage timers.\n
    </string>
    <string name="dc_set_timer_with_ui_button">Set Timer</string>

    <string name="dc_start_timer_test">Start Timer Test</string>
    <string name="dc_start_timer_test_info">
        This test verifies that the ACTION_SET_TIMER API actually starts a timer\n
        1. Press the "Start Timer" button.\n
        2. Verify that a timer is started  and NO timers UI is shown.\n
        3. Verify that the timer named "Start Timer Test" rings after 30 seconds. Dismiss it.\n
        4. Verify that the timer is deleted after the dismissal.\n
    </string>
    <string name="dc_start_timer_button">Start Timer</string>

    <string name="dc_start_timer_with_ui_test">Start Timer With UI Test</string>
    <string name="dc_start_timer_with_ui_test_info">
        This test verifies that the ACTION_SET_TIMER API actually starts a timer with UI\n
        1. Press the "Start Timer" button.\n
        2. Verify that a timer is started  and the timers UI is shown with a timer named "Start Timer Test".\n
        3. Verify that the timer rings after 30 seconds.\n
    </string>
    <!-- Strings for LockConfirmBypassTest -->
    <string name="lock_confirm_test_title">Keyguard Password Verification</string>
    <string name="lock_set_button_text">Set password</string>
    <string name="lock_change_button_text">Change password</string>
    <string name="lock_confirm_message">
        This test verifies that the user is prompted for the current keyguard password before prompting for a new password.\n
        \nClick the \"Set password\" button if you currently don\'t have a password set.\n
        \nThen click the \"Change password\" button to change it. You should be prompted for the current password first. If you are not, then mark the test as failed.
    </string>

    <!-- String for Projection Tests -->
    <string name="test_category_projection">Projection Tests</string>
    <string name="projection_service_name">Projection Service</string>
    <string name="pca_info">This tests whether or not OpenGL projection works.\n
        You should see two "tumbling cubes." Tapping the screen should cause the cubes to explode.</string>
    <string name="pca_test">Projection Cube Test</string>
    <string name="pwa_info">This tests whether or displaying widgets and keyfocus navigation works.\n
        You should see four buttons on the bottom of the screen.\n
        Pressing the "up" and "down" buttons should highlight different buttons.\n
        Furthermore, the highlight should disappear when any button is touched, and the touched button should behave as usual.\n</string>
    <string name="pwa_test">Projection Widget Test</string>
    <string name="pwa_button_up">Up</string>
    <string name="pwa_button_down">Down</string>
    <string name="pwa_button">Button</string>
    <string name="pla_test">Projection Scrolling List Test</string>
    <string name="pla_info">This tests whether a projected list view will scroll properly\n
        You should see 50 list items and be able to scroll up and down the list</string>
    <string name="pva_test">Projection Video Playback Test</string>
    <string name="pva_info">This tests whether video playback works when projected.\n
        You should see a blinking white box and here a beep that is synchronized with each blink</string>
    <string name="pta_test">Projection Multitouch Test</string>
    <string name="pta_info">This tests whether multitouch works.\n
        Touching the screen should render a dot at the location you touched.\n
        Touching with additional fingers will render additoinal dots and you should be able to drag them around.</string>
    <string name="poa_test">Projection Offscreen Activity</string>
    <string name="poa_info">This tests whether a virtual display will continue to respond to and render even when the screen is off.\n
        Simply follow the instructions and the test will detect the pass conditions.\n
        Note that turning on the screen too early will result in a failure.</string>

    <!-- Strings for RotationVectorTest and GameRotationVectorTest -->
    <string name="rotation_vector_test">Rotation Vector Accuracy Test</string>
    <string name="snsr_rotation_vector_set_reference">
        Place the mobile device in a reference position. Note: to provide an accurate reference,
        align the device along one edge of a notebook laying on a table.</string>
    <string name="snsr_rotation_vector_reference_set">Reference position set.</string>
    <string name="snsr_rotation_vector_move_info">Move, shake, and rotate the device.</string>
    <string name="snsr_rotation_vector_set_final">Place the device back to the reference position.</string>
    <string name="snsr_rotation_vector_verification">Angular deviation [%1$4.1f %2$4.1f %3$4.1f]. Current: %4$f deg. Max tolerated: %5$f.</string>

    <!-- Strings for device admin tests -->
    <string name="device_admin_notification">This is device admin notification</string>
    <string name="device_admin_keyguard_disable_camera">Disable camera</string>
    <string name="device_admin_keyguard_disable_camera_instruction">
        Please press the Go button to lock the screen. Expected result is you cannot
        see the camera icon on the lower right corner of the screen, or if there is one, you cannot
        open the camera using it before you are asked for a password.\n
        Also, it shouldn\'t be possible to open the camera on the lockscreen by
        any other device specific gesture (such as double press on power button).
    </string>
    <string name="device_admin_disable_notifications">Disable notifications</string>
    <string name="device_admin_disable_notifications_instruction">
        Please press the Go button to lock the screen. Wait a few seconds to see
        if a notification appears. Expected result is no notifications appear.
        You should be able to see one after unlocking.
    </string>
    <string name="device_admin_disable_unredacted_notifications">Disable unredacted notifications</string>
    <string name="device_admin_disable_unredacted_notifications_instruction">
        Please press the Go button to lock the screen. Wait a few seconds to see
        if a notification appears. Expected result is a notification appear with
        its content hidden. You should be able to see the content after unlocking.
    </string>

    <!-- Strings common for BYOD and DO managed provisioning tests. -->
    <string name="afw_device_admin">CTS Verifier</string>

    <string name="provisioning_tests_byod">BYOD Provisioning tests</string>

    <string name="provisioning_tests_byod_custom_color"> Custom provisioning color </string>
    <string name="provisioning_tests_byod_custom_color_info">
        Please press the Go button to start the provisioning.
        Check that the top status bar is colorized in green.
        Then hit back and stop the provisioning.
    </string>
    <string name="provisioning_tests_byod_custom_image"> Custom provisioning image </string>
    <string name="provisioning_tests_byod_custom_image_info">
        1. Please press the Go button to start the provisioning.\n
        2. Press \"Accept and continue\" button to start work profile provisioning\n
        3. Check that the CtsVerifier logo is displayed during provisioning\n
        4. After successful provisioning, come back to this page. You might need to press a button on the final provisioning screen.
    </string>
    <string name="provisioning_tests_byod_custom_terms">Custom terms</string>
    <string name="provisioning_tests_byod_custom_terms_instructions">
        1. Please press the Go button to start the provisioning.\n
        2. Click \"View Terms\" button\n
        3. Expand \"Company ABC\" section. Verify the section content is \"Company Terms Content.\"\n
        4. Then hit back twice and stop the provisioning.
    </string>
    <string name="provisioning_tests_byod_custom_term_header1">Company ABC</string>

    <!-- Strings for BYOD managed provisioning (ByodFlowTestActivity) -->
    <string name="test_category_managed_provisioning">Managed Provisioning</string>
    <string name="provisioning_byod">BYOD Managed Provisioning</string>
    <string name="provisioning_byod_info">
        This test exercises the BYOD managed provisioning flow.
        Start by pressing the button on screen and follow instructions to finish the managed provisioning process.
        If your device has not been encrypted before, it will be encrypted and rebooted.
        After the provisioning process completes, return to this page and carry out further verifications.
        Note: the device will remain encrypted after the test which can only be disabled by factory reset.
    </string>
    <string name="provisioning_byod_start">Start BYOD provisioning flow</string>
    <string name="provisioning_byod_instructions">
        1. Press the button below to start the managed provisioning flow.
        If your device has not been encrypted before, it will reboot to apply encryption.
        After reboot follow instructions in the notification area to complete the provisioning.\n
        2. After successful provisioning, come back to this page. You might need to press a button on the final provisioning screen.
        Please press through the following verification steps.
        Allow a few seconds after returning from provisioning, as the profile owner test should automatically pass.\n
        \n
        If the device is being encrypted during step 1, it will remain encrypted After this test.
        The only way to disable the encryption is to factory reset the device.
    </string>
    <string name="provisioning_byod_profileowner">Profile owner installed</string>
    <string name="provisioning_byod_disk_encryption">Full disk encryption enabled</string>
    <string name="provisioning_byod_disk_encryption_default_key_toast">
        Cannot secure device with screen lock. Please re-run the test if you forgot to select
        the \"require PIN to boot\" option.
    </string>
    <string name="provisioning_byod_disk_encryption_no_pin_toast">
        No PIN is detected. Please re-run the test if you forgot to set a PIN.
    </string>
    <string name="provisioning_byod_set_screen_lock_dialog_message">
        Next, you will be asked to set a screen lock for the device.\n
        \n
        Please set \"1111\" as the new PIN (or any other PIN that you can memorize).
        You have to enter this PIN again later in order to finish the test.\n
        \n
        You may be asked whether the PIN should be required to boot the device. Please answer yes.\n
        \n
        Tap Go button to set a new screen lock.
    </string>
    <string name="provisioning_byod_remove_screen_lock_dialog_message">
        The test is almost finished. \n
        \n
        Next, you will be asked to remove the screen lock that you just set. Please enter \"1111\"
        (or your own PIN) when prompted for the old PIN, and do not set any new screen lock. This
        is to make sure that the device returns to the initial state after this test.\n
        \n
        Tap Go button to remove existing screen lock.
    </string>
    <string name="provisioning_byod_profile_visible">Profile-aware accounts settings</string>
    <string name="provisioning_byod_admin_visible">Profile-aware device administrator settings</string>
    <string name="provisioning_byod_workapps_visible">Badged work apps visible in Launcher</string>
    <string name="provisioning_byod_cross_profile_from_personal">Open app cross profiles from the personal side</string>
    <string name="provisioning_byod_cross_profile_from_work">Open app cross profiles from the work side</string>
    <string name="provisioning_app_linking">App links from the work side</string>
    <string name="provisioning_byod_cross_profile_app_personal">You selected the personal option.</string>
    <string name="provisioning_byod_cross_profile_app_work">You selected the Work option.</string>
    <string name="provisioning_byod_cross_profile_app_ctsverifier"> You selected the ctsverifier option </string>
    <string name="provisioning_byod_cross_profile_from_personal_instruction">
        Please press the Go button to start an action.\n
        \n
        You should be asked to choose either \"CTS Verifier\" or \"Work\" to complete the action.
        Pressing either should bring up a page stating your choice.\n
        \n
        Verify that you are prompted with the above choices and both options work as intended. Then mark this test accordingly.
    </string>
    <string name="provisioning_byod_cross_profile_from_work_instruction">
        Please press the Go button to start an action.\n
        \n
        You should be asked to choose either \"CTS Verifier\" or \"Personal\" to complete the action.
        Pressing either should bring up a page stating your choice.\n
        \n
        Verify that you are prompted with the above choices and both options work as intended. Then mark this test accordingly.
    </string>
    <string name="provisioning_byod_app_linking_instruction">
        Please press the Go button to start an action.\n
        \n
        You should be asked to choose either \"CTS Verifier\" or \"Personal\" to complete the action.\n
        - If you choose \"CTS Verifier\", you should see a page stating your chose \"CTS Verifier\".\n
        - If you choose \"Personal\", you should be presented with another dialog between \"CTS Verifier\"
        and some other apps. In this case, you should choose \"CTS verifier\".\n
        You should then see a page stating you chose \"Personal\".\n
        \n
        Verify that you are prompted with the above choices and both options work as intended. Then mark this test accordingly.
    </string>
    <string name="provisioning_byod_keyguard_disabled_features">Keyguard disabled features</string>
    <string name="provisioning_byod_keyguard_disabled_features_info">
        This test exercises Keyguard Disabled Features. Follow instructions above.
    </string>
    <string name="provisioning_byod_keyguard_disabled_features_instruction">
        Please go to Settings &gt; Security &gt; Device administrators and set
        \"CTS Verifier\" as active admin.\n
        After that please go to Settings &gt; Security &gt; Screen lock and set
        your screen lock password to \"testpassword\".\n
        Then please press the \"Prepare test\" button to disable trust agents.\n
        Then please press through the following verification steps.\n
        Note: After leaving the screen active admin status will be cleared.
        Please go to Settings &gt; Security &gt; Screen lock and set your
        password type to \"None\".
    </string>
    <string name="provisioning_byod_keyguard_disabled_features_prepare_button">Prepare test</string>
    <string name="provisioning_byod_keyguard_disabled_features_not_admin">CtsVerifier is not active admin. Please follow instructions.</string>
    <string name="provisioning_byod_disable_trust_agents">Disable trust agents</string>
    <string name="provisioning_byod_disable_trust_agents_instruction">
        Please press the Go button to go to Settings > Security. Then go to Trusted agents and\n
        check if the agents are shown as disabled by the administrator.
        Then please press Back and mark the test as \"Pass\" or \"Fail\".
    </string>
    <string name="provisioning_byod_fingerprint_disabled_in_settings">Fingerprint is disabled in Settings</string>
    <string name="provisioning_byod_fingerprint_disabled_in_settings_instruction">
        Please press the Go button to go to Settings > Security. Then go to Fingerprint and\n
        check if the disclaimer at the bottom of screen is altered to warn the users for\n
        fingerprint being disabled in lock screen. Then please press Back and mark the \n
        test as \"Pass\" or \"Fail\".
    </string>
    <string name="provisioning_byod_disable_fingerprint">Fingerprint disabled on keyguard</string>
    <string name="provisioning_byod_disable_fingerprint_instruction">
        Please press the Go button to lock the screen. Then try to log in using the fingerprint reader.\n
        Expected result is you cannot log in using your fingerprint.\n
        After you log back in, please navigate back to CtsVerifier and mark the test as \"Pass\" or \"Fail\".
    </string>
    <string name="provisioning_byod_disable_unredacted_notifications">Unredacted notifications disabled on keyguard</string>
    <string name="provisioning_byod_disable_unredacted_notifications_instruction">
        Please press the Go button to lock the screen. Wait a couple of seconds and look out for a
        notification from CtsVerifier.\n
        Expected result is the notification is shown as \"Contents hidden by policy\", you can not see the contents
        (Which would read \"This is a notification\"). You should be seeing a work badge.\n
        After you log back in, please navigate back to CtsVerifier and mark the test as \"Pass\" or \"Fail\".
    </string>
    <string name="provisioning_byod_work_notification">Work notification is badged</string>
    <string name="provisioning_byod_work_notification_instruction">
        Please press the Go button to trigger a notification.\n
        \n
        Verify that the notification is badged (see sample badge below). Then mark this test accordingly.
    </string>
    <string name="provisioning_byod_notification_title">This is a notification</string>
    <string name="provisioning_byod_notification_public_title">Contents hidden by policy</string>

    <string name="provisioning_byod_disallow_apps_control">Disallow apps control</string>
    <string name="provisioning_byod_disallow_apps_control_info">
        This test exercises Disallow Apps Control. Follow instructions above.
    </string>
    <string name="provisioning_byod_disallow_apps_control_instruction">
        Please press the \"Prepare test\" button to disallow apps control for managed apps.\n
        Then please press through the following verification steps.\n
        Note: After leaving the screen disallow apps control restriction will be cleared.
    </string>
    <string name="provisioning_byod_disallow_apps_control_prepare_button">Prepare test</string>
    <string name="provisioning_byod_disabled_uninstall_button">Disabled uninstall button</string>
    <string name="provisioning_byod_disabled_uninstall_button_instruction">
        Please press the Go button to go to Settings > Apps.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        Choose a managed app. Check that performing either \"Uninstall\" or \"Disable\" is not possible and triggers a support message when trying to do so.
        Then please press Back (or navigate back to this app using Recents) and mark the test as \"Pass\" or \"Fail\".
    </string>
    <string name="provisioning_byod_disabled_force_stop_button">Disabled force stop button</string>
    <string name="provisioning_byod_disabled_force_stop_button_instruction">
        Please press the Go button to go to Settings > Apps.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        Choose a managed app. Check that performing \"Force stop\" is not possible and triggers a support message when trying to do so.
        Then please press Back (or navigate back to this app using Recents) and mark the test as \"Pass\" or \"Fail\".
    </string>
    <string name="provisioning_byod_disabled_app_storage_buttons">Disabled app storage buttons</string>
    <string name="provisioning_byod_disabled_app_storage_buttons_instruction">
        Please press the Go button to go to Settings > Apps.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        Choose a managed (badged) app. Select \"Storage\". Check that performing \"Clear Data\" and \"Clear Cache\" is not possible and triggers a support message when trying to do so.
        Note: if an app has no data then tapping the clear data button has no effect anyway. Make sure you have selected
        the badged version of app with non-zero app data. Badged \"Settings\" may be a good candidate.
        Then please press Back (or navigate back to this app using Recents) and mark the test as \"Pass\" or \"Fail\".
    </string>

    <string name="provisioning_byod_work_status_icon">Work status icon is displayed</string>
    <string name="provisioning_byod_work_status_icon_instruction">
        Verify that the current status bar does not have a work status icon (see sample icon below).
        \n\n
        Please press the Go button to launch a work activity.
        \n\n
        Verify that the status bar now has a work status icon. Then mark this test accordingly.
    </string>
    <string name="provisioning_byod_work_status_icon_activity">
        Verify that the current status bar has a work status notification.
        \n\n
        Please press finish to return to the tests and then mark this test accordingly.
    </string>
    <string name="provisioning_byod_work_status_toast">Work status toast is displayed</string>
    <string name="provisioning_byod_work_status_toast_instruction">
        Please press the Go button to launch a work activity.
        \n\n
        Follow instructions and then return and mark this test accordingly.
    </string>
    <string name="provisioning_byod_work_status_toast_activity">
        Turn off the screen and wait a few seconds then turn on the screen again.
        \n\n
        Verify that a toast was displayed saying you are in the work profile.
        \n\n
        Please press finish to return to the tests and then mark this test accordingly.
    </string>
    <string name="provisioning_byod_profile_visible_instruction">
        Please press the Go button to open the Settings page.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        Navigate to Accounts and confirm that:\n
        \n
        - Both Personal and Work categories exist.\n
        - \"Remove work profile\" or \"Uninstall\" exists under the Work category.\n
        \n
        Use the Back button (or navigate back to this app using Recents) to return to this page.
    </string>
    <string name="provisioning_byod_user_settings">Profile-aware user settings</string>
    <string name="provisioning_byod_user_settings_instruction">
        Please press the Go button to open the Settings page.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher.)\n
        Navigate to Accounts and confirm that:\n
        - There are two auto-sync options present, one for personal and one for work data (either on the screen or in the overflow menu).\n
        - De-selecting either option prompts a warning dialog.\n
        \n
        Use the Back button (or navigate back to this app using Recents) to return to this page.
    </string>
    <string name="provisioning_byod_admin_visible_instruction">
        Please press the Go button to open the Security page in Settings.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        Navigate to Device admin apps and confirm that:\n
        \n
        - Device administrators outside of the work profile (if any) appear in the list, and the managed profile administrators are badged correctly.\n
        - A badged \"CTS Verifier\" exists, and is activated.\n
        - There is no option to deactivate the badged \"CTS Verifier\" version, only an option to \"Remove work profile\".\n
        \n
        Use the Back button (or navigate back to this app using Recents) to return to this page.
    </string>
    <string name="provisioning_byod_workapps_visible_instruction">
        Please press the Go button to start the launcher.
        Go to All Apps screen and scroll through it to confirm that:\n
        \n
        - A new set of work apps including CTS Verifier appear in the list.\n
        - Work badge overlay appears on work app\'s icon (see example icon below, color and style may vary).\n
        - The work badge overlay has the same size and position on each work app\'s icon.
        \n
        Then navigate back to this screen using Recents button.
    </string>

    <string name="provisioning_byod_app_settings">Profile-aware app settings</string>
    <string name="provisioning_byod_app_settings_instruction">
        Please press the Go button to open Apps page in settings.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        \n
        Verify that work profile exists in the dropdown list and selecting it will
        bring up apps setting in the work profile.\n
        \n
        Then use the Back button (or navigate back to this app using Recents) to return to this test and mark accordingly.
    </string>

    <string name="provisioning_byod_location_settings">Profile-aware location settings</string>
    <string name="provisioning_byod_location_settings_instruction">
        Please press the Go button to open Location page in settings.
        (If this device has a separate app for work settings, ignore the Go button and navigate to that app manually, if necessary).\n
        \n
        Verify that work profile entry exists in the page and it has a toggleable switch.\n
        Switch the main location switch at the top of the screen off. You should see the work profile location switch go disabled and into \'off\' state.\n
        Then switch the main location switch on again. You should see the work profile location switch go enabled and into its previous state.\n
        \n
        Then use the Back button (or navigate back to this app using Recents) to return to this test and mark accordingly.
    </string>

    <string name="provisioning_byod_wifi_data_usage_settings">Profile-aware data usage settings (Wi-Fi)</string>
    <string name="provisioning_byod_wifi_data_usage_settings_instruction">
        Please press the Go button to open the Settings page.
        (If this device has a separate app for work settings, ignore the Go button and navigate to that app manually).\n
        \n
        Navigate to the \"Network &amp; Internet\" page and then click on \"Wi-Fi\" and then \"Wi-Fi data usage\".\n
        Confirm that \"All work apps\" section is present and that it is possible to see the data usage for work (badged) apps.\n
        (If the section is not present, this might be because work apps have not used Wi-Fi data yet. Ensure that you have used Wi-Fi data on a work app, then repeat these instructions.)\n
        \n
        Then use the Back button (or navigate back to this app using Recents) to return to this test and mark accordingly.
    </string>

    <string name="provisioning_byod_cellular_data_usage_settings">Profile-aware data usage settings (Mobile)</string>
    <string name="provisioning_byod_cellular_data_usage_settings_instruction">
        Please disable Wi-Fi connection on your device.\n
        Please make sure you have added a SIM card with data plan to your phone, have enabled data over mobile and in case of dual SIM devices, have selected the right SIM for data connection.\n
        Please carry out operations that will use mobile data using both badged and unbadged apps (e.g. visit a page in a browser).\n
        \n
        Please press the Go button to open the Settings page.
        (If this device has a separate app for work settings, ignore the Go button and navigate to that app manually).\n
        \n
        Navigate to the \"Network &amp; Internet\" page and then click on \"Mobile network\" and then \"App data usage\".\n
        Confirm that \"All work apps\" section is present and that it is possible to see the data usage for work (badged) apps.\n
        \n
        Then use the Back button (or navigate back to this app using Recents) to return to this test and mark accordingly.
    </string>

    <string name="provisioning_byod_cred_settings">Profile-aware trusted credential settings</string>
    <string name="provisioning_byod_cred_settings_instruction">
        Please press the Go button to open the Security settings.
        Navigate to "Trusted credentials" and wait for the UI to load.
        After the list is loaded, confirm that:\n
        \n
        The page list credentials for both "Personal" and "Work" profiles.\n
        \n
        Then use the Back button to return to this test and mark accordingly.
    </string>

    <string name="provisioning_byod_print_settings">Profile-aware printing settings</string>
    <string name="provisioning_byod_print_settings_instruction">
        Please press the Go button to open the Printing settings.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        \n
        Verify that work profile exists in the dropdown list and selecting it will
        bring up printing setting in the work profile.\n
        \n
        Then use the Back button (or navigate back to this app using Recents) to return to this test and mark accordingly.
    </string>

    <string name="provisioning_byod_cross_profile_intent_filters">Cross profile intent filters are set</string>

    <string name="provisioning_byod_nfc_beam">Disable Nfc beam</string>
    <string name="provisioning_byod_nfc_beam_allowed_instruction">
        Please press the Go button to test if Nfc beam can be triggered in the work profile.\n
        \n
        For the first test, press \"Send manual beam\" to trigger a beam, then bump into another device to send the tag. Verify that the tag is successfully received.\n
        \n
        For the second test, press \"Send share intent\" to trigger a beam, then bump into another device to send the tag. Verify that the tag is successfully received.\n
        \n
        Then use the Back button to return to this test and mark accordingly.
    </string>
    <string name="provisioning_byod_nfc_beam_disallowed_instruction">
        Please press the Go button to test if Nfc beam is disallowed by policy
        \n
        Verify that Nfc beam is not triggered when pressing the button.\n
        \n
        Then use the Back button to return to this test and mark accordingly.
    </string>
    <string name="provisioning_byod_send_manual_beam">Send manual beam</string>
    <string name="provisioning_byod_send_share_intent">Send share intent</string>
    <string name="provisioning_byod_cannot_resolve_beam_activity">Cannot find beam activity</string>

    <string name="test_failed_cannot_start_intent">Cannot start the given intent.</string>
    <string name="provisioning_byod_no_activity">Cannot communicate with activity in the work profile.</string>
    <string name="provisioning_byod_delete_profile">Initiate deletion of work profile.</string>
    <string name="provisioning_byod_profile_deleted">Work profile deleted.</string>
    <string name="provisioning_byod_disabled">Device provisioning is not enabled.</string>
    <string name="provisioning_button_finish">Finish</string>
    <string name="provisioning_cross_profile_chooser">Choose an app to complete action</string>

    <string name="provisioning_byod_no_gps_location_feature">No GPS feature present. Skip test.</string>
    <string name="provisioning_byod_location_mode_enable">Enable location</string>
    <string name="provisioning_byod_location_mode_enable_toast_location_change">Location changed</string>
    <string name="provisioning_byod_location_mode_enable_instruction">
        This test verifies that the location updates can be enabled for the managed profile apps.\n
        1. Press the go button to go to the location settings page, set both the main location switch and the work profile location switch enabled.\n
        2. Press home to go to the launcher.\n
        3. Move your position a little bit, verify that location updates toast comes up.\n
        Please wait until the location updates or timeout toast message shows up before going back to the cts-verifier tests.\n
        4. Go back to the cts-verifier tests using the back button, then mark the test accordingly.\n
    </string>

    <string name="provisioning_byod_location_mode_disable">Disable location</string>
    <string name="provisioning_byod_location_mode_time_out_toast">Timeout waiting for gps location change</string>
    <string name="provisioning_byod_location_mode_disable_instruction">
        This test verifies that the location updates can be disabled for the managed profile apps through the main location switch.\n
        1. Press the go button to go to the location settings page, set the main location switch disabled.\n
        2. Press home to go to the launcher.\n
        3. Move your position a little bit, verify that no location updates toast come up and that the timeout message show up after around 15 seconds.
        Please wait until the timeout or location updates toast message shows up before going back to the cts-verifier tests.\n
        4. Go back to the cts-verifier tests using the back button, then mark the test accordingly.\n
    </string>

    <string name="provisioning_byod_work_location_mode_disable">Disable location for work profile</string>
    <string name="provisioning_byod_work_location_mode_disable_instruction">
        This test verifies that the location updates can be disabled for the managed profile apps through work profile location switch.\n
        1. Press the go button to go to the location settings page, set the work location switch disabled while the main location switch is still enabled.\n
        2. Press home to go to the launcher.\n
        3. Move your position a little bit, verify that no location updates toast come up and that the timeout message show up after around 15 seconds.
        Please wait until the timeout or location updates toast message shows up before going back to the cts-verifier tests.\n
        4. Go back to the cts-verifier tests using the back button, then mark the test accordingly.\n
    </string>
    <string name="provisioning_byod_primary_location_when_work_disabled">Primary receives updates while work location is disabled</string>
    <string name="provisioning_byod_primary_location_when_work_disabled_instruction">
        This test verifies that location updates are still received by primary profile when location updates are disabled for managed profile apps through work profile location switch.\n
        1. Press the go button to go to the location settings page, set the work location switch disabled while the main location switch is still enabled.\n
        2. Press home to go to the launcher.\n
        3. Move your position a little bit, verify that location updates toast comes up.\n
        Please wait until the location updates or timeout toast message shows up before going back to the cts-verifier tests.\n
        4. Go back to the cts-verifier tests using the back button, then mark the test accordingly.\n
    </string>

    <string name="provisioning_byod_personal_ringtones">Personal ringtones</string>
    <string name="provisioning_byod_personal_ringtones_instruction">
        This test verifies that personal ringtones can be changed independently of work profile ringtones.\n
        1. Press the go button to go to the sound settings page. Under \"Work profile sounds\" turn off the \"use personal profile sounds\" switch.\n
        2. Change the personal \"Phone ringtone\", \"Default notification sound\", and \"Default alarm sound\" settings to different values.\n
        3. Read the values displayed under \"Work phone ringtone\", \"Default work notification sound\", and \"Default work alarm sound\".\n
        4. Verify that the work sounds are different to the personal values just set.\n
        5. Go back to the cts-verifier tests using the back button, then mark the test accordingly.\n
    </string>

    <string name="provisioning_byod_uninstall_work_app">Uninstall work app from launcher</string>
    <string name="provisioning_byod_uninstall_work_app_instruction">
        This test verifies that work profile apps can be uninstalled.\n
        1. You should have received NotificationBot.apk together with the CTS verifier. If you built the CTS verifier yourself, build the NotificationBot.apk by issuing the following command on the host:\n
            make NotificationBot\n
        2. Upload the NotificationBot.apk to your device by issuing the following command on the host:\n
            adb push /path/to/NotificationBot.apk /data/local/tmp/\n
        3. Pres \"Go\" to install NotificationBot.apk on your work profile.\n
        4. If you are presented with a dialog to allow installing of unknown apps, enable that option.\n
        5. Go to home screen.\n
        6. Verify that the newly installed app, \"CTS Robot\", can successfully be uninstalled from the launcher.\n
    </string>
    <string name="provisioning_byod_uninstall_work_app_install_work_app">Install work app</string>

    <string name="provisioning_byod_turn_off_work">Turn off work profile</string>
    <string name="provisioning_byod_turn_off_work_info">This test verifies device behaviors when turning off work profile.</string>
    <string name="provisioning_byod_turn_off_work_instructions">
        This test verifies the device behavior when work profile is turned off.\n
        Please exercise the following tests in sequence.\n
        The button below can be used to open the Settings page where you can toggle work profile.\n
        (If this device has a separate app for work settings, ignore the button and open that app manually from the launcher).\n
    </string>
    <string name="provisioning_byod_turn_off_work_prepare_button">Open Settings to toggle work profile</string>

    <string name="provisioning_byod_turn_off_work_prepare_notifications">Prepare a work notification</string>
    <string name="provisioning_byod_turn_off_work_prepare_notifications_instruction">
        This is a test setup step.\n
        1. Press the go button to send a work notification.\n
        2. Verify that the notification is displayed and mark this test as passed.\n
        (Note: in the following test, you will be asked to verify the notification disappears after work profile is turned off.)
    </string>

    <string name="provisioning_byod_turn_off_work_turned_off">Please turn off work profile</string>
    <string name="provisioning_byod_turn_off_work_turned_off_toast">Open settings to turn off work profile, using the button above.</string>

    <string name="provisioning_byod_turn_off_work_notifications">Notifications when work profile is off</string>
    <string name="provisioning_byod_turn_off_work_notifications_instruction">
        Verify that the previously-shown work notification has now disappeared.
    </string>

    <string name="provisioning_byod_turn_off_work_launcher">Starting work apps when work profile is off</string>
    <string name="provisioning_byod_turn_off_work_launcher_instruction">
        This test verifies that work applications cannot be started if work profile is off.\n
        1. Press home to go to the launcher.\n
        2. Verify that work applications are greyed out.\n
        3. Tap on a work application.\n
        4. Verify that the application does not start.\n
    </string>

    <string name="provisioning_byod_turn_off_work_turned_on">Please turn work profile back on</string>
    <string name="provisioning_byod_turn_off_work_turned_on_toast">Open settings to turn work profile back on, either manually or using the button above.</string>

    <string name="provisioning_byod_turn_on_work_icon">Status bar icon when work profile is on</string>
    <string name="provisioning_byod_turn_on_work_icon_instruction">
        Now that work profile is back on, please verify that the status bar icon for work profile off is no longer visible.
    </string>

    <string name="provisioning_byod_turn_on_work_launcher">Starting work apps when work profile is on</string>
    <string name="provisioning_byod_turn_on_work_launcher_instruction">
        Now that work profile is back on, please go to the launcher and verify that you can start a work application.
    </string>

    <string name="provisioning_byod_organization_info">Organization Info</string>
    <string name="provisioning_byod_organization_name_hint">Name</string>
    <string name="provisioning_byod_organization_color_hint">#FF00FF</string>
    <string name="provisioning_byod_set_organization_info_button_text">Set</string>
    <string name="provisioning_byod_organization_info_instructions">
    This test verifies that the Organization Info was set correctly.
    You can only do this test after you have done "select work lock" test.\n
        1. Enter your organization name.\n
        2. Enter a valid color code.\n
        3. Press the Set button to set organization Info.\n
        4. Press the Go button to open a dialog to confirm work credentials.\n
        (If this device has a separate app for work settings, ignore the Go button and open the work lock screen manually to confirm, if necessary.)\n
        5. Verify that the background color of the resulting dialog is as set by you.\n
        6. Verify that the header text has organization name as set by you.\n
    </string>

    <string name="provisioning_byod_no_secure_lockscreen">No work lockscreen password set. Please run \"Select work lock test\" and rerun this test</string>

    <string name="provisioning_byod_parent_profile_password">Personal password test</string>
    <string name="provisioning_byod_parent_profile_password_description">
        This test verifies that the password on the personal side can be chosen from within a managed profile.\n

        1. Press the Go button to set a new password for the personal side.\n
        2. Lock and unlock the screen to verify that the personal side password was set correctly.\n
    </string>
    <string name="provisioning_byod_work_profile_widget">Work profile widget</string>
    <string name="provisioning_byod_work_profile_widget_info">Verify that work profile widget can be added into launcher</string>
    <string name="provisioning_byod_work_profile_widget_description">
        This test verifies that the widget in work profile can be added into Launcher.\n

        1. Go to home screen.\n
        2. Add the widget titled \"CTS Verifier\" and badged with work profile briefcase to the home screen.\n
        3. If you can add the widget to the home screen, please select \"pass\". Otherwise, select \"fail\".
    </string>

    <!-- Strings for DeviceOwnerNegativeTestActivity -->
    <string name="negative_device_owner">No Device Owner Tests</string>
    <string name="device_owner_negative_category">No Device Owner Tests</string>
    <string name="device_owner_provisioning_negative">Device owner provisioning</string>
    <string name="device_owner_provisioning_negative_info">The device owner provisioning test verifies that setting up a corporate owned device can only be done on a factory reset device.\n\nPlease click the "Start provisioning" button, and when you see a warning dialog telling the device is already set up, select "pass". Otherwise, select "fail".</string>
    <string name="start_device_owner_provisioning_button">Start provisioning</string>
    <string name="enterprise_privacy_quick_settings_negative">Quick settings disclosure</string>
    <string name="enterprise_privacy_quick_settings_negative_info">
        Please do the following:\n
        1) Open and fully expand Quick Settings.\n
        2) Verify that at the bottom of Quick Settings, you are not told the device is managed.\n
        3) Close Quick Settings.\n
        \n
        If this device does not have quick settings, please skip this test and mark it passing
    </string>
    <string name="enterprise_privacy_keyguard_negative">Keyguard disclosure</string>
    <string name="enterprise_privacy_keyguard_negative_info">
        Please do the following:\n
        1) Press the Go button to open Settings.\n
        2) Navigate to \"Security\" &gt; \"Screen lock\" and select the first screen lock type that is not \"None\".\n
        3) Use the Back button to return to this page.\n
        4) Lock the device.\n
        5) Verify that on the lock screen, you are not told the device is managed.\n
        6) Unlock the device.\n
        7) Repeat steps (1) through (6) for each screen lock type other than \"None\".
    </string>
    <string name="enterprise_privacy_add_account_negative">Add account disclosure</string>
    <string name="enterprise_privacy_add_account_negative_info">
        Please do the following:\n
        1) Press the Go button to open Settings.\n
        2) In the screen that opens, verify that you are not told that the device is managed.\n
        3) Use the Back button to return to this page.
    </string>

    <!-- Strings for DeviceOwnerPositiveTestActivity -->
    <string name="positive_device_owner">Device Owner Tests</string>
    <string name="device_owner_positive_tests">Device Owner positive tests</string>
    <string name="device_owner_positive_tests_instructions">
            The positive device owner tests verify policies on a corporate owned device.\n
            Press below button first, follow steps described in the dialog that pops up,
            then proceed to the test cases.\n
            Pressing \'back\', \'pass\' or \'fail\' on this test page will remove the device owner.\n
            Alternatively, you can run the \'Remove device owner\' test. Ideally, that test should
            be run last so that it does not interfere with other tests.
    </string>
    <string name="device_owner_positive_tests_info">
            The positive device owner tests verify policies on a corporate owned device.\n
            Press below button first, follow steps described in the dialog that pops up,
            then proceed to the test cases.\n
            Pressing \'back\', \'pass\' or \'fail\' on this test page will remove the device owner.\n
            Alternatively, you can run the \'Remove device owner\' test. Ideally, that test should
            be run last so that it does not interfere with other tests.
    </string>
    <string name="device_owner_positive_category">Device Owner Tests</string>
    <string name="set_device_owner_button_label">Set up device owner</string>
    <string name="set_device_owner_dialog_title">Set up device owner</string>
    <string name="set_device_owner_dialog_text">
            For this test you need to install CtsEmptyDeviceOwner.apk by running\n
            adb install -r -t /path/to/CtsEmptyDeviceOwner.apk\n
            Then you need to set this app as the device owner by running\n
            adb shell dpm set-device-owner com.android.cts.emptydeviceowner/.EmptyDeviceAdmin
    </string>
    <string name="device_owner_remove_device_owner_test">Remove device owner</string>
    <string name="device_owner_remove_device_owner_test_info">
            Please check in Settings &gt; Security &gt; Device Administrators if CTSVerifier is
            Device Owner. Then press the button below, and check that CTSVerifier is NOT Device
            Owner anymore.
    </string>
    <string name="remove_device_owner_button">Remove device owner</string>
    <string name="device_owner_check_device_owner_test">Check device owner</string>
    <string name="device_owner_incorrect_device_owner">Missing or incorrect device owner: CTSVerifier is not DO!</string>
    <string name="device_owner_wifi_lockdown_test">WiFi configuration lockdown</string>
    <string name="device_owner_wifi_lockdown_info">
            Please enter the SSID and auth method of an available WiFi Access Point and press the button to create a
            WiFi configuration. This configuration can be seen on Settings &gt; WiFi. The test cases
            are going to use this config. Please go through test cases in order (from top to bottom).
    </string>
    <string name="switch_wifi_lockdown_off_button">WiFi config lockdown off</string>
    <string name="switch_wifi_lockdown_on_button">WiFi config lockdown on</string>
    <string name="wifi_lockdown_go_settings_wifi_button">Go to WiFi Settings</string>
    <string name="device_owner_wifi_key_management_none_button">None</string>
    <string name="device_owner_wifi_key_management_wpa_button">WPA</string>
    <string name="device_owner_wifi_key_management_wep_button">WEP</string>
    <string name="create_wifi_config_button_label">Create WiFi configuration</string>
    <string name="wifi_lockdown_add_network_failed_dialog_title">WiFi configuration could not be created</string>
    <string name="wifi_lockdown_add_network_failed_dialog_text">
            There was an error during creation of WiFi configuration. Check if WiFi is switched on.
    </string>
    <string name="device_owner_wifi_config_unlocked_modification_test">Unlocked config is modifiable in Settings</string>
    <string name="device_owner_wifi_config_unlocked_modification_test_info">
            Please press the button to ensure WiFi config lockdown is NOT in effect. Then go to
            Settings &gt; WiFi and see if the CTSVerifier created WiFi configuration can be edited.
            Please make sure you can connect to it. The test is successful if the config is editable
            and can be connected to.
    </string>
    <string name="device_owner_wifi_config_locked_modification_test">Locked config is not modifiable in Settings</string>
    <string name="device_owner_wifi_config_locked_modification_test_info">
            Please press the button to ensure WiFi config lockdown is in effect. Then go to
            Settings &gt; WiFi and see if the CTSVerifier created WiFi configuration can NOT be edited
            or removed. The test is successful if the config is NOT modifiable.
    </string>
    <string name="device_owner_wifi_config_locked_connection_test">Locked config can be connected to</string>
    <string name="device_owner_wifi_config_locked_connection_test_info">
            Please press the button to ensure WiFi config lockdown is in effect. Then go to
            Settings &gt; WiFi and see if the CTSVerifier created WiFi configuration can be connected
            to manually. The test is successful if the connection can be established.
    </string>
    <string name="device_owner_wifi_config_unlocked_removal_test">Unlocked config can be forgotten in Settings</string>
    <string name="device_owner_wifi_config_unlocked_removal_test_info">
            Please press the button to ensure WiFi config lockdown is NOT in effect. Then go to
            Settings &gt; WiFi and see if the CTSVerifier created WiFi configuration can be forgotten.
            The test is successful if the config could be forgotten and is removed from the list of saved configs.
    </string>
    <string name="device_owner_disable_statusbar_test">Disable status bar</string>
    <string name="device_owner_disable_statusbar_test_info">
            Please press the below button to disable the status bar and verify that quick settings, notifications
            and the assistant gesture are no longer available.\n
            Next, press the button to reenable the status bar and verify that quick settings, notification
            and the assistant gesture are available again.\n
            Please mark the test accordingly.
    </string>
    <string name="device_owner_disable_statusbar_button">Disable status bar</string>
    <string name="device_owner_reenable_statusbar_button">Reenable status bar</string>
    <string name="device_owner_disable_keyguard_test">Disable keyguard</string>
    <string name="device_owner_disable_keyguard_test_info">
            Before running this test, please make sure you have not set any device lockscreen password.\n
            Please press the below button to disable the keyguard. Press the power button on your device to
            switch off the screen. Then press the power button to switch the screen back on and verify that
            no keyguard was shown.\n
            Next, press the button to reenable the keyguard and repeat the above steps, this time verifying that
            a keyguard was shown.\n
            Please mark the test accordingly.
    </string>
    <string name="device_owner_disable_keyguard_button">Disable keyguard</string>
    <string name="device_owner_reenable_keyguard_button">Reenable keyguard</string>
    <string name="device_owner_lock_task_ui_test">LockTask UI</string>
    <string name="device_owner_lock_task_ui_test_info">
            The following tests verify the configurable UI during LockTask, a special mode that
            prevents the user from leaving the current application.\n\n
            Please make sure the lock screen is turned on before the test. Press the button below to
            start LockTask mode. Then mark each item as \'pass\' or \'fail\' according to the
            instructions.\n\n
            Finally, execute the last test item to leave LockTask mode.
    </string>
    <string name="start_lock_task_button_label">Start LockTask mode</string>
    <string name="device_owner_lock_task_ui_default_test">Default LockTask UI</string>
    <string name="device_owner_lock_task_ui_default_test_info">
            Press the button below to reset to default LockTask UI.
            Observe the following UI restrictions. Mark the test as \'pass\' only if ALL of the
            requirements below are met.\n\n
            1) Nothing is shown in the status bar, including notification icons, connectivity icons,
            battery status, clock, etc.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar.\n
            3) The software Home button is hidden.\n
            4) The software Overview button is hidden and the Overview gesture (swipe-up) does not
            work.\n
            5) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            6) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            7) The assistant gesture isn\'t available.
    </string>
    <string name="device_owner_lock_task_ui_system_info_test">Enable system info</string>
    <string name="device_owner_lock_task_ui_system_info_test_info">
            Press the button below to enable system info. Observe the system info area of the status
            bar is now enabled. This includes the clock, connectivity info, battery info, etc.\n\n
            The rest of the UI restrictions should still apply:\n
            1) Notification icons are still hidden on the status bar.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar.\n
            3) The software Home button is hidden.\n
            4) The software Overview button is hidden and the Overview gesture (swipe-up) does not
            work.\n
            5) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            6) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            7) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.
    </string>
    <string name="device_owner_lock_task_ui_notifications_test">Enable notifications</string>
    <string name="device_owner_lock_task_ui_notifications_test_info">
            Press the button below to enable notifications. Observe the notification icons on the
            status bar are now enabled and the Home button is shown. The status bar can also be
            expanded to show the notifications. However, all Settings UI should remain invisible,
            including Quick Settings and any link to the Settings app.\n\n
            The rest of the UI restrictions should still apply:\n
            1) System info area is still hidden on the status bar.\n
            2) The software Overview button is hidden and the Overview gesture (swipe-up) does not
            work.\n
            3) Holding the Home button and swiping to the right does not bring up other tasks.\n
            4) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            5) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            6) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.
    </string>
    <string name="device_owner_lock_task_ui_home_test">Enable Home button</string>
    <string name="device_owner_lock_task_ui_home_test_info">
            Press the button below to enable the Home button. Observe the Home button is now
            enabled.\n\n
            The rest of the UI restrictions should still apply:\n
            1) Nothing is shown in the status bar, including notification icons, connectivity icons,
            battery status, clock, etc.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar.\n
            3) The software Overview button is hidden and the Overview gesture (swipe-up) does not
            work.\n
            4) Holding the Home button and swiping to the right does not bring up other tasks.\n
            5) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            6) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            7) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.
    </string>
    <string name="device_owner_lock_task_ui_recents_test">Enable Overview button</string>
    <string name="device_owner_lock_task_ui_recents_test_info">
            Press the button below to enable the Overview button. Observe the Home button is now
            enabled. Press the Overview button or perform the Overview gesture
            (swipe up) and verify the Overview view can be opened.\n\n
            The rest of the UI restrictions should still apply:\n
            1) Nothing is shown in the status bar, including notification icons, connectivity icons,
            battery status, clock, etc.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar.\n
            3) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            4) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            5) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.
    </string>
    <string name="device_owner_lock_task_ui_global_actions_test">Enable global actions</string>
    <string name="device_owner_lock_task_ui_global_actions_test_info">
            Press the button below to enable global actions (a.k.a. power button menu). Long-press
            the power button and verify a menu containing power-off and restart buttons is shown.
            This menu can\'t contain any UI that allows the user to change system settings (such as
            airplane mode switch) or access the Settings app.\n\n
            The rest of the UI restrictions should still apply:\n
            1) Nothing is shown in the status bar, including notification icons, connectivity icons,
            battery status, clock, etc.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar.\n
            3) The software Home button is hidden.\n
            4) The software Overview button is hidden and the Overview gesture (swipe-up) does not
            work.\n
            5) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            6) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.
    </string>
    <string name="device_owner_lock_task_ui_keyguard_test">Enable keyguard</string>
    <string name="device_owner_lock_task_ui_keyguard_test_info">
            Press the button below to enable keyguard. Press the power button to turn off the screen
            and press it again to turn the screen back on. Verify that the lock screen is shown.\n\n
            The rest of the UI restrictions should still apply, both on the lock screen and after
            the lock screen is dismissed:\n
            1) Nothing is shown in the status bar, including notification icons, connectivity icons,
            battery status, clock, etc.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar, even on the lock screen.\n
            3) The software Home button is hidden.\n
            4) The software Overview button is hidden and the Overview gesture (swipe-up) does not
            work.\n
            5) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            6) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.
    </string>
    <string name="device_owner_lock_task_ui_stop_lock_task_test">Stop LockTask mode</string>
    <string name="device_owner_lock_task_ui_stop_lock_task_test_info">
            Press the button below to exit LockTask mode.\n\n
            Observe that the UI has returned to the normal, unrestricted state, and is no longer
            subject to any LockTask restriction.\n\n
            Mark the test as \'pass\' or \'fail\' accordingly.
    </string>
    <string name="device_owner_lockscreen_secure">Please remove lockscreen password</string>
    <string name="device_profile_owner_permission_lockdown_test">Permissions lockdown</string>
    <string name="device_profile_owner_permission_lockdown_test_instructions">
            Select each of the three grant states for the permission shown below in turn.\n
            Now open application settings, select Permissions, and verify if the following behavior is observed.\n
            <b>Grant:</b> Permission is granted to the app and cannot be changed through the settings UI. A support message is available through an accessible mechanism, such as by attempting to change it or via an information button.\n
            <b>Let user decide:</b> Permission state can be changed through the settings UI.\n
            <b>Deny:</b> Permission is denied to the app and cannot be changed through the settings UI. A support message is available through an accessible mechanism, such as by attempting to change it or via an information button.\n
            Please mark the test accordingly.
    </string>
    <string name="device_owner_permission_lockdown_test_info">
        This test checks if the permissions state in settings UI is locked down according to the state set by the device owner.
    </string>
    <string name="device_owner_disallow_usb_file_transfer_test">Disallow USB file transfer</string>
    <string name="device_owner_disallow_usb_file_transfer_test_info">
            Please press below button to set the \"disallow USB file transfer\" restriction.\n
            If a USB notification appears, open the notification and check that the
            \"Transfer files (MTP)\" and \"Transfer photos (PTP)\" options either are not displayed,
            or they trigger a support message when trying to select them.\n
            Check if you can mount the device as a USB drive on your desktop computer. The test is
            successful if you cannot mount the device, and files from your phone cannot be
            downloaded through USB.\n
            Please mark the test accordingly.
    </string>
    <string name="device_owner_set_user_icon">Setting the user icon</string>
    <string name="device_owner_set_user_icon_instruction">
        This test verifies that the user icon can be set by the device owner, depending on whether the user restriction is set or not.\n
        1. Press the \"Set user icon 1\" button.\n
        2. Press the \"Go\" button to go to Settings.\n
        3. If there is no \"users\" section, mark this test as passed.\n
        4. If the icon of the user \"owner\" is not \"1\", mark this test as failed.\n
        5. Press the \"Disallow set user icon\" button.\n
        6. Press the \"Set user icon 2\" button.\n
        7. Press the \"Go\" button to go to Settings. Verify that the icon can\'t be changed manually.\n
        8. Check that the icon of the user \"owner\" is \"2\", and mark this test accordingly.
    </string>
    <string name="device_owner_set_user_icon_button">Set user icon 1</string>
    <string name="device_owner_set_user_icon2_button">Set user icon 2</string>

    <string name="profile_owner_permission_lockdown_test_info">
        <b>
        Before proceeding, check if com.android.cts.permissionapp (aka CtsPermissionApp) is installed in work profile by going to Settings &gt; Apps. If not, please install the app before proceeding.\n\n
        </b>
        This test checks if the permissions state in settings UI is locked down correctly depending on the state set by the profile owner.
    </string>
    <string name="package_not_found">You must install %s (aka CtsPermissionApp).</string>
    <string name="permission_allow">Grant</string>
    <string name="permission_default">Let user decide</string>
    <string name="permission_deny">Deny</string>
    <string name="not_profile_owner">%s is not profile owner.</string>
    <string name="not_device_owner">%s is not device owner.</string>
    <string name="activity_not_found">No activity found to handle intent: %s</string>
    <string name="open_settings_button_label">Open Application Settings</string>
    <string name="finish_button_label">Finish</string>
    <string name="device_owner_device_admin_visible">Device administrator settings</string>
    <string name="device_owner_device_admin_visible_info">
        Please press the Go button to open the Security page in Settings.
        Navigate to Device administrators and confirm that:\n
        \n
        - \"CTS Verifier\" exists and is activated.\n
        - \"CTS Verifier\" cannot be disabled.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_config_bt">Disallow configuring Bluetooth</string>
    <string name="device_owner_disallow_config_bt_info">
        Please press the Set restriction button to set the user restriction.
        Then press Go to open the Bluetooth page in Settings.
        Confirm that:\n
        \n
        - You cannot view Bluetooth devices in range.\n
        - Trying to edit, add or remove any already paired devices triggers a support message.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_config_wifi">Disallow configuring WiFi</string>
    <string name="device_owner_disallow_config_wifi_info">
        Please press the Set restriction button to set the user restriction.
        Then press Go to open the WiFi page in Settings.
        Confirm that:\n\n
        - You cannot view WiFi networks in range.\n
        - Trying to edit, add or remove any existing WiFi configs triggers a support message.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_ambient_display">Disallow ambient display</string>
    <string name="device_owner_disallow_ambient_display_info">
        Please press the Set restriction button to set the user restriction.
        Then press Go to open the Display page in Settings.
        Mark this test as passed if one of the following:\n\n
        - There is no ambient display setting in Display Settings.\n
        - Ambient display setting is disabled with an info icon on it. Clicking on it triggers a support dialog.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_data_roaming">Disallow data roaming</string>
    <string name="device_owner_disallow_data_roaming_info">
        Device should have a sim card to perform this test.
        Please press the Set restriction button to set the user restriction.
        Then press Go to open the Mobile network page in Settings.
        Confirm that:\n\n
        - Data roaming is disabled.\n
        - Enabling data roaming is not possible and triggers a support message.\n\n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_factory_reset">Disallow factory reset</string>
    <string name="device_owner_disallow_factory_reset_info">
        Please press the Set button to set the user restriction.\n
        1. Go to the factory reset settings. It is often located in \"Backup &amp; reset\" settings.\n
        Confirm that:\n
           - Factory data reset is disabled.\n
           - Pressing factory data reset is not possible and triggers a support message.\n\n
        2. Go to OEM unlocking settings, if this device has this Settings option. It is often located under \"Developer options\".\n
        Confirm that:\n
           - Oem Unlocking is disabled.\n
           - Enabling Oem unlocking is not possible and triggers a support message.\n\n
        Return back to this page.
    </string>
    <string name="device_owner_user_restriction_set">Set restriction</string>
    <string name="device_owner_user_restriction_unset">Unset restriction</string>
    <string name="device_owner_settings_go">Go</string>

    <string name="device_owner_vpn_connection">
        VPN connection has been established.\n
        This is not as expected.\n
        Mark this test as failed.\n
    </string>
    <string name="device_owner_vpn_connection_close_failed">
        Established vpn connection cannot be closed.\n
        This is not as expected.\n
        Mark this test as failed.\n
    </string>
    <string name="device_owner_no_vpn_connection">
        Cannot establish a VPN connection.\n
        This was expected.\n
        Mark this test as passed.\n
    </string>
    <string name="device_owner_vpn_test">Check VPN</string>
    <string name="device_owner_vpn_info_default">VPN test message</string>

    <string name="device_owner_disallow_config_vpn">Disallow configuring VPN</string>
    <string name="device_owner_disallow_config_vpn_info">
        Please press the Set VPN restriction button to set the VPN restriction.
        Perform tests in order. Mark test as passed if both test cases pass\n\n
        1. Press Go to attempt to open the VPN settings page.\n
        You should either see (a) the VPN settings page or (b) that the Intent
        android.settings.VPN_SETTINGS fails to resolve.\n
        In the case of (a), confirm that:\n
        - Trying to perform any of the above actions will trigger a support message.\n
        In the case of (b) this step is successful.\n\n
        2. Press Check VPN to check programmatic Vpn test.\n
        - Check Vpn setup is not allowed\n
        - If prompted to allow a VPN connection, press OK.\n\n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_user_vpn_restriction_set">Set VPN restriction</string>

    <!-- Strings for DeviceOwnerBugreportTest -->
    <string name="device_owner_requesting_bugreport_tests">Device Owner Requesting Bugreport Tests</string>
    <string name="device_owner_requesting_bugreport_category">Device Owner Requesting Bugreport Tests</string>
    <string name="device_owner_requesting_bugreport_tests_info">
            The device owner requesting bugreport tests verify that a bugreport can be requested on a corporate owned device.\n
            Press below button first, follow steps described in the dialog that pops up,
            then proceed to the test cases.\n
            Pressing \'back\', \'pass\' or \'fail\' on this test page will remove the device owner.\n
            Alternatively, you can run the \'Remove device owner\' test. Ideally, that test should
            be run last so that it does not interfere with other tests.
    </string>
    <string name="device_owner_request_bugreport">Request bugreport</string>
    <string name="bugreport_sharing_declined">Bugreport sharing declined</string>
    <string name="bugreport_shared_successfully">Bugreport shared successfully</string>
    <string name="bugreport_already_in_progress">Bugreport is already being collected on this device</string>
    <string name="bugreport_failed_completing">Bugreport collection operation failed</string>
    <string name="device_owner_bugreport_sharing_declined_while_being_taken">Sharing of requested bugreport declined while being taken</string>
    <string name="device_owner_bugreport_sharing_declined_while_being_taken_info">
        Please press the \"Request bugreport\" button to invoke the bugreport sharing operation.
        Open the notifications panel and verify that:\n
        \n
        - Notification titled \"Taking bugreport...\" with an indefinite progress bar is present.\n
        \n
        Press the \"Request bugreport\" button again to try to invoke a second bugreport sharing operation.
        Open the notifications panel and verify that:\n
        \n
        - Notification titled \"Device Owner Requesting Bugreport Tests\" with message \"Bugreport is already being collected on this device\" is present. Dismiss that notification.\n
        - Tapping on the \"Taking bugreport...\" notification opens a dialog titled \"Share bug report?\", that contains a message \"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared, and your device may temporarily slow down.\" and two buttons - \"DECLINE\" and \"SHARE\".\n
        \n
        Tap the \"DECLINE\" button and verify that:\n
        \n
        - \"Taking bugreport...\" notification with an indefinite progress bar is no longer present.\n
        - Notification titled \"Device Owner Requesting Bugreport Tests\" with message \"Bugreport sharing declined\" is present.\n
        \n
        Dismiss the notifications and mark test as passed or failed.
    </string>
    <string name="device_owner_bugreport_sharing_accepted_while_being_taken">Sharing of requested bugreport accepted while being taken</string>
    <string name="device_owner_bugreport_sharing_accepted_while_being_taken_info">
        Please press the \"Request bugreport\" button to invoke the bugreport sharing operation.
        Open the notifications panel and verify that:\n
        \n
        - Notification titled \"Taking bugreport...\" with an indefinite progress bar is present.\n
        - Tapping on the \"Taking bugreport...\" notification opens a dialog titled \"Share bug report?\", that contains a message \"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared, and your device may temporarily slow down.\" and two buttons - \"DECLINE\" and \"SHARE\".\n
        \n
        Tap the \"SHARE\" button and verify that:\n
        \n
        - \"Taking bugreport...\" notification with an indefinite progress bar is no longer present.\n
        - Notification titled \"Sharing bugreport...\" with an indefinite progress bar is present.\n
        - After a few minutes (time necessary to wait for bugreport being collected) notification titled \"Sharing bugreport...\" is automatically dismissed and notification titled \"Device Owner Requesting Bugreport Tests\" with message \"Bugreport shared successfully\" is present.\n
        \n
        Dismiss the notifications and mark test as passed or failed.
    </string>
    <string name="device_owner_bugreport_sharing_declined_after_having_been_taken">Sharing of requested bugreport declined after having been taken</string>
    <string name="device_owner_bugreport_sharing_declined_after_having_been_taken_info">
        Please press the \"Request bugreport\" button to invoke the bugreport sharing operation.
        Open the notifications panel and verify that:\n
        \n
        - Notification titled \"Taking bugreport...\" with an indefinite progress bar is present.\n
        \n
        Wait for a few minutes (time necessary for bugreport to be collected) and verify that:\n
        \n
        - \"Taking bugreport...\" notification with an indefinite progress bar is dismissed.\n
        - Notification titled \"Share bug report?\", that contains a message \"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared.\" and two buttons - \"DECLINE\" and \"SHARE\" is shown.\n
        \n
        Tap the \"DECLINE\" button and verify that:\n
        \n
        - Notification titled \"Share bug report?\" is dismissed.\n
        - Notification titled \"Device Owner Requesting Bugreport Tests\" with message \"Bugreport sharing declined\" is present.\n
        \n
        Dismiss the notifications and mark test as passed or failed.
    </string>
    <string name="device_owner_bugreport_sharing_accepted_after_having_been_taken">Sharing of requested bugreport accepted after having been taken</string>
    <string name="device_owner_bugreport_sharing_accepted_after_having_been_taken_info">
        Please press the \"Request bugreport\" button to invoke the bugreport sharing operation.
        Open the notifications panel and verify that:\n
        \n
        - Notification titled \"Taking bugreport...\" with an indefinite progress bar is present.\n
        \n
        Wait for a few minutes (time necessary for bugreport to be collected) and verify that:\n
        \n
        - \"Taking bugreport...\" notification with an indefinite progress bar is dismissed.\n
        - Notification titled \"Share bug report?\", that contains a message \"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared.\" and two buttons - \"DECLINE\" and \"SHARE\" is shown.\n
        \n
        Tap the \"SHARE\" button and verify that:\n
        \n
        - Notification titled \"Share bug report?\" is dismissed.\n
        - Notification titled \"Device Owner Requesting Bugreport Tests\" with message \"Bugreport shared successfully\" is present.\n
        \n
        Dismiss the notifications and mark test as passed or failed.
    </string>

    <!-- Strings used for policy transparency test -->
    <string name="device_profile_owner_policy_transparency_test">Policy transparency test</string>
    <string name="device_profile_owner_policy_transparency_test_info">
        This test checks that if an admin has enforced a policy, we let the user know about this.\nSet the short and long support messages before proceeding with the tests.
    </string>
    <string name="policy_transparency_open_settings_label">Open settings</string>
    <string name="policy_transparency_short_support_msg_label">Set short support message</string>
    <string name="policy_transparency_long_support_msg_label">Set long support message</string>
    <string name="policy_transparency_set_msg">Set message</string>
    <string name="policy_transparency_clear_msg">Clear message</string>
    <string name="policy_transparency_set_default_msg">Set default message</string>
    <string name="policy_transparency_default_short_msg">
        This action is disabled by your administrator. Contact someone@example.com for support.
    </string>
    <string name="policy_transparency_default_long_msg">
        This profile or device is managed by CtsVerifier. You can contact tech
        support on:\n\n
        America: +1 555-0100\n\n
        APAC: +1 555-0100\n\n
        Europe: +1 555-0100\n\n
        Email: someone@example.com
    </string>
    <string name="policy_transparency_update_button_label">Update</string>
    <string name="dummy_input_method_label">Dummy input method</string>
    <string name="dummy_accessibility_service_label">Dummy accessibility service</string>
    <string name="policy_transparency_test_instructions">
        1. <xliff:g id="set_step" example="Set policy by turning the switch on">%1$s</xliff:g>\n
        2. Open Settings app by clicking the "Open settings" button below. Note that this will open the personal Settings app. If this device has the work settings in a different app or screen, then navigate there, ignoring the button if necessary.\n
        3. Verify that performing the following action will trigger a support dialog:\n
           <xliff:g id="user_action" example="Adding an account">%2$s</xliff:g>.\n
        4. Verify that the support dialog displays the short support message set earlier.\n
        5. Verify that clicking the "Learn more" link will redirect to Device administrators
           page in Settings app which displays the long support message set earlier.\n
    </string>
    <string name="user_restriction_set_step">
        Set \'%s\' user restriction by turning on the switch below.
    </string>
    <string name="disallow_add_user">Disallow add user</string>
    <string name="disallow_add_user_action">Adding a new user</string>
    <string name="disallow_adjust_volume">Disallow adjust volume</string>
    <string name="disallow_adjust_volume_action">Adjusting the volume</string>
    <string name="disallow_config_date_time">Disallow config date time</string>
    <string name="disallow_config_date_time_action">Configuring auto time, time, auto date or date</string>
    <string name="disallow_config_location">Disallow config location</string>
    <string name="disallow_config_location_action">Enabling or disabling location in settings or quick settings</string>
    <string name="disallow_airplane_mode">Disallow airplane mode</string>
    <string name="disallow_airplane_mode_action">Toggling airplane mode switch bar or changing airplane mode state in quick settings</string>
    <string name="disallow_config_screen_timeout">Disallow config screen timeout</string>
    <string name="disallow_config_screen_timeout_action">Configuring sleep options in Display settings</string>
    <string name="disallow_config_brightness">Disallow config brightness</string>
    <string name="disallow_config_brightness_action">Configuring brightness level or adaptive brightness in Display settings, or toggling brightness slider in quick settings</string>
    <string name="disallow_apps_control">Disallow controlling apps</string>
    <string name="disallow_apps_control_action">DISABLE/UNINSTALL/FORCE STOP-ing any app in the managed device/profile other than CtsVerifier</string>
    <string name="disallow_config_cell_broadcasts">Disallow config cell broadcasts</string>
    <string name="disallow_config_cell_broadcasts_action">Configuring emergency alerts(cell broadcasts)</string>
    <string name="disallow_config_credentials">Disallow config credentials</string>
    <string name="disallow_config_credentials_action">Configuring user credentials</string>
    <string name="disallow_config_mobile_networks">Disallow config mobile networks</string>
    <string name="disallow_config_mobile_networks_action">Configuring mobile networks</string>
    <string name="disallow_config_tethering">Disallow config tethering</string>
    <string name="disallow_config_tethering_action">
        Configuring tethering and portable hotspots.\n
        NOTE: If the device does not support tethering please skip this test and mark it as passing.\n
    </string>
    <string name="disallow_config_wifi">Disallow config Wi-Fi</string>
    <string name="disallow_config_wifi_action">Modifying Wi-Fi configuration</string>
    <string name="disallow_debugging_features">Disallow debugging features</string>
    <string name="disallow_debugging_features_action">Enabling developer options</string>
    <string name="disallow_factory_reset">Disallow factory reset</string>
    <string name="disallow_factory_reset_action">Factory resetting the device</string>
    <string name="disallow_fun">Disallow fun</string>
    <string name="disallow_fun_action">Opening android easter egg game by tapping repeatedly on the \'Android version\' option</string>
    <string name="disallow_install_unknown_sources">Disallow install unknown sources</string>
    <string name="disallow_install_unknown_sources_action">Enabling \'Cts Verifier\' to install apps</string>
    <string name="disallow_install_unknown_sources_globally">Disallow install unknown sources globally</string>
    <string name="disallow_install_unknown_sources_globally_action">Enabling \'Cts Verifier\' to install apps device-wide</string>
    <string name="disallow_modify_accounts">Disallow modify accounts</string>
    <string name="disallow_modify_accounts_action">Adding an account, and also removing an account (after you have previously added one)</string>
    <string name="disallow_network_reset">Disallow network reset</string>
    <string name="disallow_network_reset_action">Resetting network settings</string>
    <string name="disallow_outgoing_beam">Disallow outgoing beam</string>
    <string name="disallow_outgoing_beam_action">Switching on android beam</string>
    <string name="disallow_remove_user">Disallow remove user</string>
    <string name="device_owner_disallow_remove_user_info">
        Please press \'Create uninitialized user\' to create a user that is not set up. Then press the
        \'Set restriction\' button to set the user restriction.
        Then press \'Go\' to open \'Multiple users\' setting. \n\n
        If the main switch is disabled, enable it.\n\n
        Click the Settings icon adjacent to the managed user.\n\n

        Mark this test as passed if:\n\n
        - \"Delete User\" is disabled.\n
        - Tapping \"Delete user\" shows an \"Action not allowed\" dialog.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="managed_user_disallow_remove_user_info">
        Please press the \'Set restriction\' button to set the user restriction.
        Then press \'Go\' to open \'Multiple users\' setting. \n\n

        Mark this test as passed if all of the following conditions are met:\n\n
        - The \"Delete managed user from this device\" option in the overflow menu is disabled\n
        - Clicking \"Delete managed user from this device\" in the overflow menu results in an \"Action not allowed\" dialog.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_remove_user_create_user">Create uninitialized user</string>
    <string name="disallow_remove_managed_profile">Disallow remove managed profile</string>
    <string name="disallow_remove_managed_profile_action">Removing the work profile. It shouldn\'t be possible neither from the Accounts screen nor the Device Administrators screen (after selecting the Device Administrator that corresponds to the badged version of \"CTS Verifier\")</string>
    <string name="disallow_share_location">Disallow share location</string>
    <string name="disallow_share_location_action">Turning on location sharing</string>
    <string name="disallow_set_user_icon">Disallow set user icon</string>
    <string name="disallow_uninstall_apps">Disallow uninstall apps</string>
    <string name="disallow_uninstall_apps_action">
        a. If testing in work profile: uninstall applications from the work profile (badged applications) other than CtsVerifier and system apps. \n
        b. Otherwise: uninstall applications other than CtsVerifier and system apps
    </string>
    <string name="disallow_unified_challenge">Disallow unified challenge</string>
    <string name="disallow_unified_challenge_action">Setting one lock for both personal and work profiles. IMPORTANT: Separate work lock should be set prior to this test in Set work lock test</string>
    <string name="disallow_keyguard_unredacted_notifications">Disallow lockscreen unredacted notification</string>
    <string name="disallow_keyguard_unredacted_notifications_set_step">Disallow unredacted notifications when device is locked by turning on the switch below</string>
    <string name="disallow_keyguard_unredacted_notifications_action">Selecting show all notification content when device is locked</string>
    <string name="disallow_keyguard_unredacted_notifications_widget_label">@string/disallow_keyguard_unredacted_notifications</string>
    <string name="set_auto_time_required">Set auto (network) time required</string>
    <string name="auto_time_required_set_step">Set auto time required policy by turning on the switch below</string>
    <string name="set_auto_time_required_action">Modifying date and time</string>
    <string name="set_auto_time_required_widget_label">@string/set_auto_time_required</string>
    <string name="set_lock_screen_info">Set lock screen info</string>
    <string name="lock_screen_info_set_step">Select a lock screen info by setting a non-empty message in the edittext below.</string>
    <string name="set_lock_screen_info_action">Modifying lock screen message</string>
    <string name="set_lock_screen_info_widget_label">@string/set_lock_screen_info</string>
    <string name="set_maximum_time_to_lock">Set maximum time to lock</string>
    <string name="maximum_time_to_lock_set_step">
        Select a non-zero maximum time to lock value by setting a value in the edittext box below.
    </string>
    <string name="set_maximum_time_to_lock_action">Selecting maximum time to lock greater than the set value below</string>
    <string name="set_maximum_time_to_lock_widget_label">Set maximum time to lock (in Sec):</string>
    <string name="set_password_quality">Set password quality</string>
    <string name="password_quality_set_step">Set minimum password quality by selecting an option in the spinner below.</string>
    <string name="set_password_quality_action">Setting a password which does not meet the requirements of the password quality selected</string>
    <string name="set_password_quality_widget_label">@string/set_password_quality</string>
    <string name="password_quality_unspecified">Unspecified</string>
    <string name="password_quality_something">Something</string>
    <string name="password_quality_numeric">Numeric</string>
    <string name="password_quality_numeric_complex">Numeric (Complex)</string>
    <string name="password_quality_alphabetic">Alphabetic</string>
    <string name="password_quality_alphanumeric">Alphanumeric</string>
    <string name="password_quality_complex">Complex</string>
    <string name="set_permitted_accessibility_services">Set permitted accessibility services</string>
    <string name="permitted_accessibility_services_set_step">
        Check that \'Dummy Accessibility service\' is not enabled in Settings and disallow \'Dummy Accessibility service\' from permitted accessibility services by turning on
        the switch below.
    </string>
    <string name="set_permitted_accessibility_services_action">
        Enabling \'Dummy Accessibility service\' in the list of accessibility services
    </string>
    <string name="set_permitted_accessibility_services_widget_label">
        Allow only system accessibility services:
    </string>
    <string name="set_permitted_input_methods">Set permitted input methods</string>
    <string name="permitted_input_methods_set_step">
        Check that \'Dummy Input method\', along with all other non-system apps, are not enabled in Settings for the managed profile (they may be enabled for the primary profile). Then disallow \'Dummy Input method\' from permitted input methods by turning on the switch below.
    </string>
    <string name="set_permitted_input_methods_action">
        Enabling \'Dummy Input method\' in the list of input methods (make sure you are enabling it for the managed profile, not primary profile)
    </string>
    <string name="set_permitted_input_methods_widget_label">
        Allow only system input methods:
    </string>

    <!-- Strings used for enterprise privacy tests -->
    <string name="enterprise_privacy_test">Managed device info tests</string>
    <string name="enterprise_privacy_page">Managed device info page</string>
    <string name="enterprise_privacy_page_info">
        Please press the Go button to open Settings. Verify that:\n
        1) One of the Settings screens contains an entry for managed device information.\n
        2) Tapping that entry opens a screen.\n
        3) In this screen, at a minimum, you are told your organization can:\n
        * Change settings on this device.\n
        * See data associated with your work account.\n
        * See the list of all apps on your device.\n
        * See usage of each app on your device.\n
        * Lock the device and change the password.\n
        * Wipe the device.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_open_settings">Open Settings</string>
    <string name="enterprise_privacy_network_logging">Retrieve traffic logs</string>
    <string name="enterprise_privacy_network_logging_info">
        Please do the following:\n
        1) Press the Retrieve Traffic Logs button and record the time at which you did this.\n
        2) Wait one minute.\n
        3) Press the Open Settings button.\n
        4) In the screen that opens, verify that you are told traffic logs were last retrieved at the time you pressed the Retrieve Traffic Logs button in step (1).\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_retrieve_network_logs">Retrieve Traffic Logs</string>
    <string name="enterprise_privacy_bug_report">Request bug report</string>
    <string name="enterprise_privacy_bug_report_info">
        Please do the following:\n
        1) Press the Request Bug Report button and record the time at which you did this.\n
        2) Wait one minute.\n
        3) Press the Open Settings button.\n
        4) In the screen that opens, verify that you are told a bug report was last requested at the time you pressed the Request Bug Report button in step (1).\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_request_bug_report">Request Bug Report</string>
    <string name="enterprise_privacy_security_logging">Retrieve security logs</string>
    <string name="enterprise_privacy_security_logging_info">
        Please do the following:\n
        1) Press the Retrieve Security Logs button and record the time at which you did this.\n
        2) Wait one minute.\n
        3) Press the Open Settings button.\n
        4) In the screen that opens, verify that you are told security logs were last retrieved at the time you pressed the Retrieve Security Logs button in step (1).\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_retrieve_security_logs">Retrieve Security Logs</string>
    <string name="enterprise_privacy_clear_organization">Clear Org</string>
    <string name="enterprise_privacy_set_organization">Set Org</string>
    <string name="enterprise_privacy_enterprise_installed_apps">Enterprise-installed apps</string>
    <string name="enterprise_privacy_enterprise_installed_apps_info">
        Please do the following:\n
        1) You should have received NotificationBot.apk together with the CTS verifier. If you built the CTS verifier yourself, build the NotificationBot.apk by issuing the following command on the host:\n
            make NotificationBot\n
        2) Upload the NotificationBot.apk to your device by issuing the following command on the host:\n
            adb push /path/to/NotificationBot.apk /sdcard\n
        3) Press the Uninstall button.\n
        4) Press the Open Settings button.\n
        5) In the screen that opens, verify that you are not told that your administrator installed any apps.\n
        6) Use the Back button to return to this page.\n
        7) Press the Install button.\n
        8) Press the Open Settings button.\n
        9) In the screen that opens, verify that you are told now that your administrator installed at least one app.\n
        10) Tap on that information. Verify that a list of apps installed shows.\n
        11) Verify that the list contains the CTS Robot app.\n
        12) Use the Back button to return to this page.\n
        13) Press the Uninstall button.\n
        14) Issue the following command on the host:\n
            adb shell rm /sdcard/NotificationBot.apk
    </string>
    <string name="enterprise_privacy_install">Install</string>
    <string name="enterprise_privacy_uninstall">Uninstall</string>
    <string name="enterprise_privacy_admin_granted_location_access">Location access permission</string>
    <string name="enterprise_privacy_admin_granted_location_access_info">
        Please do the following:\n
        1) Press the Reset button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator has granted location access to any apps.\n
        4) Use the Back button to return to this page.\n
        5) Press the Grant button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are told now that your administrator has granted location access to at least one app.\n
        8) Tap on that information. Verify that a list of apps which have location access shows.\n
        9) Verify that the list contains the CTS Verifier app.\n
        10) Use the Back button to return to this page.\n
        11) Press the Reset button.
    </string>
    <string name="enterprise_privacy_reset">Reset</string>
    <string name="enterprise_privacy_grant">Grant</string>
    <string name="enterprise_privacy_admin_granted_microphone_access">Microphone access permission</string>
    <string name="enterprise_privacy_admin_granted_microphone_access_info">
        Please do the following:\n
        1) Press the Reset button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator has granted microphone access to any apps.\n
        4) Use the Back button to return to this page.\n
        5) Press the Grant button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are told now that your administrator has granted microphone access to at least one app.\n
        8) Tap on that information. Verify that a list of apps that have microphone access shows.\n
        9) Verify that the list contains the CTS Verifier app.\n
        10) Use the Back button to return to this page.\n
        11) Press the Reset button.
    </string>
    <string name="enterprise_privacy_admin_granted_camera_access">Camera access permission</string>
    <string name="enterprise_privacy_admin_granted_camera_access_info">
        Please do the following:\n
        1) Press the Reset button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator has granted camera access to any apps.\n
        4) Use the Back button to return to this page.\n
        5) Press the Grant button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are told now that your administrator has granted camera access to at least one app.\n
        8) Tap on that information. Verify that a list of apps that have camera access shows.\n
        9) Verify that the list contains the CTS Verifier app.\n
        10) Use the Back button to return to this page.\n
        11) Press the Reset button.
    </string>
    <string name="enterprise_privacy_default_apps">Default apps</string>
    <string name="enterprise_privacy_default_apps_info">
        Please do the following:\n
        1) Press the Reset button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator set any default apps.\n
        4) Use the Back button to return to this page.\n
        5) Press the Set Default Apps button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are now told that your administrator has set 6 default apps.\n
        8) Tap on that information. Verify that a list of default apps shows, with 6 elements in it.\n
        9) Verify that each element shows the CTS Verifier is the default app.\n
        10) Use the Back button to return to this page.\n
        11) Press the Reset button.
    </string>
    <string name="enterprise_privacy_set_default_apps">Set Default Apps</string>
    <string name="enterprise_privacy_default_ime">Default keyboard</string>
    <string name="enterprise_privacy_default_ime_info">
        Please do the following:\n
        1) Press the Open Settings button.\n
        2) In the screen that opens, verify that you are not told the default keyboard has been set.\n
        3) Use the Back button to return to this page.\n
        4) Press the Set Keyboard button to set the default keyboard.\n
        5) Repeat steps (1) through (3), verifying that in step (2), you are told now that the default keyboard has been set to CTS Verifier.\n
        6) Press the Finish button to clear the default keyboard.
    </string>
    <string name="enterprise_privacy_set_keyboard">Set Keyboard</string>
    <string name="enterprise_privacy_finish">Finish</string>
    <string name="enterprise_privacy_always_on_vpn">Always-on VPN</string>
    <string name="enterprise_privacy_always_on_vpn_info">
        Please do the following:\n
        1) Press the Open Settings button.\n
        2) In the screen that opens, verify that you are not told that an always-on VPN is set.\n
        3) Use the Back button to return to this page.\n
        4) Press the Set VPN button to set an always-on VPN.\n
        5) Repeat steps (1) through (3), verifying that in step (2), you are told now that an always-on VPN is set.\n
        6) Press the Finish button to clear the always-on VPN.
    </string>
    <string name="enterprise_privacy_set_always_on_vpn">Set VPN</string>
    <string name="enterprise_privacy_comp_always_on_vpn">Always-on VPN (managed profile)</string>
    <string name="enterprise_privacy_comp_always_on_vpn_info">
        Please do the following:\n
        1) Press the Start button to create a work profile.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that an always-on VPN is set.\n
        4) Use the Back button to return to this page.\n
        5) Press the Set VPN button to set an always-on VPN in your work profile.\n
        6) Repeat steps (2) through (4), verifying that in step (3), you are told now that an always-on VPN is set in your work profile.\n
        7) Press the Finish button to remove the work profile and always-on VPN.
    </string>
    <string name="enterprise_privacy_start">Start</string>
    <string name="enterprise_privacy_global_http_proxy">Global HTTP Proxy</string>
    <string name="enterprise_privacy_global_http_proxy_info">
        Please do the following:\n
        1) Press the Open Settings button.\n
        2) In the screen that opens, verify that you are not told that a global HTTP proxy has been set.\n
        3) Use the Back button to return to this page.\n
        4) Press the Set Proxy button.\n
        5) Repeat steps (1) through (3), verifying that in step (2), you are told now that a global HTTP proxy has been set.\n
        6) Press the Clear Proxy button.
    </string>
    <string name="enterprise_privacy_ca_certs">Trusted CA certs</string>
    <string name="enterprise_privacy_ca_certs_info">
        Please do the following:\n
        1) Press the Open Settings button.\n
        2) In the screen that opens, verify that you are not told that your administrator installed trusted CA certs.\n
        3) Use the Back button to return to this page.\n
        4) Press the Install Cert button to install a trusted CA cert.\n
        5) Repeat steps (1) through (3), verifying that in step (2), you are told now that the administrator has installed at least one trusted CA cert.\n
        6) Press the Finish button to clear the cert.
    </string>
    <string name="enterprise_privacy_install_cert">Install Cert</string>
    <string name="enterprise_privacy_comp_ca_certs">Trusted CA certs (managed profile)</string>
    <string name="enterprise_privacy_comp_ca_certs_info">
        Please do the following:\n
        1) Press the Start button to create a work profile.\n
        2) Press the Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator installed trusted CA certs.\n
        4) Use the Back button to return to this page.\n
        5) Press the Install Cert button to install a trusted CA cert in your work profile.\n
        6) Repeat steps (2) through (4), verifying that in step (3), you are told now that the administrator has installed at least one trusted CA cert in your work profile.\n
        7) Press the Finish button to remove the work profile and cert.
    </string>
    <string name="enterprise_privacy_settings">Settings</string>
    <string name="enterprise_privacy_set_proxy">Set Proxy</string>
    <string name="enterprise_privacy_clear_proxy">Clear Proxy</string>
    <string name="enterprise_privacy_failed_password_wipe">Wipe on authentication failure</string>
    <string name="enterprise_privacy_failed_password_wipe_info">
        Please do the following:\n
        1) Press the Open Settings button.\n
        2) In the screen that opens, verify that you are not told all device data will be deleted if you mistype your password too many times.\n
        3) Use the Back button to return to this page.\n
        4) Press the Set Limit button to set the maximum number of password attempts.\n
        5) Repeat steps (1) through (3), verifying that in step (2), you are told now that all device data will be deleted if you mistype your password 100 times.\n
        6) Press the Finish button to clear the maximum number of password attempts.
    </string>
    <string name="enterprise_privacy_set_limit">Set Limit</string>
    <string name="enterprise_privacy_comp_failed_password_wipe">Wipe on authentication failure (managed profile)</string>
    <string name="enterprise_privacy_comp_failed_password_wipe_info">
        Please do the following:\n
        1) Press the Start button to create a work profile.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told work profile data will be deleted if you mistype your password too many times.\n
        4) Use the Back button to return to this page.\n
        5) Press the Set Limit button to set the maximum number of password attempts.\n
        6) Repeat steps (2) through (4), verifying that in step (3), you are told now that work profile data will be deleted if you mistype your password 100 times.\n
        7) Press the Finish button to remove the work profile.
    </string>
    <string name="enterprise_privacy_quick_settings">Quick settings disclosure</string>
    <string name="enterprise_privacy_quick_settings_info">
        Please do the following:\n
        1) Press the Clear Org button.\n
        2) Open and fully expand Quick Settings.\n
        3) Verify that at the bottom of Quick Settings, you are told the device is managed.\n
        4) Close Quick Settings.\n
        5) Press the Set Org button.\n
        6) Open and fully expand Quick Settings.\n
        7) Verify that at the bottom of Quick Settings, you are told the device is managed by \"Foo, Inc.\".\n
        8) Tap on the information.\n
        9) Verify that a dialog informing you about device monitoring opens.\n
        10) Tap the \"View Policies\" button.\n
        11) Verify that a screen informing you what your managing organization can do is shown.\n
        \n
        Use the Back button to return to this page. If this device does not have quick settings, please skip this test and mark it passing.
    </string>
    <string name="enterprise_privacy_keyguard">Keyguard disclosure</string>
    <string name="enterprise_privacy_keyguard_info">
        Please do the following:\n
        1) Press the Open Settings button to open Settings.\n
        2) Navigate to \"Security\" &gt; \"Screen lock\" and select the first screen lock type that is not \"None\".\n
        3) Use the Back button to return to this page.\n
        4) Press the Clear Org button.\n
        5) Lock the device.\n
        6) Verify that on the lock screen, you are told the device is managed.\n
        7) Unlock the device.\n
        8) Press the Set Org button.\n
        9) Lock the device.\n
        10) Verify that on the lock screen, you are told the device is managed by \"Foo, Inc.\".\n
        11) Unlock the device.\n
        12) Repeat steps (1) through (11) for each screen lock type other than \"None\".
    </string>
    <string name="enterprise_privacy_add_account">Add account disclosure</string>
    <string name="enterprise_privacy_add_account_info">
        Please do the following:\n
        1) Press the Clear Org button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are told that the device is managed.\n
        4) Use the Back button to return to this page.\n
        5) Press the Set Org button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are told that the device is managed by \"Foo, Inc.\".\n
        8) Tap the \"Learn more\" link.\n
        9) Verify that a screen informing you what your managing organization can do is shown.\n
        11) Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_default_app">CTS Verifier Test</string>

    <!-- Strings for Network Logging Tests -->
    <string name="device_owner_network_logging_ui">Network Logging UI</string>
    <string name="device_owner_network_logging_ui_info">Please do the following:\n
        1) Open and fully expand Quick Settings.\n
        2) Check that you are told that your device is managed.\n
        3) Close Quick Settings.\n
        4) Enable network logging by tapping on the left button below.\n
        5) Open Quick Settings again. Check that an icon appeared next to the text about device management.\n
        6) Verify that a notification including the same icon popped up, informing you that network logging has been enabled.\n
        7) Tap the notification.\n
        8) Verify that a dialog about device monitoring opens, and informs you about: the name of the app that manages this device, details about the device owner\'s capabilities, and information that the admin has activated network logging and can see all network traffic.\n
        9) Close the dialog.\n
        10) Tap the right button below to disable network logging.\n
        11) Verify that the notification disappeared.\n
        \n
        If this device does not have quick settings, please skip this test and mark it passing.
    </string>
    <string name="device_owner_enable_network_logging_button">Enable Network Logging</string>
    <string name="device_owner_disable_network_logging_button">Disable Network Logging</string>

    <!-- Strings for Customize Lock Screen Message -->
    <string name="device_owner_customize_lockscreen_message">Customize Lock Screen Message</string>
    <string name="device_owner_customize_lockscreen_message_info">Please do the following:\n
        1) Press the \"Go\" button to go to Settings\n
        2) Find the \"Screen lock\" option and set it to \"Swipe\"\n
        3) Use the Back button to return to this page\n
        4) In the field below, write a lock screen message.\n
        5) Press the \"Set lock screen message\" button\n
        6) Press Power button once to lock the screen.\n
        7) Press Power button again to reveal the lock screen.\n
        8) Verify that the message from step 1) appears on the lock screen.\n
        9) Unlock the screen and return to this page.\n
        10) Press the \"Go\" button to go to Settings\n
        11) Find the \"Lock screen message\" option\n
        12) Verify that you cannot modify the setting.\n
        13) Use the Back button to return to this page.\n
        14) Press the \"Go\" button to go to Settings\n
        15) Find the \"Screen lock\" option and set it to \"None\"\n
        16) Use the Back button to return to this page
    </string>
    <string name="device_owner_set_lockscreen_message_button">Set lock screen message</string>
    <string name="device_owner_set_lockscreen_message_hint">My lock screen message</string>
    <string name="device_owner_lockscreen_message_cannot_be_empty">Lock screen message cannot be empty.</string>

    <string name="comp_test">Corporate Owned Managed Profile</string>
    <string name="comp_provision_profile_dialog_title">Provision work profile</string>
    <string name="comp_provision_profile_dialog_text">Press the OK button to start the managed provisioning flow, and complete the flow to create a work profile</string>

    <string name="managed_user_test">Managed User</string>
    <string name="managed_user_positive_tests">Managed User positive tests</string>
    <string name="managed_user_positive_tests_instructions">
        The positive managed user tests verify policies on a managed user created by a device owner.
        \n
        Press Go button to create a managed user, and you will be switched to the managed user
        automatically. Dismiss the keyguard and a \'Managed User Tests\' should launch.\n
        Follow the test instructions and press \'pass\' or \'fail\' to return to this screen.\n
    </string>
    <string name="managed_user_positive_tests_info">
        The positive managed user tests verify policies on a managed user created by a device owner.
        Proceed to the test cases, then press \'pass\' or \'fail\' to finish this test.
    </string>
    <string name="managed_user_positive_category">Managed User Tests</string>
    <string name="managed_user_check_managed_user_test">Check affiliated profile owner</string>
    <string name="managed_user_incorrect_managed_user">Missing or incorrect affiliated profile owner: CTSVerifier is not affilaited PO!</string>

    <string name="device_owner_disallow_user_switch">Disallow user switch</string>
    <string name="device_owner_disallow_user_switch_info">
        Press \'Create uninitialized user\' to create a user that is not setup.
        Then press \'Set restriction\' button to set the user restriction.
        Then press \'Go\' to open multiple users settings.
        Confirm that:\n
        \n
        - Main switch is disabled and in off position\n
        \n
        In additional, if quick settings is available, confirm that user switcher is hidden or
        disabled.
        Use the Back button to return to this page.\n
        \n
        Press \'Unset restriction\' to remove the restriction for use in later tests.
    </string>
    <string name="device_owner_disallow_user_switch_create_user">Create uninitialized user</string>

    <string name="device_owner_user_switcher_message">User switcher message</string>
    <string name="device_owner_user_switcher_message_info">
        1. Please press the \'With user switcher message\' button to set the user switcher message.
        You will then be automatically switched to a secondary user. If a user switcher dialog shows
        up, it should read \'Start user session\'. Wait until you are automatically switched back to
        primary, if a user switcher dialog shows up, it should read \'End user session\'.

        \n
        2. Please press the \'Without user switcher message\' button to clear the user switcher
        message. You will then be automatically switched to a secondary user. If a user switcher
        dialog shows up, it should read \'Switching to managed user\'. Wait until you are
        automatically switched back to primary, if a user switcher dialog shows up, it should read
        \'Switching to (name of primary user)\'.
    </string>
    <string name="device_owner_with_user_switcher_message">With user switcher message</string>
    <string name="device_owner_without_user_switcher_message">Without user switcher message</string>

    <string name="device_owner_enable_logout">Logout</string>
    <string name="device_owner_enable_logout_info">
        Please press the Go button to enable logout. You will then be switched to a newly created
        user.
        Look for a way to logout the current user without unlocking the lock screen. The control is
        usually named \'End session\'.\n
        The location may vary depending on manufacturer, typical locations are:\n
        - In power button menu by long pressing power button.\n
        - On the lock screen.\n
        \n
        When successfully logout and switched back to primary user, confirm that the logout control
        is not available in primary user.
    </string>

    <!-- Strings for JobScheduler Tests -->
    <string name="js_test_description">This test is mostly automated, but requires some user interaction. You can pass this test once the list items below are checked.</string>

    <string name="js_idle_test">Idle Mode Constraints</string>
    <string name="js_start_test_text">Start test</string>
    <string name="js_idle_instructions">Verify the behavior of the JobScheduler API for when the device is in idle mode. Simply follow the on-screen instructions.</string>
    <string name="js_idle_description_1">Turn the screen off and then back on in order to begin.</string>
    <string name="js_idle_continue_instruction">
        Switch off screen and wait for it to turn on to continue.
    </string>
    <string name="js_idle_item_idle_off">Idle job does not execute when device is not idle.</string>
    <string name="js_idle_item_idle_on">Idle job does execute when device is forced into idle.</string>

    <string name="js_charging_test">Charging Constraints</string>
    <string name="js_charging_instructions">Verify the behavior of the JobScheduler API for when the device is on power and unplugged from power. Simply follow the on-screen instructions.</string>
    <string name="js_charging_description_1">Plug in the charger if it isn\'t already plugged in.</string>
    <string name="js_charging_off_test">Device not charging will not execute a job with a charging constraint.</string>
    <string name="js_charging_on_test">Device when charging will execute a job with a charging constraint.</string>
    <string name="js_charging_description_2">After the above test has passed, remove the charger to continue. If the above failed, you can simply fail this test.</string>
    <string name="js_charging_description_3">Device is plugged in. Please wait while it gets into stable charging state.</string>
    <string name="js_charging_description_4">There seems to be a problem with your charger. Please try again.</string>

    <string name="js_connectivity_test">Connectivity Constraints</string>
    <string name="js_connectivity_instructions">Verify the behavior of the JobScheduler API for when the device has no access to data connectivity. Simply follow the on-screen instructions.</string>
    <string name="js_connectivity_description_1">Disable WiFi and Mobile data to begin.</string>
    <string name="js_unmetered_connectivity_test">Device with no connectivity will not execute a job with an unmetered connectivity constraint.</string>
    <string name="js_any_connectivity_test">Device with no connectivity will not execute a job with an unmetered connectivity constraint.</string>
    <string name="js_no_connectivity_test">Device with no connectivity will still execute a job with no connectivity constraints.</string>

    <!-- String for the bundled TV app Tests -->

    <string name="tv_input_discover_test">3rd-party TV input test</string>
    <string name="tv_input_discover_test_info">
    Verify that the bundled TV app launches via Intent and calls the proper API to discover
    3rd-party TV inputs.
    </string>
    <string name="tv_input_discover_test_third_party_tif_input_support">
    Does the bundled TV app support third-party TV inputs?
    </string>
    <string name="tv_input_discover_test_go_to_setup">
    Select the \"Launch TV app\" button and set up the newly installed TV input:
    \"CTS Verifier\".
    </string>
    <string name="tv_input_discover_test_verify_setup">
    Setup activity must have been started.
    </string>
    <string name="tv_input_discover_test_tune_to_channel">
    Select the \"Launch TV app\" button and tune to the \"Dummy\" channel from \"CTS Verifier\"
    input. If necessary, configure the channel to be visible.
    </string>
    <string name="tv_input_discover_test_verify_tune">
    Tune command must be called.
    </string>
    <string name="tv_input_discover_test_verify_overlay_view">
    Verify that the overlay appears and displays the text \"Overlay View Dummy Text\" when you tune
    to the \"Dummy\" channel.
    </string>
    <string name="tv_input_discover_test_verify_size_changed">
    Verify that video layout changes correctly according to the provided video track information,
    including pixel aspect ratio.
    </string>
    <string name="tv_input_discover_test_verify_global_search">
    Verify the TV app provides query results for 3rd-party input\'s channels and programs in
    global search results.
    </string>
    <string name="tv_input_discover_test_go_to_epg">
    Select the \"Launch EPG\" button and locate the \"Dummy\" channel.
    </string>
    <string name="tv_input_discover_test_verify_epg">
    Do you see the programs named \"Dummy Program\" and their descriptions
    "Dummy Program Description" in the EPG?
    </string>
    <string name="tv_input_discover_test_trigger_setup">
    Select the \"Launch setup\" button and verify if the bundled TV app shows the list of installed
    TV inputs for setup.
    </string>
    <string name="tv_input_discover_test_verify_trigger_setup">
    Do you see the \"CTS Verifier\" input in the list?
    </string>

    <string name="tv_parental_control_test">TV app parental controls test</string>
    <string name="tv_parental_control_test_info">
    Verify that the bundled TV app calls the parental controls API.
    </string>
    <string name="tv_parental_control_test_turn_on_parental_control">
    Select the \"Launch TV app\" button and turn on the parental controls. If parental controls are
    on already, turn it off and on again.
    </string>
    <string name="tv_parental_control_test_verify_receive_broadcast1">
    TV input service must have received ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED broadcast.
    </string>
    <string name="tv_parental_control_test_check_parental_controls_switch">
    Is there an option to turn off parental controls on this device?
    </string>
    <string name="tv_parental_control_test_block_tv_ma">
    Select the \"Launch TV app\" button and block the \"Custom Rating\" for \"CtsVerifier\" rating
    system in the parental control settings. If the rating system is disabled by default, enable it.
    If the \"Custom Rating\" is already blocked, unblock it, save, and then block again.
    </string>
    <string name="tv_parental_control_test_verify_receive_broadcast2">
    TV input service must have received ACTION_BLOCKED_RATINGS_CHANGED broadcast.
    </string>
    <string name="tv_parental_control_test_block_unblock">
    Select the \"Launch TV app\" button; verify that the channel is blocked.
    Try to unblock the screen by entering PIN; verify that it\'s unblocked.
    </string>

    <string name="tv_yes">Yes</string>
    <string name="tv_no">No</string>
    <string name="tv_launch_tv_app">Launch TV app</string>
    <string name="tv_launch_epg">Launch EPG</string>
    <string name="tv_launch_setup">Launch setup</string>
    <string name="tv_channel_not_found">
    CtsVerifier channel is not set up. Please set up before proceeding.
    </string>

    <string name="tv_multiple_tracks_test">TV app closed captions and multi-audio test</string>
    <string name="tv_multiple_tracks_test_info">
    Verify that the bundled TV app calls the multi-track API.
    </string>
    <string name="tv_multiple_tracks_test_select_subtitle">
    Select the \"Launch TV app\" button. Verify that closed captions are off by default. Set closed
    caption language to English.
    </string>
    <string name="tv_multiple_tracks_test_verify_set_caption_enabled">
    Captions are enabled.
    </string>
    <string name="tv_multiple_tracks_test_verify_select_subtitle">
    The English closed caption track should be selected.
    </string>
    <string name="tv_multiple_tracks_test_select_audio">
    Select the \"Launch TV app\" button. Verify that the audio track is English by default.
    Select Spanish audio track.
    </string>
    <string name="tv_multiple_tracks_test_verify_select_audio">
    The Spanish audio track should be selected.
    </string>

    <string name="tv_time_shift_test">TV app time shift test</string>
    <string name="tv_time_shift_test_info">
    This test verifies that the TV app invokes proper time shift APIs in the framwork.
    </string>
    <string name="tv_time_shift_test_pause_resume">
    Press the \"Launch TV app\" button. Verify that the playback control is available.
    Pause the playback and then resume it.
    </string>
    <string name="tv_time_shift_test_verify_resume_after_pause">
    The playback should resume after pause.
    </string>
    <string name="tv_time_shift_test_verify_position_tracking">
    The playback position tracking should be activated.
    </string>
    <string name="tv_time_shift_test_speed_rate">
    Press the \"Launch TV app\" button. Verify that the playback control is available.
    Rewind the playback and in a few seconds fast-forward it.
    </string>
    <string name="tv_time_shift_test_verify_rewind">
    The playback should rewind.
    </string>
    <string name="tv_time_shift_test_verify_fast_forward">
    The playback should fast-forward.
    </string>
    <string name="tv_time_shift_test_seek">
    Press the \"Launch TV app\" button. Verify that the playback control is available.
    Seek to previous and then seek to next.
    </string>
    <string name="tv_time_shift_test_verify_seek_to_previous">
    The playback position should be moved to the previous position.
    </string>
    <string name="tv_time_shift_test_verify_seek_to_next">
    The playback position should be moved to the next position.
    </string>

    <string name="tv_app_link_test">TV app app-link test</string>
    <string name="tv_app_link_test_info">
    Verify that the bundled TV app supports linking to channel apps. If a TV input service provides
    links for its specific channels, the TV app should show the links in a proper format.
    </string>
    <string name="tv_app_link_test_select_app_link">
    Select the \"Launch TV app\" button, then check if you can see a menu with \"Cts App-Link Text\"
    text in red background. If you see the link, select it to follow the link.
    </string>
    <string name="tv_app_link_test_verify_link_clicked">
    The app-link must have been clicked and the activity should be changed correctly.
    </string>
    <string name="tv_input_link_test_verify_link_interface">
    Do you see the app-link card similar to the image on the left?\n
    1) You should see the poster art image, but the color may be different.\n
    2) You should see the text \"Cts App-Link Text\".\n
    </string>

    <string name="tv_microphone_device_test">Microphone device test</string>
    <string name="tv_microphone_device_test_info">
    This test checks if InputDevice.hasMicrophone of the Media API reports a
    correct value on every input device (including remote controls).
    </string>
    <string name="tv_microphone_device_test_prep_question">
    Before continuing, please make sure that you pair all primary input
    devices intended to be used by the device, including bluetooth
    remotes and companion remote-control apps such as the Android TV Remote Control.
    Have you paired every primary input device with the device under test (DUT)?
    </string>
    <string name="tv_microphone_device_test_mic_question">
    Does input device \"%1$s\" have a microphone?
    </string>
    <string name="tv_microphone_device_test_negative_mismatch">
    InputDevice.hasMicrophone reports that this input device DOES have a
    microphone whereas you selected that it does not.  Please correct it by
    declaring \"audio.mic = 0\" in the device\'s input device configuration
    (.idc) file.
    </string>
    <string name="tv_microphone_device_test_positive_mismatch">
    InputDevice.hasMicrophone reports that this input device does NOT have a
    microphone whereas you selected that it does.  Please correct it by
    declaring \"audio.mic = 1\" in the device\'s input device configuration
    (.idc) file and make sure that relevant files such as key layout (.kl)
    and key character map (.kcm) files are found by the system accordingly.
    </string>
    <string name="tv_microphone_device_test_no_input_devices">No input devices found.</string>

    <string name="overlay_view_text">Overlay View Dummy Text</string>
    <string name="custom_rating">Example of input app specific custom rating.</string>

    <!-- A list of fully-qualified test classes that should not be run. -->
    <string-array name="disabled_tests" />

    <!-- Strings for screen pinning test -->
    <string name="screen_pinning_test">Screen Pinning Test</string>
    <string name="screen_pin_instructions">Pressing next will prompt you to enter screen pinning, allow this app to enter screen pinning.</string>
    <string name="screen_pin_check_pinned">Press Next to verify the app is pinned.</string>
    <string name="screen_pin_no_exit">Try to leave the app without unpinning the screen. Press next once you have verified you cannot leave.</string>
    <string name="screen_pin_exit">Use interactions defined by your device to unpin such as long pressing the back and overview button, then press next.</string>
    <string name="screen_pinning_done">All tests completed successfully.</string>

    <string name="error_screen_no_longer_pinned">The screen was no longer pinned.</string>
    <string name="error_screen_already_pinned">Cannot start the test with the screen already pinned.</string>
    <string name="error_screen_pinning_did_not_start">Screen was not pinned.</string>
    <string name="error_screen_pinning_did_not_exit">Screen was not unpinned.</string>
    <string name="error_screen_pinning_couldnt_exit">Could not exit screen pinning through API.</string>

    <!--  Audio Devices Notifications Tests -->
    <string name="audio_out_devices_notifications_test">Audio Output Devices Notifications Test</string>
    <string name="audio_out_devices_notification_instructions">
          Click the "Clear Messages" button then connect and disconnect a wired headset.
          Note if the appropriate notification messages appear below.
    </string>
    <string name="audio_in_devices_notifications_test">Audio Input Devices Notifications Test</string>
    <string name="audio_in_devices_notification_instructions">
          Click the "Clear Messages" button then connect and disconnect a microphone or wired headset.
          Note if the appropriate notification messages appear below.
    </string>
    <string name="audio_dev_notification_clearmsgs">Clear Messages</string>
    <string name="audio_dev_notification_connectMsg">CONNECT DETECTED</string>
    <string name="audio_dev_notification_disconnectMsg">DISCONNECT DETECTED</string>

    <string name="audio_input_routingnotifications_test">Audio Input Routing Notifications Test</string>
    <string name="audio_input_routingnotification_instructions">
          Click on the "Record" button in the AudioRecord Routing Notifications section below to
          start recording. Insert a wired headset or microphone. Observe a message acknowledging the
          rerouting event below. Remove the wired headset and observe the new routing message.
          Click on the "Stop" button to stop recording.\n
    </string>
    <string name="audio_output_routingnotifications_test">Audio Output Routing Notifications Test</string>
    <string name="audio_output_routingnotification_instructions">
          Click on the "Play" button in the AudioTrack Routing Notifications section below to
          start (silent) playback. Insert a wired headset. Observe a message acknowledging the
          rerouting event below. Remove the wired headset and observe the new routing message.
          Click on the "Stop" button to stop playback.\n
    </string>
    <string name="audio_routingnotification_playBtn">Play</string>
    <string name="audio_routingnotification_playStopBtn">Stop</string>
    <string name="audio_routingnotification_recBtn">Record</string>
    <string name="audio_routingnotification_recStopBtn">Stop</string>
    <string name="audio_routingnotification_playHeader">AudioTrack Routing Notifications</string>
    <string name="audio_routingnotification_recHeader">AudioRecord Routing Notifications</string>
    <string name="audio_routingnotification_trackRoutingMsg">AudioTrack rerouting</string>
    <string name="audio_routingnotification_recordRoutingMsg">AudioRecord rerouting</string>

    <!-- USB Audio Peripheral Tests -->
    <string name="profileLabel">Profile</string>
    <string name="connectedPeripheral">Connected Peripheral</string>
    <string name="audio_uap_attribs_test">USB Audio Peripheral Attributes Test</string>
    <string name="uapPeripheralProfileStatus">Peripheral Profile Status</string>
    <string name="audio_uap_play_test">USB Audio Peripheral Play Test</string>
    <string name="uapPlayTestInstructions">Connect the USB Audio Interface Peripheral and press the
        PLAY button below. Verify that a tone is correctly played.</string>
    <string name="audio_uap_play_playBtn">Play</string>
    <string name="audio_uap_play_stopBtn">Stop</string>

    <string name="audio_uap_record_test">USB Audio Peripheral Record Test</string>
    <string name="uapRecordTestInstructions">Connect the USB Audio Peripheral and press the RECORD or
        RECORD LOOPBACK button below. Verify that a tone is correctly played.</string>
    <string name="audio_uap_record_recordBtn">Record</string>
    <string name="audio_uap_record_recordLoopbackBtn">Record Loopback</string>
    <string name="audio_uap_record_stopBtn">Stop</string>

    <string name="audio_uap_buttons_test">USB Audio Peripheral Buttons Test</string>
    <string name="uapButtonTestInstructions">Connect the USB Audio headset with buttons
        and press each transport/media button in turn.</string>

    <string name="uapButtonsBtnALbl">Button A - play/pause</string>
    <string name="uapButtonsBtnBLbl">Button B - volume up (+)</string>
    <string name="uapButtonsBtnCLbl">Button C - volume down (-)</string>
    <string name="uapButtonsBtnDLbl">Button D - voice assist</string>
    <string name="uapButtonsRecognized">Recognized</string>
    <string name="uapButtonsNotRecognized">Not Recognized</string>
    <string name="uapButtonsDisableAssistantTitle">Disable Google Assistant</string>
    <string name="uapButtonsDisableAssistant">For this test to succeed it may be necessary
        to disable the Google Assistant (Settings / Google / Search / Google Assistant Settings /
        Devices / &lt;device name&gt; / Google Assistant)</string>

    <!--  Pro Audio Tests -->
    <string name="pro_audio_latency_test">Pro Audio Test</string>

    <string name="proAudioHasProAudiolbl">Has Pro Audio</string>
    <string name="proAudioHasLLAlbl">Has Low-Latency Audio</string>
    <string name="proAudioInputLbl">Audio Input:</string>
    <string name="proAudioOutputLbl">Audio Output:</string>
    <string name="proAudioRoundTripLbl">Round Trip Latency:</string>
    <string name="proAudioConfidenceLbl">Confidence:</string>

    <string name="proAudioMidiHasMIDILbl">Has MIDI Support</string>
    <string name="proAudioMIDIInputLbl">MIDI Input:</string>
    <string name="proAudioMIDIOutputLbl">MIDI Output:</string>
    <string name="proAudioMidiHasUSBHostLbl">USB Host Mode:</string>
    <string name="proAudioMidiHasUSBPeripheralLbl">USB Peripheral Mode:</string>
    <string name="proAudioHDMISupportLbl">HDMI Support:</string>
    <string name="proAudioHasHDMICheckBox">Has HDMI Support</string>

    <string name="audio_proaudio_loopbackbtn">Start Loopback</string>
    <string name="audio_proaudio_loopbackInfoBtn">Loopback Instructions</string>
    <string name="audio_proaudio_roundtrip">Round-Trip Test</string>
    <string name="audio_proaudio_NA">N/A</string>
    <string name="audio_proaudio_pending">pending...</string>

    <string name="audio_proaudio_nopa_title">Pro Audio Test</string>
    <string name="audio_proaudio_nopa_message">This device does not set the FEATURE_AUDIO_PRO
        flag and therefore does not need to run this test.</string>

    <!--  MIDI Test -->
    <string name="midi_test">MIDI Test</string>
    <string name="ndk_midi_test">Native MIDI API Test</string>
    <string name="midi_info">
       For the USB MIDI interface test it is required that you have connected a supported USB
       Audio Peripheral device with standard MIDI 5-pin, DIN (round) connectors and a standard
       MIDI cable. The cable must be connected to the MIDI input and output plugs on the
       peripheral.
       \nFor the USB Bluetooth test it is required that you connect a Yamaha MD-BT01 to the
       correct MIDI plugs on the USB peripheral, the BT01 output jack to the USB interface
       input jack and BT01 input plug to the USB interface output jack.
       \nThe Virtual MIDI test does not require any MIDI interface hardware.
    </string>

    <string name="midiHasMIDILbl">Has MIDI Support</string>

    <string name="midiUSBTestLbl">USB MIDI Loopback Test:</string>
    <string name="usbMidiInputLbl">USB Input:</string>
    <string name="usbMidiOutputLbl">USB Output:</string>
    <string name="midiTestUSBInterfaceBtn">Test USB MIDI Interface</string>

    <string name="midiVirtTestLbl">Virtual MIDI Loopback Test:</string>
    <string name="midiVirtInputLbl">Virtual Input:</string>
    <string name="midiVirtOutputLbl">Virtual Output:</string>
    <string name="midiTestVirtInterfaceBtn">Test Virtual MIDI Interface</string>

    <string name="midiBTTestLbl">Bluetooth MIDI Loopback Test:</string>
    <string name="midiBTInputLbl">Bluetooth Input:</string>
    <string name="midiBTOutputLbl">Bluetooth Output:</string>
    <string name="midiTestBTInterfaceBtn">Test Bluetooth MIDI Interface</string>

    <string name="midiStatusLbl">Status</string>
    <string name="midiNotRunLbl">Not Run.</string>
    <string name="midiPassedLbl">Passed.</string>
    <string name="midiFailedMismatchLbl">Failed - Data Mismatch.</string>
    <string name="midiFailedTimeoutLbl">Failed - Timeout.</string>
    <string name="midiFailedOverrunLbl">Failed - Data Overrun.</string>
    <string name="midiFailedDeviceLbl">Failed - Device Error.</string>
    <string name="midiFailedJNILbl">Failed - JNI Error.</string>

    <!-- Audio general text -->
    <string name="audio_general_headset_port_exists">Does this device have a headset port?</string>
    <string name="audio_general_headset_no">No</string>
    <string name="audio_general_headset_yes">Yes</string>
    <string name="audio_general_deficiency_found">WARNING: Some results show potential deficiencies on the system.
    Please consider addressing them for a future release.</string>
    <string name="audio_general_test_passed">Test Result: Successful</string>
    <string name="audio_general_test_failed">Test Result: Not Optimal</string>
    <string name="audio_general_default_false_string">false</string>
    <string name="audio_general_default_true_string">true</string>
    <string name="audio_general_warning">Warning</string>
    <string name="audio_general_ok">Ok</string>
    <string name="audio_general_level_not_max">Audio Level is not maximum. Please check your device
          is set to max level for audio playback.</string>

    <!-- Audio Loopback Latency Test -->
    <string name="audio_loopback_test">Audio Loopback Latency Test</string>
     <string name="audio_loopback_info">
          This test requires the Loopback Plug. Please connect a Loopback Plug into the headset
          connector, and proceed with the instructions on the screen.
          The system will measure the input-output audio latency by injecting a pulse on the output,
          and computing the distance between replicas of the pulse.
          You can vary the Audio Level slider to ensure the pulse will feed back at adequate levels.
          Repeat until a confidence level >= 0.6 is achieved.
    </string>
    <string name="audio_loopback_instructions">
          Please connect a "Loopback Plug" and press "Loopback Plug Ready".
    </string>
    <string name="audio_loopback_plug_ready_btn">Loopback Plug Ready</string>
    <string name="audio_loopback_instructions2">
          Set the audio level to a suitable value, then press Test button.
          It might require multiple tries until a confidence >= 0.6 is achieved.
    </string>
    <string name="audio_loopback_level_text">Audio Level</string>
    <string name="audio_loopback_test_btn">Test</string>
    <string name="audio_loopback_results_text">Results...</string>

   <!-- Audio Frequency Line Test -->
    <string name="audio_frequency_line_test">Audio Frequency Line Test</string>
    <string name="audio_frequency_line_info">
        The system will measure the frequency response of the left and right line outputs,
        by feeding them back thru the microphone conection with the loopback jack.
        This test requires the Loopback Plug. Please connect a Loopback Plug on the headset
        connector, and proceed with the instructions on the screen.
        </string>
    <string name="audio_frequency_line_instructions">
          Please connect a "Loopback Plug" and press "Loopback Plug Ready".
    </string>
    <string name="audio_frequency_line_plug_ready_btn">Loopback Plug Ready</string>

    <string name="audio_frequency_line_test_btn">Test</string>
    <string name="audio_frequency_line_results_text">Results...</string>

    <!-- Audio Frequency Speaker Test -->
    <string name="audio_frequency_speaker_test">Audio Frequency Speaker Test</string>
    <string name="audio_frequency_speaker_info">
        This test requires an external USB reference microphone. Please connect the USB microphone and proceed with the instructions on the screen.
        The system will measure frequency response of the left and right speakers (if there are two speakers), or the response of the mono speaker twice.
       </string>
    <string name="audio_frequency_speaker_instructions">
          Please connect an USB reference microphone and press "USB Reference microphone ready"
    </string>
    <string name="audio_frequency_speaker_usb_status">Waiting for USB microphone...</string>
    <string name="audio_frequency_speaker_mic_ready_btn">USB Reference microphone ready</string>
    <string name="audio_frequency_speaker_mic_ready_text">USB Audio device detected\n\nPlease set up Device Under test
    in quiet room, and Microphone 20 cms perpendicular to center of screen, then press TEST</string>
    <string name="audio_frequency_speaker_mic_not_ready_text">"No USB Audio device detected. Please reconnect."</string>
    <string name="audio_frequency_speaker_test_btn">Test</string>
    <string name="audio_frequency_speaker_results_text">Results...</string>

    <!-- Audio Frequency Microphone Test -->
    <string name="audio_frequency_mic_test">Audio Frequency Microphone Test</string>
    <string name="frequency_mic_info">
        This test requires an external USB reference microphone and external speakers.
        The test signals can be played from the device under test (DUT) or from a secondary device (e.g. when your DUT can’t support a USB microphone and external speakers simultaneously, or DUT does not have headphone output).
Follow the instructions on the screen to measure the frequency response for the built in microphone.
       </string>

    <string name="frequency_mic_play">Play</string>
    <string name="frequency_mic_stop">Stop</string>
    <string name="frequency_mic_noise_instructions">TEST NOISE: Position speakers 40 cms from device under test.
    Press [PLAY] to play broadband white noise. Press [TEST]
    </string>
    <string name="frequency_mic_test_noise_btn">Test</string>
    <string name="frequency_mic_test_noise_result">Results...</string>

    <string name="frequency_mic_test_usb_background_instructions">TEST USB BACKGROUND: Connect USB microphone and position it right next to microphone under test.
    No source of noise should be active during this test. Press [TEST]</string>
    <string name="frequency_mic_test_usb_background_btn">Test</string>
    <string name="frequency_mic_test_usb_background_result">Results...</string>

    <string name="frequency_mic_test_usb_noise_instructions">TEST USB NOISE: Connect USB microphone and position it right next to microphone under test.
    Position speakers 40 cms from device under test. Press [PLAY] to play broadband white noise. Press [TEST]</string>
    <string name="frequency_mic_test_usb_noise_btn">Test</string>
    <string name="frequency_mic_test_usb_noise_result">Results...</string>

    <string name="frequency_mic_test_global_result">Global Results...</string>

     <!-- Audio Frequency Unprocessed Test -->
    <string name="audio_frequency_unprocessed_test">Audio Frequency Unprocessed Test</string>
    <string name="audio_frequency_unprocessed_info">
    This test requires an external USB reference microphone, external speakers and a Sound Pressure Level meter.
    You can play the test signals from the device under test or from a secondary device.
    Follow the instructions on the screen to measure the frequency response for the built in microphone
    using UNPROCESSED audio source.
    If the Audio Frequency Unprocessed feature is defined in this system, success in all tests is mandatory to pass.
    If the feature is not defined, measurements are still needed, but success in all of them is not mandatory to pass.
       </string>
    <string name="audio_frequency_unprocessed_defined">Audio Frequency Unprocessed feature is defined. Success in all tests is mandatory to pass</string>
    <string name="audio_frequency_unprocessed_not_defined">Audio Frequency Unprocessed feature is NOT defined. Success in all test is NOT mandatory to pass</string>

    <string name="unprocessed_play">Play</string>
    <string name="unprocessed_stop">Stop</string>

    <string name="unprocessed_test_tone_instructions">TEST TONE: Press [PLAY] to play tone at 1 Khz. Measure sound SPL to be 94 dB
    right next to microphone under test. Press [TEST]</string>
    <string name="unprocessed_test_tone_btn">Test</string>
    <string name="unprocessed_test_tone_result">Results...</string>

    <string name="unprocessed_test_noise_instructions">TEST NOISE: Position speakers 40 cms from device under test.
    Press [PLAY] to play broadband white noise. Press [TEST]</string>
    <string name="unprocessed_test_noise_btn">Test</string>
    <string name="unprocessed_test_noise_result">Results...</string>

    <string name="unprocessed_test_usb_background_instructions">TEST USB BACKGROUND: Connect USB microphone and position it right next to microphone under test.
    No source of noise should be active during this test. Press [TEST]</string>
    <string name="unprocessed_test_usb_background_btn">Test</string>
    <string name="unprocessed_test_usb_background_result">Results...</string>

    <string name="unprocessed_test_usb_noise_instructions">TEST USB NOISE: Connect USB microphone and position it right next to microphone under test.
    Position speakers 40 cms from device under test. Press [PLAY] to play broadband white noise. Press [TEST]</string>
    <string name="unprocessed_test_usb_noise_btn">Test</string>
    <string name="unprocessed_test_usb_noise_result">Results...</string>

    <string name="unprocessed_test_global_result">Global Results...</string>

    <!-- Audio Frequency Voice_Recognition Test -->
    <string name="audio_frequency_voice_recognition_test">Audio Frequency Voice Recognition Test</string>
    <string name="audio_frequency_voice_recognition_info">
        This test requires an external USB reference microphone, external speakers and a Sound Pressure Level meter.
        You can play the test signals from the device under test or from a secondary device.
        Follow the instructions on the screen to measure the frequency response for the built in microphone
        using VOICE_RECOGNITION audio source.
    </string>
    <string name="vr_test_tone_instructions">TEST TONE: Press [PLAY] to play tone at 1 Khz. Measure sound to be 90 dB SPL right next to microphone under test. Press [TEST]</string>
    <string name="vr_test_noise_instructions">TEST NOISE: Position speakers 40 cms from device under test.
        Press [PLAY] to play broadband white noise. Press [TEST]</string>
    <string name="vr_test_usb_background_instructions">TEST USB BACKGROUND: Connect USB microphone and position it right next to microphone under test.
        No source of noise should be active during this test. Press [TEST]</string>
    <string name="vr_test_usb_noise_instructions">TEST USB NOISE: Connect USB microphone and position it right next to microphone under test.
        Position speakers 40 cms from device under test. Press [PLAY] to play broadband white noise. Press [TEST]</string>


    <!-- Audio AEC Test -->
    <string name="audio_aec_test">Audio Acoustic Echo Cancellation (AEC) Test</string>
    <string name="audio_aec_info">
        The recording source VOICE_COMMUNICATION will be tested with/without the Acoustic Echo Canceller effect engaged.
        The Acoustic Coupling Factor (ACF) will be computed for each case. A successful test expects ACF less than 0.4 for AEC ON,
        and ACF greater than 0.6 for AEC OFF.
        This test requires a quiet environment, and no headphones or similar connected.
        This test must pass in devices where AEC functionality is mandatory or any device which implements AEC.
    </string>
    <string name="audio_aec_instructions">Press [TEST] to play a voice recording twice with different parameters.</string>
    <string name="audio_aec_mandatory_test">Is AEC mandatory in this device?</string>

    <!--Audio Frequency Global strings -->
    <string name="af_button_play">Play</string>
    <string name="af_button_stop">Stop</string>

    <string name="af_button_test">Test</string>
    <string name="af_test_results">Results...</string>
    <string name="af_global_test_results">Global Results...</string>
    <string name="af_no">No</string>
    <string name="af_yes">Yes</string>


    <!-- Strings for 6DoF test -->
    <string name="six_dof_test">6DoF Test</string>
    <string name="action_settings">Settings</string>
    <string name="start">Start</string>
    <string name="motion_tracking_permission">"Motion Tracking permission needed!"</string>
    <string name="translations">Translations:</string>
    <string name="rotations">Rotations:</string>
    <string name="action_place_marker">Place Marker</string>
    <string name="markers">Markers:\n</string>
    <string name="title_activity_cts">CTSActivity</string>
    <string name="stop">Stop!</string>
    <string name="stop_message">Mark where you are standing with something like a piece of card and
        then press ready to record this waypoint
    </string>
    <string name="ready">Ready</string>
    <string name="initial">First Waypoint</string>
    <string name="phase1_initial_message">When you are ready to place your first waypoint, place a
        marker at the devices current location. Use something that will allow you to put the device
        in the exact same position and orientation on the second lap. Then, while the device is on
        the marker, click the turquoise action button to record the first waypoint.\n\nStart walking
        in a direction. The button will appear again when you have walked far enough. Place a marker
        at the device\'s location and press the button to record a waypoint. You cannot place
        waypoints in a straight line, so for your 3rd waypoint turn 90 degrees and walk in a
        direction that will make a triangle out of your 3 waypoints.
    </string>
    <string name="phase2_initial_message">You now need to visit each waypoint, clicking the
        turquoise action button at each one. You need to reach each waypoint in 20 seconds. While
        you are on your way to the waypoints, the camera preview will rotate. You will need to
        rotate the device to match the rotation of the camera preview. A box will be shown to help
        you. It shows the device\'s current rotation and will change color based on whether you are
        close enough to the required rotation. Red if you are failing, green if you are passing.
        When you have reached the next waypoint, the device can be returned to its original
        rotation.
    </string>
    <string name="last">Go back to the first waypoint</string>
    <string name="last_message">Now go back to the first waypoint and press ready to finish the
        first lap.
    </string>
    <string name="got_it">Got it!</string>
    <string name="lap2_instructions">Now, go to each waypoint (including your initial
        one) and click the turquoise action button. Then move on to the next waypoint and do the
        same.\nThe last waypoint should be the first waypoint again.
    </string>
    <string name="test1_pass2">Pass 2</string>
    <string name="results">Results</string>
    <string name="overall_instructions">These tests are designed to verify the correctness and
        accuracy of a 6DoF enabled device. There will be 3 phases to these tests, each testing a
        different part of 6DoF functionality.
    </string>
    <string name="phase1_description">This first test will test the accuracy of the device. It will
        ask you to mark out 4 waypoints and then return to the original waypoint to complete the
        lap. After this you will then need to do another lap without any HUD information. At the
        end, the pairs of waypoints and the path you travelled will be compared and you will be
        given a result.
    </string>
    <string name="phase2_description">This test will test the robustness of the device. Using the
        same 4 waypoints as before, you will need to do a lap, reaching each waypoint in the
        allotted time.\nWhile you are on your way to the waypoints, the camera preview will rotate.
        You will need to rotate the device to match the rotation of the camera preview. A box will
        be shown to help you. It shows the device\'s current rotation and will change color based
        on whether you are close enough to the required rotation. Red if you are failing, green if
        you are passing. When you have reached the next waypoint, the device can be returned to
        its original rotation.
    </string>
    <string name="phase3_description">Now we will test the AR capability of the device. Again, you
        will need to do a lap of the waypoints, but this time between each waypoint the device will
        overlay hoops that you must pass the device through as you go along.
    </string>
    <string name="distance">Distance from last waypoint:</string>
    <string name="obj_return_to_initial_waypoint">Return to initial waypoint</string>
    <string name="waypointPlaced">Waypoint placed!</string>
    <string name="undo">undo</string>
    <string name="distance_remaining">Distance Remaining:\n</string>
    <string name="waypoint_differences">Waypoints</string>
    <string name="path_differences">Paths</string>
    <string name="error_distance">Not far away enough from other waypoints!</string>
    <string name="error_area">Not enough area covered.</string>
    <string name="passed">Passed!</string>
    <string name="failed">Failed!</string>
    <string name="test_failed">Test Failed!</string>
    <string name="error_start_point">Not close enough to initial waypoint!</string>
    <string name="waypoint_distance">Waypoint %1$s: %2$s</string>
    <string name="total">Total %1$s</string>
    <string name="path">Path %1$s: %2$s</string>
    <string name="fail">Fail</string>
    <string name="pass">Pass</string>
    <string name="info">Info</string>
    <string name="coming_soon">Coming soon!</string>
    <string name="motion_tracking_invalid_state">Motion Tracking has entered an invalid state
    </string>
    <string name="action_xml">XML</string>
    <string name="error_null_fragment">UI fragment was null, couldn\'t do callback to listener
    </string>
    <string name="error_retained_fragment_null">DataFragment is null</string>
    <string name="time_remaining">%1$s seconds remaining to get to next waypoint</string>
    <string name="action_skip_to_2nd">Skip to 2nd Test</string>
    <string name="failed_pause_resume">Test Failed because Test Activity was paused</string>
    <string name="action_overlapping_outlines">Overlapping Outlines</string>
    <string name="action_overlapping_filled">Overlapping Filled</string>
    <string name="time">Time</string>
    <string name="rotation_result">Rotation</string>
    <string name="action_separate_outlines">Separate Outlines</string>
    <string name="action_separate_filled">Separate Filled</string>
    <string name="action_one">One Rectangle</string>
    <string name="rotation_mode">Change rotation mode</string>
    <string name="phase3_initial_message">Go through the rings as you visit waypoints.</string>
    <string name="rings">Rings</string>
    <string name="rings_entered">Rings collected %1$s/%2$s</string>
    <string name="error_rings_not_entered">You haven\'t collected all the rings in this path!
    </string>
    <string name="save">Save</string>

    <string-array name="initial_waypoint">
        <item>Find a place for your first waypoint</item>
        <item>Go to initial waypoint</item>
    </string-array>

    <string-array name="next_waypoint">
        <item>Find a suitable place for waypoint 0</item>
        <item>Go to waypoint 0</item>
    </string-array>

    <string-array name="phase">
        <item>Phase 1</item>
        <item>Phase 2</item>
        <item>Phase 3</item>
    </string-array>

    <string-array name="phase_descriptions">
        <item>@string/phase1_description</item>
        <item>@string/phase2_description</item>
        <item>@string/phase3_description</item>
    </string-array>

    <!-- Strings for setting and restoring default dialer for voicemail tests -->
    <string name="voicemail_restore_default_dialer_description">Restore the default dialer setting by going to Default apps -> Phone app</string>
    <string name="voicemail_restore_default_dialer_button">Restore the default dialer"</string>
    <string name="voicemail_default_dialer_already_set">Default dialer already set</string>
    <string name="voicemail_default_dialer_already_restored">Default dialer already restored</string>
    <string name="voicemail_set_default_dialer_description">Before the test, the CTS verifier should be set to the default dialer</string>
    <string name="voicemail_set_default_dialer_button">Set CTS verifier as default dialer"</string>

    <!-- Strings for voicemail broadcast test -->
    <string name="voicemail_broadcast_test">Voicemail Broadcast Test</string>
    <string name="voicemail_broadcast_instructions">This test verifies that the default dialer can intercept the voicemail notification. The test must be conducted on a SIM with visual voicemail disabled</string>
    <string name="voicemail_broadcast_no_carrier_support">The carrier does not support voicemail, this test is not applicable.</string>
    <string name="voicemail_leave_voicemail">Send a voicemail to the device, CTS verifier should receive a voicemail notification broadcast</string>
    <string name="voicemail_broadcast_received">Voicemail broadcast Received</string>

    <!-- Strings for VisualVoicemailService test -->
    <string name="visual_voicemail_service_test">VisualVoicemailService Test</string>
    <string name="visual_voicemail_service_instructions">This test verifies that the VisualVoicemailService can receive SIM inserted and removed events</string>
    <string name="visual_voicemail_service_remove_sim_before_test">Removed the SIM before starting the test. This test only applies to devices with hotswap-able SIM</string>
    <string name="visual_voicemail_service_remove_sim_ok">Ok</string>
    <string name="visual_voicemail_service_remove_sim_not_applicable">Not applicable</string>
    <string name="visual_voicemail_service_insert_sim">Insert SIM</string>
    <string name="visual_voicemail_service_insert_sim_received">Service connection event received</string>
    <string name="visual_voicemail_service_remove_sim">Remove SIM</string>
    <string name="visual_voicemail_service_remove_sim_received">SIM removal event received</string>

    <!-- Strings for CallSettingsCheck test -->
    <string name="call_settings_check_test">Hide voicemail in call settings test</string>
    <string name="call_settings_check_instructions">This test verifies that the default dialer can
        hide voicemail settings in the call settings menu by using
        TelephonyManager.METADATA_HIDE_VOICEMAIL_SETTINGS_MENU
    </string>
    <string name="open_call_settings_explanation">Tap the button, and verify that \"voicemail\" does
        not exist in the call settings
    </string>
    <string name="open_call_settings">Open call settings</string>
    <string name="voicemail_hidden">\"Voicemail\" does not exist</string>
    <string name="voicemail_not_hidden">\"Voicemail\" exists</string>

    <!-- Strings for DialerIncomingCall test -->
    <string name="dialer_incoming_call_test">Dialer Receives Incoming Call</string>
    <string name="dialer_incoming_call_test_instructions">This test verifies that the default dialer
      can receive incoming calls after it has been set.
    </string>
    <string name="dialer_incoming_call_detected">Detected the incoming call. Activity passed.</string>
    <string name="dialer_check_incoming_call_explanation">Call the device.</string>
    <string name="dialer_check_incoming_call">Verify Call Received</string>

    <!-- Strings for VoicemailSettingsCheck test -->
    <string name="ringtone_settings_check_test">Hide settings in voicemail test</string>
    <string name="ringtone_settings_check_instructions">This test verifies that voicemail settings
        accessible with public API can be hidden when launching
        TelephonyManager.ACTION_CONFIGURE_VOICEMAIL with EXTRA_HIDE_PUBLIC_SETTINGS.
    </string>
    <string name="open_voicemail_settings_explanation">Tap the button, ringtone and virbration
        settings does not exist in the voicemail settings.
    </string>
    <string name="open_voicemail_settings">Open voicemail settings</string>
    <string name="ringtone_hidden">Ringtone settings does not exist</string>
    <string name="ringtone_not_hidden">Ringtone settings exists</string>

    <!-- Strings for DialerShowsHunOnIncomingCallActivity test -->
    <string name="dialer_shows_hun_test">Dialer Shows HUN on Incoming Call</string>
    <string name="dialer_shows_hun_test_instructions">This test verifies that the default dialer
        shows a heads up notification on incoming call, and that only one notification is shown.
    </string>
    <string name="dialer_shows_hun_explanation">Call the device.
        Check the box if the heads up notification was shown containing the text
        \"CTS Incoming Call Notification\", and only one incoming call notification was shown.
    </string>
    <string name="dialer_shows_hun_check_box">HUN shown and meets criteria specified above.</string>
    <string name="dialer_incoming_call_hun_teaser">Incoming Call</string>
    <string name="dialer_incoming_call_hun_desc">CTS Incoming Call Notification</string>

    <!-- Strings for DialerImplementsTelecomIntentsActivity test -->
    <string name="dialer_telecom_intents_test">System Implements Telecom Intents</string>
    <string name="dialer_telecom_intents_test_instructions">This test verifies that the system handles
        the specified Telecom Intents.
    </string>
    <string name="dialer_check_intents_implemented_explanation">Press the buttons below to launch settings activities.
    Check the associated box if the activity loads and was launched succesfully.</string>
    <string name="dialer_telecom_intents_call_settings">Launch call settings</string>
    <string name="dialer_telecom_intents_short_sms">Launch short sms answer settings</string>
    <string name="dialer_telecom_intents_calling_accounts">Launch calling accounts settings</string>
    <string name="dialer_telecom_intents_accessibility_settings">Launch accessibility settings</string>
    <string name="dialer_check_intents_check_box">Setting Launched</string>

    <!-- USB Audio Peripheral Tests -->
    <string name="usbaudio_results_text">Results...</string>

    <!-- USB Audio Peripheral Attributes Test -->
    <string name="usbaudio_attribs_test"> USB Audio Peripheral Attributes Test</string>
    <string name="usbaudio_attribs_info">
        This test requires that you have connected a mandated USB Audio Interface peripheral.
        If the discovered attributes of the peripheral matches the known attributes of the
        peripheral the test passes and the \"pass\" button will be enabled.
       </string>

    <!-- USB Audio Peripheral Play Test -->
    <string name="usbaudio_play_test"> USB Audio Peripheral Play Test</string>
    <string name="usbaudio_play_info">
        This test requires that you have connected a USB Audio Interface peripheral and
        some way to monitor the output. Press the \"Play\" button and verify that a tone is produced.
       </string>

    <!-- USB Audio Peripheral Record Test -->
    <string name="usbaudio_record_test"> USB Audio Peripheral Record Test</string>
    <string name="usbaudio_record_info">
        This test requires that you have connected a USB Audio Interface peripheral.
        Connect the outputs to the inputs (with patch cables). Start playback by pressing the
        \"Record Loopback\" button and verify that the recorded signal is displayed in the wave
        display view. (It may be necessary to adjust the input controls on the peripheral).
       </string>

    <!-- USB Audio Peripheral Buttons Test -->
    <string name="usbaudio_buttons_test"> USB Audio Peripheral Buttons Test</string>
    <string name="usbaudio_buttons_info">
        This test requires that you have connected a USB Audio headset that supports the
        Android USB audio headset buttons specification. Press each
        \"transport\" button and verify that it is recognized by the test. When each of the
        buttons has been recognized the \"pass\" button will be enabled.
    </string>

    <!-- Pro Audio Test -->
    <string name="proaudio_test">Pro Audio Test</string>
    <string name="proaudio_info">
       This test requires that you have connected a supported USB Audio Peripheral device
       (not a headset) and that peripheral\'s audio outputs are connected to the peripherals\'s
       audio inputs. Alternatively, for devices with an analog audio jack or USB-c Digital
       to Analog dongle, a Loopback Plug can be used. Also, any if there is an input level
       control on the peripheral, it must be set to a non-zero value. When the test has
       verified support for a valid audio peripheral, press the \"Round-Trip Test\" button
       to complete the test. Note that it may be necessary to run the latency test more than
       once to get a sufficient confidence value.
    </string>
    <string name="proaudio_hdmi_infotitle">HDMI Support</string>
    <string name="proaudio_hdmi_message">Please connect an HDMI peripheral to validate
        HDMI output attributes.
    </string>

    <!-- Telecom tests -->
    <string name="telecom_enable_phone_account_test"> Telecom Enable Phone Account Test</string>
    <string name="telecom_enable_phone_account_info">
        This test verifies that a third party ConnectionService can be enabled by the user.
    </string>
    <string name="telecom_enable_phone_account_step_1">
        Click the button below to register a test PhoneAccount and ConnectionService.
    </string>
    <string name="telecom_enable_phone_account_register_button">Register Phone Account</string>
    <string name="telecom_enable_phone_account_step_2">
        In the Calling accounts settings, choose "All calling accounts" and enable the "CTS Verifier Test" account.
        On AOSP this is accessible from: Phone app > Settings > Calls > Calling Accounts.
        Once you have completed this step, return here and click the Confirm button.
    </string>
    <string name="telecom_enable_phone_account_confirm_button">Confirm</string>

    <string name="telecom_outgoing_call_test">Telecom Outgoing Call Test</string>
    <string name="telecom_outgoing_call_test_info">This test verifies that the default
        dialer on the system is able to make a call using a third-party ConnectionService.</string>
    <string name="telecom_outgoing_call_step_1">
        Click the button below to register a test PhoneAccount and ConnectionService. You will be
        taken to the phone account selection screen. Please enable the "CTS Verifier Test"
        account and select it as the default account for outgoing calls. Once you have completed
        this step, return here and click the "Confirm Phone Account" button.
    </string>
    <string name="telecom_outgoing_call_register_enable_phone_account_button">
        Register and Enable Phone Account
    </string>
    <string name="telecom_outgoing_call_confirm_register_button">Confirm Phone Account</string>
    <string name="telecom_outgoing_call_step_2">
        Click the button below to dial an outgoing call. This will populate the default dialer
        app with a dummy phone number. Initiate the phone call from the dialer app, then return
        to this screen while the call is still in progress.
    </string>
    <string name="telecom_outgoing_call_dial_button">Dial</string>
    <string name="telecom_outgoing_call_step_3">
        Click the button below to confirm that the ongoing outgoing call was correctly made.
    </string>
    <string name="telecom_outgoing_call_confirm_button">Confirm</string>

    <string name="telecom_incoming_call_test">Telecom Incoming Call Test</string>
    <string name="telecom_incoming_call_test_info">This test verifies that the default
        dialer on the system is able to receive a call from a third-party connection service.
    </string>
    <string name="telecom_incoming_call_step_1">
        Click the button below to register a test PhoneAccount and ConnectionService. You will be
        taken to the phone account selection screen. Please enable the "CTS Verifier Test"
        account. Once you have completed this step, return here and click the
        "Confirm Phone Account" button.
    </string>
    <string name="telecom_incoming_call_register_enable_phone_account_button">
        Register and Enable Phone Account
    </string>
    <string name="telecom_incoming_call_confirm_register_button">Confirm Phone Account</string>
    <string name="telecom_incoming_call_step_2">
        Click the button below to initiate an incoming call. The phone should start ringing.
        Answer the call, confirm that you can hear an audio clip with Eisenhower\'s voice, then
        return to this screen while the call is still ongoing.
    </string>
    <string name="telecom_incoming_call_dial_button">Dial</string>
    <string name="telecom_incoming_call_step_3">
        Click the button below to confirm that the ongoing incoming call was properly answered and
        that audio is audible.
    </string>
    <string name="telecom_incoming_call_confirm_button">Confirm</string>
    <string name="telecom_incoming_self_mgd_test"> Incoming Self-Managed Connection Test</string>
    <string name="telecom_incoming_self_mgd_info">
        This test verifies that an incoming call from a Self-Managed Connection Service will trigger
        a Telecom-managed incoming call UI when it is not possible to hold an ongoing call on the
        device.
    </string>
    <string name="telecom_incoming_self_mgd_step_1">
        Click the button below to register a test self-managed ConnectionService.
    </string>
    <string name="telecom_incoming_self_mgd_register_button">Register Self-Managed ConnectionService</string>
    <string name="telecom_incoming_self_mgd_step_2">
        Start two phone calls on the device under test; this generates a scenario where calls cannot
        be held when the incoming self-managed call is received.  Click "verify calls" to confirm
        that the calls were started.
    </string>
    <string name="telecom_incoming_self_mgd_verify_call_button">Verify Calls</string>
    <string name="telecom_incoming_self_mgd_step_3">
        Click the button below to start a test incoming self-managed call.  Answer the call in the
        UI when prompted.
    </string>
    <string name="telecom_incoming_self_mgd_place_call_button">Start Self-Managed Call</string>
    <!-- Strings for SetNewPasswordComplexityTest -->
    <string name="set_complexity_test_title">Set New Password Complexity Test</string>
    <string name="set_complexity_test_message">
        This test verifies that when an app prompts users to set a new screen lock of a certain complexity level, users cannot set a screen lock weaker than the specified complexity.\n
        \nClick the complexity level buttons one by one and make sure you can only set a screen lock not weaker than the types and minimum length specified on the right of each button.
    </string>
    <string name="set_complexity_high_txt">High</string>
    <string name="set_complexity_medium_txt">Medium</string>
    <string name="set_complexity_low_txt">Low</string>
    <string name="set_complexity_none_txt">None</string>
    <string name="set_complexity_high_desc">
        PIN without repeating (4444) or ordered (1234, 4321, 2468) sequences, length at least 8; Or
        \nAlphabetic, length at least 6; Or
        \nAlphanumeric, length at least 6</string>
    <string name="set_complexity_medium_desc">
        PIN without repeating (4444) or ordered (1234, 4321, 2468) sequences, length at least 4; Or
        \nAlphabetic, length at least 4; Or
        \nAlphanumeric, length at least 4</string>
    <string name="set_complexity_low_desc">Any pattern, PIN or password</string>
    <string name="set_complexity_none_desc">No restrictions</string>

    <!-- Notification Bubble Tests-->
    <string name="bubbles_notification_title">Bubble Notification Tests</string>
    <string name="bubbles_notification_description">This test checks the behaviour of bubble
        notifications, ensuring that notifications appear or disappear appropriately based on how
        BubbleMetadata is configured on the notification and user actions. Bubbles are special
        notifications that appear as a floating button on the screen, in addition to the notification
        in the notification shade.</string>
    <string name="bubbles_notification_test_enable_bubbles_title">Enable Bubbles for CTS Verifier</string>
    <string name="bubbles_notification_test_enable_bubbles_verify">Click the button below and enable
        bubbles for the verifier app on the resulting screen, if they aren\'t enabled already.</string>
    <string name="bubbles_notification_enable_bubbles_button">Enable bubbles for CTS Verifier</string>
    <string name="bubbles_notification_test_title_1">Step 1: send a bubble with notification</string>
    <string name="bubbles_notification_test_verify_1">Click the button below and verify that there is a
        bubble on the screen and a notification in the notification shade.
    </string>
    <string name="bubbles_notification_test_button_1">Send bubble notification</string>
    <string name="bubbles_notification_test_title_2">Step 2: hide notification</string>
    <string name="bubbles_notification_test_verify_2">Click the button below and verify that the bubble
        is still on the screen, but the notification is now hidden from the notification shade.
    </string>
    <string name="bubbles_notification_test_button_2">Update bubble to hide notification</string>
    <string name="bubbles_notification_test_title_3">Step 3: show notification</string>
    <string name="bubbles_notification_test_verify_3">Click the button below and verify that the bubble
        is still on the screen, and the notification is now visible in the notification shade.
    </string>
    <string name="bubbles_notification_test_button_3">Update bubble to show notification</string>
    <string name="bubbles_notification_test_title_4">Step 4: remove bubble</string>
    <string name="bubbles_notification_test_verify_4">Click the button below and verify that the
        bubble is removed from the screen, and the notification is still visible in the notification
        shade.</string>
    <string name="bubbles_notification_test_button_4">Remove bubble</string>
    <string name="bubbles_notification_test_title_5">Step 5: add bubble</string>
    <string name="bubbles_notification_test_verify_5">Click the button below and verify that the
        bubble appears on the screen, and the notification is still visible in the notification
        shade.</string>
    <string name="bubbles_notification_test_button_5">Add bubble</string>
    <string name="bubbles_notification_test_title_6">Step 6: open bubble</string>
    <string name="bubbles_notification_test_verify_6">Tap on the bubble to open it, then tap on the
        bubble again to collapse it and return to this screen. Verify that after opening the bubble,
        there is no longer a notification for it visible in the notification shade.</string>
    <string name="bubbles_notification_test_title_7">Step 7: drag and dismiss bubble</string>
    <string name="bubbles_notification_test_verify_7">Click the button below and verify that the bubble
        is still on screen, and the notification is visible in the notification shade.\n\n
        Drag the bubble, while dragging a UI affordance should show. Verify that: \n\n
        1. Dragging and dropping the bubble on that UI affordance removes it from the screen.\n\n
        2. The notification should remain in the notification shade.</string>
    <string name="bubbles_notification_test_button_7">Update bubble to show notification</string>
    <string name="bubbles_notification_test_title_8">Step 8: dismiss notification</string>
    <string name="bubbles_notification_test_verify_8">Click the button below and verify that a bubble
        appears on screen, and the notification is visible in the notification shade.\n\n
        Dismiss the notification from the notification shade and verify that the bubble remains on
        screen.</string>
    <string name="bubbles_notification_test_button_8">Send bubble notification</string>
    <string name="bubbles_notification_test_title_9">Step 9: auto expand bubble</string>
    <string name="bubbles_notification_test_verify_9">Click the button below and verify that a bubble
        appears on screen, auto-expanded.</string>
    <string name="bubbles_notification_test_button_9">Send auto-expanded bubble notification</string>
    <string name="bubbles_notification_no_bubbles_low_mem">No bubbles on low memory device; no tests to run</string>
    <string name="bubbles_test_summary_title">Test Complete</string>
    <string name="bubbles_test_summary">%1$d out of %2$d tests passed</string>
    <string name="bubble_activity_title">Bubble Activity</string>
    <!-- Strings for Instant Apps -->
    <string name="ia_instruction_heading_label">Instructions:</string>
    <string name="ia_instruction_text_photo_label">READ BEFORE STARTING TEST</string>
    <string name="ia_start_test_button_caption">Start Test</string>
    <string name="ia_install_dialog_title">Install Instant App</string>
    <string name="ia_install_dialog_text">
    For this test you need to install CtsVerifierInstantApp.apk by running \n
    adb install -r --instant /path/to/CtsVerifierInstantApp.apk \n\n
    CtsVerifierInstantApp.apk can be found in android-cts-verifier.zip that you have downloaded.
    </string>
    <string name="ia_notification">Instant Apps Notification Test</string>
    <string name="ia_notification_info">
    This test verifies that Instant Apps notification is shown when an Instant App is at foreground.\n\n
    - Read the message above the \"Start Test\" button for
    step-by-step instructions.
    </string>
    <string name="ia_notification_instruction_label">\n
    1. Click Start Test. \n\n
    2. An alert dialog with install instruction will be shown if the sample Instant App has not been installed, otherwise, the sample Instant App will be opened automatically. \n\n
    3. Drag down the notification bar when the sample Instant App is at foreground. \n\n
    4. Skip this step in china version. \n\n
    5. Click Pass button if all checks in step 4 passed, otherwise click Fail button.
    </string>
    <string name="ia_notification_instruction_label_no_app_market_version">\n
    1. Click Start Test. \n\n
    2. An alert dialog with install instruction will be shown if the sample Instant App has not been installed, otherwise, the sample Instant App will be opened automatically. \n\n
    3. Drag down the notification bar when the sample Instant App is at foreground. \n\n
    4. Check if Instant App is shown in notification area with the following (Please expand the notification if it is collapsed): \n
    \u0020\u0020\u0020a. It provides information about Instant Apps not requiring installation and an action that provides more information about the Instant App. \n
    \u0020\u0020\u0020b. Skip this step in china version.Can not launch the associated link with web browser. \n\n
    5. Click Pass button if all checks in step 4 passed, otherwise click Fail button.
    </string>
    <string name="ia_recents">Instant Apps Recents Test</string>
    <string name="ia_recents_info">
    This test verifies that Instant App can be accessed in Recent Apps screen.\n\n
    - Read the message above the \"Start Test\" button for
    step-by-step instructions.
    </string>
    <string name="ia_recents_instruction_label">\n
    1. Click Start Test. \n\n
    2. An alert dialog with install instruction will be shown if the sample Instant App has not been installed, otherwise, the sample Instant App will be opened automatically. \n\n
    3. Tap Recents button, verify the sample Instant App is shown in Recent Apps screen. \n\n
    4. Tap the sample Instant App in Recent Apps screen, verify the Instant App is opened in the foreground. \n\n
    5. Click Pass button if checks in step 3 and 4 passed, otherwise click Fail button.
    </string>
    <string name="ia_app_info">View/Delete Instant Apps Test</string>
    <string name="ia_app_info_info">
    This test verifies that Instant App can be viewed and deleted in Settings.\n\n
    - Read the message above the \"Start Test\" button for
    step-by-step instructions.
    </string>
    <string name="ia_app_info_instruction_label">\n
    1. Click Start Test. \n\n
    2. An alert dialog with install instruction will be shown if the sample Instant App has not been installed, otherwise, the sample Instant App will be opened automatically. \n\n
    3. Open Settings App. \n\n
    4. Tap Apps &amp; Notifications. \n\n
    5. Verify the sample Instant App can be found and it is shown as \"Instant App\". \n\n
    6. Verify there is an action allowing user to clear/delete app. \n\n
    7. Click Pass button if checks in step 5 and 6 passed, otherwise click Fail button.
    </string>

    <!-- Strings for Mulituser.HeadlessSystemUser Test -->
    <string name="multiuser_headless_sys_user_test">Headless System User Test</string>
    <string name="multiuser_headless_sys_user_info">This test verifies that users cannot interact with the headless system user (user 0).</string>
    <string name="multiuser_headless_sys_user_can_skip">Your device does not support multiuser. You can tap Pass.</string>
    <string name="multiuser_headless_sys_user_next">Proceed</string>
    <string name="multiuser_headless_sys_user_yes">Yes</string>
    <string name="multiuser_headless_sys_user_no">No</string>
    <string name="multiuser_headless_sys_user_switchable_instructions">
        Tap Proceed if the system allows switching or selecting users. Otherwise, tap Pass at the bottom.
    </string>
    <string name="multiuser_headless_sys_user_adb_users_instructions">
        Run the \'adb shell pm list users\' shell command and identify the name of User 0. Is User 0 name unique?
    </string>
    <string name="multiuser_headless_sys_user_unique_instructions">
        You will need to test every screen that can switch or select users.\n\n
        For each screen, verify User 0\'s name is not shown. Please do the following: \n\n
        1. Navigate to a screen that can switch or select users. \n
        2. Tap Fail at the bottom if User 0 name is shown in the user selection screen. \n
        3. Repeat test at another switch or select user screen. Tap Pass when all screens are tested without fail.
    </string>
    <string name="multiuser_headless_sys_user_common_instructions">
        You will need to test every screen that can switch or select users.\n\n
        For each screen, switch into each user to verify they are not user 0. Please do the following: \n\n
        1. Navigate to a screen to switch user. \n
        2. Run the \'adb shell am get-current-user\' shell command. \n
        3. If return is 0, click Fail button. Otherwise, continue to next step. \n
        4. Switch to another user with User 0 name from the screen and repeat steps 2-4 until all users are verified. \n
        5. Repeat test at another switch or select user screen. Tap Pass when all screens are tested without fail.
    </string>
</resources>
