<html devsite>
  <head>
    <title>Using CTS Verifier</title>
    <meta name="project_path" value="/_project.yaml" />
    <meta name="book_path" value="/_book.yaml" />
  </head>
  <body>
  <!--
      Copyright 2017 The Android Open Source Project

      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
      You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
  -->



<p>The Android Compatibility Test Suite Verifier (CTS Verifier) is a supplement to
  the Compatibility Test Suite (CTS). While CTS checks those APIs and functions
  that can be automated, CTS Verifier provides tests for those APIs and functions
  that cannot be tested on a stationary device without manual input, like audio
  quality, touchscreen, accelerometer, camera, etc.</p>
<h2 id=test_preparation>Test preparation</h2>
<p>The device must have verified Android API compatibility by successfully passing
  the Compatibility Test Suite.</p>
<h3 id=hardware_requirements>Hardware requirements</h3>
<ul>
  <li> A Linux computer with USB 2.0 compatible port
  <li> A second Android device with a known compatible Bluetooth, Wi-Fi direct, and
    NFC Host Card Emulation (HCE) implementation
</ul>
<h3 id=setup>Setup</h3>
<ul>
  <li>Install the <a href="http://developer.android.com/sdk/index.html">Android
SDK</a> on the Linux computer <li>Download the appropriate <a
href="downloads.html">CTS Verifier.apk</a> for the
version of Android under test.
  <li>Install CTS Verifier.apk to the <em>Device Under Test</em> (DUT).
    <pre class="devsite-terminal devsite-click-to-copy">adb install -r -g CtsVerifier.apk</pre>
  <li>Ensure that the device has its system data and time set correctly.
</ul>
<h2 id=cts_test_procedure>CTS Verifier test procedure</h2>
<ol>
  <li>After the CTS Verifier.apk has been installed, launch the CTS Verifier
    application:

<img src="/compatibility/cts/images/cts-verifier-icon.png" alt="CTS Verifier icon in launcher" id="figure1" />
<p class="img-caption">
  <strong>Figure 1.</strong> CTS Verifier icon
</p>

  <li>Once opened, the CTS Verifier displays a list of all test sets available for
    manual verification:

<img src="/compatibility/cts/images/cts-verifier-menu.png" alt="CTS Verifier menu of tests" id="figure2" />
<p class="img-caption">
  <strong>Figure 2.</strong> CTS Verifier menu of tests
</p>

  <li>Each test contains a set of common elements (in some tests, Pass/Fail is
    determined automatically):
    <ul>
      <li><em>Info</em>—a set of instructions to run the test. This will appear as a popup the first
        time each test is opened or whenever the <strong>Info</strong> button (？) is pressed.
      <li><em>Pass</em>—If the DUT meets the test requirements per the instructions from Info, press
        the <strong>Pass</strong> button (✓).
      <li><em>Fail</em>—If the DUT does not meet the test requirements per the instructions from Info,
        press the <strong>Fail</strong> button (！).
    </ul>

<img src="/compatibility/cts/images/video-verifier.png" alt="Streaming video quality verifier" id="figure3" />
<p class="img-caption">
  <strong>Figure 3.</strong> Video quality verifier
</p>

</ol>

<h2 id=specific_test_requirements>Specific test requirements</h2>
<h3 id=usb_accessory>USB Accessory</h3>
<p>In order to run the USB Accessory test, you need a Linux computer to run the
  USB desktop machine (host) program.</p>
<ol>
  <li>Connect the DUT to a computer.
  <li>Execute the cts-usb-accessory program on the computer found in the CTS Verifier
    package.
    <pre class="devsite-terminal devsite-click-to-copy">./cts-usb-accessory</pre>
  <li>A popup message will appear on the DUT. Select <strong>OK</strong> and go into the USB Accessory Test in the CTS Verifier application.
<br>
<img src="/compatibility/cts/images/screen-lock-test.png" alt="CTS Verifier screen lock test" id="figure4" />
<p class="img-caption">
  <strong>Figure 4.</strong> Screen lock test
</p>

  <li>Output similar to below will appear on the computer’s console. 
</ol>
<pre class="devsite-click-to-copy">
CTS USB Accessory Tester
Found possible Android device (413c:2106) - attempting to switch to accessory
mode...
Failed to read protocol version
Found Android device in accessory mode (18d1:2d01)...
[RECV] Message from Android device #0
[SENT] Message from Android accessory #0
[RECV] Message from Android device #1
[SENT] Message from Android accessory #1
[RECV] Message from Android device #2
[SENT] Message from Android accessory #2
[RECV] Message from Android device #3
[SENT] Message from Android accessory #3
[RECV] Message from Android device #4
[SENT] Message from Android accessory #4
[RECV] Message from Android device #5
[SENT] Message from Android accessory #5
[RECV] Message from Android device #6
[SENT] Message from Android accessory #6
[RECV] Message from Android device #7
[SENT] Message from Android accessory #7
[RECV] Message from Android device #8
[SENT] Message from Android accessory #8
[RECV] Message from Android device #9
[SENT] Message from Android accessory #9
[RECV] Message from Android device #10
[SENT] Message from Android accessory #10
</pre>
<h3 id=camera_field_of_view_calibration>Camera field of view calibration</h3>
<p>This field of view calibration procedure is designed to be a quick way to
  determine the device field of view with moderate accuracy.
<p><strong>Setup</strong> - Print the <a
href="/compatibility/calibration-pattern.pdf">calibration-pattern.pdf</a>
target file and mount it on a rigid backing. Print on 11” x 17” or A3. Orient
the camera device and the printed target as shown in the diagram below:</p>

<img src="/compatibility/cts/images/camera-printed-target.png" alt="Camera printed target" id="figure5" />
<p class="img-caption">
  <strong>Figure 5.</strong> Camera printed target
</p>

<p><strong>Setting the target width</strong> - Measure the distance between the
solid lines on the target pattern in centimeters to account for printing
inaccuracies (~38 cm).</p>
<ol>
  <li>Start the calibration application.
  <li>Press the setup button and select “Marker distance” to enter the distance.
  <li>Measure and enter the distance to the target pattern (~100 cm).
  <li>Press the back button to return to the calibration preview.
</ol>
<p><strong>Calibration process</strong> - Verify that the device and target are
placed as shown in the figure and the correct distances have been entered into
the setup dialog.The preview will display the image with a vertical line
overlaid onto it. This line should align with the center line of the target
pattern. The transparent grid can be used with the other vertical lines to
ensure that the optical axis is orthogonal to the target.</p>
<ol>
  <li>Select an image resolution to test from the selector at the bottom left.
  <li>Tap the screen to take a photo and enter the calibration mode (described
    below).
  <li>Hit the back button and repeat for all supported image resolutions.
</ol>
<p><strong>Calibration test (per resolution)</strong> In the calibration mode, the photo will be displayed with two vertical lines
  overlaid onto the image.These lines should align with the vertical lines on the target pattern within a
  few pixels. If they do not, then the reported field of view for that mode is
  inaccurate (assuming the setup is correct).Adjust the slider at the bottom of the screen until the overlay aligns with the
  target pattern as closely as possible. The displayed field of view will be a
  close approximation to the correct value when the overlay and the target
  pattern image are aligned. The reported field of view should be within +/-1
  degree of the calibration value.</p>
<h2 id=exporting_test_reports>Exporting test reports</h2>
<ol>
  <li>
    After all tests are completed, tap the <strong>Save (disk)</strong> icon.
    <br>
    <img src="/compatibility/cts/images/verifier-save-icon.png" alt="CTS Verifier Save icon" id="figure6" />
    <p class="img-caption">
      <strong>Figure 6.</strong> CTS Verifier Save icon. <em>Note:</em> In
      Android 7.0 and later, the preview feature is removed:
      <img src="/compatibility/cts/images/verifier-preview-icon.png" width="24" height="24">
    </p>
  </li>
  <li>
    A path to the saved report will be displayed in pop-up (e.g.
    <code>/sdcard/verifierReports/ctsVerifierReport-date-time.zip</code>).
    Record the path.
    <br>
    <img src="images/path-saved-report.png" alt="CTS Verifier path to saved report " id="figure7" />
    <p class="img-caption">
      <strong>Figure 7.</strong> CTS Verifier path to saved report
    </p>
  </li>
  <li>
    Connect the device via USB to a computer with the SDK installed.
  </li>
  <li>
    From the computer’s SDK installation, run
    <code>adb pull CTSVerifierReportPath</code> to download the report from the device.
    <ul>
      <li>
        To download all reports run:
        <pre class="devsite-terminal devsite-click-to-copy">adb pull /sdcard/verifierReports</pre>
        For Android 6.0 and earlier, run:
        <pre class="devsite-terminal devsite-click-to-copy">adb pull /mnt/sdcard/ctsVerifierReports/</pre>
      </li>
      <li>
        The name of the reports are time-stamped based on the DUT’s system time.
      </li>
      <li>
        To clear results after they have been selected, select
        <strong>Menu > Clear</strong>. This will clear the Pass/Fail results.
      </li>
    </ul>
  </li>
</ol>

  </body>
</html>
