<?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>

    <!-- 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_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.</string>
    <string name="runtime_permissions_error">Cannot continue. Please grant runtime permissions</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 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_kg_disabled_features_test">Keyguard Disabled Features Test</string>
    <string name="rn_kg_disabled_features_test">Redacted Notifications Keyguard Disabled Features Test</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 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_fingerprint_dialog_bound_key_test">Fingerprint Bound Keys Test (System Dialog)</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\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_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="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 priority: </string>
    <string name="ble_connection_priority_balanced">BALANCED</string>
    <string name="ble_connection_priority_high">HIGH</string>
    <string name="ble_connection_priority_low">LOW</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_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_high">Bluetooth LE Send With CONNECTION_PRIORITY_HIGH</string>
    <string name="ble_connection_priority_client_low">Bluetooth LE Send With CONNECTION_PRIORITY_LOW_POWER</string>
    <string name="ble_connection_priority_client_balanced">Bluetooth LE Send With CONNECTION_PRIORITY_BALANCED</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. </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</string>
    <string name="multinetwork_connectivity_test_2_desc">Test 2 - When connected to Wi-Fi, on losing connectivity, restores mobile connectivity</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>

    <!-- 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_success">Test passed!</string>
    <string name="nfc_result_failure">Test failed!</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_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_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>

    <!-- 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>

    <!-- 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,
    and the broadcast intents are received when appropriate per the SDK
    documentation.\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_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 Start Test. \n
    2. Go to home screen (HOME key). \n
    3. Launch Camera application. \n
    4. Capture photo within 1 minute. \n
    5. Return to CTS verifier app. \n
    6. Pass button will light up if URI trigger was fired.\n
    7. Click "Pass" if possible.
    </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 URI trigger was fired.\n
    7. Click "Pass" if possible.
    </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 URI trigger was NOT received.\n
    5. Click "Pass" if possible.
    </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. Pass button will light up if URI trigger was received.\n
    5. Click "Pass" if possible.
    </string>
    <string name="ci_start_test_button_caption">Start Test</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.
    </string>
    <string name="cf_preview_label">Normal preview</string>
    <string name="cf_format_label">Processed callback data</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 - 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.
    </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.
        \n\n5. Confirm access to the USB accessory on the helper device.
        \n\n6. Confirm access to the USB device on this device again.
        \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.
        \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.
        \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_legacy_devices">
        All cameras on this device are LEGACY mode only - ITS tests are only required on LIMITED
        or better devices.  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 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 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_group_client_test">Group Client 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_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_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="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="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="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_update_rule">Updating Automatic Zen Rule</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 and reset the following items:\n
 1. Clear device credentials.\n
 2. Change the lock screen type to \'None\'.</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_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_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.
        7. The work app should be launched.
    </string>
    <string name="provisioning_byod_confirm_work_credentials_header">
        CtsVerifier
    </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) Follow the instructions on-screen to remove the work password.\n
        2) Open Recents.\n
        3) Confirm that this "CTS Verifier" activity is shown in Recents.\n
        4) Confirm that the contents of the activity <b>are not</b> hidden.\n
        5) 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 remove this before continuing.
    </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
        \n
        NOTE: A screen lock must be configured for this test. Otherwise, test preparation
        will fail to generate a key for use by the test.
    </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 same prompt should appear again.\n
        This time, verify that the title is \"No certificates found\" and the list is empty,
        then press \'Cancel\'.\n
        \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 and "Accept and continue" button are 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, you should be automatically redirected back to this page
    </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, you should be automatically redirected back to this page.
        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
        \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 \"Data usage\" page and then into the \"Wi-Fi data usage\" category.\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_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 \"Data usage\" page and then into the \"Mobile data usage\" category.\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. 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
        3. 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. 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
        3. 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. 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
        3. 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. 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
        3. Go back to the cts-verifier tests using the back button, then mark the test accordingly.\n
    </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">
            This test requires CtsEmptyDeviceOwner.apk to be installed on the device.
            Please set the device owner by enabling USB debugging on the device and issuing the following command on the host:\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 assist gesture are no longer available.\n
            Next, press the button to reenable the status bar and verify that quick settings, notification
            and the assist 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 again.\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 Home button is hidden.\n
            4) The 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 assist 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 Home button is hidden.\n
            4) The 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 assist 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 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 assist 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 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 assist 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 assist 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 Home button is hidden.\n
            4) The 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 assist 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 Home button is hidden.\n
            4) The 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 assist 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. Trying to change it triggers a support message.\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. Trying to change it triggers a support message.\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.\n
        1. Press the set user icon button.\n
        2. Press the go button to go to Settings.\n
        3a. If there is a \"users\" section in Settings, check that the icon of the user \"owner\" is the CtsVerifier one and mark this test accordingly.\n
        3b. If there is no \"users\" section, mark this test as passed.\n
    </string>
    <string name="device_owner_set_user_icon_button">Set user icon</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_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. (If this device has a separate app for work settings, ignore the button and open that app manually from the launcher, 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 and time settings</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 sleep options settings</string>
    <string name="disallow_config_screen_timeout_action">Configuring sleep options in Display or Battery page.</string>
    <string name="disallow_config_brightness">Disallow config brightness settings</string>
    <string name="disallow_config_brightness_action">Configuring brightness level or adaptive brightness in Display or Battery page, 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_modify_accounts">Disallow modify accounts</string>
    <string name="disallow_modify_accounts_action">Adding an account or removing an account (if you have already 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 \'Settings\',
        and manually find and open \'Multiple users\' setting. \n\n

        Mark this test as passed if:\n\n
        - The uninitialized user cannot be removed.\n
        - \'Remove user\' option 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="managed_user_disallow_remove_user_info">
        Please press the \'Set restriction\' button to set the user restriction.
        Then press \'Go\' to open \'Settings\', and manually find and open \'Multiple users\' setting. \n\n

        Mark this test as passed if one of the following conditions is met:\n\n
        - \'Remove user\' option is disabled with an info icon on it. Clicking on it triggers a support dialog.\n
        - \'Remove user\' option cannot be found.\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_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. 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
    </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) When a default browser is set, you must clear it by step (2), (3) and (4).\n
        2) Confirm default browser by "Settings &gt; Apps &amp; notifications &gt; Default apps &gt; Browser app".\n
        3) Tap default browser app in the "Settings &gt; Apps &amp; notifications &gt; App info".\n
        4) Tap "Open by default" and Tap "CLEAR DEFAULTS"\n
        5) Press the Reset button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are not told that your administrator set any default apps.\n
        8) Use the Back button to return to this page.\n
        9) Press the Set Default Apps button.\n
        10) Press the Open Settings button.\n
        11) In the screen that opens, verify that you are now told that your administrator has set 7 default apps.\n
        12) Tap on that information. Verify that a list of default apps shows, with 7 elements in it.\n
        13) Verify that each element shows the CTS Verifier is the default app.\n
        14) Use the Back button to return to this page.\n
        15) 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 \"Learn more\" link.\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>

    <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 the Settings, and manually find and open user settings section.
        Confirm that:\n
        \n
        - Selecting uninitialized user should not trigger user switch.\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.
    </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 Notifcations 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>

    <!-- 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>

    <!-- 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</string>
    <string name="voicemail_restore_default_dialer_no_default_description">Restore the default dialer by going to settings-> apps -> cogwheel -> 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>

    <!-- 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 incoming calls from a Self-Managed Connection Service will trigger
        a Telecom-managed incoming call UI when there is already 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">
        Click the button below to test that the system incoming call notification shows.  When the
        notification shows, "answer" the call.
    </string>
    <string name="telecom_incoming_self_mgd_show_ui_button">Show System Incoming UI</string>
    <string name="telecom_incoming_self_mgd_step_3">
        Click the button below to confirm that the incoming call was answered.
    </string>
    <string name="telecom_incoming_self_mgd_confirm_answer_button">Confirm Answer</string>
</resources>
