<?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="module_id">noabi CtsVerifier</string>

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

    <string name="pass_button_text">Pass</string>
    <string name="info_button_text">Info</string>
    <string name="fail_button_text">Fail</string>
    <string name="next_button_text">Next</string>
    <string name="go_button_text">Go</string>
    <string name="present_button_text">Device Present</string>
    <string name="gone_button_text">Device Gone</string>
    <string name="tests_completed_successfully">All tests completed successfully.</string>

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

    <!-- Strings for CtsReportLog warning -->
    <string name="reportlog_warning_title">CTS-Verifier Report Log</string>
    <string name="reportlog_warning_body">Can\'t create folder for CTS-Verifier Report Logs.
        \n\nPlease enable Report Log creation by exiting CTS Verifier and running the following commands:
        \n\n<code>adb shell appops set com.android.cts.verifier android:read_device_identifiers allow</code>
        \n\n<code>adb shell appops set com.android.cts.verifier MANAGE_EXTERNAL_STORAGE 0</code>
        \n\nTest instructions are found in the \"Using CTS Verifier\" document found at
        <a href="https://source.android.com/compatibility/cts/verifier">https://source.android.com/compatibility/cts/verifier</a>
    </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_tunnel">Tunnel Mode</string>
    <string name="test_category_tv">TV</string>
    <string name="test_category_instant_apps">Instant Apps</string>
    <string name="test_category_logcat">Read Logs</string>
    <string name="test_category_display_cutout">DisplayCutout</string>
    <string name="test_category_other">Other</string>
    <string name="clear">Clear</string>
    <string name="test_results_clear_title">Remove all test results?</string>
    <string name="test_results_clear_yes">Yes</string>
    <string name="test_results_clear_cancel">Cancel</string>
    <string name="test_results_cleared">Test results cleared.</string>
    <string name="view">View</string>
    <string name="test_results_error">Couldn\'t create test results report. Try running the
        following command if you haven\'t yet.\n\"adb shell appops set com.android.cts.verifier
        android:read_device_identifiers allow\" </string>
    <string name="runtime_permissions_error">Please grant runtime permissions, otherwise, tests might fail.</string>
    <string name="export">Export</string>
    <string name="report_log_folder_name">ctsv-report-logs</string>
    <string name="no_storage">Cannot save report to external storage, see log for details.</string>
    <string name="no_storage_io_parser_exception">Cannot save report to external
        storage, see log for details. Or try running the following command if
        you haven\'t yet.\n\"adb shell appops set com.android.cts.verifier
        MANAGE_EXTERNAL_STORAGE 0\"</string>
    <string name="report_saved">Report saved to: %s</string>

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

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

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

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

    <!-- Strings for BatterySaverTestActivity -->
    <string name="battery_saver_test">Battery Saver Test</string>
    <string name="battery_saver_test_info">
        This test verifies that the device provides a user affordance to enable and disable
        Battery Saver feature.
    </string>
    <string name="battery_saver_test_no_battery_detected">
        No battery detected. This test will only work on devices that contain a battery.
    </string>
    <string name="battery_saver_test_unplug">
        Unplug the device or run \"adb shell dumpsys battery unplug\".
    </string>
    <string name="battery_saver_test_device_plugged_in">
        The device is still plugged in.
    </string>
    <string name="battery_saver_test_enable_bs">
        Look for a button that allows you to turn Battery Saver on and off. The button may be in the
        Quick Settings section or on the Battery page of device settings. Use the button to turn
        Battery Saver on.
    </string>
    <string name="battery_saver_test_disable_bs">
        Now use the button to turn Battery Saver off.
    </string>
    <string name="battery_saver_test_start_turn_bs_off">
        Turn Battery Saver off to begin the test.
    </string>
    <string name="battery_saver_test_bs_on">Battery Saver is on.</string>
    <string name="battery_saver_test_bs_off">Battery Saver is off.</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_enable_garage_monitor">Enable Garage Mode Monitor</string>
    <string name="car_garage_mode_test">Garage Mode Test</string>
    <string name="car_garage_mode_test_desc">
        This test verifies that Garage Mode runs at the end of a drive.\n\n
        <b>Important: Please enable Wi-Fi or other connectivity for test to pass.\n\n </b>
        Touch "Enable Garage Mode Monitor" to launch the Garage Mode verifier.\n\n
        Turn the vehicle off and exit the vehicle (or take the proprietary action that
        initiates shut-down of the system).\n\n
        Do not enter or disturb the vehicle for at least 15 minutes.\n\n
        Enter the vehicle. Re-launch the CTS-Verifier app if it is not running.\n\n
        If Garage Mode ran as required, the pass button will be enabled.</string>
    <string name="car_component_power_on_policy_check">Verify Component Power On Policy</string>
    <string name="car_component_power_off_policy_check">Verify Component Power Off Policy</string>
    <string name="car_power_policy_test">Car Power Policy Test</string>
    <string name="car_power_policy_test_desc">
        This test verifies that Wi-Fi, Bluetooth and Location settings UI behaviors with respect
        to their power policy. If the policy sets components power off, the component settings UI
        shall be disabled. Otherwise, the settings UI shall be enabled as default.\n\n
        First execute the\n
        "  adb shell cmd car_service apply-cts-verifier-power-off-policy"\n
        adb shell command first and then sequentialy click first 4 buttons to check each component
        settings UI are disabled.\n\n
        Then, execute the\n
        "  adb shell cmd car_service apply-cts-verifier-power-on-policy"\n
        shell command and sequential click the remaining 4 buttons to check if each component
        settings UI is enabled.\n\n
        For the detailed instructions, please refer to\n
        "  https://source.android.com/compatibility/cts/power-policy".
        </string>
    <string name="car_wifi_settings">Go to Wi-Fi settings</string>
    <string name="car_wifi_settings_disable">Check Wi-Fi Settings Disabled</string>
    <string name="car_bluetooth_settings_disable">Check Bluetooth Settings Disabled</string>
    <string name="car_location_settings_disable">Check Location Settings Disabled</string>
    <string name="car_wifi_settings_enable">Check Wi-Fi Settings Enabled</string>
    <string name="car_bluetooth_settings_enable">Check Bluetooth Settings Enabled</string>
    <string name="car_location_settings_enable">Check Location Settings Enabled</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="car_launcher_test">Car Launcher Test</string>
    <string name="car_launcher_test_desc">This test ensures that the car launcher lists apps
        disabled by car service due to system resource overuse.\n\n
        <b>
            Before proceeding, check if \'com.android.cts.car.watchdog_companionapp\'
            (aka CtsCarWatchdogCompanionApp) is installed by going to Settings &gt; Apps. If not,
            please install the app before proceeding.\n\n
        </b>
        1. Check if the CtsCarWatchdogCompanionApp is visible in car launcher\'s app grid view. If
        it is not listed, pass the test.\n
        2. Run the
        \'adb shell cmd car_service watchdog-resource-overuse-kill com.android.cts.car.watchdog_companionapp\'
        shell command to disable the app because of system resource overuse.\n
        3. Click on \"Open Launcher\". Make sure the CtsCarWatchdogCompanionApp is displayed. If it
        is not listed, fail the test.\n
        4. Open CtsCarWatchdogCompanionApp from the launcher.\n\n
        Pass the test only if the companion app opened successfully.</string>
    <string name="car_launcher_test_button_label">Open Launcher</string>
    <string name="gear_selection_test">Gear Selection Test</string>
    <string name="gear_selection_test_desc">This test ensures that the
      GEAR_SELECTION property is implemented correctly.\n\nShift the car\'s
      gear to the expected gear value. If it is able to shift to all the
      implemented gears then the pass button will be enabled.</string>
    <string name="expected_gear_selection_title">Expected Gear Selection</string>
    <string name="current_gear_selection_title">Current Gear Selection</string>
    <string name="parking_brake_on_test">PARKING_BRAKE_ON Test</string>
    <string name="parking_brake_on_test_desc">This test ensures that the
      PARKING_BRAKE_ON property is implemented correctly.\n\nFollow the
      instructions on the screen to engage and disengage the parking brake. When
      the instructions are completed, the pass button will be enabled.</string>
    <string name="current_parking_brake_on_value_title">Current PARKING_BRAKE_ON Value:</string>
    <string name="da_no_policy">1. Press the \"Generate Policy\" to create a random device
        policy\n\n2. Press \"Apply Policy\" to put the policy into effect.\n\n3. Reboot your
        device and return to this test in the CTS Verifier.
    </string>
    <string name="da_generate_policy">Generate Policy</string>
    <string name="da_apply_policy">Apply Policy</string>
    <string name="da_random_policy">Random policy generated.</string>
    <string name="da_policy_reboot">Reboot your device and return to this CTS Verifier test.</string>
    <string name="da_password_quality">Password Quality</string>
    <string name="da_password_quality_alphabetic">Alphabetic</string>
    <string name="da_password_quality_alphanumeric">Alphanumeric</string>
    <string name="da_password_quality_numeric">Numeric</string>
    <string name="da_password_quality_something">Something</string>
    <string name="da_password_minimum_length">Minimum Password Length</string>
    <string name="da_maximum_failed_passwords_for_wipe">Maximum Failed Passwords for Wipe</string>
    <string name="da_maximum_time_to_lock">Maximum Time to Lock</string>
    <string name="da_policy_info">Expected value: %1$s\nActual value: %2$s</string>

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

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

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

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

    <!-- Strings for ClipboardPreviewText -->
    <string name="clipboard_preview_test">Clipboard Preview Test</string>
    <string name="clipboard_preview_test_info">
        This test verifies that clipboard contents are visible to the user when copied.
    </string>
    <string name="clipboard_preview_test_instructions">
        Press the \'Copy\' button to copy the secret code to the clipboard.
        \nDo not press any other buttons after you press the \'Copy\' button.
        \n\n If nothing happens, press Fail.
        \n\n If you see the word "FAIL" appear on screen, press Fail.
        \n\n If you see a confirmation that content has been copied to the clipboard, press Pass.
    </string>
    <string name="clipboard_preview_test_secret">FAIL</string>
    <string name="clipboard_preview_test_copy_button">Copy</string>


    <!-- Strings for BiometricTest -->
    <string name="biometric_test">Biometric Tests</string>

    <string name="biometric_test_category_credential">1) Credential Tests</string>
    <string name="biometric_test_category_strong">2) Strong Biometric Tests</string>
    <string name="biometric_test_category_weak">3) Weak Biometric Tests</string>
    <string name="biometric_test_category_combination">4) setUserAuthParams Tests</string>

    <string name="biometric_test_credential_crypto_label">1a: Credential Crypto</string>
    <string name="biometric_test_credential_crypto_instructions">This test checks that PIN/Pattern/Password successfully unlocks the relevant KeyStore operations. Please
        ensure that you have a PIN/Pattern/Password set up.</string>
    <string name="biometric_test_credential_crypto_timed_key_strongbox">Create and unlock timed key (StrongBox)</string>
    <string name="biometric_test_credential_crypto_timed_key_no_strongbox">Create and unlock timed key</string>

    <string name="biometric_test_ui_instruction_dialog_title">Instructions</string>
    <string name="biometric_test_ui_instruction_dialog_contents">For the following test, please remember or write down the numbers presented in the BiometricPrompt. After authenticating, please enter the contents in the test dialog.</string>
    <string name="biometric_test_ui_instruction_dialog_continue">Continue</string>
    <string name="biometric_test_ui_verification_dialog_title">Please enter your recorded contents</string>
    <string name="biometric_test_ui_verification_dialog_check">Check</string>

    <string name="biometric_test_reject_continues_instruction_title">Instructions</string>
    <string name="biometric_test_reject_continues_instruction_contents">Please authenticate with a non-enrolled biometric before authenticating with the actual enrolled biometric.</string>
    <string name="biometric_test_reject_continues_instruction_continue">Continue</string>

    <string name="biometric_test_strong_label">2a: Strong Biometrics + Crypto</string>
    <string name="biometric_test_strong_instructions">This test checks that the Settings.ACTION_BIOMETRIC_ENROLL and its corresponding
        EXTRA_BIOMETRIC_AUTHENTICATOR_REQUIREMENTS APIs enroll only a STRONG biometric. Please ensure that the device
        does NOT have ANY biometrics enrolled before starting this test. After passing the first part of the test, it will check various use cases
        when authentication is invoked with the STRONG biometric.</string>
    <string name="biometric_test_strong_check_and_enroll_button">Start enrollment</string>
    <string name="biometric_test_strong_authenticate_no_strongbox_button">Authenticate Crypto (without StrongBox)</string>
    <string name="biometric_test_strong_authenticate_strongbox_button">Authenticate Crypto (with StrongBox)</string>
    <string name="biometric_test_strong_authenticate_invalidated_button">Authenticate Key Invalidated</string>
    <string name="biometric_test_strong_authenticate_invalidated_instruction_title">Instructions</string>
    <string name="biometric_test_strong_authenticate_invalidated_instruction_contents">Before starting the next test, please add another enrollment to your strong biometric sensor. If only one enrollment is supported, please remove the current enrollment, then enroll.</string>
    <string name="biometric_test_strong_authenticate_invalidated_instruction_continue">Continue</string>

    <string name="biometric_test_weak_label">3a: Weak Biometrics</string>
    <string name="biometric_test_weak_instructions">This test checks that the Settings.ACTION_BIOMETRIC_ENROLL and its corresponding
        EXTRA_BIOMETRIC_AUTHENTICATOR_REQUIREMENTS APIs enroll a biometric that meets or exceeds WEAK. Please ensure that the device
        does NOT have ANY biometrics enrolled before starting this test. After passing the first part of the test, it will check various use cases
        when authentication is invoked.</string>
    <string name="biometric_test_weak_enroll">Start enrollment</string>

    <string name="biometric_test_set_user_authentication_credential_cipher_label">4a: Cipher, Credential</string>
    <string name="biometric_test_set_user_authentication_biometric_cipher_label">4b: Cipher, Biometric</string>
    <string name="biometric_test_set_user_authentication_biometric_credential_cipher_label">4c: Cipher, Biometric|Credential</string>
    <string name="biometric_test_set_user_authentication_credential_signature_label">4d: Signature, Credential</string>
    <string name="biometric_test_set_user_authentication_biometric_signature_label">4e: Signature, Biometric</string>
    <string name="biometric_test_set_user_authentication_biometric_or_credential_signature_label">4f: Signature, Biometric|Credential</string>
    <string name="biometric_test_set_user_authentication_credential_mac_label">4g: MAC, Credential</string>
    <string name="biometric_test_set_user_authentication_biometric_mac_label">4h: MAC, Biometric</string>
    <string name="biometric_test_set_user_authentication_biometric_or_credential_mac_label">4i: MAC, Biometric|Credential</string>
    <string name="biometric_test_set_user_authentication_credential_instructions">This test checks the correctness of the KeyGenParameterSpec.Builder#setUserAuthenticationParameters(int, int) API for AUTH_DEVICE_CREDENTIAL.
        Buttons for completed tasks will become invisible. It\'s normal for buttons to be disabled for a few seconds during this test.</string>
    <string name="biometric_test_set_user_authentication_biometric_instructions">This test checks the correctness of the KeyGenParameterSpec.Builder#setUserAuthenticationParameters(int, int) API for AUTH_BIOMETRIC_STRONG.
        Buttons for completed tasks will become invisible. It\'s normal for buttons to be disabled for a few seconds during this test.</string>
    <string name="biometric_test_set_user_authentication_biometric_or_credential_instructions">This test checks the correctness of the KeyGenParameterSpec.Builder#setUserAuthenticationParameters(int, int) API for AUTH_BIOMETRIC_STRONG|AUTH_DEVICE_CREDENTIAL.
        Buttons for completed tasks will become invisible. It\'s normal for buttons to be disabled for a few seconds during this test.</string>
    <!-- no strongbox-->
    <string name="biometric_test_set_user_authentication_credential_per_use_auth_with_credential">auth-per-use key with credential</string>
    <string name="biometric_test_set_user_authentication_credential_duration_auth_with_credential">time-based key with credential</string>
    <string name="biometric_test_set_user_authentication_credential_per_use_auth_with_biometric">auth-per-use key with biometric</string>
    <string name="biometric_test_set_user_authentication_credential_duration_auth_with_biometric">time-based key with biometric</string>
    <!-- strongbox -->
    <string name="biometric_test_set_user_authentication_credential_per_use_auth_with_credential_strongbox">auth-per-use key with credential (strongbox)</string>
    <string name="biometric_test_set_user_authentication_credential_duration_auth_with_credential_strongbox">time-based key with credential (strongbox)</string>
    <string name="biometric_test_set_user_authentication_credential_per_use_auth_with_biometric_strongbox">auth-per-use key with biometric (strongbox)</string>
    <string name="biometric_test_set_user_authentication_credential_duration_auth_with_biometric_strongbox">time-based key with biometric (strongbox)</string>

    <!-- Strings for user consent for logs test -->
    <string name="read_logs_text">User Consent for Device Logs Test</string>
    <string name="read_logs_fg_allow_text">User Consent for Device Logs Allow in Foreground Test</string>
    <string name="read_logs_fg_deny_text">User Consent for Device Logs Deny in Foreground Test</string>
    <string name="read_logs_bg_text">User Consent for Device Logs in Instrumentation Test</string>
    <string name="read_logs_test_info">"This test verifies that user consent for per-use prompt is working properly.\nThe test assumes READ_LOGS permission is granted to the app.\nStart this test by clicking User Consent for Device Logs Allow(Deny) in Foreground Test button.\nWhen the process is running in foreground, a user will see a prompt. Once a user clicks the prompt, users have an option to choose \"Allow one-time access\" or \"Don\'t Allow\". Please proceed with one option. "When the process is running in background, logd access will be denied.</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>

    <!-- Strings for protected confirmation test -->
    <string name="sec_protected_confirmation_test">Android Protected Confirmation Test</string>
    <string name="sec_protected_confirmation_test_info">
        This test ensures that - if Android Protected Confirmation is supported by the device under
        test - the user is able to see the confirmation message and confirm it. It also assures that
        Keymaster signs a message with a confirmation key only if the message was previously
        confirmed by the user.
    </string>
    <string name="sec_protected_confirmation_not_supported_title">Not Supported</string>
    <string name="sec_protected_confirmation_not_supported_info">
        Android Protected Confirmation is not implemented by this device. This is okay because this
        is an optional feature. Set this test to passed and continue.
    </string>
    <string name="sec_protected_confirmation_message">This is a CtsVerifier test message!</string>
    <string name="sec_protected_confirmation_tee_test">Start Tee Test</string>
    <string name="sec_protected_confirmation_strongbox_test">Start Strongbox Test</string>

    <!-- Strings for IdentityAuthPerPresenation -->
    <string name="sec_identity_credential_authentication_test">Identity Credential Authentication</string>
    <string name="sec_identity_credential_authentication_test_info">
        This test ensures that data elements in Identity Credential documents protected by user
        authentication with timeout 0 can only be accessed once per reader session.
    </string>

    <!-- Strings for IdentityAuthPerPresenationMultiDocument -->
    <string name="sec_identity_credential_authentication_multi_document_test">Identity Credential Authentication Multi-Document</string>
    <string name="sec_identity_credential_authentication_multi_document_test_info">
        This test is for Identity Credential presentations with multiple documents.
    </string>

    <string name="sec_unlocked_device_required_test">Unlocked Device Required</string>
    <string name="sec_unlocked_device_required_test_info">
        This test ensures that keys created with setUnlockedDeviceRequired are usable when the
        screen is unlocked but not when it is locked.
    </string>

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

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

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

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

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

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

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

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

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

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

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


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

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

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

    <!-- BLE client side strings -->
    <string name="ble_client_service_name">Bluetooth LE GATT Client Handler Service</string>
    <string name="ble_client_test_name">01 Bluetooth LE Client Test</string>
    <string name="ble_client_connect_name">Bluetooth LE Client Connect</string>
    <string name="ble_discover_service_name">Bluetooth LE Discover Service</string>
    <string name="ble_read_characteristic_name">Bluetooth LE Read Characteristic</string>
    <string name="ble_write_characteristic_name">Bluetooth LE Write Characteristic</string>
    <string name="ble_reliable_write_name">Bluetooth LE Reliable Write</string>
    <string name="ble_reliable_write_bad_resp_name">Bluetooth LE Reliable Write (receive bad response)</string>
    <string name="ble_notify_characteristic_name">Bluetooth LE Notify Characteristic</string>
    <string name="ble_read_descriptor_name">Bluetooth LE Read Descriptor</string>
    <string name="ble_write_descriptor_name">Bluetooth LE Write Descriptor</string>
    <string name="ble_read_rssi_name">Bluetooth LE Read RSSI</string>
    <string name="ble_read_phy_name">Bluetooth LE Read PHY</string>
    <string name="ble_on_service_changed">Bluetooth LE On Service Changed</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_service_changed_indication">Waiting on service changed indication</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 Advertising Set test strings -->
    <string name="ble_advertising_set_test_name">Bluetooth LE Advertising Set Test</string>
    <string name="ble_advertising_set_test_info">Bluetooth LE Advertising Set tests AdvertisingSet and AdvertisingSetCallback APIs.</string>
    <string name="ble_advertising_set_test_instruction">Press the \"Start Test\" button. UI thread may freeze for a few seconds while enabling/disabling bluetooth adapter.</string>
    <string name="ble_advertising_set_start_test">Start Test</string>
    <string name="ble_advertising_set_running_test">Running Test...</string>
    <string name="ble_advertising_set_finished_test">Finished Test</string>
    <string name="ble_advertising_set_start">Starting advertising set.</string>
    <string name="ble_advertising_set_enable_disable">Enabling/Disabling advertising set.</string>
    <string name="ble_advertising_set_advertising_data">Setting advertising data.</string>
    <string name="ble_advertising_set_advertising_params">Setting advertising parameters.</string>
    <string name="ble_advertising_set_periodic_advertising_data">Setting periodic advertising data.</string>
    <string name="ble_advertising_set_periodic_advertising_enabled_disabled">Enabling/Disabling periodic advertising.</string>
    <string name="ble_advertising_set_periodic_advertising_params">Setting periodic advertising parameters.</string>
    <string name="ble_advertising_set_scan_response_data">Setting scan response data.</string>
    <string name="ble_advertising_set_stop">Stopping advertising set.</string>

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

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

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

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

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

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

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

    <!-- Strings for CompanionDeviceTestActivity -->
    <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 for this device.
        Once you press the button, wait for a dialog to pop up and select your device from the list.
    </string>

    <!-- Strings for CompanionDeviceServiceTestActivity -->
    <string name="companion_service_associate_button">Associate</string>
    <string name="companion_service_associate_title">Device Association</string>
    <string name="companion_service_associate_text">
        Press the "Associate" button. Wait for a dialog to pop up and select your device from the
        list.
    </string>
    <string name="companion_service_bluetooth_feature_title">Bluetooth Feature Supported</string>
    <string name="companion_service_bluetooth_feature_text">
        PackageManager.FEATURE_BLUETOOTH not supported. This test is not applicable.
    </string>
    <string name="companion_service_disassociate_button">Disassociate</string>
    <string name="companion_service_disassociate_title">Device Disassociation</string>
    <string name="companion_service_disassociate_text">
        Press the "Disassociate" button. Wait for the device to disassociate.
    </string>
    <string name="companion_service_present_title">Device Present</string>
    <string name="companion_service_present_text">
        Make your Bluetooth device reachable (this should already be the case from the previous step).
        Wait until your Bluetooth device is detected by CDM. This may take up to 2 minutes.
    </string>
    <string name="companion_service_gone_title">Device Gone</string>
    <string name="companion_service_gone_text">
        Make your Bluetooth device unreachable by placing your bluetooth device inside an RF Bag or
        powering it off.
        Wait until your Bluetooth device disappears. This may take up to 2 minutes.
    </string>
    <string name="companion_service_test">Companion Device Service Test</string>
    <string name="companion_service_test_info">
        This test checks that APIs to notify the companion app of its associated device going in and
        out of Bluetooth range are working correctly.\n\n
        Before proceeding, make sure that you have a Bluetooth LE device nearby and
        discoverable. Also, make sure that bluetooth is turned on. (Note: the nearby device cannot
        be a phone)
    </string>
    <string name="companion_service_test_summary_title">Test Complete</string>
    <string name="companion_service_test_summary">Every test passed successfully.</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 IgnoreBatteryOptimizationsTestActivity -->
    <string name="ibo_test">Ignore Battery Optimizations Test</string>
    <string name="ibo_test_info">
        This test verifies that the device provides a user affordance to ask the user if the system
        should disable battery optimizations for an app and to allow a user to remove the app from
        the exemption list.
    </string>
    <string name="ibo_test_start_unexempt_app">
        Remove the test app from the ignore battery optimizations list to begin the test. (Try going
        to the App Info page and make sure the system is optimizing battery for the app.)
    </string>
    <string name="ibo_exempt_app_request">
        Click Next to have the test request the exemption. Grant the exemption when prompted.
    </string>
    <string name="ibo_next_to_confirm">Press next to confirm.</string>
    <string name="ibo_app_not_exempted">The app is not exempted from battery optimizations.</string>
    <string name="ibo_unexempt_app">
        Remove the test app from the ignore battery optimizations list. (Either run \"adb shell cmd
        deviceidle whitelist -com.android.cts.verifier\" or open the list of apps and their
        exemption statuses. Find the test app in the list and remove the app\'s exemption.)
    </string>
    <string name="ibo_app_is_exempted">The app is exempted from battery optimizations.</string>
    <string name="ibo_exempt_app_list">
        Click Next to have the test open the list of apps and their exemption statuses. Find the
        test app in the list and exempt it.
    </string>
    <string name="ibo_unexempt_app_list">
        Click Next to have the test open the list of apps and their exemption statuses. Find the
        test app in the list and remove the app\'s exemption.
    </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>

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

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

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

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

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

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

    <string name="nfc_not_enabled">NFC is not enabled!</string>
    <string name="nfc_not_enabled_message">These tests require NFC to be enabled. Click the
        button below to goto Settings and enable it.</string>
    <string name="nfc_settings">NFC Settings</string>
    <string name="secure_nfc_enabled">\"Require device unlock for NFC\" is enabled!</string>
    <string name="secure_nfc_enabled_message">These tests require \"Require device unlock for NFC\"
        to be disabled. Click the button below to goto Settings and disable it.</string>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <string name="nfc_hce_foreground_payment_emulator">Foreground override payment services (Emulator)</string>
    <string name="nfc_hce_foreground_payment_reader">Foreground override payment services (Reader)</string>
    <string name="nfc_hce_foreground_payment_help">This test enables two payment services, and asks you to set one as the default service. It then uses Androids API to allow the foreground app to set a preference for the non-default service. This will cause the non-default payment service to be invoked.</string>
    <string name="nfc_hce_change_favor_foreground">This test requires the \"Use default\" setting to be set to \"Except when another payment app is open\". Tap OK to go to Tap and Pay settings and make sure the \"Use default\" setting is set to \"Except when another payment app is open\".</string>
    <string name="nfc_hce_offhost_service_emulator">Off-host service (Emulator)</string>
    <string name="nfc_hce_offhost_service_reader">Off-host service (Reader)</string>
    <string name="nfc_hce_offhost_emulator_help">This test 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 test 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 test 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_screen_on_only_offhost_emulator">Screen on only Off-host Service (Emulator)</string>
    <string name="nfc_screen_on_only_offhost_reader">Screen on only Off-host Service (Reader)</string>
    <string name="nfc_screen_on_only_offhost_help">This test 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. 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. The expected behavior is the AID can be selected only when the device is in screen on state.</string>

    <string name="nfc_screen_off_hce_payment_emulator">Screen off HCE Payment (Emulator)</string>
    <string name="nfc_screen_off_hce_payment_reader">Screen off HCE Payment (Reader)</string>
    <string name="nfc_screen_off_hce_payment_help">This test verifies emulator responds when device is in screen off state. Please put the emulator to screen off state.</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>
    <string name="UiccTransactionEventService">Uicc Transaction Event Service</string>
    <string name="screenOffPaymentService">Screen Off Payment Service</string>
    <string name="screenOnOnlyOffHostService">Screen On Only OffHost Service</string>

    <string name="nfc_offhost_uicc">Offhost UICC-based card emulation</string>
    <string name="nfc_offhost_uicc_emulator_tests">Offhost card emulation emulator tests</string>
    <string name="nfc_offhost_uicc_reader_tests">Offhost card emulation reader tests</string>
    <string name="nfc_offhost_uicc_transaction_event1_emulator">Offhost transaction event-field off (Emulator)</string>
    <string name="nfc_offhost_uicc_transaction_event1_reader">Offhost transaction event-field off (Reader)</string>
    <string name="nfc_offhost_uicc_transaction_event2_emulator">Offhost transaction event-deselect (Emulator)</string>
    <string name="nfc_offhost_uicc_transaction_event2_reader">Offhost transaction event-deselect (Reader)</string>
    <string name="nfc_offhost_uicc_transaction_event3_emulator">Offhost transaction event-HCI CMD (Emulator)</string>
    <string name="nfc_offhost_uicc_transaction_event3_reader">Offhost transaction event-HCI CMD (Reader)</string>

    <string name="nfc_offhost_uicc_emulator_test_info">The offhost-based card emulation
        tests require two devices to be completed. The emulator tests are used
        to actually test the off-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 "Offhost 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_offhost_uicc_reader_test_info">The offhost-based card emulation
        tests require two devices to be completed. The emulator tests are used
        to actually test the off-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 "Offhost card emulation 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_offhost_uicc_type_selection">By default Offhost card emulation applications run on type A.
      If your device supports 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_offhost_please_wait">Please wait</string>
    <string name="nfc_offhost_setting_up">Setting up card emulation services...</string>
    <string name="nfc_offhost_uicc_transaction_event_emulator_help"> This is an optional test for Android version beofre S. This is okay to set this test to passed and continue. Switch application to background before starting tests. Successful transaction event will switch application to foreground with transaction event data.</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_interaction_needed_prox">Once the test begins, if possible, flip the device so it is face down on a surface, then flip back to face up after a second or two. Otherwise, wave your hand over the front of the device.</string>
    <string name="snsr_device_steady">Keep the device steady.</string>
    <string name="snsr_keep_device_rotating_clockwise">Once the test begins, you will have to keep rotating the device clockwise.</string>
    <string name="snsr_wait_for_user">Press \'Next\' to continue.</string>
    <string name="snsr_wait_to_begin">Press \'Next\' to begin.</string>
    <string name="snsr_wait_to_retry">Press \'Retry\' to rerun or \'Fail and Next\' to skip to next.</string>
    <string name="snsr_wait_to_finish">Press \'Retry\' to rerun or \'Finish\' to end.</string>
    <string name="snsr_on_complete_return">After completing the task, go back to this test.</string>
    <string name="snsr_movement_expected">Movement was expected during the test. Found=%1$b.</string>
    <string name="snsr_sensor_feature_deactivation">IMPORTANT NOTE: Please also turn off any special features in the
        device that use sensors (wake up gestures, motion triggered events, moves, etc).
        Not doing so is expected to cause test failures. Once you are done, you can begin the test.</string>
    <string name="snsr_setting_mode_request">You will be redirected to set \'%1$s\' to: %2$s.</string>
    <string name="snsr_setting_mode_set">\'%1$s\' set to: %2$s.</string>
    <string name="snsr_setting_mode_not_set">\'%1$s\' not set to: %2$s.</string>
    <string name="snsr_setting_airplane_mode">Airplane mode</string>
    <string name="snsr_setting_screen_brightness_mode">Adaptive Brightness</string>
    <string name="snsr_setting_auto_rotate_screen_mode">Auto-rotate screen</string>
    <string name="snsr_setting_keep_screen_on">Stay awake</string>
    <string name="snsr_setting_location_mode">Location</string>
    <string name="snsr_setting_ambient_display">Ambient Display</string>
    <string name="snsr_pass_on_error">Pass Anyway</string>
    <string name="snsr_run_automated_tests">The screen will be turned off to execute the tests,
        when tests complete, the device will vibrate and the screen will be turned back on.</string>

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

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

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

    <!-- Hinge Angle -->
    <string name="snsr_hinge_angle_test">Hinge Angle Test</string>
    <string name="snsr_hinge_angle_test_instructions">Place the device into its default position. Read the instructions for each scenario before you perform the test.</string>
    <string name="snsr_hinge_angle_test_exercise_hinge">Transition the device from its default position as far in one direction as the hinge sensor measures.
        Then, transition it in the other direction as far as it can measure. Lastly, return the device back to its default position. Once completed, press \"Next\" to finish the test.</string>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <!-- Strings for MediaCodecFlushActivity -->
    <string name="media_codec_flush">Video codec flushing in Tunnel Mode</string>

    <!-- Strings for VolumeLevelChangesActivity -->
    <string name="volume_level_changes">Volume level changes</string>
    <string name="volume_level_changes_title">This test is for verifying that the Volume level
        changes are reflected when playback occurs with and without tunnel mode playback for
        PCM audio.</string>
    <string name="increase_volume_level"> Increase the volume until you can clearly recognize the
        audio, and then press OK button.</string>
    <string name="ok_button_volume_level">OK</string>
    <string name="decrease_volume_level"> Decrease the volume until you can no longer recognize the
        audio, and then press OK button.</string>
    <string name="yes_button_volume_level">Yes</string>
    <string name="no_button_volume_level">No</string>
    <string name="is_same_volume"> "Is the volume still the same as what you had set?"</string>
    <string name="volume_level_changes_failure_tunnel_to_non_tunnel">
        "The volume change was not maintained when switching from tunnel mode to non-tunnel mode."
    </string>
    <string name="volume_level_changes_failure_non_tunnel_to_tunnel">
        "The volume change was not maintained when switching from non-tunnel mode to tunnel mode."
    </string>

    <!-- Strings for the Camera Bokeh mode test activity -->
    <string name="camera_bokeh_test">Camera Bokeh</string>
    <string name="camera_bokeh_test_info">
        This test checks camera bokeh mode functionality. It enumerates supported bokeh modes, and
        makes sure each non-OFF bokeh mode works correctly. For optimal and consistent results,
        please make sure the camera device is pointing to a well-lit scene with a human face in
        the center at least 1 meter away, and the rest of the scene is further away in the
        background.
    </string>
    <string name="camera_bokeh_no_support">
        None of the camera devices support bokeh modes. Please click the Test Passed button.
    </string>

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

    <string name="wifi_ssid_label">SSID for network</string>
    <string name="wifi_psk_label">Passphrase for network (leave empty for open network)</string>
    <string name="wifi_start_test_label">Start test</string>

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

    <string name="wifi_status_suggestion_add">Adding suggestions to the device.</string>
    <string name="wifi_status_suggestion_add_failure">Failed to add suggestions.</string>
    <string name="wifi_status_suggestion_get_failure">Failed to get suggestions.</string>
    <string name="wifi_status_suggestion_remove">Removing suggestions from the device.</string>
    <string name="wifi_status_suggestion_remove_failure">Failed to remove suggestions.</string>
    <string name="wifi_status_suggestion_wait_for_connect">Waiting for network connection.</string>
    <string name="wifi_status_suggestion_ensure_no_connect">Ensuring no network connection.</string>
    <string name="wifi_status_suggestion_connect">Connected to the network.</string>
    <string name="wifi_status_suggestion_not_connected">Did not connect to the network.</string>
    <string name="wifi_status_suggestion_wait_for_post_connect_bcast">Waiting for post connection broadcast.</string>
    <string name="wifi_status_suggestion_post_connect_bcast">Received post connection broadcast.</string>
    <string name="wifi_status_suggestion_post_connect_bcast_failure">Failed to receive post connection broadcast.</string>
    <string name="wifi_status_suggestion_wait_for_connection_status">Waiting for connection status.</string>
    <string name="wifi_status_suggestion_connection_status">Received connection status.</string>
    <string name="wifi_status_suggestion_connection_status_failure">Failed to receive connection status.</string>
    <string name="wifi_status_suggestion_wait_for_disconnect">Ensuring device does disconnect from the network after removing suggestions.</string>
    <string name="wifi_status_suggestion_metered_change">Marking the network metered.</string>
    <string name="wifi_status_suggestion_metered_check_failed">Network meteredness check failed.</string>
    <string name="wifi_status_suggestion_metered_changed">Network marked metered successfully.</string>
    <string name="wifi_status_suggestion_capabilities_not_changed">Network capabilities did not change.</string>
    <string name="wifi_status_suggestion_not_disconnected">Did not disconnect from the network.</string>
    <string name="wifi_status_suggestion_disconnected">Disconnected from the network.</string>
    <string name="wifi_status_suggestion_add_user_approval_status_listener_failure">Failed to add user approval status listener</string>
    <string name="wifi_status_suggestion_wait_for_user_approval">Waiting for user approval. Please click \"Allow\" in the dialog that pops up for approving the app</string>
    <string name="wifi_status_suggestion_user_approval_status_failure">Failed to receive user approval status change</string>
    <string name="wifi_status_suggestion_user_approve_failure">Failed to get user approval</string>

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

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

    <string name="wifi_test_network_suggestion">Network Suggestion tests</string>
    <string name="wifi_test_network_suggestion_ssid">Network suggestion with SSID.</string>
    <string name="wifi_test_network_suggestion_ssid_info">Tests whether the API can be used to suggest a network with SSID to the device and the device connects to it.</string>
    <string name="wifi_test_network_suggestion_ssid_bssid">Network suggestion with SSID and BSSID.</string>
    <string name="wifi_test_network_suggestion_ssid_bssid_info">Tests whether the API can be used to suggest a network with SSID and specific BSSID to the device and the device connects to it.</string>
    <string name="wifi_test_network_suggestion_ssid_post_connect">Network suggestion with SSID and post connection broadcast.</string>
    <string name="wifi_test_network_suggestion_ssid_post_connect_info">Tests whether the API can be used to suggest a network with SSID to the device and the device connects to it and sends the post connect broadcast back to the app.</string>
    <string name="wifi_test_network_suggestion_connection_failure">Network suggestion connection failure.</string>
    <string name="wifi_test_network_suggestion_connection_failure_info">Tests whether the SuggestionConnectionStatusListener API can be used to listen to connection failures for suggested networks.</string>
    <string name="wifi_test_network_suggestion_modification_in_place">Network suggestion modification in place.</string>
    <string name="wifi_test_network_suggestion_modification_in_place_info">Tests whether the suggested network params can be modified in place when connected to it.</string>

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

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

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

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

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

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

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

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

    <string name="p2p_setup_error">
        Test failed.\n\nSet up error. Check whether Wi-Fi can be enabled.</string>
    <string name="p2p_unexpected_error">
        Test failed.\n\nUnexpected error. Check logcat.</string>
    <string name="p2p_add_local_service_error">
        Test failed.\n\nFailed to add local service.</string>
    <string name="p2p_add_service_request_error">
        Test failed.\n\nFailed to add service request.</string>
    <string name="p2p_remove_service_request_error">
        Test failed.\n\nFailed to remove service request.</string>
    <string name="p2p_clear_service_requests_error">
        Test failed.\n\nFailed to clear service requests.</string>
    <string name="p2p_connect_error">
        Test failed.\n\nFailed to start a p2p connection to the target device.</string>
    <string name="p2p_remove_group_error">
        Test failed.\n\nFailed to remove a p2p group.</string>
    <string name="p2p_discover_peers_error">
        Test failed.\n\nFailed to discover peers.</string>
    <string name="p2p_discover_services_error">
        Test failed.\n\nFailed to discover services.</string>
    <string name="p2p_ceate_group_error">
        Test failed.\n\nFailed to start up group owner.</string>
    <string name="p2p_no_service_requests_error">
        Test failed.\n\n\"NO_SERVICE_REQUESTS\" error did not occur.</string>
    <string name="p2p_receive_invalid_response_error">
        Test failed.\n\nReceived an invalid message or could not receive
         the expected message.\n\n</string>
    <string name="p2p_target_not_found_error">Test failed.\n\n
        The target responder device was NOT found. Start up the responder
        test on the other device, then run the test again.</string>
    <string name="p2p_target_invalid_role_error">Test failed.\n\n
        The target responder must be p2p device. However, the target responder
        device was group owner. Check the test case on the other device.</string>
    <string name="p2p_target_invalid_role_error2">Test failed.\n\n
        The target responder must be group owner. However, the target responder
        device was p2p device. Check the test case on the other device.</string>
    <string name="p2p_connection_error">
        Test failed.\n\nFailed to establish a p2p connection.</string>
    <string name="p2p_connection_latency_error">
        Test failed. \n\nConnection was expected to be established within %1$dms. But took=%2$dms.
        \n\nPlease ensure that the Group Owner is ready on the other device before running
        this test</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_pmk_unsolicited">Data Path: PMK: 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_dp_ib_pmk_solicited">Data Path: PMK: Solicited/Active</string>
    <string name="aware_dp_ib_open_unsolicited_accept_any">Data Path: Open: Unsolicited/Passive: accept any peer</string>
    <string name="aware_dp_ib_passphrase_unsolicited_accept_any">Data Path: Passphrase: Unsolicited/Passive: accept any peer</string>
    <string name="aware_dp_ib_pmk_unsolicited_accept_any">Data Path: PMK: Unsolicited/Passive: accept any peer</string>
    <string name="aware_dp_ib_open_solicited_accept_any">Data Path: Open: Solicited/Active: accept any peer</string>
    <string name="aware_dp_ib_passphrase_solicited_accept_any">Data Path: Passphrase: Solicited/Active: accept any peer</string>
    <string name="aware_dp_ib_pmk_solicited_accept_any">Data Path: PMK: Solicited/Active: accept any peer</string>
    <string name="aware_dp_ib_force_channel_setup">Data Path: force channel setup</string>
    <string name="aware_discovery_ranging">Discovery with Ranging</string>
    <string name="aware_publish">Publish</string>
    <string name="aware_subscribe">Subscribe</string>

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

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

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

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

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

    <string name="aware_data_path_pmk_unsolicited_publish">Data Path: PMK: Unsolicited Publish</string>
    <string name="aware_data_path_pmk_unsolicited_publish_info">The publisher is now ready.\n\nOn the other device: start the \'Data Path: PMK: Unsolicited/Passive\' / \'Subscribe\' test.</string>
    <string name="aware_data_path_pmk_passive_subscribe">Data Path: PMK: 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_pmk_solicited_publish">Data Path: PMK: Solicited Publish</string>
    <string name="aware_data_path_pmk_solicited_publish_info">The publisher is now ready.\n\nOn the other device: start the \'Data Path: PMK: Solicited/Active\' / \'Subscribe\' test.</string>
    <string name="aware_data_path_pmk_active_subscribe">Data Path: PMK: 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="aware_data_path_force_channel_setup_publish">Data Path: force channel setup Publish</string>
    <string name="aware_data_path_force_channel_setup_publish_info">The publisher is now ready.\n\nOn the other device: start the \'Data Path: force channel setup\' / \'Subscribe\' test.</string>
    <string name="aware_data_path_force_channel_setup_subscribe">Data Path: force channel setup Subscribe</string>

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

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

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

    <string name="shortcut_reset_test">Shortcut Reset Rate-limiting Test</string>
    <string name="shortcut_reset_info">This test checks that when an inline-reply happens, ShortcutManager\'s rate-limiting
        is reset. Please grant access to show notification when prompted.</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 touch sound</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 touch sound 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="nls_anr">This test checks that notifications are not sent with content that is
        too long. If this test causes the test app to ANR, the test has failed.
    </string>
    <string name="action_not_sent">SecureActionOnLockScreenTest</string>
    <string name="action_received">Action Sent - SecureActionOnLockScreenTest</string>
    <string name="action_test_title">Action</string>
    <string name="nls_visibility">Please change the lock screen setting to hide sensitive content
        on the lockscreen</string>
    <string name="nls_restore_visibility">Please change the lock screen setting to show all
        content on the lockscreen</string>
    <string name="add_screen_lock">Add a secure screen lock of any type.\nLet all notification content be shown.</string>
    <string name="set_global_visibility_public">Update notification settings to ensure that all notification content is shown.</string>
    <string name="set_global_visibility_private">Update notification settings to ensure that sensitive notification content is shown only when unlocked.</string>
    <string name="set_global_visibility_secret">Update notification settings to ensure that all notifications are hidden on the lock screen.</string>
    <string name="remove_screen_lock">Remove the added screen lock</string>
    <string name="secure_action_lockscreen">Lock the screen and find the SecureActionOnLockScreenTest
        notification. Tap on its action. Verify that the keyguard displays on tap, and that the
        notification text does not update until the passcode is entered. Ensure that the notification
        text does update once the device is unlocked.</string>
    <string name="np_start_channel_settings">Launch Channel Settings</string>
    <string name="np_start_security_settings">Launch Security Settings</string>
    <string name="np_start_notif_settings">Launch Notification Settings</string>
    <string name="np_when_locked_see_redacted">Lock the screen and find the NotifPrivacyTest notification.\n
        Pass the test if the notification content is REDACTED.</string>
    <string name="np_when_locked_see_private">Lock the screen and find the NotifPrivacyTest notification.\n
        Pass the test if the notification content is EXPOSED.</string>
    <string name="np_when_locked_hidden">Lock the screen and look for the NotifPrivacyTest notification.\n
        Fail the test if it can be found without unlocking the device.</string>
    <string name="np_start_occluding">Launch CallSimulator</string>
    <string name="np_occluding_instructions">Launch the CallSimulator and follow the instructions on that screen.</string>
    <string name="np_occluding_see_redacted">CallSimulator
        \n\n(Like a call, this screen will be visible even when the device is locked.)
        \n\nLock the screen, then come back here without unlocking.
        \nPull down the notification shade and find the NotifPrivacyTest notification.
        \nPass the test if the notification content is REDACTED.
        \n\nGo back when ready to Pass/Fail the step.</string>
    <string name="np_occluding_see_private">CallSimulator
        \n\n(Like a call, this screen will be visible even when the device is locked.)
        \n\nLock the screen, then come back here without unlocking.
        \nPull down the notification shade and find the NotifPrivacyTest notification.
        \nPass the test if the notification content is EXPOSED.
        \n\nGo back when ready to Pass/Fail the step.</string>
    <string name="np_occluding_hidden">CallSimulator
        \n\n(Like a call, this screen will be visible even when the device is locked.)
        \n\nLock the screen, then come back here without unlocking.
        \nPull down the notification shade and look for the NotifPrivacyTest notification.
        \nFail the test if it can be found without unlocking the device.
        \n\nGo back when ready to Pass/Fail the step.</string>
    <string name="np_public_version_text">NotifPrivacyTest: REDACTED</string>
    <string name="np_private_version_text">NotifPrivacyTest: EXPOSED</string>
    <string name="notif_privacy_test">Notification Privacy Test</string>
    <string name="notif_privacy_info">This test checks that Notification privacy is correctly
        handled on the insecure and secure lockscreen.
    </string>
    <string name="msg_extras_preserved">Check that Message extras Bundle was preserved.</string>
    <string name="conversation_section_ordering">If this device supports conversation notifications,
        and groups them into a separate section from alerting and silent non-conversation
        notifications, fully expand the notification display and verify that the \"Person A\"
        notification appears before the "\Non-Person Notification\".
        If this device does not support conversation notifications or does not group them together, press Pass.</string>
    <string name="hun_display">If this device supports heads-up notifications,
        verify that a notification just peeked on screen, displaying all of the following: small
        icon, large icon, notification title, notification text, and two action buttons.
        If this device does not support heads-up notifications, press Pass.</string>
    <string name="action">Action %1$d</string>
    <string name="tile_service_name">Tile Service for CTS Verifier</string>
    <string name="tiles_test">Tile Service Test</string>
    <string name="tiles_info">This test checks that a Tile Service added by a third party
        application is not immediately added to the current Quick Settings tiles but can be added
        by the user.
    </string>
    <string name="tiles_adding_tile">Check that Tile Service is enabled</string>
    <string name="tiles_not_added">Open Quick Settings and check that the Tile Service for CTS
        Verifier is not visible in any page</string>
    <string name="tiles_in_customizer">Open Quick Settings and click the button to customize Quick
        Settings. Check that the Tile Service for CTS Verifier is available to be added</string>
    <string name="tiles_removing_tile">Check that Tile Service is disabled</string>
    <string name="tile_request_service_name">Request Tile Service</string>
    <string name="tile_request_helper_app_name">CtsTileServiceApp</string>
    <string name="tiles_request_test">Tile Service Request Test</string>
    <string name="tiles_request_info">This test checks that a request to add a TileService is
    shown correctly to the user and the correct answer is relayed to the app.</string>
    <string name="tiles_request_uninstall">This will verify that the helper app is not installed.
    If that is correct, the test will pass automatically. If the app is installed, press the button
    and you will be prompted for confirmation to uninstall the app.</string>
    <string name="tiles_request_install">You should have received a helper app apk with this CTS
    Verifier package. Its name is \"CtsTileServiceApp\". Install the test app, by running\n
    \"adb install /path/to/CtsTileServiceApp.apk\".\n
    Pass the test if the install was successful. Fail it otherwise.
    </string>
    <string name="tiles_request_install_verify">This will automatically verify that the helper app
    is correctly installed.</string>
    <string name="tiles_request_tile_not_present">Open Quick Settings and pass this test
    if there are no tiles named %1$s in any page.</string>
    <string name="tiles_request_dismissed">After pressing \"Start request\", a dialog will appear
        requesting to add a quick settings tile. When it appears, dismiss it by tapping outside of
        it, or going back.</string>
    <string name="tiles_request_answer_no">After pressing \"Start request\", a dialog will appear
        requesting to add a quick settings tile. When it appears, tap the option in the dialog to
        not add the tile.</string>
    <string name="tiles_request_correct_info">After pressing \"Start request\", a dialog will appear
        requesting to add a quick settings tile. When it appears, verify the following information
        in the dialog:\n
  1. The name of the app requesting to add the tile is %1$s.\n
  2. The label in the tile is %2$s.\n
After verifying, tap the option in the dialog to not add the tile.\n
When the buttons are enabled, pass this test if the information in the dialog was correct.
    </string>
    <string name="tiles_request_answer_yes">After pressing \"Start request\", a dialog will appear
        requesting to add a quick settings tile. When it appears, tap the option in the dialog to
        add the tile.
    </string>
    <string name="tiles_request_tile_present">Open Quick Settings and pass this test if a tile named
        %1$s is visible in some page.
    </string>
    <string name="tiles_request_check_tile_already_added">Checking tile already added response
    </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_disable_service">Please disable \"Notification Listener for CTS Verifier\"
        under Apps > Gear Icon > Special Access > Notification Access and return here.</string>
    <string name="nls_start_settings">Launch Settings</string>
    <string name="nls_service_started">Service should start once enabled.</string>
    <string name="nas_note_enqueued_received">Check that notification was enqueued.</string>
    <string name="nls_note_received">Check that notification was received.</string>
    <string name="nls_payload_intact">Check that notification payload was intact.</string>
    <string name="nls_audibly_alerted">Check that notification audibly alerting was reported correctly.</string>
    <string name="nas_adjustment_payload_intact">Check that the Assistant can adjust notifications.</string>
    <string name="nas_adjustment_enqueue_payload_intact">Check that the Assistant can adjust notifications on enqueue.</string>
    <string name="nas_create_channel">Check that the Assistant can create a Notification Channel for another app.</string>
    <string name="nas_update_channel">Check that the Assistant can update a Notification Channel for another app.</string>
    <string name="nas_block_channel">Check that the Assistant can block a Notification Channel.</string>
    <string name="nas_delete_channel">Check that the Assistant can delete a Notification Channel for another app.</string>
    <string name="nas_snooze_context">Check that the Assistant can snooze a notification until a given context.</string>
    <string name="nls_clear_one">Check that service can clear a notification.</string>
    <string name="nls_clear_one_reason">Check that service can clear a notification and receive the correct reason for dismissal.</string>
    <string name="nls_clear_one_stats">Check that service does not receive notification stats.</string>
    <string name="nls_clear_all">Check that service can clear all notifications.</string>
    <string name="nls_service_stopped">Service should stop once disabled.</string>
    <string name="nls_note_missed">Check that notification was not received.</string>
    <string name="nls_snooze">Check the service can be snoozed.</string>
    <string name="nls_unsnooze">Check the service can be unsnoozed.</string>
    <string name="nls_hints">Check that the listener can set hints.</string>
    <string name="nls_snooze_one">Check that service can snooze a notification.</string>
    <string name="nls_snooze_one_time">Check that service can snooze a notification for a given time.</string>
    <string name="nls_get_snoozed">Check that service can retrieve snoozed notifications.</string>
    <string name="nls_unsnooze_one">Check that service can unsnooze a notification.</string>
    <string name="nls_change_type_filter">Click this button to launch the settings page for this app\'s notification listener in settings. Note what types were checked and which were disabled before you make any changes. View the list of apps and note any that are not allowed. Change the filter types to allow everything except ongoing and silent notifications, and then return to this screen</string>
    <string name="nls_original_filter_verification">Were only alerting and silent notifications allowed? Was the Settings app not allowed? Was the ongoing option disabled? Are all only conversations and alerting notification types allowed now?</string>
    <string name="nls_filter_test">Checking that an alerting notification is received and a silent one is not</string>
    <string name="nls_reset_type_filter">Go to settings and allow all notification types, and then return here.</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 ConditionProviderService can be enabled
        and disabled, and that once enabled the service is able to create, query, edit, and delete
        automatic zen rules.
    </string>
    <string name="cp_enable_service">Please enable \"CTS Verifier\" under Do Not Disturb access and return here.</string>
    <string name="cp_disable_service">Please disable \"CTS Verifier\" under Do Not Disturb access and return here.</string>
    <string name="cp_start_settings">Launch Settings</string>
    <string name="cp_create_rule">Creating Automatic Zen Rule</string>
    <string name="cp_create_rule_with_zen_policy">Creating Automatic Zen Rule with Zen Policy</string>
    <string name="cp_update_rule">Updating Automatic Zen Rule</string>
    <string name="cp_update_rule_use_zen_policy">Updating Automatic Rule to Use Zen Policy</string>
    <string name="cp_subscribe_rule">Subscribing to Automatic Zen Rule</string>
    <string name="cp_service_started">Service should start once enabled.</string>
    <string name="cp_service_stopped">Service should stop once disabled.</string>
    <string name="cp_unsubscribe_rule">Unsubscribing to Automatic Zen Rule</string>
    <string name="cp_delete_rule">Deleting Automatic Zen Rule via api</string>
    <string name="cp_get_rules">Retrieving Automatic Zen Rules</string>
    <string name="cp_get_rule">Retrieving Automatic Zen Rule</string>
    <string name="cp_show_rules">Click this button to launch the Automatic Zen Rule listing page in settings, and then return to this screen</string>
    <string name="cp_show_rules_verification">Was the automatic rule screen shown?</string>
    <string name="cp_disable_rule">Please disable rule "123" and return here.</string>
    <string name="cp_enable_rule">Please enable rule "123" and return here.</string>
    <string name="cp_delete_rule_broadcast">Please delete rule "123" and return here.</string>
    <string name="cp_rule_type">CTS rule</string>
    <string name="iva_pass">Pass</string>
    <string name="iva_fail">Fail</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_title">Tap to install a CA certificate</string>
    <string name="cacert_install_cert">Press the button to open Security settings. Navigate to \"Install a certificate\" (normally under \"Encryptions &amp; credentials\") and select \"CA certificate\". Pick \"MyCA.cer\" from device storage and proceed with the installation. 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 saying a certificate authority is installed. Opening that notification should show a dialog box giving more information, with a button to check trusted credentials. This should open up the same view of trusted credentials that you get via the "Check credentials" button.</string>

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

    <!-- Strings for CA cert installation via intent test -->
    <string name="cacert_install_via_intent">CA Cert install via intent</string>
    <string name="cacert_install_via_intent_title">This test attempts to install a CA certificate via an intent.</string>
    <string name="cacert_install_via_intent_info">Attempt installing a CA certificate via an intent, which should not be possible. Tapping Go should show a dialog telling the user that CA certificates can put their privacy at risk and must be installed via Settings. If a any other dialog comes up, the test failed.</string>

    <!-- Strings for credential management test -->
    <string name="credential_management_app_test">Credential Management App Test</string>
    <string name="credential_management_app_info">This test requests to manage the user\'s KeyChain credentials and become the credential management app.</string>
    <string name="request_manage_credentials">Request to manage credentials</string>
    <string name="is_credential_management_app">Check is credential management app</string>
    <string name="credential_management_app_policy">Check correct authentication policy is set</string>
    <string name="generate_key_pair">Generate key pair</string>
    <string name="create_and_install_certificate">Create and install certificate</string>
    <string name="request_certificate_authentication">Request certificate for authentication</string>
    <string name="sign_data_with_key">Sign data with the private key</string>
    <string name="verify_signature">Verify signature with the public key</string>
    <string name="remove_credential_management_app">Remove credential management app</string>

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

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

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

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

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

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

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

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

    <string name="provisioning_byod_capture_image_support">Camera support cross profile image capture</string>
    <string name="provisioning_byod_capture_image_support_info">
        This test verifies that images can be captured from the managed profile using the primary profile camera.\n
        If prompted, accept the camera permission after pressing go.\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
        If prompted, accept the camera permission after pressing go.\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. Once connected, verify that the system shows disclosure (on some devices this is shown in
           the notification area) that network traffic is being routed through the VPN app.\n

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

        6. 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 icon is a briefcase.\n
        4. Verify that the header text says \"CtsVerifier\".\n
        5. Confirm your credentials and verify that the credentials you entered previously work.\n
        6. The work app should be launched.
    </string>
    <string name="provisioning_byod_confirm_work_credentials_header">
        CtsVerifier
    </string>
    <string name="provisioning_byod_pattern_work_challenge">Confirm pattern lock test</string>
    <string name="provisioning_byod_pattern_work_challenge_description">
        This test verifies that when a work pattern lock is set, a work app can open correctly.\n

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <string name="provisioning_tests_byod_custom_terms">Custom terms</string>
    <string name="provisioning_tests_byod_custom_terms_instructions">
        1. Please press the Go button to start the provisioning.\n
        2. Click \"View Terms\" button\n
        3. Expand \"Company ABC\" section. Verify the section content is \"Company Terms Content.\"\n
        4. Then hit back twice and stop the provisioning.
    </string>
    <string name="provisioning_tests_byod_custom_term_header1">Company ABC</string>

    <!-- Strings for BYOD managed provisioning (ByodFlowTestActivity) -->
    <string name="test_category_managed_provisioning">Managed Provisioning</string>
    <string name="provisioning_byod">BYOD Managed Provisioning</string>
    <string name="provisioning_byod_info">
        This test exercises the BYOD managed provisioning flow.
        Start by pressing the button on screen and follow instructions to finish the managed provisioning process.
        If your device has not been encrypted before, it will be encrypted and rebooted.
        After the provisioning process completes, return to this page and carry out further verifications.
        Note: the device will remain encrypted after the test which can only be disabled by factory reset.
    </string>
    <string name="provisioning_byod_start">Start BYOD provisioning flow</string>
    <string name="provisioning_byod_instructions">
        1. Press the button below to start the managed provisioning flow.
        If your device has not been encrypted before, it will reboot to apply encryption.
        After reboot follow instructions in the notification area to complete the provisioning.\n
        2. After successful provisioning, come back to this page. You might need to press a button on the final provisioning screen.
        Please press through the following verification steps.
        Allow a few seconds after returning from provisioning, as the profile owner test should automatically pass.\n
        \n
        If the device is being encrypted during step 1, it will remain encrypted After this test.
        The only way to disable the encryption is to factory reset the device.
    </string>
    <string name="provisioning_byod_profileowner">Profile owner installed</string>
    <string name="provisioning_byod_disk_encryption">Full disk encryption enabled</string>
    <string name="provisioning_byod_disk_encryption_default_key_toast">
        Cannot secure device with screen lock. Please re-run the test if you forgot to select
        the \"require PIN to boot\" option.
    </string>
    <string name="provisioning_byod_disk_encryption_no_pin_toast">
        No PIN is detected. Please re-run the test if you forgot to set a PIN.
    </string>
    <string name="provisioning_byod_set_screen_lock_dialog_message">
        Next, you will be asked to set a screen lock for the device.\n
        \n
        Please set \"1111\" as the new PIN (or any other PIN that you can memorize).
        You have to enter this PIN again later in order to finish the test.\n
        \n
        You may be asked whether the PIN should be required to boot the device. Please answer yes.\n
        \n
        Tap Go button to set a new screen lock.
    </string>
    <string name="provisioning_byod_remove_screen_lock_dialog_message">
        The test is almost finished. \n
        \n
        Next, you will be asked to remove the screen lock that you just set. Please enter \"1111\"
        (or your own PIN) when prompted for the old PIN, and do not set any new screen lock. This
        is to make sure that the device returns to the initial state after this test.\n
        \n
        Tap Go button to remove existing screen lock.
    </string>
    <string name="provisioning_byod_profile_visible">Profile-aware accounts settings</string>
    <string name="provisioning_byod_admin_visible">Profile-aware device administrator settings</string>
    <string name="provisioning_byod_workapps_visible">Badged work apps visible in Launcher</string>
    <string name="provisioning_byod_cross_profile_from_personal">Open app cross profiles from the personal side</string>
    <string name="provisioning_byod_cross_profile_from_work">Open app cross profiles from the work side</string>
    <string name="provisioning_app_linking">App links from the work side</string>
    <string name="provisioning_byod_cross_profile_app_personal">You selected the personal option.</string>
    <string name="provisioning_byod_cross_profile_app_work">You selected the Work option.</string>
    <string name="provisioning_byod_cross_profile_app_ctsverifier"> You selected the ctsverifier option </string>
    <string name="provisioning_byod_cross_profile_from_personal_instruction">
        Please press the Go button to start an action.\n
        \n
        You should be asked to choose either \"CTS Verifier\" or \"Work\" to complete the action.
        Pressing either should bring up a page stating your choice.\n
        \n
        Verify that you are prompted with the above choices and both options work as intended. Then mark this test accordingly.
    </string>
    <string name="provisioning_byod_cross_profile_from_work_instruction">
        Please press the Go button to start an action.\n
        \n
        You should be asked to choose either \"CTS Verifier\" or \"Personal\" to complete the action.
        Pressing either should bring up a page stating your choice.\n
        \n
        Verify that you are prompted with the above choices and both options work as intended. Then mark this test accordingly.
    </string>
    <string name="provisioning_byod_cross_profile_permission_control">Cross profile permission control</string>
    <string name="provisioning_byod_cross_profile_permission_control_info">
        This test exercises cross profile permission controls. Follow instructions above.
    </string>
    <string name="provisioning_byod_cross_profile_permission_control_instruction">
        For this test you need to install CrossProfileTestApp.apk by running
        adb install -r -t /path/to/CrossProfileTestApp.apk. Make sure the app is installed
        on both the personal and work profiles.\n
        Press the \"Prepare test\" button to enable configuring cross profile for the test app.\n
        Then press through the following verification steps.\n
        Mark the test as passed if all the following test cases are verified.
    </string>
    <string name="provisioning_byod_cross_profile_permission_control_prepare_button">Prepare test</string>
    <string name="provisioning_byod_cross_profile_permission_disabled_by_default">Cross profile permission disabled by default</string>
    <string name="provisioning_byod_cross_profile_permission_disabled_by_default_instruction">
        Press the Go button to go to Settings &gt; Apps &amp; notifications &gt; Special app access >\n
        Connected work and personal apps.\n
        Choose the \"Cross profile test app\" from the list and check that the switch is disabled.\n
        Go back to CTS Verifier and mark the test as \"Pass\" or \"Fail\".
    </string>
    <string name="provisioning_byod_cross_profile_permission_enabled">Cross profile permission enabled</string>
    <string name="provisioning_byod_cross_profile_permission_enabled_instruction">
        Press the Go button to open the \"Cross Profile Test App\".\n
        Press the \"Open Settings\" button to go to Settings &gt; Apps &amp; notifications &gt; Special app access >
        Connected work and personal apps > Cross profile test app, then enable the switch.\n
        Verify that when you go back it takes you to the \"Cross Profile Test App\".\n
        Now verify that it shows \"INTERACTING ACROSS PROFILES ALLOWED\" message.\n
        Go back to CTS Verifier and mark the test as \"Pass\" or \"Fail\".
    </string>
    <string name="provisioning_byod_cross_profile_permission_disabled">Cross profile permission disabled</string>
    <string name="provisioning_byod_cross_profile_permission_disabled_instruction">
        Press the Go button to open the \"Cross Profile Test App\".\n
        Press the \"Open Settings\" button to go to Settings &gt; Apps &amp; notifications &gt; Special app access >
        Connected work and personal apps > Cross profile test app, then disable the switch.\n
        Verify that when you go back it takes you to the \"Cross Profile Test App\".\n
        Now verify that it shows \"INTERACTING ACROSS PROFILES NOT ALLOWED\" message.\n
        Go back to CTS Verifier and mark the test as \"Pass\" or \"Fail\".
    </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
        If a permission is requested, grant it and press the Go button again.\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(or Personal and Work tabs) exist.\n
        - \"Remove work profile\" or \"Uninstall\" exists under the Work category(or Work tab).\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 (on the screen or in the overflow menu or in differernt tab).\n
        - De-selecting either option prompts a warning dialog.\n
        \n
        Use the Back button (or navigate back to this app using Recents) to return to this page.
    </string>
    <string name="provisioning_byod_admin_visible_instruction">
        Please press the Go button to open the Security page in Settings.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        Navigate to Device admin apps and confirm that:\n
        \n
        - Device administrators outside of the work profile (if any) appear in the list, and the managed profile administrators are badged correctly.\n
        - A badged \"CTS Verifier\" exists, and is activated.\n
        - There is no option to deactivate the badged \"CTS Verifier\" version, only an option to \"Remove work profile\".\n
        \n
        Use the Back button (or navigate back to this app using Recents) to return to this page.
    </string>
    <string name="provisioning_byod_workapps_visible_instruction">
        Please press the Go button to start the launcher.
        Go to All Apps screen and scroll through it to confirm that:\n
        \n
        - A new set of work apps including CTS Verifier appear in the list.\n
        - Work badge overlay appears on work app\'s icon (see example icon below, color and style may vary).\n
        - The work badge overlay has the same size and position on each work app\'s icon.
        \n
        Then navigate back to this screen using Recents button.
    </string>

    <string name="provisioning_byod_app_settings">Profile-aware app settings</string>
    <string name="provisioning_byod_app_settings_instruction">
        Please press the Go button to open Apps page in settings.
        (If this device has a separate app for work settings, ignore the Go button and open that app manually from the launcher).\n
        \n
        Verify that Personal and Work exists in the dropdown list(or UI has Personal and Work tab). When selecting Work 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(or in Work tab) 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_location_failed">Failed to obtain location from any provider</string>
    <string name="provisioning_byod_location_no_provider">Cannot obtain location: no providers available.</string>
    <string name="provisioning_byod_location_trying">Trying to obtain location using providers: %1$s</string>
    <string name="provisioning_byod_location_obtained">Location has been obtained.</string>
    <string name="provisioning_byod_pass_message">PASS: %1$s</string>
    <string name="provisioning_byod_fail_message">FAIL: %1$s</string>
    <string name="provisioning_byod_location_test_activity">Location listener</string>
    <string name="provisioning_byod_location_checker_activity">Location checker</string>


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

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

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

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

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

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

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

    <string name="provisioning_byod_no_gps_location_feature">No GPS feature present. Skip test.</string>
    <string name="provisioning_byod_location_mode_enable">Enable location</string>
    <string name="provisioning_byod_location_mode_enable_missing_permission">Permission missing</string>
    <string name="provisioning_byod_location_mode_enable_instruction">
        This test verifies that the location can be enabled for the managed profile apps.\n
        1. Press the \"Prepare Test\" button to go to the location settings page, set both the main location switch and the work profile location switch enabled.\n
        2. Return using back button and press Go button to check if location is available. If prompted, accept the location permission.\n
        3. Check the result message below and mark the test accordingly.\n
        \n
        If the test fails to obtain location, try to enable as many location services as possible and move outside to make GPS work.
    </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 can be disabled for the managed profile apps through the main location switch.\n
        1. Press the \"Prepare Test\" button to go to the location settings page, set the main location switch disabled.\n
        2. Return using back button and press Go button to check if location is available.  If prompted, accept the location permission.\n
        3. Check the result message below and 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 can be disabled for the managed profile apps through work profile location switch.\n
        1. Press the \"Prepare Test\" button to go to the location settings page, set the work location switch disabled while the main location switch is still enabled.\n
        2. Return using back button and press Go button to check if location is available. If prompted, accept the location permission.\n
        3. Check the result message below and 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 is still available by primary profile when location updates are disabled for managed profile apps through work profile location switch.\n
        1. Press the \"Prepare Test\" button to go to the location settings page, set the work location switch disabled while the main location switch is still enabled.\n
        2. Return using back button and press Go button to check if location is available. If prompted, accept the location permission.\n
        3. Check the result message below and mark the test accordingly.\n
        \n
        If the test fails to obtain location, try to enable as many location services as possible and move outside to make GPS work.
    </string>

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

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

    <string name="provisioning_byod_launch_work_tab">Launch work tab in launcher</string>
    <string name="provisioning_byod_launch_work_tab_instruction">
        This test verifies that the work tab (if tabs are supported) can be launched.\n
        1. Press \"Go\".\n
        2. If this device supports tabs, verify that you have landed on the work tab.\n
        3. If this device doesn\'t support tabs, verify that you have landing on the all apps page .\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. (if a permission is requested, grant it and press the go button again). \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. Open settings to turn work profile back on, either manually or using the "Open Settings to toggle work" on the previous page.\n
        2. Add a work app to your home screen.\n
        3. Turn work profile off from Settings.\n
        4. Press home to go to the launcher.\n
        5. Verify that the work app is greyed out.\n
        6. Tap on the work app.\n
        7. 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_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. Press the Set button to set organization Info.\n
        3. 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
        4. 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="grant_headless_system_user_permissions">
            For this test you need to grant some permissions to CtsVerifier by running\n
            adb shell pm grant --user current com.android.cts.verifier android.permission.INTERACT_ACROSS_USERS\n
            adb shell pm grant --user 0 com.android.cts.verifier android.permission.INTERACT_ACROSS_USERS\n
            adb shell am compat enable ALLOW_TEST_API_ACCESS com.android.cts.verifier\n\n
    </string>
    <string name="set_device_owner_dialog_text">
            For this test you need to install CtsEmptyDeviceOwner.apk by running\n
            adb install -r -t /path/to/CtsEmptyDeviceOwner.apk\n
            Then you need to set this app as the device owner by running\n
            adb shell dpm set-device-owner --user 0 com.android.cts.emptydeviceowner/.EmptyDeviceAdmin
    </string>
    <string name="set_device_owner_headless_dialog_text">
            For this test you need to set the device owner by running\n
            adb shell dpm set-device-owner --user 0 com.android.cts.verifier/.managedprovisioning.DeviceAdminTestReceiver
    </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="device_owner_remove_device_owner_test_info_on_tv">
            Please check in Settings &gt; Privacy &gt; Security &amp; Restrictions &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_check_profile_owner_test">Check profile owner</string>
    <string name="device_owner_check_user_affiliation_test">Check user affiliation</string>
    <string name="device_owner_incorrect_device_owner">Missing or incorrect device owner: CTSVerifier is not DO for user %1$d!</string>
    <string name="device_owner_incorrect_profile_owner">Missing or incorrect profile owner: CTSVerifier is not PO for user %1$d!</string>
    <string name="device_owner_user_not_affiliated">User %1$d! is not affiliated</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 must NOT EXIST yet (you can use Settings &gt; WiFi to verify - if it exists,
            then select the option to forget it). If the Wifi requires a password, wait for the \'Could not connect to the wifi network\'
            notification, tap the notification, set the password and connect to the network.
            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_unlocked_modification_test_info" product="automotive">
            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 is editable
            (it\'s ok if it\'s not editable, but then take note so the next test can be skipped).
            Please make sure you can connect to it. The test is successful if the config 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_modification_test_info" product="automotive">
            NOTE: if the WiFi was not editable in the previous step, please skip this test.
            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 and notifications
            are no longer available.\n
            Next, press the button to reenable the status bar and verify that quick settings and notifications
            are available again.\n
            Please mark the test accordingly.
    </string>
    <string name="device_owner_disable_statusbar_button">Disable status bar</string>
    <string name="device_owner_reenable_statusbar_button">Reenable status bar</string>
    <string name="device_owner_disable_keyguard_test">Disable keyguard</string>
    <string name="device_owner_disable_keyguard_test_info">
            Before running this test, please make sure you have not set any device lockscreen password.\n
            Please press the below button to disable the keyguard. Press the power button on your device to
            switch off the screen. Then press the power button to switch the screen back on and verify that
            no keyguard was shown.\n
            Next, press the button to reenable the keyguard and repeat the above steps, this time verifying that
            a keyguard was shown.\n
            Please mark the test accordingly.
    </string>
    <string name="device_owner_disable_keyguard_button">Disable keyguard</string>
    <string name="device_owner_reenable_keyguard_button">Reenable keyguard</string>
    <string name="device_owner_lock_task_ui_test">LockTask UI</string>
    <string name="device_owner_lock_task_ui_test_info">
            The following tests verify the configurable UI during LockTask, a special mode that
            prevents the user from leaving the current application.\n\n
            Please make sure the lock screen is turned on before the test. Press the button below to
            start LockTask mode. Then mark each item as \'pass\' or \'fail\' according to the
            instructions.\n\n
            Finally, execute the last test item to leave LockTask mode.
    </string>
    <string name="start_lock_task_button_label">Start LockTask mode</string>
    <string name="device_owner_lock_task_ui_default_test">Default LockTask UI</string>
    <string name="device_owner_lock_task_ui_default_test_info">
            Press the button below to reset to default LockTask UI.
            Observe the following UI restrictions. Mark the test as \'pass\' only if ALL of the
            requirements below are met.\n\n
            1) If the device under test (DUT) has a status bar: nothing is shown in the status bar,
            including notification icons, connectivity icons, battery status, clock, etc.\n
            2) If the device under test (DUT) has a status bar: the status bar can\'t be expanded.
            That is, the \'swipe-down\' gesture doesn\'t work for the status bar.\n
            3) The software Home button is hidden.\n
            4) If the device under test (DUT) supports Overview: the software Overview button is
            hidden and the Overview gesture (swipe-up) does not work.\n
            5) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            6) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            7) The assistant gesture isn\'t available.\n\n
    </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) If the device under test (DUT) has a status bar: notification icons are still hidden
            on the status bar.\n
            2) If the device under test (DUT) has a status bar: the status bar can\'t be expanded.
            That is, the \'swipe-down\' gesture doesn\'t work for the status bar.\n
            3) The software Home button is hidden.\n
            4) If the device under test (DUT) supports Overview: the software Overview button is
            hidden and the Overview gesture (swipe-up) does not work.\n
            5) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            6) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            7) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.\n
    </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) If the device under test (DUT) has a status bar: system info area is still hidden on
            the status bar.\n
            2) If the device under test (DUT) supports Overview: the software Overview button is
            hidden and the Overview gesture (swipe-up) does not work.\n
            3) Holding the Home button and swiping to the right does not bring up other tasks.\n
            4) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            5) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            6) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.\n
    </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) If the device under test (DUT) has a status bar: nothing is shown in the status bar,
            including notification icons, connectivity icons, battery status, clock, etc.\n
            2) If the device under test (DUT) has a status bar: the status bar can\'t be expanded.
            That is, the \'swipe-down\' gesture doesn\'t work for the status bar.\n
            3) If the device under test (DUT) supports Overview: the software Overview button is
            hidden and the Overview gesture (swipe-up) does not work.\n
            4) Holding the Home button and swiping to the right does not bring up other tasks.\n
            5) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            6) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            7) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.\n
    </string>
    <string name="device_owner_lock_task_ui_recents_test">Enable Overview button</string>
    <string name="device_owner_lock_task_ui_recents_test_info">
            If the device under test (DUT) does not support Overview: mark this test as \'pass\'.\n
            Otherwise:\n
            Press the button below to enable the Overview button. Observe the Home button is now
            enabled. Press the Overview button or perform the Overview gesture
            (swipe up) and verify the Overview view can be opened.\n\n
            The rest of the UI restrictions should still apply:\n
            1) Nothing is shown in the status bar, including notification icons, connectivity icons,
            battery status, clock, etc.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar.\n
            3) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            4) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            5) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.\n
    </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">
            If the device under test (DUT) does not support global actions: mark this
            test as \'pass\'.\n
            Otherwise:\n
            Press the button below to enable global actions (a.k.a. power button menu). Long-press
            the power button and verify a menu containing power-off and restart buttons is shown.
            This menu can\'t contain any UI that allows the user to change system settings (such as
            airplane mode switch) or access the Settings app.\n\n
            The rest of the UI restrictions should still apply:\n
            1) Nothing is shown in the status bar, including notification icons, connectivity icons,
            battery status, clock, etc.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar.\n
            3) The software Home button is hidden.\n
            4) The software Overview button is hidden and the Overview gesture (swipe-up) does not
            work.\n
            5) Press the power button to turn off the screen, and press it again to turn the screen
            back on. Lock screen shouldn\'t be shown.\n
            6) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.\n
    </string>
    <string name="device_owner_lock_task_ui_keyguard_test">Enable keyguard</string>
    <string name="device_owner_lock_task_ui_keyguard_test_info">
            Press the button below to enable keyguard. Press the power button to turn off the screen
            and press it again to turn the screen back on. Verify that the lock screen is shown.\n\n
            The rest of the UI restrictions should still apply, both on the lock screen and after
            the lock screen is dismissed:\n
            1) Nothing is shown in the status bar, including notification icons, connectivity icons,
            battery status, clock, etc.\n
            2) The status bar can\'t be expanded. That is, the \'swipe-down\' gesture doesn\'t work
            for the status bar, even on the lock screen.\n
            3) The software Home button is hidden.\n
            4) The software Overview button is hidden and the Overview gesture (swipe-up) does not
            work.\n
            5) Long-press the power button. The power button menu, which usually shows the power-off
            button, etc., isn\'t shown.\n
            6) The assistant gesture isn\'t available.\n\n
            Mark the test as \'pass\' only if ALL of the above requirements are met.
    </string>
    <string name="device_owner_lock_task_ui_stop_lock_task_test">Stop LockTask mode</string>
    <string name="device_owner_lock_task_ui_stop_lock_task_test_info">
            Press the button below to exit LockTask mode.\n\n
            Observe that the UI has returned to the normal, unrestricted state, and is no longer
            subject to any LockTask restriction.\n\n
            Mark the test as \'pass\' or \'fail\' accordingly.
    </string>
    <string name="device_owner_lockscreen_secure">Please remove lockscreen password</string>
    <string name="device_profile_owner_permission_lockdown_test">Permissions lockdown</string>
    <string name="device_profile_owner_permission_lockdown_test_instructions">
            Select each of the three grant states for the permission shown below in turn.\n
            Now open application settings, select Permissions, and verify if the following behavior is observed.\n
            <b>Grant:</b> Permission is granted to the app and cannot be changed through the settings UI. A support message is available through an accessible mechanism, such as by attempting to change it or via an information button.\n
            <b>Let user decide:</b> Permission state can be changed through the settings UI.\n
            <b>Deny:</b> Permission is denied to the app and cannot be changed through the settings UI. A support message is available through an accessible mechanism, such as by attempting to change it or via an information button.\n
            Please mark the test accordingly.
    </string>
    <string name="device_owner_permission_lockdown_test_info">
        This test checks if the permissions state in settings UI is locked down according to the state set by the device owner.
    </string>
    <string name="device_owner_disallow_usb_file_transfer_test">Disallow USB file transfer</string>
    <string name="device_owner_disallow_usb_file_transfer_test_info">
            Please press below button to set the \"disallow USB file transfer\" restriction.\n
            If a USB notification appears, open the notification and check that the
            \"Transfer files (MTP)\" and \"Transfer photos (PTP)\" options either are not displayed,
            or they trigger a support message when trying to select them.\n
            Check if you can mount the device as a USB drive on your desktop computer. The test is
            successful if you cannot mount the device, and files from your phone cannot be
            downloaded through USB.\n
            Please mark the test accordingly.
    </string>
    <string name="device_owner_set_user_icon">Setting the user icon</string>
    <string name="device_owner_set_user_icon_instruction">
        This test verifies that the user icon can be set by the device owner, depending on whether the user restriction is set or not.\n
        1. Press the \"Set user icon 1\" button.\n
        2. Press the \"Go\" button to go to Settings.\n
        3. If there is no \"users\" section, mark this test as passed.\n
        4. If the icon of the user \"owner\" is not \"1\", mark this test as failed.\n
        5. Press the \"Disallow set user icon\" button.\n
        6. Press the \"Set user icon 2\" button.\n
        7. Press the \"Go\" button to go to Settings. Verify that the icon can\'t be changed manually.\n
        8. Check that the icon of the user \"owner\" is \"2\", and mark this test accordingly.
    </string>
    <string name="device_owner_set_user_icon_button">Set user icon 1</string>
    <string name="device_owner_set_user_icon2_button">Set user icon 2</string>

    <string name="profile_owner_permission_lockdown_test_info">
        <b>
        Before proceeding, check if com.android.cts.permissionapp (aka CtsPermissionApp) is installed in work profile by going to Settings &gt; Apps. If not, please install the app before proceeding.\n\n
        </b>
        This test checks if the permissions state in settings UI is locked down correctly depending on the state set by the profile owner.
    </string>
    <string name="package_not_found">You must install %s (aka CtsPermissionApp).</string>
    <string name="permission_allow">Grant</string>
    <string name="permission_default">Let user decide</string>
    <string name="permission_deny">Deny</string>
    <string name="not_profile_owner">%s is not profile owner.</string>
    <string name="not_device_owner">%s is not device owner.</string>
    <string name="activity_not_found">No activity found to handle intent: %s</string>
    <string name="open_settings_button_label">Open Application Settings</string>
    <string name="finish_button_label">Finish</string>
    <string name="device_owner_device_admin_visible">Device administrator settings</string>
    <string name="device_owner_device_admin_visible_info">
        Please press the Go button to open the Security page in Settings.
        Navigate to Device administrators and confirm that:\n
        \n
        - \"CTS Verifier\" exists and is activated.\n
        - \"CTS Verifier\" cannot be disabled.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_config_bt">Disallow configuring Bluetooth</string>
    <string name="device_owner_disallow_config_bt_info">
        Please press the Set restriction button to set the user restriction.
        Then press Go, you should either see (a) the Bluetooth settings page or (b) trigger a support message directly.\n
        In the case of (a), confirm that:\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
        In the case of (b) this step is successful.\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_add_wifi_config">Disallow adding WiFi config</string>
    <string name="device_owner_disallow_add_wifi_config_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 add a new WiFi configuration.\n
        - The UI indicates that this is disabled due to admin policy.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_sharing_admin_configure_wifi">Disallow sharing admin configured WiFi config</string>
    <string name="device_owner_disallow_sharing_admin_configure_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 share an admin configured WiFi config.\n
        - Sharing option is disabled in Settings.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_wifi_security_level_restriction">Set WiFi security level restriction</string>
    <string name="device_owner_wifi_security_level_restriction_info">
        This test verifies that minimum WiFi security level restriction can be set by the device owner.
        The levels below are listed in an increasing order of security.\n
        1. Connect to any network.\n
        2. Pick a security level greater than the currently connected network (if unsure pick Enterprise 192).\n
        3. Verify that current network gets disconnected.\n
        4. Press Go to open the WiFi page in Settings.\n
        5. Confirm that you cannot connect to any network that does not meet the security level restriction.\n
        6. Use the Back button to return to this page.\n
        7. Set the security level to Open to remove the restriction.\n
        8. Press Go to open the WiFi page in Settings.\n
        9. Confirm that you can connect to any network.
    </string>
    <string name="set_wifi_security_level_open">Set WiFi security level to Open</string>
    <string name="set_wifi_security_level_personal">Set WiFi security level to Personal</string>
    <string name="set_wifi_security_level_enterprise_eap">Set WiFi security level to Enterprise EAP</string>
    <string name="set_wifi_security_level_enterprise_192">Set WiFi security level to Enterprise 192</string>
    <string name="device_owner_ssid_restriction">Set WiFi SSID restriction</string>
    <string name="device_owner_ssid_restriction_info">
        This test verifies that WiFi SSID restriction can be set by the device owner.\n
        1. Connect to any network.\n
        2. Enter the SSID of the network you are currently connected to.\n
        3. Set the SSID denylist.\n
        4. Verify that current network gets disconnected.\n
        5. Press Go to open the WiFi page in Settings.\n
        6. Confirm that only the SSID from the denylist is restricted from connection.\n
        7. Use the Back button to return to this page.\n
        8. Enter the same SSID and set the SSID allowlist.\n
        9. Press Go to open the WiFi page in Settings.\n
        10. Confirm that you can only connect to the SSID from the allowlist.\n
        11. Use the Back button to return to this page.\n
        12. Leave the SSID field blank and set the allowlist to remove restriction.\n
        13. Press Go to open the WiFi page in Settings.\n
        14. Confirm that you can connect to any network.
    </string>
    <string name="device_owner_ssid_restriction_hint">Enter SSID</string>
    <string name="device_owner_set_ssid_allowlist_button">Set SSID allowlist</string>
    <string name="device_owner_set_ssid_denylist_button">Set SSID denylist</string>
    <string name="device_owner_ssid_restriction_removing_toast">Removing SSID restriction</string>
    <string name="device_owner_disallow_ambient_display">Disallow ambient display</string>
    <string name="device_owner_disallow_ambient_display_info">
        Please press the Set restriction button to set the user restriction.
        Then press Go to open the Display page in Settings.
        Mark this test as passed if one of the following:\n\n
        - There is no ambient display setting in Display Settings.\n
        - Ambient display setting is disabled with an info icon on it. Clicking on it triggers a support dialog.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_data_roaming">Disallow data roaming</string>
    <string name="device_owner_disallow_data_roaming_info">
        Device should have a sim card to perform this test.
        Please press the Set restriction button to set the user restriction.
        Then press Go to open the Mobile network page in Settings.
        Confirm that:\n\n
        - Data roaming is disabled.\n
        - Enabling data roaming is not possible and triggers a support message.\n\n
        Use the Back button to return to this page.
    </string>
    <string name="device_owner_disallow_factory_reset">Disallow factory reset</string>
    <string name="device_owner_disallow_factory_reset_info">
        Please press the Set button to set the user restriction.\n
        1. Go to the factory reset settings. It is often located in \"Backup &amp; reset\" settings.\n
        Confirm that:\n
           - Factory data reset is disabled.\n
           - Pressing factory data reset is not possible and triggers a support message.\n\n
        2. Go to OEM unlocking settings, if this device has this Settings option. It is often located under \"Developer options\".\n
        Confirm that:\n
           - Oem Unlocking is disabled.\n
           - Enabling Oem unlocking is not possible and triggers a support message.\n\n
        Return back to this page.
    </string>
    <string name="device_owner_user_restriction_set">Set restriction</string>
    <string name="device_owner_user_restriction_unset">Clear restriction (before leaving test)</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="test_input_method_label">Test input method</string>
    <string name="test_accessibility_service_label">Test accessibility service</string>
    <string name="policy_transparency_test_instructions">
        1. <xliff:g id="set_step" example="Set policy by turning the switch on">%1$s</xliff:g>\n
        2. Open Settings app by clicking the "Open settings" button below. Note that this will open the personal Settings app. If this device has the work settings in a different app or screen, then navigate there, ignoring the button if necessary.\n
        3. Verify that performing the following action will trigger a support dialog:\n
           <xliff:g id="user_action" example="Adding an account">%2$s</xliff:g>.<xliff:g id="exception_node" example="NOTE: if the device doesn't support the action...">%3$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 either launch a help web page with more
           information or redirect to Device administrators page in Settings app which displays the
           long support message set earlier.\n
        6. If in step 5. the help web page was launched, navigate to the Device administrators page
           from Settings -> Security, open the work profile \'CTS Verifier\' enabled admin and
           verify that the page displays the long support message set earlier.\n
    </string>
    <string name="optional_policy_transparency_test_note">\n\t<b>NOTE</b>: if the device doesn\'t support this action please skip this test and mark it as passing.</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\n
        NOTE: If the device does not support volume adjustment in Settings app please skip this test and mark it as passing.\n</string>
    <string name="disallow_config_date_time">Disallow config date time</string>
    <string name="disallow_config_date_time_action">Configuring auto time, time, auto date or date</string>
    <string name="disallow_config_location">Disallow config location</string>
    <string name="disallow_config_location_action">Enabling or disabling location, \'Bluetooth Scanning\' or \'WiFi Scanning\' in settings or quick settings</string>
    <string name="disallow_airplane_mode">Disallow airplane mode</string>
    <string name="disallow_airplane_mode_action">Toggling airplane mode switch bar or changing airplane mode state in quick settings</string>
    <string name="disallow_config_screen_timeout">Disallow config screen timeout</string>
    <string name="disallow_config_screen_timeout_action">Configuring sleep options in Display settings</string>
    <string name="disallow_config_brightness">Disallow config brightness</string>
    <string name="disallow_config_brightness_action">Configuring brightness level or adaptive brightness in Display settings, or toggling brightness slider in quick settings</string>
    <string name="disallow_apps_control">Disallow controlling apps</string>
    <string name="disallow_apps_control_action">DISABLE/UNINSTALL/FORCE STOP-ing any app in the managed device/profile other than CtsVerifier</string>
    <string name="disallow_config_cell_broadcasts">Disallow config cell broadcasts</string>
    <string name="disallow_config_cell_broadcasts_action">Configuring emergency alerts(cell broadcasts)</string>
    <string name="disallow_config_credentials">Disallow config credentials</string>
    <string name="disallow_config_credentials_action">Configuring user credentials</string>
    <string name="disallow_config_mobile_networks">Disallow config mobile networks</string>
    <string name="disallow_config_mobile_networks_action">Configuring mobile networks</string>
    <string name="disallow_config_tethering">Disallow config tethering</string>
    <string name="disallow_config_tethering_action">
        Configuring tethering and portable hotspots.\n
        NOTE: If the device does not support tethering please skip this test and mark it as passing.\n
    </string>
    <string name="disallow_config_wifi">Disallow config Wi-Fi</string>
    <string name="disallow_config_wifi_action">Modifying Wi-Fi configuration</string>
    <string name="disallow_debugging_features">Disallow debugging features</string>
    <string name="disallow_debugging_features_action">Enabling developer options</string>
    <string name="disallow_factory_reset">Disallow factory reset</string>
    <string name="disallow_factory_reset_action">Factory resetting the device</string>
    <string name="disallow_fun">Disallow fun</string>
    <string name="disallow_fun_action">Opening android easter egg game by tapping repeatedly on the \'Android version\' option</string>
    <string name="disallow_install_unknown_sources">Disallow install unknown sources</string>
    <string name="disallow_install_unknown_sources_action">Enabling \'Cts Verifier\' to install apps</string>
    <string name="disallow_install_unknown_sources_globally">Disallow install unknown sources globally</string>
    <string name="disallow_install_unknown_sources_globally_action">Enabling \'Cts Verifier\' to install apps device-wide</string>
    <string name="disallow_modify_accounts">Disallow modify accounts</string>
    <string name="disallow_modify_accounts_action">Adding an account, and also removing an account (after you have previously added one)</string>
    <string name="disallow_network_reset">Disallow network reset</string>
    <string name="disallow_network_reset_action">Resetting network settings\n
        NOTE: If the device does not support network reset please skip this test and mark it as passing.\n</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="check_new_user_disclaimer">Check new user disclaimer</string>
    <string name="check_new_user_disclaimer_info">
        Please do the following: \n\n
        1. Check persistent notification for managed device \n\n
        a). Open the notification UI, verify that there is a notification saying the device is managed.\n
        b). Tap the notification\n
        c). It should show a dialog explaining the device is managed and asking the user to accept \n
        d). Don\'t accept initially and tap outside the dialog \n
        e). Open the notification UI again, verify that the managed device notification is still shown \n
        \n
        f). Click \"Set Org\", and open the notification UI again, verify that the organization name
        \"Foo, Inc\" is shown on the dialog \n
        \n\n
        2. Check adding account is restricted\n\n
        a) Click \"Go\" to launch the \"Profiles &amp; accounts\" setting \n
        b) navigate to \"Add account\" \n
        \n
        Expected: \n
        - \"Add account\" is disabled \n
        - Click the button will launch the new user disclaimer dialog\n
        \n
        c) Click accept button\n
        \n
        Expected: \n
        - the screen will be dismissed \n
        - \"Add account\" will be enabled\n
        - Click the button will take user to the screen to add account \n
    </string>
    <string name="device_owner_disallow_remove_user_info">
        Please press \'Create uninitialized user\' to create a user that is not set up. Then press the
        \'Set restriction\' button to set the user restriction.
        Then press \'Go\' to open \'Multiple users\' setting. \n
        Click the managed user to open settings.\n\n

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

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

    <!-- Strings used for enterprise privacy tests -->
    <string name="enterprise_privacy_test">Managed device info tests</string>
    <string name="enterprise_privacy_page">Managed device info page</string>
    <string name="enterprise_privacy_page_info">
        Please press the Go button to open Settings. Verify that:\n
        1) One of the Settings screens contains an entry for managed device information.\n
        2) Tapping that entry opens a screen.\n
        3) In this screen, at a minimum, you are told your organization can:\n
        * Change settings on this device.\n
        * See data associated with your work account.\n
        * See the list of all apps on your device.\n
        * See usage of each app on your device.\n
        * Lock the device and change the password.\n
        * Wipe the device.\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_open_settings">Open Settings</string>
    <string name="enterprise_privacy_network_logging">Retrieve traffic logs</string>
    <string name="enterprise_privacy_network_logging_info">
        Please do the following:\n
        1) Press the Retrieve Traffic Logs button and record the time at which you did this.\n
        2) Wait one minute.\n
        3) Press the Open Settings button.\n
        4) In the screen that opens, verify that you are told traffic logs were last retrieved at the time you pressed the Retrieve Traffic Logs button in step (1).\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_retrieve_network_logs">Retrieve Traffic Logs</string>
    <string name="enterprise_privacy_bug_report">Request bug report</string>
    <string name="enterprise_privacy_bug_report_info">
        Please do the following:\n
        1) Press the Request Bug Report button and record the time at which you did this.\n
        2) Wait one minute.\n
        3) Press the Open Settings button.\n
        4) In the screen that opens, verify that you are told a bug report was last requested at the time you pressed the Request Bug Report button in step (1).\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_request_bug_report">Request Bug Report</string>
    <string name="enterprise_privacy_security_logging">Retrieve security logs</string>
    <string name="enterprise_privacy_security_logging_info">
        Please do the following:\n
        1) Press the Retrieve Security Logs button and record the time at which you did this.\n
        2) Wait one minute.\n
        3) Press the Open Settings button.\n
        4) In the screen that opens, verify that you are told security logs were last retrieved at the time you pressed the Retrieve Security Logs button in step (1).\n
        \n
        Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_retrieve_security_logs">Retrieve Security Logs</string>
    <string name="enterprise_privacy_clear_organization">Clear Org</string>
    <string name="enterprise_privacy_set_organization">Set Org</string>
    <string name="enterprise_privacy_enterprise_installed_apps">Enterprise-installed apps</string>
    <string name="enterprise_privacy_enterprise_installed_apps_info">
        Please do the following:\n
        1) You should have received NotificationBot.apk together with the CTS verifier. If you built the CTS verifier yourself, build the NotificationBot.apk by issuing the following command on the host:\n
            make NotificationBot\n
        2) Grant MANAGE_EXTERNAL_STORAGE by issuing the following command on the host:\n
            adb shell appops set com.android.cts.verifier MANAGE_EXTERNAL_STORAGE 0\n
        3) Upload the NotificationBot.apk to your device by issuing the following command on the host:\n
            adb push /path/to/NotificationBot.apk /sdcard\n
        4) Press the Uninstall button.\n
        5) Press the Open Settings button.\n
        6) In the screen that opens, verify that you are not told that your administrator installed any apps.\n
        7) Use the Back button to return to this page.\n
        8) Press the Install button.\n
        9) Press the Open Settings button.\n
        10) In the screen that opens, verify that you are told now that your administrator installed at least one app.\n
        11) Tap on that information. Verify that a list of apps installed shows.\n
        12) Verify that the list contains the CTS Robot app.\n
        13) Use the Back button to return to this page.\n
        14) Press the Uninstall button.\n
        15) Issue the following command on the host:\n
            adb shell rm /sdcard/NotificationBot.apk
    </string>
    <string name="enterprise_privacy_enterprise_installed_apps_info_headless_system_user">
        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
        \tmake NotificationBot\n
        2) Install the NotificationBot for <b>user 0 only</b>. For example:\n
        \tadb install --user 0 $ANDROID_PRODUCT_OUT/testcases/NotificationBot/*/NotificationBot.apk\n
        3) Make sure the app is <b>not</b> installed for the current user:\n
        \tadb shell pm list packages --user cur |grep com.android.cts.robot || echo \'Not installed\'\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 (other than CtsVerifier itself).\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
        \tadb uninstall --user all com.android.cts.robot\n
    </string>
    <string name="enterprise_privacy_install">Install</string>
    <string name="enterprise_privacy_uninstall">Uninstall</string>
    <string name="enterprise_privacy_admin_granted_location_access">Location access permission</string>
    <string name="enterprise_privacy_admin_granted_location_access_info">
        Please do the following:\n
        1) Press the Reset button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator has granted location access to any apps.\n
        4) Use the Back button to return to this page.\n
        5) Press the Grant button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are told now that your administrator has granted location access to at least one app.\n
        8) Tap on that information. Verify that a list of apps which have location access shows.\n
        9) Verify that the list contains the CTS Verifier app.\n
        10) Use the Back button to return to this page.\n
        11) Press the Reset button.
    </string>
    <string name="enterprise_privacy_reset">Reset</string>
    <string name="enterprise_privacy_grant">Grant</string>
    <string name="enterprise_privacy_admin_granted_microphone_access">Microphone access permission</string>
    <string name="enterprise_privacy_admin_granted_microphone_access_info">
        Please do the following:\n
        1) Press the Reset button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator has granted microphone access to any apps.\n
        4) Use the Back button to return to this page.\n
        5) Press the Grant button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are told now that your administrator has granted microphone access to at least one app.\n
        8) Tap on that information. Verify that a list of apps that have microphone access shows.\n
        9) Verify that the list contains the CTS Verifier app.\n
        10) Use the Back button to return to this page.\n
        11) Press the Reset button.
    </string>
    <string name="enterprise_privacy_admin_granted_camera_access">Camera access permission</string>
    <string name="enterprise_privacy_admin_granted_camera_access_info">
        Please do the following:\n
        1) Press the Reset button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator has granted camera access to any apps.\n
        4) Use the Back button to return to this page.\n
        5) Press the Grant button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are told now that your administrator has granted camera access to at least one app.\n
        8) Tap on that information. Verify that a list of apps that have camera access shows.\n
        9) Verify that the list contains the CTS Verifier app.\n
        10) Use the Back button to return to this page.\n
        11) Press the Reset button.
    </string>
    <string name="enterprise_privacy_default_apps">Default apps</string>
    <string name="enterprise_privacy_default_apps_info">
        Please do the following:\n
        1) Press the Reset button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are not told that your administrator set any default apps.\n
        4) Use the Back button to return to this page.\n
        5) Press the Set Default Apps button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are now told that your administrator has set 6 default apps.\n
        8) Tap on that information. Verify that a list of default apps shows, with 6 elements in it.\n
        9) Verify that each element shows the CTS Verifier is the default app.\n
        10) Use the Back button to return to this page.\n
        11) Press the Reset button.
    </string>
    <string name="enterprise_privacy_set_default_apps">Set Default Apps</string>
    <string name="enterprise_privacy_default_ime">Default keyboard</string>
    <string name="enterprise_privacy_default_ime_info">
        Please do the following:\n
        1) Press the Open Settings button.\n
        2) In the screen that opens, verify that you are not told the default keyboard has been set.\n
        3) Use the Back button to return to this page.\n
        4) Press the Set Keyboard button to set the default keyboard.\n
        5) Repeat steps (1) through (3), verifying that in step (2), you are told now that the default keyboard has been set to CTS Verifier.\n
        6) Press the Finish button to clear the default keyboard.
    </string>
    <string name="enterprise_privacy_set_keyboard">Set Keyboard</string>
    <string name="enterprise_privacy_finish">Finish</string>
    <string name="enterprise_privacy_always_on_vpn">Always-on VPN</string>
    <string name="enterprise_privacy_always_on_vpn_info">
        Please do the following:\n
        1) Press the Open Settings button.\n
        2) In the screen that opens, verify that you are not told that an always-on VPN is set.\n
        3) Use the Back button to return to this page.\n
        4) Press the Set VPN button to set an always-on VPN.\n
        5) Repeat steps (1) through (3), verifying that in step (2), you are told now that an always-on VPN is set.\n
        6) Press the Finish button to clear the always-on VPN.
    </string>
    <string name="enterprise_privacy_set_always_on_vpn">Set VPN</string>
    <string name="enterprise_privacy_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_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_quick_settings">Quick settings disclosure</string>
    <string name="enterprise_privacy_quick_settings_info">
        Please do the following:\n
        1) Press the Clear Org button.\n
        2) Open and fully expand Quick Settings.\n
        3) Verify that at the bottom of Quick Settings, you are told the device is managed.\n
        4) Close Quick Settings.\n
        5) Press the Set Org button.\n
        6) Open and fully expand Quick Settings.\n
        7) Verify that at the bottom of Quick Settings, you are told the device is managed by \"Foo, Inc.\".\n
        8) Tap on the information.\n
        9) Verify that a dialog informing you about device monitoring opens.\n
        10) Tap the \"View Policies\" button.\n
        11) Verify that a screen informing you what your managing organization can do is shown.\n
        \n
        Use the Back button to return to this page. If this device does not have quick settings, please skip this test and mark it passing.
    </string>
    <string name="enterprise_privacy_keyguard">Keyguard disclosure</string>
    <string name="enterprise_privacy_keyguard_info">
        Please do the following:\n
        1) Press the Open Settings button to open Settings.\n
        2) Navigate to \"Security\" &gt; \"Screen lock\" and select the first screen lock type that is not \"None\".\n
        3) Use the Back button to return to this page.\n
        4) Press the Clear Org button.\n
        5) Lock the device.\n
        6) Verify that on the lock screen, you are told the device is managed.\n
        7) Unlock the device.\n
        8) Press the Set Org button.\n
        9) Lock the device.\n
        10) Verify that on the lock screen, you are told the device is managed by \"Foo, Inc.\".\n
        11) Unlock the device.\n
        12) Repeat steps (1) through (11) for each screen lock type other than \"None\".
    </string>
    <string name="enterprise_privacy_add_account">Add account disclosure</string>
    <string name="enterprise_privacy_add_account_info">
        Please do the following:\n
        1) Press the Clear Org button.\n
        2) Press the Open Settings button.\n
        3) In the screen that opens, verify that you are told that the device is managed.\n
        4) Use the Back button to return to this page.\n
        5) Press the Set Org button.\n
        6) Press the Open Settings button.\n
        7) In the screen that opens, verify that you are told that the device is managed by \"Foo, Inc.\".\n
        8) Tap the \"Learn more\" link.\n
        9) Verify that a screen informing you what your managing organization can do is shown.\n
        11) Use the Back button to return to this page.
    </string>
    <string name="enterprise_privacy_default_app">CTS Verifier Test</string>

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

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

    <string name="device_owner_disable_usb_data_signaling_test">Disable USB data signaling</string>
    <string name="device_owner_disable_usb_data_signaling_test_info">
         This test verifies that USB data signaling can be disabled by the device owner.\n
         1. Press the \"Go\" button to go to Settings. Go to Connected devices > USB and select use
         USB for \"File transfer/Android Auto\". Verify that you can mount the device as a USB drive
         on your desktop computer and access files from your phone through USB.\n
         2. Press the \"Disable USB data signaling\" button to disable USB data signaling on
         the device. When disabled, all USB data connections (except from charging functions)
         are prohibited.\n
         3. Press the \"Go\" button to go to Settings and confirm that the "USB" preferences in
         \"System > Developer Options\" cannot be selected and "USB" preference in
         \"Connected devices\" has disappeared.:\n
              - Connected devices > USB\n
              - System > Developer Options > USB debugging\n
              - System > Developer Options > Default USB configuration\n
              - System > Developer Options > Disable USB audio routing\n
         4. Verify that you cannot mount the device as a USB drive on your desktop computer and
         cannot access files from your phone through USB.\n
         5. Press the \"Enable USB data signaling\" button to re-enable USB data signaling and
         replug USB cable in the device. After that the "USB" preferences in
         \"System > Developer Options\" can be selected and "USB" preference in
         \"Connected devices\" has appeared.\n
         Please mark the test accordingly.
    </string>
    <string name="device_owner_enable_usb_data_signaling_test">Enable USB data signaling</string>

    <string name="device_owner_required_password_complexity_test">Set required password complexity</string>
    <string name="device_owner_required_password_complexity_test_info">
         This test verifies that required password complexity can be set by the device owner.\n
         1. Press the \"Set low required password complexity\" button.\n
         2. Press the \"Go\" button to go to Settings > Security > Screen lock. Verify that
         you have to set a pattern, PIN or password.\n
         3. Press the \"Set medium required password complexity\" button.\n
         4. Press the \"Go\" button to go to Settings > Security > Screen lock. Verify that
         you have to set a PIN without repeating (4444) or ordered (1234, 4321, 2468) sequences
         with a length of at least 4; or you have to set an alphabetic or alphanumeric password with
         a length of at least 4.\n
         5. Press the \"Set high required password complexity\" button.\n
         6. Press the \"Go\" button to go to Settings > Security > Screen lock. Verify that
         you have to set a PIN without repeating (4444) or ordered (1234, 4321, 2468) sequences
         with a length of at least 8; or you have to set an alphabetic or alphanumeric password with
         a length of at least 6.\n
         7. Press the \"Remove required password complexity\" button.\n
         8. Press the \"Go\" button to go to Settings > Security > Screen lock. Verify that
         you don\'t have to set a pattern, PIN or password.\n
         Please mark the test accordingly.
    </string>
    <string name="set_low_required_password_complexity">Set low required password complexity</string>
    <string name="set_medium_required_password_complexity">Set medium required password complexity</string>
    <string name="set_high_required_password_complexity">Set high required password complexity</string>
    <string name="remove_required_password_complexity">Remove required password complexity</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_instructions" product="automotive">
        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; a \'Managed User Tests\' should launch.\n
        Follow the test instructions and press \'pass\' or \'fail\' to return to this screen.\n
    </string>
    <string name="managed_user_positive_tests_info">
        The positive managed user tests verify policies on a managed user created by a device owner.
        Proceed to the test cases, then press \'pass\' or \'fail\' to finish this test.
    </string>
    <string name="managed_user_positive_category">Managed User Tests</string>
    <string name="managed_user_check_managed_user_test">Check affiliated profile owner</string>
    <string name="managed_user_incorrect_managed_user">Missing or incorrect affiliated profile owner: CTSVerifier is not affilaited PO!</string>

    <string name="device_owner_disallow_user_switch">Disallow user switch</string>
    <string name="device_owner_disallow_user_switch_info">
        Press \'Create uninitialized user\' to create a user that is not setup.
        Then press \'Set restriction\' button to set the user restriction.
        Then press \'Go\' to open multiple users settings.
        Confirm that:\n
        \n
        - Main switch is disabled and in off position\n
        \n
        In additional, if quick settings is available, confirm that user switcher is hidden or
        disabled.
        Use the Back button to return to this page.
    </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 \"Placeholder\" 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 Placeholder Text\" when you tune
    to the \"Placeholder\" 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 \"Placeholder\" channel.
    </string>
    <string name="tv_input_discover_test_verify_epg">
    Do you see the programs named \"Placeholder Program\" and their descriptions
    "Placeholder 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_none">None</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>

    <!-- Common strings for the TV Display tests -->
    <string name="tv_start_test">Start Test</string>
    <string name="tv_done">Done</string>

    <!-- Audio Capabilities test -->
    <string name="tv_audio_capabilities_test">Audio Capabilities Test</string>
    <string name="tv_audio_capabilities_test_info">This test checks if AudioDeviceInfo and
    AudioTrack#isDirectPlaybackSupported APIs correctly report the Audio capabilities
    of the connected audio devices.</string>
    <string name="tv_audio_capabilities_no_receiver_connected">Disconnect all receivers or
    soundbars which are connected. </string>
    <string name="tv_audio_capabilities_receiver_connected">Connect a receiver or
    soundbar which can play Dolby Atmos. </string>
    <string name="tv_audio_capabilities_atmos_supported">Does your Android TV device support Dolby
    Atmos (either passthrough or decode)?  </string>
    <string name="tv_audio_capabilities_skip_test"> This test is only applicable to OTT and STB
        devices. Is your device a soundbar or panel TV?
    </string>

    <!-- Hotplug Test -->
    <string name="tv_hotplug_test">Hotplug Test</string>
    <string name="tv_hotplug_test_info">This test checks whether DisplayManager responds correctly
        to plugging and unplugging the HDMI cable.
    </string>
    <string name="tv_hotplug_disconnect_display">
        Press the "%1$s" button, disconnect the HDMI cable, wait 2 seconds and then connect the HDMI
        cable again.
    </string>

    <!-- Mode Switching Test -->
    <string name="tv_mode_switching_test">Mode switching test</string>
    <string name="tv_mode_switching_test_step_instruction">
        Click "Start Test" and then observe the video below. Testing transition from %1$s to %2$s.
    </string>
    <string name="tv_mode_switching_test_black_screen_question">
        Did the video playback experience an interruption, for example, a black or solid color
        screen?
    </string>
    <string name="tv_mode_switching_test_is_video_ok">
        Does the video look okay? Click "No" if the video is not playing, there was a snow screen,
        audio static, wrong colors, the video is displaced compared to before running the test or
        if the video is not playing. Keep in mind that some stutter is expected when the video does
        not match the refresh rate.
    </string>
    <string name="tv_mode_switching_test_mode_switch_step">Mode switch step</string>

    <string name="overlay_view_text">Overlay View Placeholder 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">
        <item>com.android.cts.verifier.telecom.CtsVerifierInCallUi</item>
        <item>com.android.cts.verifier.car.CarDockActivity</item>
        <item>com.android.cts.verifier.car.CarDockTestActivity</item>
    </string-array>

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

    <!--  Audio Devices Notifications Tests -->
    <string name="audio_devices_notification_instructions">
          Connect and disconnect a wired headset.
          Note if the appropriate notification messages appear below.
          The \"Pass\" button will be enabled if device connect and disconnect messages are received.
    </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_out_devices_notifications_test">Audio Output Devices Notifications Test</string>
    <string name="audio_out_devices_infotext">Tests whether wired output peripheral
        connect/disconnect notifications are correctly sent when output peripherals are
        connected or disconnected. A \"wired output peripheral\" can be a headset or headphones
        connected to an analog 3.5mm jack or the USB port or a USB audio interface connected to
        the USB port.
        \n\nTest Setup:
        \nDisconnect any wired audio peripherals.
        \n\nTest Process:
        \n1. Verify that the DUT supports USB or Analog audio peripherals.
        \n2. Press the \"Clear Messages\" button to clear any previously sent \"sticky\" notifications.
        \n3. Connect a wired output peripheral. A connect message should appear. Disconnect the
        audio peripheral. A disconnect message should appear.
        \n\nTest Criteria:
        \nThe test passes if either the device DOES NOT support wired output peripherals, or both
        the connect and disconnect notifications are received.
    </string>

    <string name="audio_in_devices_notifications_test">Audio Input Devices Notifications Test</string>
    <string name="audio_in_devices_infotext">Tests whether wired input peripheral
        connect/disconnect notifications are correctly sent when input peripherals are
        connected or disconnected. A \"wired input peripheral\" can be a headset connected to an
        analog 3.5mm jack or the USB port or a USB audio interface connected to the USB port.
        \n\nTest Setup:
        \nDisconnect any wired audio peripherals.
        \n\nTest Process:
        \n1. Verify that the DUT supports USB or Analog audio peripherals.
        \n2. Press the \"Clear Messages\" button to clear any previously sent \"sticky\" notifications.
        \n3. Connect a wired output peripheral. A connect message should appear. Disconnect the
        audio peripheral. A disconnect message should appear.
        \n\nTest Criteria:
        \nThe test passes if either the device DOES NOT support wired output peripherals, or both
        the connect and disconnect notifications are received.
    </string>

    <string name="audio_input_routingnotifications_test">Audio Input Routing Notifications Test</string>
    <string name="audio_input_routingnotification_instructions">
        Test whether appropriate routing notifications are sent when audio input peripherals are
        connected to the device.
        \n\nTest Setup:
        \nDisconnect any wired audio peripherals.
        \n\nTest Process:
        \n1. Verify that the DUT supports USB or Analog audio peripherals.
        \n2. Press the \"Record\" button.
        \n3. Connect a wired input peripheral. A connect routing message should appear.
        \n4. Press the \"Stop\" button.
        \n\nTest Criteria:
        \nThe test passes if either the device DOES NOT support wired input peripherals, or
        the routing notifications are received.
    </string>
    <string name="audio_output_routingnotifications_test">Audio Output Routing Notifications Test</string>
    <string name="audio_output_routingnotification_instructions">
        Test whether appropriate output routing notifications are sent when audio output peripherals are
        connected to the device.
        \n\nTest Setup:
        \nDisconnect any wired audio peripherals.
        \n\nTest Process:
        \n1. Verify that the DUT supports USB or Analog audio peripherals.
        \n2. Press the \"Play\" button.
        \n3. Connect a wired output peripheral. A connect routing message should appear.
        \n4. Press the \"Stop\" button.
        \n\nTest Criteria:
        \nThe test passes if either the device DOES NOT support wired output peripherals, or
        the routing notifications are received.
    </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="audio_uap_notifications_test">USB Audio Peripheral Notifications Test</string>
    <string name="uapPeripheralProfileAttributes">USB Audio Peripheral Attributes</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="uapNotificationsTestInfo">
         This test verifies that the correct notifications and Intents are sent when a USB audio
         peripheral is connected to the Android device. First USB headset peripheral should be
         connected and the test will acknowledge the USB headset device notifications and plug intent.
         Next a non-headset / headphones USB peripheral should be connected and the test will
         acknowlege the USB device notifications. If all notifications and Intents are received
         the test passes.
     </string>

    <string name="audio_usb_restrict_record_test">USB Audio Restrict Record Access Test</string>
    <string name="audio_usb_restrict_record_entry">
        This test checks that the appropriate warning message is displayed when an app which has
        not been granted RECORD permission could potentially record audio through the raw USB
        API. To test, connect a USB peripheral with CAPTURE capability and press the "Test" button.
        The access permission API should contain a warning message about potential dangerous
        access. If so, the test passes.
    </string>

    <string name="audio_usb_restrict_permission_info">
        The test can only be run with Microphone permission DENIED.\n\n
        To run this test:\n
        &#160;&#160;Exit CTS-Verifier\n
        &#160;&#160;Go to Android Settings\n
        &#160;&#160;Select Apps &amp; notifications\n
        &#160;&#160;Select CTS Verifier\n
        &#160;&#160;Select Permissions\n
        &#160;&#160;Deny Microphone permission\n
        &#160;&#160;Run this test\n
        When complete:\n
        &#160;&#160;Exit CTS-Verifier\n
        &#160;&#160;Return to Permissions Settings for CTS Verifier\n
        &#160;&#160;grant Microphone permission
    </string>
    <string name="usb_restrictrecord_instructions">
        Permissions for CTS Verifier are correctly set to run this test.\n\n
        Connect a USB peripheral with CAPTURE capability. Press the "Test" button and verify that
        a warning is shown in the device access UI.
    </string>

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

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

    <string name="proAudioHasProAudiolbl">Has Pro Audio:</string>
    <string name="proAudioHasLLAlbl">Has Low-Latency Audio:</string>
    <string name="audioLoopbackInputLbl">Audio Input:</string>
    <string name="audioLoopbackOutputLbl">Audio Output:</string>
    <string name="proAudioMidiHasMIDILbl">Has MIDI Support:</string>
    <string name="proAudioMidiHasUSBHostLbl">USB Host Mode:</string>
    <string name="proAudioMidiHasUSBPeripheralLbl">USB Peripheral Mode:</string>
    <string name="proAudioHDMISupportLbl">HDMI Support:</string>
    <string name="proAudioHasHDMICheckBox">Has HDMI Support</string>

    <string name="audio_proaudio_NA">N/A</string>
    <string name="audio_proaudio_hdmiPending">pending...</string>
    <string name="audio_proaudio_hdmiNotFound">No HDMI detected.</string>

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

    <string name="hdmi_insufficient">The Connected HDMI device does not meet CDD requirements</string>

    <!-- Various test status strings -->
    <string name="audio_proaudio_pass">Pass</string>
    <string name="audio_proaudio_latencytoohigh">Latency is too high</string>
    <string name="audio_proaudio_confidencetoolow">"Insufficient Confidence value"</string>
    <string name="audio_proaudio_midinotreported">"No MIDI support reported"</string>
    <string name="audio_proaudio_usbhostnotreported">"No USB Host Mode support reported"</string>
    <string name="audio_proaudio_usbperipheralnotreported">"No USB Peripheral Mode support reported"</string>

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

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

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

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

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

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

    <!-- Audio general text -->
    <string name="audio_wired_exists">Does this device support wired USB or Analog audio peripherals?</string>
    <string name="audio_wired_no">No</string>
    <string name="audio_wired_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_level_not_max">Audio Level is not maximum. Please check your device
          is set to max level for audio playback.</string>

    <string name="audio_general_no">No</string>
    <string name="audio_general_yes">Yes</string>
    <string name="audio_general_info">Info</string>
    <string name="audio_general_ok">Ok</string>
    <string name="audio_general_start">Start</string>
    <string name="audio_general_stop">Stop</string>
    <string name="audio_general_status">Status</string>
    <string name="audio_general_pass">PASS</string>
    <string name="audio_general_fail">FAIL</string>
    <string name="audio_general_not_tested">Not Tested</string>

    <string name="audio_general_Input">Input</string>
    <string name="audio_general_Output">Output</string>

    <string name="audio_general_record">Record</string>
    <string name="audio_general_play">Play</string>

    <string name="audio_general_JavaApi">Java API</string>
    <string name="audio_general_NativeApi">Native API</string>

    <string name="audio_general_clear_results">Clear Results</string>

    <string name="audio_general_test_not_run">Test Not Run</string>
    <string name="audio_general_testnotcompleted">Test not completed.</string>

    <string name="audio_general_reportlogtest">[Can\'t Write ReportLog]</string>

    <!-- Audio Loopback Latency Test -->
    <string name="audio_loopback_latency_test">Audio Loopback Latency Test</string>
    <string name="audio_loopback_info">This test verifies that the DUT can achieve the required or
        recommended loopback latency as defined by CDD § 5.6 (Audio Latency) and
        § 5.10 (Professional Audio).
        \nTo pass the test, the DUT needs to meet the latency requirement on ALL 3 of the
        following audio paths (if present):
          \n- the internal speaker and microphone.
          \n- a <a href="https://source.android.com/devices/audio/latency/loopback">Loopback Plug</a>  connected to a 3.5mm headset jack.
          \n- a <a href="https://source.android.com/devices/audio/latency/loopback">Loopback Plug</a>  connected to a USB audio adapter.
          (or alternatively USB interface with patch cords connecting the input and output jacks).
          \nPlease connect these Loopback mechanisms (the same Loopback Plug can be used at different times
          for the headset jack and USB audio adapter) and proceed with the instructions
          on the screen. The volume may need to be adjusted for each audio path.
          \nNote that for the Speaker/Microphone path, it may be necessary to remove any phone case on the device.
          \nThe system will measure the input-output audio latency by injecting an audio signal into
          the output and compute the time between generating the signal and recording it back.
          You can vary the Audio Level slider to ensure the pulse will feed back at adequate levels.
          Repeat until a sufficient confidence is achieved. When each route test is completed, the
          measured and required latencies will be displayed.
          \nWhen all test routes have passed, the test as a whole can be passed.
    </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 sufficient confidence 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>
    <string name="audio_loopback_test_all_paths">Please test all supported paths.</string>

    <string name="audio_loopback_speakermicpath_instructions">Place the DUT flat on a table
    in a quiet room. Press the Start button and allow the test to proceed.</string>

    <string name="audio_loopback_headsetpath_instructions">Insert the loopback plug in the
    headset jack.  Press the Start button and allow the test to proceed.</string>

    <string name="audio_loopback_usbpath_instructions">Connect the USB port to an appropriate
        USB audio test peripheral with loopback set up. Press the Start button and
        allow the test to proceed.</string>

    <string name="audio_loopback_failure">FAILURE - Could not allocate analyzer thread.</string>

    <!-- Audio Cold-Start Latency Test -->
    <string name="audio_coldstart_out_latency_test">Audio Cold Start Output Latency Test</string>
    <string name="audio_coldstart_in_latency_test">Audio Cold Start Input Latency Test</string>

    <string name="audio_coldstart_output_info">
        This test measures the time required to play audio from a suspended \"cold\" audio system.
        This time is defined as the \"cold start latency\". To pass this test, a maximum
        cold start latency time of 500ms or less is REQUIRED, while a time of 100ms or less
        is STRONGLY RECOMMENDED. (See <a href="https://source.android.com/compatibility/android-cdd#5_6_audio_latency">Android CDD § 5.6. Audio Latency</a>)
        \n\nTo run this test, it is required to have touch-sounds disabled in the device
        \"Sound &amp; Vibration\" settings
        panel.
        \n\nThe \"Java API\" and \"Native API\" allow for capturing performance data from the
        two streaming APIs. The cold start latency measurement need only pass for one API.
        The Native API generally gives the best performance.
        \n\nAlthough not part of the pass criteria, the test will also report \"open\" &amp;
        \"start\" times. Open time is the time taken to allocate and prepare the player for the
        specified stream attributes. Start time is the time taken to start playing audio on an
        open stream.
    </string>
    <string name="audio_coldstart_input_info">
        This test measures the time required to record audio from a suspended \"cold\" audio system.
        This time is defined as the \"cold start latency\". To pass this test, a maximum
        cold start latency time of 500ms or less is REQUIRED, while a time of 100ms or less
        is STRONGLY RECOMMENDED. (See <a href="https://source.android.com/compatibility/android-cdd#5_6_audio_latency">Android CDD § 5.6. Audio Latency</a>)
        \n\nThe \"Java API\" and \"Native API\" allow for capturing performance data from the
        two streaming APIs. The cold start latency measurement need only pass for one API.
        The Native API generally gives the best performance.
        \n\nAlthough not part of the pass criteria, the test will also report \"open\" &amp;
        \"start\" times. Open time is the time taken to allocate and prepare the recorder for the
        specified stream attributes. Start time is the time taken to start recording audio on an
        open stream.
    </string>
    <string name="audio_coldstart_outputlbl">Output Cold Start Latency</string>
    <string name="audio_coldstart_inputlbl">Input Cold Start Latency</string>
    <string name="audio_coldstart_touchsounds_message">
        Touch sounds are ENABLED. Please DISABLE touch sounds in the \"Sound &amp; Vibration\" settings panel.
    </string>
    <string name="audio_coldstart_notouchsounds_message">Touch sound are DISABLED.</string>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    <!-- Analog Headset Test -->
    <string name="audio_headset_audio_test">Analog Headset Audio Test</string>
    <string name="analog_headset_query">Does this Android device have an analog headset jack?</string>
    <string name="analog_headset_play">Play</string>
    <string name="analog_headset_stop">Stop</string>
    <string name="analog_headset_playback_prompt">Play a test tone and verify correct playback</string>
    <string name="analog_headset_playback_query">Was the audio correctly played through the headset?</string>
    <string name="analog_headset_keycodes_label">Headset key codes</string>
    <string name="analog_headset_headsethook">HEADSETHOOK</string>
    <string name="analog_headset_volup">VOLUME_UP</string>
    <string name="analog_headset_voldown">VOLUME_DOWN</string>
    <string name="analog_headset_test">Analog Headset Test</string>
    <string name="analog_headset_pass_noheadset">"PASS. No headset port available."</string>
    <string name="analog_headset_pass">PASS.</string>
    <string name="analog_headset_port_detected">"Analog port detected."</string>
    <string name="analog_headset_press_buttons">Press headset buttons to verify recognition.</string>
    <string name="analog_headset_headset_connected">Headset connected.</string>
    <string name="analog_headset_no_headset">No Headset. Connect headset to 3.5mm analog jack.</string>
    <string name="analog_headset_action_received">ACTION_HEADSET_PLUG received - </string>
    <string name="analog_headset_unplugged">Unplugged</string>
    <string name="analog_headset_plugged">Plugged</string>
    <string name="analog_headset_mic"> [mic]</string>
    <string name="analog_headset_test_info">This test tests the following functionality with respect to wired analog headsets.\n
        1. Correct audio playback.\n
        2. Plug intents.\n
        3. Headset keycodes.\n
        \nTo execute test:\n
        1. Plug in an Android-compatible, analog headset. Verify connection/recognition.\n
        2. Play test tone and verify correct behavior.\n
        3. Press headset buttons until all are recognized on the test screen.\n
        \nTo run this test it is necessary to have an Android device with a 3.5mm analog headset jack and a compatible analog headset with Hook, Volume Up and Volume Down buttons.\n
        \n(see <a href="https://source.android.com/devices/accessories/headset/plug-headset-spec">3.5 mm Headset: Accessory Specification</a> and
        <a href="https://source.android.com/compatibility/android-cdd#7_8_2_1_analog_audio_ports">Android CDD § 7.8.2.1. Analog Audio Ports</a>)
    </string>
    <!-- Audio AEC Test -->
    <string name="audio_aec_test">Audio Acoustic Echo Cancellation (AEC) Test</string>
    <string name="audio_aec_info">
        The recording source VOICE_COMMUNICATION will be tested with/without the Acoustic Echo Canceller effect engaged.
        The Acoustic Coupling Factor (ACF) will be computed for each case. A successful test expects ACF less than 0.4 for AEC ON,
        and ACF greater than 0.6 for AEC OFF.
        This test requires a quiet environment, and no headphones or similar connected.
        This test must pass in devices where AEC functionality is mandatory or any device which implements AEC.
    </string>
    <string name="audio_aec_instructions">Press [TEST] to play a voice recording twice with different parameters.</string>
    <string name="audio_aec_mandatory_test">Is AEC mandatory in this device?</string>

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

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

    <!-- AudioTap2Tone test -->
    <string name="audio_tap2tone">Audio Tap To Tone Test</string>
    <string name="audio_tap2tone_info">This tests the latency from a screen interaction to a
        resulting tone. This time is a combination of touch screen latency and audio latency.\nThis
        test is best conducted in a quiet room with the device laying on a table.
        \n\nTo execute test:
        \n1. Select the Audio API to test (\"Native\" has the lowest latency) and press the \"Start\" button.
        The test needs to pass for ONLY ONE API.
        \n2. Use your fingernail to tap ONCE on the field below to trigger the test tone. DO NOT leave
        the finger resting on the test field. A strong "tick" sound from the fingernail striking
        the display is necessary to register the start of the test process.
        \n3. After tapping ONCE, wait until the results are displayed in the field above the
        waveform display before tapping for the next test run.
        \nFive successful tests runs are required to determine if the test as a whole succeeds.
        \n4. Press the \"Stop"\ button to conclude the test. The results will be displayed along with the passing/failing measurement and requirement.
        \n\n(see <a href="https://source.android.com/compatibility/12/android-12-cdd#56_audio_latency">Android CDD § 5.6. Audio Latency</a>)
    </string>
    <string name="audio_tap2tone_too_few">Not enough edges. Use fingernail.</string>
    <string name="audio_tap2tone_too_many">Too many edges. Use fingernail. Ensure there is
    no background noise.</string>

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

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

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

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

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

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

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

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

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

    <!-- Strings for DialerIncomingCall test -->
    <string name="dialer_incoming_call_test">Dialer Receives Incoming Call</string>
    <string name="dialer_incoming_call_test_instructions">This test verifies that the default dialer
      can receive incoming calls after it has been set.
    </string>
    <string name="dialer_incoming_call_detected">Detected the incoming call. Activity passed.</string>
    <string name="dialer_check_incoming_call_explanation">Call the device and end the call in the
        pop up in-call UI.</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.
        Also a pop up CtsVerifier in call UI will show.
    </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 tests that the USB Audio HAL returns the
        expected set of attributes for a well-known USB audio peripheral. See the
        <a href="https://source.android.com/compatibility/cts/usb-audio#recommended-peripherals">
            Mandated Peripherals
        </a>
        section of the <a href="https://source.android.com/compatibility/cts/usb-audio">
            USB Audio CTS Verifier Tests
        </a>.
        for a list of supported USB audio peripherals.  The attributes of the supported
        peripherals are stored in the app in a set of \"Peripheral Profiles\".\n\n
        To execute the test:\n
        1. Specify whether or not the DUT supports USB host mode (CDD 5.10 C-1-3). If not the test
        simply passes.
        2. Plug in a supported USB Audio Peripheral.\nThe peripheral\'s attributes will be
        displayed along with the name of the associated profile. If the peripheral matches the
        profile, the test passes. If not, the mismatches are displayed.
    </string>

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

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

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

    <!-- Pro Audio Test -->
    <string name="proaudio_test">Pro Audio Test</string>
    <string name="proaudio_info">This tests that any device claiming \"Pro Audio\" meets the
        requirements specified in the
        <a href="https://source.android.com/compatibility/12/android-12-cdd#510_professional_audio">
            CDD section 5.10. Professional Audio</a>
        \n\nTo execute the test:
        \n1. Note that all required flags report \"true\"
        \n2. If the DUT supports HDMI:
        \n  a. Click the \"Has HDMI Support\" checkbox
        \n  b. Connect an HDMI device to the DUT
        \n  c. Verify that the reported HDMI attributes meet the specification.
        \n\nNote that the latency measurement for Pro Audio has been moved to the
        Audio Loopback Latency Test
    </string>
    <string name="proaudio_hdmi_infotitle">HDMI Support</string>
    <string name="proaudio_hdmi_message">Please connect an HDMI peripheral to validate
        HDMI output attributes.
    </string>

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

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

    <string name="telecom_incoming_call_test">Telecom Incoming Call Test</string>
    <string name="telecom_incoming_call_test_info">This test verifies that the default
        dialer on the system is able to receive a call from a third-party connection service.
    </string>
    <string name="telecom_incoming_call_step_1">
        Click the button below to register a test PhoneAccount and ConnectionService. You will be
        taken to the phone account selection screen. Please enable the "CTS Verifier Test"
        account. Once you have completed this step, return here and click the
        "Confirm Phone Account" button.
    </string>
    <string name="telecom_incoming_call_register_enable_phone_account_button">
        Register and Enable Phone Account
    </string>
    <string name="telecom_incoming_call_confirm_register_button">Confirm Phone Account</string>
    <string name="telecom_incoming_call_step_2">
        Click the button below to initiate an incoming call. The phone should start ringing.
        Answer the call, confirm that you can hear an audio clip with Eisenhower\'s voice, then
        return to this screen while the call is still ongoing.
    </string>
    <string name="telecom_incoming_call_dial_button">Dial</string>
    <string name="telecom_incoming_call_step_3">
        Click the button below to confirm that the ongoing incoming call was properly answered and
        that audio is audible.
    </string>
    <string name="telecom_incoming_call_confirm_button">Confirm</string>
    <string name="telecom_incoming_self_mgd_test"> Incoming Self-Managed Connection Test</string>
    <string name="telecom_incoming_self_mgd_info">
        This test verifies that an incoming call from a Self-Managed Connection Service will trigger
        a Telecom-managed incoming call UI when it is not possible to hold an ongoing call on the
        device.
    </string>
    <string name="telecom_incoming_self_mgd_step_1">
        Click the button below to register a test self-managed ConnectionService.
    </string>
    <string name="telecom_incoming_self_mgd_register_button">Register Self-Managed ConnectionService</string>
    <string name="telecom_incoming_self_mgd_step_2">
        Start two phone calls on the device under test; this generates a scenario where calls cannot
        be held when the incoming self-managed call is received.  Click "verify calls" to confirm
        that the calls were started.
    </string>
    <string name="telecom_incoming_self_mgd_verify_call_button">Verify Calls</string>
    <string name="telecom_incoming_self_mgd_step_3">
        Click the button below to start a test incoming self-managed call.  Answer the call in the
        UI when prompted.
    </string>
    <string name="telecom_incoming_self_mgd_place_call_button">Start Self-Managed Call</string>
    <string name="telecom_default_dialer_test_title">Default Dialer Test</string>
    <string name="telecom_default_dialer_test_info">
        This test verifies that a third party dialer can show an incoming call screen when the
        device is locked.
    </string>
    <string name="telecom_default_dialer_step_1">
        Click the button below to set CtsVerifier as the default dialer.
    </string>
    <string name="telecom_default_dialer_set_third_party_dialer_button">
        Set third party dialer
    </string>
    <string name="telecom_default_dialer_step_2">
        Click the button to make sure that this phone is secured with a lock screen.
    </string>
    <string name="telecom_confirm_lock_screen">Confirm lock screen</string>
    <string name="telecom_default_dialer_step_3">
        Click the button below to lock the phone and then call this device. Answer the incoming call
        in the UI when prompted without unlock the phone.
    </string>
    <string name="telecom_default_dialer_lock_button">Lock phone and dail</string>
    <string name="telecom_default_dialer_step_4">
        Click the button below to confirm that the ongoing incoming call was answered when the
        device is locked.
    </string>
    <string name="telecom_default_dialer_end_button">End call and confirm</string>
    <string name="telecom_default_dialer_confirm_button">Confirm</string>
    <string name="telecom_in_call_ui_label">CtsVerifierInCallUi</string>
    <!-- Strings for SetNewPasswordComplexityTest -->
    <string name="set_complexity_test_title">Set New Password Complexity Test</string>
    <string name="set_complexity_test_message">
        This test verifies that when an app prompts users to set a new screen lock of a certain complexity level, users cannot set a screen lock weaker than the specified complexity.\n
        \nClick the complexity level buttons one by one and make sure you can only set a screen lock not weaker than the types and minimum length specified on the right of each button.
    </string>
    <string name="set_complexity_high_txt">High</string>
    <string name="set_complexity_medium_txt">Medium</string>
    <string name="set_complexity_low_txt">Low</string>
    <string name="set_complexity_none_txt">None</string>
    <string name="set_complexity_high_desc">
        PIN without repeating (4444) or ordered (1234, 4321, 2468) sequences, length at least 8; Or
        \nAlphabetic, length at least 6; Or
        \nAlphanumeric, length at least 6</string>
    <string name="set_complexity_medium_desc">
        PIN without repeating (4444) or ordered (1234, 4321, 2468) sequences, length at least 4; Or
        \nAlphabetic, length at least 4; Or
        \nAlphanumeric, length at least 4</string>
    <string name="set_complexity_low_desc">Any pattern, PIN or password</string>
    <string name="set_complexity_none_desc">No restrictions</string>
    <!-- Strings for UnlockedDeviceRequiredTest -->
    <string name="unlock_req_config_lock_screen">Secure lock screen has not been set up. Go to
        Settings -> Security to set up a lock screen.</string>
    <string name="unlock_req_config_lock_screen_and_biometrics">Secure lock screen has not been set
        up. Go to Settings -> Security to set up a lock screen and biometric unlock.</string>
    <string name="unlock_req_config_biometrics">Biometric unlock has not been set up. Go to Settings
        -> Security to set up biometric unlock.</string>
    <string name="unlock_req_biometric_lock">Lock the screen, wait 5 seconds, then unlock with
        biometrics.</string>
    <!-- This message should only be displayed briefly immediately after the user has unlocked
        the device; as soon as key access is verified this message will be updated. -->
    <string name="unlock_req_unlocked">Verifying the key is accessible after the unlock...</string>
    <string name="unlock_req_credential_lock">Lock the screen, wait 5 seconds, then unlock with
        credentials.</string>
    <string name="unlock_req_successful">Test completed successfully.</string>
    <string name="unlock_req_failed_key_available_when_locked">Test failed; the key was available
        when the device was locked.</string>
    <string name="unlock_req_failed_key_unavailable_when_unlocked">Test failed; the key was not
        available when the device was unlocked.</string>
    <!-- While this state should never be reached since all possible states are accounted for
         it is included just in case. -->
    <string name="unlock_req_unknown_state">The test is in an unexpected state; please dismiss
        this dialog and restart the test.</string>

    <!-- Notification Bubble Tests-->
    <string name="bubbles_notification_title">Bubble Notification Tests</string>
    <string name="bubbles_test_title">Bubble Tests</string>
    <string name="bubbles_test_info">This set of tests checks the settings, UI, and behaviour of
        bubble notifications. Bubbles are special notifications that can appear as a floating button
        on the screen along with a notification in the notification shade. When the floating button
        is tapped an activity is opened in a contained view and the notification is hidden from the
        shade.</string>
    <!-- Default settings -->
    <string name="bubbles_test_check_defaults_title">Check Default Settings</string>
    <string name="bubbles_test_check_defaults_verify">This step verifies the default bubble
        settings on the device. \n\n
        Bubbles are enabled at a feature level and at a per-app level.\n\n
        By default, bubbles are enabled at a feature level, but off for apps until the user opts in.
        \n\nIf the default settings are correct, the test will indicate that the state is correct.
    </string>
    <!-- Bubble button -->
    <string name="bubbles_test_bubble_button_title">Bubble Button</string>
    <string name="bubbles_test_bubble_button_verify">1. Click the button below to send a bubble
        notification.\n\n
        2. Pull down the notification shade and press the bubble button on the bottom right of the
        notification.\n\n
        3. Pass this test if tapping the bubble button opens the bubble.</string>
    <string name="bubbles_test_bubble_button_button">Send notification</string>
    <!-- Bubble preference selected -->
    <string name="bubbles_test_app_selected_title">Check Settings After Bubble Button</string>
    <string name="bubbles_test_app_selected_verify">When a notification is turned into a bubble
        via the bubble button, the app setting for bubbles will change to allow selected
        notifications to bubble. If the settings are right, the test will indicate that the state
        is correct.</string>
    <!-- Disable at feature level -->
    <string name="bubbles_test_disable_title">Disable Bubbles Feature</string>
    <string name="bubbles_test_disable_verify">Click the button to open notification settings,
        find Bubbles and turn the feature off. When the setting is off, the test will indicate that
        the state is correct.</string>
    <string name="bubbles_test_disable_button">Open settings</string>
    <!-- App settings available when disabled -->
    <string name="bubbles_test_enable_title">Enable Bubbles for CTS Verifier</string>
    <string name="bubbles_test_enable_verify">1. Click the button below and enable bubbles for the
        verifier app on the resulting screen, select "All conversations can bubble".\n\n
        2. You will be prompted to turn on bubbles for the device, turn them on.\n\n
        Once this is done, the test will indicate that the state is correct.</string>
    <string name="bubbles_test_enable_button">Open bubble settings</string>
    <!-- Send bubble -->
    <string name="bubbles_test_send_bubble_title">Send bubble notification</string>
    <string name="bubbles_test_send_bubble_verify">Click the button below and verify that there is a
        bubble on the screen and a notification in the notification shade.
    </string>
    <string name="bubbles_test_send_bubble_button">Send bubble notification</string>
    <!-- Suppress notification -->
    <string name="bubbles_test_suppress_notif_title">Hide notification</string>
    <string name="bubbles_test_suppress_notif_verify">Click the button below and verify that the
        bubble is still on the screen, but the notification is now hidden from the notification
        shade.
    </string>
    <string name="bubbles_test_suppress_notif_button">Update bubble to hide notification</string>
    <!-- Add notification -->
    <string name="bubbles_test_add_notif_title">Show notification</string>
    <string name="bubbles_test_add_notif_verify">Click the button below and verify that the bubble
        is still on the screen, the notification is now visible in the notification shade, and the
        bubble has a dot indicating the new message.
    </string>
    <string name="bubbles_test_add_notif_button">Update bubble to show notification</string>
    <!-- Remove bubble metadata -->
    <string name="bubbles_test_remove_metadata_title">Remove bubble</string>
    <string name="bubbles_test_remove_metadata_verify">Click the button below and verify that the
        bubble is removed from the screen, and the notification is still visible in the notification
        shade.</string>
    <string name="bubbles_test_remove_metadata_button">Remove bubble</string>
    <!-- Add bubble metadata -->
    <string name="bubbles_test_add_metadata_title">Add bubble</string>
    <string name="bubbles_test_add_metadata_verify">Click the button below and verify that the
        bubble appears on the screen, and the notification is still visible in the notification
        shade.</string>
    <string name="bubbles_test_add_metadata_button">Add bubble</string>
    <!-- Expand bubble -->
    <string name="bubbles_test_expand_bubble_title">Open bubble</string>
    <string name="bubbles_test_expand_bubble_verify">Tap on the bubble to open it, then tap on the
        bubble again to collapse it and return to this screen. Verify that after opening the bubble,
        there is no longer a notification for it visible in the notification shade.</string>
    <!-- Dismiss bubble -->
    <string name="bubbles_test_dismiss_title">Drag and dismiss bubble</string>
    <string name="bubbles_test_dismiss_verify">Click the button below and verify that the bubble
        is still on screen, and the notification is visible in the notification shade.\n\n
        Drag the bubble, while dragging a UI affordance should show. Verify that: \n\n
        1. Dragging and dropping the bubble on that UI affordance removes it from the screen.\n\n
        2. The notification should remain in the notification shade.</string>
    <string name="bubbles_test_dismiss_button">Update bubble to show notification</string>
    <!-- Dismiss notification -->
    <string name="bubbles_test_dismiss_notif_title">Dismiss notification</string>
    <string name="bubbles_test_dismiss_notif_verify">Click the button below and verify that a bubble
        appears on screen, and the notification is visible in the notification shade.\n\n
        Dismiss the notification from the notification shade and verify that the bubble remains on
        screen.</string>
    <string name="bubbles_test_dismiss_notif_button">Send bubble notification</string>
    <!-- Auto expand bubble -->
    <string name="bubbles_test_autoexpand_title">Auto expand bubble</string>
    <string name="bubbles_test_autoexpand_verify">Click the button below and verify that a bubble
        appears on screen, auto-expanded.</string>
    <string name="bubbles_test_autoexpand_button">Send auto-expanded bubble notification</string>
    <!--Overflow exists -->
    <string name="bubbles_test_overflow_title">Bubble overflow (empty)</string>
    <string name="bubbles_test_overflow_verify">Tap the bubble to expand it and verify there is an
        affordance to see previous bubbles. It should be empty right now and show an empty state
        message.</string>
    <!-- Bubbles appear in overflow -->
    <string name="bubbles_test_bubbles_in_overflow_title">Bubble overflow (with bubbles)</string>
    <string name="bubbles_test_bubbles_in_overflow_verify">1. Press the button below to create
        several bubbles.\n\n
        2. Expand the stack and drag down two of the bubbles to dismiss them.\n\n
        3. Tap on the bubble overflow, pass this test if the two bubbles you dismissed are in
        the overflow. </string>
    <string name="bubbles_test_bubbles_in_overflow_button">Send several bubbles</string>
    <!-- Add bubble from overflow -->
    <string name="bubbles_test_add_from_overflow_title">Add bubble from overflow</string>
    <string name="bubbles_test_add_from_overflow_verify">1. Expand the stack and open the bubble
        overflow.\n\n 2. Tap on a bubble in the overflow, pass this test if that bubble is opened
        and removed from the overflow.</string>
    <!-- Cancel removes bubbles in overflow -->
    <string name="bubbles_test_cancel_overflow_title">Cancel removes overflowed bubbles</string>
    <string name="bubbles_test_cancel_overflow_verify">1. Press the button below, it will cancel all
        previous bubble notifications and post one more.\n\n
        2. Expand that bubble, navigate to the overflow and ensure that it is empty.</string>
    <string name="bubbles_test_cancel_overflow_button">Cancel previous bubbles and post a
        single bubble</string>
    <!-- Tap on notification with bubble in the overflow -->
    <string name="bubbles_test_tap_notif_with_overflow_title">Tap on notification opens bubble
    </string>
    <string name="bubbles_test_tap_notif_with_overflow_verify">1. Press the button to create a
        bubble.\n\n
        2. Dismiss the bubble without opening it.\n\n
        3. Tap on the notification. Pass this test if the notification opened as a bubble.</string>
    <string name="bubbles_test_tap_notif_with_overflow_button">Send bubble</string>
    <!-- Portrait & landscape positioning -->
    <string name ="bubbles_test_expanded_position_title">Portrait and landscape positioning</string>
    <string name="bubbles_test_expanded_position_phone_verify">1. While in portrait orientation,
        tap on the bubble to open it.\n\n
        2. Verify that the bubbles show at the top of the screen.\n\n
        3. Rotate the device to landscape orientation.\n\n
        3. Verify that the bubbles are aligned to the left or right edge of the screen.</string>
    <string name="bubbles_test_expanded_position_largescreen_verify">
        1. Tap the bubble to open it.\n\n
        2. Verify that the bubbles are aligned to the left or right edge of the screen.\n\n
        3. Rotate the device.\n\n
        4. Verify that the bubbles are aligned to the left or right edge of the screen.</string>
    <!-- Expanded view scrim -->
    <string name="bubbles_test_expanded_scrim_title">Expanded state has scrim</string>
    <string name="bubbles_test_expanded_scrim_verify">Expand the bubble and pass this test if the
        area below the bubble is dimmed (like when a dialog is opened).</string>
    <!-- IME insets -->
    <string name="bubbles_test_ime_title">IME behavior</string>
    <string name="bubbles_test_ime_verify">1. Tap on the bubble to open it.\n\n
        2. Tap the edit text in the bubble to bring up the IME.\n\n
        3. Pass this test if the IME appears and the edit text is still visible.</string>
    <!-- Expanded view min height -->
    <string name="bubbles_test_min_height_title">Expanded view min height</string>
    <string name="bubbles_test_min_height_verify">1. Press the button below to update the bubble to
        have the smallest height.\n\n
    2. Open the bubble, it will tell you if the height is correct.</string>
    <string name="bubbles_test_min_height_button">Send small height bubble</string>
    <!-- Expanded view max height -->
    <string name="bubbles_test_max_height_title">Expanded view max height</string>
    <string name="bubbles_test_max_height_verify">1. Press the button below to update the bubble to
        have the maximum height.\n\n
        2. Open the bubble, it will tell you if the height is correct.</string>
    <string name="bubbles_test_max_height_button">Send max height bubble</string>
    <!-- Low ram -->
    <string name="bubbles_test_lowram_title">No bubbles on low memory device</string>
    <string name="bubbles_test_lowram_verify">Click the button below and verify that a
        bubble does NOT appear on screen. Verify that there is a notification in the notification
        shade.</string>
    <string name="bubbles_test_lowram_button">Add bubble</string>
    <!-- Disable bubbles by config_supportsBubble -->
    <string name="bubbles_test_disable_config_title">No bubbles on bubbles disabled device</string>
    <string name="bubbles_test_disable_config_verify">Click the button below and verify that a
        bubble does NOT appear on screen. Verify that there is a notification in the notification
        shade.</string>
    <string name="bubbles_test_disable_config_button">Add bubble</string>
    <!-- Bubbles end of test summary -->
    <string name="bubbles_test_summary_title">Test Complete</string>
    <string name="bubbles_test_summary">%1$d out of %2$d tests passed</string>
    <string name="bubble_activity_title">Bubble Activity</string>
    <string name="bubble_test_state_correct">State is correct, pass the test.</string>
    <string name="bubble_test_state_waiting">State is not correct, waiting for the correct state.
    </string>
    <string name="bubble_test_ime_hint">Tap for IME</string>
    <string name="bubble_test_expanded_view">Bubble expanded view</string>

    <!-- Toast test -->
    <string name="toast_title">Toast test (may auto pass if CtsVerifier isn\'t targeting
        S+)</string>
    <string name="toast_info">This test checks the behavior for toasts for apps targeting
        sdk S+ (31). Toasts are short messages that appear as popups for a limited amount of time.
    </string>
    <string name="toast_instructions_pre_s">No cts requirement for toasts for apps targeting
        pre-s. Auto pass this test.</string>
    <string name="toast_instructions_s">Press the button below to post a toast. Pass this
        test if a toast appears and has:\n
        \n\t1. a maximum of two lines
        \n\t2. an application icon
    </string>
    <string name="toast_post_button_label">Post toast</string>
    <string name="toast_long_text">Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Nam luctus eros ac interdum tincidunt. Vestibulum dignissim, metus nec tempor mollis,
        tortor leo aliquam est, eget rutrum mi nisi ut ligula. Quisque enim justo, tempus at
        ligula ac, porta posuere odio. Proin et tortor tincidunt, tempus ligula id,
        vestibulum mauris. Vivamus blandit tristique tempus. Integer dignissim purus eu nibh
        faucibus, eget dignissim eros gravida. Sed sit amet erat quis leo pharetra euismod vel at
        purus. Duis blandit, diam eu imperdiet pulvinar, erat odio eleifend augue, nec luctus
        lectus erat ac nibh. Nullam id enim metus.
    </string>

    <!-- Strings for Instant Apps -->
    <string name="ia_instruction_heading_label">Instructions:</string>
    <string name="ia_instruction_text_photo_label">READ BEFORE STARTING TEST</string>
    <string name="ia_start_test_button_caption">Start Test</string>
    <string name="ia_install_dialog_title">Install Instant App</string>
    <string name="ia_install_dialog_text">
    For this test you need to install CtsVerifierInstantApp.apk by running \n
    adb install -r --instant /path/to/CtsVerifierInstantApp.apk \n\n
    CtsVerifierInstantApp.apk can be found in android-cts-verifier.zip that you have downloaded.
    </string>
    <string name="ia_notification">Instant Apps Notification Test</string>
    <string name="ia_notification_info">
    This test verifies that Instant Apps notification is shown when an Instant App is at foreground.\n\n
    - Read the message above the \"Start Test\" button for
    step-by-step instructions.
    </string>
    <string name="ia_notification_instruction_label">\n
    1. Click Start Test. \n\n
    2. An alert dialog with install instruction will be shown if the sample Instant App has not been installed, otherwise, the sample Instant App will be opened automatically. \n\n
    3. Drag down the notification bar when the sample Instant App is at foreground. \n\n
    4. Check if Instant App is shown in notifciation area with the following (Please expand the notification if it is collapsed): \n
    \u0020\u0020\u0020a. It provides information about Instant Apps not requiring installation and an action that provides more information about the Instant App. \n
    \u0020\u0020\u0020b. It provides an action allowing the user to launch the associated link with web browser. \n\n
    5. Click Pass button if all checks in step 4 passed, otherwise click Fail button.
    </string>
    <string name="ia_notification_instruction_label_no_app_market_version">\n
    1. Click Start Test. \n\n
    2. An alert dialog with install instruction will be shown if the sample Instant App has not been installed, otherwise, the sample Instant App will be opened automatically. \n\n
    3. Drag down the notification bar when the sample Instant App is at foreground. \n\n
    4. Check if Instant App is shown in notification area with information about Instant Apps not requiring installation and an action that provides more information about the Instant App (Please expand the notification if it is collapsed) \n\n
    5. Click Pass button if all checks in step 4 passed, otherwise click Fail button.
    </string>
    <string name="ia_recents">Instant Apps Recents Test</string>
    <string name="ia_recents_info">
    This test verifies that Instant App can be accessed in Recent Apps screen.\n\n
    - Read the message above the \"Start Test\" button for
    step-by-step instructions.
    </string>
    <string name="ia_recents_instruction_label">\n
    1. Click Start Test. \n\n
    2. An alert dialog with install instruction will be shown if the sample Instant App has not been installed, otherwise, the sample Instant App will be opened automatically. \n\n
    3. Tap Recents button, verify the sample Instant App is shown in Recent Apps screen. \n\n
    4. Tap the sample Instant App in Recent Apps screen, verify the Instant App is opened in the foreground. \n\n
    5. Click Pass button if checks in step 3 and 4 passed, otherwise click Fail button.
    </string>
    <string name="ia_app_info">View/Delete Instant Apps Test</string>
    <string name="ia_app_info_info">
    This test verifies that Instant App can be viewed and deleted in Settings.\n\n
    - Read the message above the \"Start Test\" button for
    step-by-step instructions.
    </string>
    <string name="ia_app_info_instruction_label">\n
    1. Click Start Test. \n\n
    2. An alert dialog with install instruction will be shown if the sample Instant App has not been installed, otherwise, the sample Instant App will be opened automatically. \n\n
    3. Open Settings App. \n\n
    4. Tap Apps &amp; Notifications. \n\n
    5. Verify the sample Instant App can be found and it is shown as \"Instant App\". \n\n
    6. Verify there is an action allowing user to clear/delete app. \n\n
    7. Click Pass button if checks in step 5 and 6 passed, otherwise click Fail button.
    </string>

    <string name="uap_test_no">No</string>
    <string name="uap_test_yes">Yes</string>
    <string name="uap_test_info">Info</string>
    <string name="uap_test_question">Does this device allow for the connection of a USB audio peripheral?\nNote: phones and tablets generally do, watches and automobiles generally do not.</string>
    <string name="uap_refmic_question">Does this device allow for the connection of a USB reference microphone?</string>
    <string name="uap_test_hostmode_info_caption">USB Host Mode Audio Required</string>
    <string name="uap_test_hostmode_info_text">This test requires a USB audio peripheral be
        connected to the device.
    The DUT may not support USB Host Mode Audio, either because it does not have a
    USB port, or USB Host Mode Audio has been removed from the OS. In this case, the test can be
    passed by pressing the \"No\" button and indicating \"Test Pass\" at the bottom.
    \n\nNote: Handheld devices supporting USB host mode MUST support USB audio class (CDD 7.7 .2/H-1-1)
    \n\nNote: Devices declaring feature android.hardware.audio.pro MUST implement USB host mode (CDD 5.10 C-1-3).
    Devices that omit a 4 conductor 3.5mm audio jack MUST support USB audio class (CDD 5.10 C-3-1).
    </string>

    <string name="refmic_test_no">No</string>
    <string name="refmic_test_yes">Yes</string>
    <string name="refmic_test_info">Info</string>
    <string name="refmic_test_question">Does this device allow for the connection of a USB reference microphone?</string>
    <string name="ref_mic_dlg_caption">Reference Mic Required</string>
    <string name="ref_mic_dlg_text">This test requires a USB Reference Mic to be connected to the device.
    If the device under test does not support USB Host Mode Audio (either because it does not have a
    USB port, or USB Host Mode Audio has been removed from the OS) you can be granted a provisional
    pass on this test by pressing the \"No\" button and indicating \"Test Pass\" at the bottom.\n
    Note: Handheld devices supporting USB host mode MUST support USB audio class (CDD 7.7 .2/H-1-1)\n
    Note: Devices declaring feature android.hardware.audio.pro MUST implement USB host mode (CDD 5.10 C-1-3) and if they omit a 4 conductor 3.5mm audio jack MUST support USB audio class (CDD 5.10 C-3-1)
    </string>

    <string name="loopback_test_question">Does this device allow for the connection of a loopback audio peripheral?</string>
    <string name="loopback_dlg_caption">Loopback Peripheral Required</string>

    <string name="display_cutout_test">DisplayCutout Test</string>
    <string name="display_cutout_test_instruction">\n
    This test is to make sure that the area inside the safe insets from the DisplayCutout should be:\n
    1. Visible\n
    2. Clickable.\n
    </string>

    <!-- TTS Test Resources -->
    <string name="tts_test">TTS Test</string>
    <string name="tts_test_info">
      1. Install the CtsTtsEngineSelectorTestHelper and CtsTtsEngineSelectorTestHelper2 apps on the device.\n
      2. Click on the "Go To Accessibility Settings" button.\n
      3. Go to Text-to-speech output > Preferred engine.\n
      4. Ensure that two engines are listed, both named "TTS CTS Test Helper App".\n
      5. Ensure that each engine can be selected.
    </string>
    <string name="tts_test_steps">
      1. Install the CtsTtsEngineSelectorTestHelper and CtsTtsEngineSelectorTestHelper2 apps on the device.\n
      2. Click on the "Go To Accessibility Settings" button.\n
      3. Go to Text-to-speech output > Preferred engine.\n
      4. Ensure that two engines are listed, both named "TTS CTS Test Helper App".\n
      5. Ensure that each engine can be selected.
    </string>
    <string name="tts_accessibility_settings_button">Go To Accessibility Settings</string>

    <!-- Strings for SecurityModeFeatureVerifierActivity test -->
    <string name="security_mode_feature_verifier_test">SecurityModeFeatureVerifier Test</string>
    <string name="security_mode_feature_verifier_instructions">This test verifies that the PackageManager.FEATURE_SECURITY_MODEL_COMPATIBLE feature is present.</string>
    <string name="handheld_or_tablet_text_before_test">Is this a handheld or tablet device?</string>
    <string name="handheld_or_tablet_yes">Yes</string>
    <string name="handheld_or_tablet_not_applicable">Not applicable</string>

    <!-- AudioDescriptor Test -->
    <string name="audio_descriptor_test">Audio Descriptor Test</string>
    <string name="audio_descriptor_test_info">
        This test tests if the reported AudioDescriptor is valid and necessary.\n
        AudioDescriptor must only be used to report audio device capabilities that are not able to
        describe by Android defined enums.\n
        \nTo execute test:\n
        1. Plug in HDMI cable if HDMI is supported on the device.\n
        2. The test will execute automatically and verify the reported AudioDescriptor when the
        activity is created and when audio device connection is changed.
    </string>
    <string name="audio_descriptor_HDMI_support_label">HDMI support:</string>
    <string name="audio_descriptor_has_hdmi_support">Has HDMI support</string>
    <string name="audio_descriptor_NA">N/A</string>
    <string name="audio_descriptor_hdmi_pending">No HDMI detected. Pending&#8230;</string>
    <string name="audio_descriptor_pass">Pass</string>
    <string name="audio_descriptor_hdmi_not_reported">No HDMI device connected</string>
    <string name="audio_descriptor_standard_none">Standard is none.</string>
    <string name="audio_descriptor_is_null">Audio descriptor is null.</string>
    <string name="audio_descriptor_unrecognized_standard">Standard %1$d is unrecognized.</string>
    <string name="audio_descriptor_length_error">
        The length of short audio descriptor is %1$d, but it is expected to be 3.
    </string>
    <string name="audio_descriptor_cannot_get_hal_version">Cannot get audio HAL version</string>
    <string name="audio_descriptor_invalid_hal_version">Invalid audio HAL version %1$s</string>
    <string name="audio_descriptor_format_code_should_not_be_reported">
        Format with format code as %1$d(%2$s) should not be reported by AudioDescriptor.
        Instead, it should be reported by Android defined enums.
    </string>
    <string name="audio_descriptor_format_extended_code_should_not_be_reported">
        Format with format extended code as %1$d(%2$s) should not be reported by AudioDescriptor.
        Instead, it should be reported by Android defined enums.
    </string>
    <string name="audio_descriptor_format_extended_code_is_not_used">
        Format extended code as %1$d is not used.
    </string>
    <string name="audio_descriptor_hdmi_info_title">HDMI Support</string>
    <string name="audio_descriptor_hdmi_message">
        Please connect an HDMI peripheral to validate AudioDescriptor.
    </string>
    <string name="uwb">Uwb</string>
    <string name="presence_test">Presence Test</string>
    <string name="presence_test_info">
        The Presence tests check whether or not a device is properly calibrated for BLE, NAN and UWB based on Presence requirements.
        \nAll tests are required to pass on every device, if the radio technology is supported
    </string>
    <string name="presence_test_tv_info">
        The Presence tests check whether or not a device is properly calibrated for BLE, NAN and UWB based on Presence requirements.
        \nAll tests are required to pass on all Android T+ launched TV devices, if the radio technology is supported.
        \nIf the TV device is launched on older Android letters, all tests will be disabled. Press Pass to pass this case.
    </string>
    <string name="uwb_precision">Uwb Precision Test</string>
    <string name="uwb_short_range">Uwb Short Range Test</string>
    <string name="uwb_precision_instruction">
        1. Take 1000 measurements with DUT at 1m distance from the reference device in a non-reflective chamber.
        \n2. Sort the 1000 measurements and compute the range as 975th measurement - 25th measurement
        \n3. Report the range below - Must be within 30cm (distance) for tests to pass.
    </string>
    <string name="report_distance_range_cm">Report Range (cm)</string>
    <string name="uwb_short_range_instruction">
        1. Take 1000 measurements with DUT being 1m apart from the reference device, where ground truth distance is measured from the top edge of the DUT, held face up and tilted 45 degrees
        \n2. Sort the values.
        \n3. Report the median (500th value) (must be within 0.75m and 1.25m to pass).
        \n4. Report the reference device used.
    </string>
    <string name="report_distance_median_meters">Report Median (meters)</string>
    <string name="report_reference_device">Report Reference Device</string>
    <string name="uwb_not_supported">Uwb is not supported on device. Finishing activity. </string>
    <string name="ble">BLE</string>

    <!-- Strings for BLE RSSI Precision Test -->
    <string name="ble_rssi_precision_name">BLE RSSI Precision Test</string>
    <string name="ble_rssi_precision_test_instructions">
        1. Take 1000 scan measurements with the DUT at 1m distance from the reference device transmitting at ADVERTISE_TX_POWER_HIGH in line of sight environment
        \n2. Sort the measurements and compute the range as 975th measurement - 25th measurement
        \n3. Report the range below. Must be within 18dBm for tests to pass
        \n4. Report the reference device used
    </string>
    <string name="report_ble_rssi_range">Report RSSI Range (dBm)</string>

    <!-- Strings for BLE Rx/Tx Calibration Test -->
    <string name="ble_rx_tx_calibration_name">BLE Rx/Tx Calibration Test</string>
    <string name="ble_rx_tx_calibration_test_instructions">
        To verify this requirement, work with your chip vendor. The chip vendor can measure the
        channel flatness and identify the differences between cores and channels.
        \n1. Must include Rx/Tx corrections to reduce per-channel deviations so that the measurements on each of the 3 channels, on each of the antennas (if multiple are used), are within +/-3dBm of one another for 95% of the measurements.
        \n2. For 1000 sorted measurements, report the range as 975th measurement - 25th measurement. Must be within 6dBm to pass.
    </string>
    <string name="report_channels_ble_rssi_range">Report RSSI Range Across Channels (dBm)</string>
    <string name="report_cores_ble_rssi_range">[Optional] Report RSSI Range Across Cores (dBm)</string>

    <string name="nan_precision_instruction">
        1. Take 1000 ranging measurements at each of the ground truth points of 10cm, 1m, 3m, and 5m. The WifiNanScan app in Play Store is recommended for data collection.
        \n2. Report the bandwidth at which the data was collected. Must be either 160, 80, 40, 20 MHz.
        \n3. For each ground truth point:
        \n\t\ta. Sort the measurements, and report the range at the 68th percentile (840th measurement - 160th measurement), accurately to within:
        \n\t\t\ti. 2 meters at 160 MHz bandwidth
        \n\t\t\tii. 4 meters at 80 MHz bandwidth
        \n\t\t\tiii. 8 meters at 40 MHz bandwidth
        \n\t\t\tiv. 16 meters at 20 MHz bandwidth
        \n4. Following the same instructions above, it is strongly recommended (but not required), to report the range at the 90th percentile (950th measurement - 50th measurement) as calculated with the Cumulative Distribution Function. If the range at 90th percentile is inputted, it must be within the expected range, and inputted for all distance ranges.
        \n5. Report reference device used. All required fields must be filled before test can be passed.
    </string>
    <string name="report_nan_bandwidth_mhz">Bandwidth (MHz)</string>
    <string name="report_distance_range_10cm_gt_68p">Measurement Range at 10cm (68th percentile)</string>
    <string name="report_distance_range_1m_gt_68p">Measurement Range at 1m (68th percentile)</string>
    <string name="report_distance_range_3m_gt_68p">Measurement Range at 3m (68th percentile)</string>
    <string name="report_distance_range_5m_gt_68p">Measurement Range at 5m (68th percentile)</string>
    <string name="report_distance_range_10cm_gt_90p">Measurement Range at 10cm (90th percentile)</string>
    <string name="report_distance_range_1m_gt_90p">Measurement Range at 1m (90th percentile)</string>
    <string name="report_distance_range_3m_gt_90p">Measurement Range at 3m (90th percentile)</string>
    <string name="report_distance_range_5m_gt_90p">Measurement Range at 5m (90th percentile)</string>
    <string name="nan_precision">Nan Precision Test</string>
    <string name="wifi_nan">WiFi NAN</string>
</resources>
