Docs: Changes to source.android.com

  - 159519221 Add CTS Media 1.3 file link by claym <[email protected]>
  - 159296442 Changed devsite tag classes on a couple pages. by cqn <[email protected]>
  - 159296357 Add devsite class to tags in devices/tech/power by cqn <[email protected]>
  - 159296314 Added devsite class to tags in compatibility/cts. by cqn <[email protected]>
  - 159296265 Added devsite class to tags in devices/tech/ota. by cqn <[email protected]>
  - 159273197 Added devsite class to tags for devices/tech/test_infra/t... by cqn <[email protected]>
  - 159269559 Add speed-profile and verify-profile to the list of options by claym <[email protected]>
  - 159268556 Add devsite class to tags in devices/tech/display by cqn <[email protected]>
  - 159247742 Add devsite class to tags in devices/tech/admin by cqn <[email protected]>
  - 159246177 Finished adding devsite class to tags on devices/tech/debug by cqn <[email protected]>
  - 159245597 Add devsite tag to classes in devices/tech/debug by cqn <[email protected]>
  - 159128910 Changed breaks to paragraph tags for formatting, and adde... by cqn <[email protected]>
  - 159115811 Add devsite class to tags for devices/tech/config by cqn <[email protected]>
  - 159115392 Added devsite class to tags on devices/tech/connect and d... by cqn <[email protected]>
  - 159114997 Add devsite class to tags in devices/storage and devices/tv by cqn <[email protected]>
  - 158948331 Provide advice to OEM and carrier app developers to reduc... by Android Partner Docs <[email protected]>
  - 158920824 Add devsite class to tags in devices/tech/dalvik by cqn <[email protected]>
  - 158917965 Fix links to sensors.h reference file by claym <[email protected]>
  - 158916603 Docs: moving gdb to own page, updating index by hvm <[email protected]>
  - 158915436 Update Security acknowledgement with new researcher info by daroberts <[email protected]>
  - 158883841 Finish adding devsite class to tags in devices/audio by cqn <[email protected]>
  - 158883680 Add devsite class to tags in devices/sensors and devices/... by cqn <[email protected]>
  - 158871012 Improve Jack deprecation warning message. by gdimino <[email protected]>
  - 158867373 Add devsite classes to tags for devices/graphics by cqn <[email protected]>
  - 158867298 Added devsite classes to tags in devices/input by cqn <[email protected]>
  - 158867192 Add devsite classes to tags in devices/camera and devices... by cqn <[email protected]>

PiperOrigin-RevId: 159519221
Change-Id: I924de0c1668bcbcc94ee97e60c144aac4c81708d
diff --git a/OWNERS b/OWNERS
deleted file mode 100644
index bb3433d..0000000
--- a/OWNERS
+++ /dev/null
@@ -1,6 +0,0 @@
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
diff --git a/en/compatibility/cts/camera-hal.html b/en/compatibility/cts/camera-hal.html
index 1c63ab7..0b42a34 100644
--- a/en/compatibility/cts/camera-hal.html
+++ b/en/compatibility/cts/camera-hal.html
@@ -102,10 +102,10 @@
 
 <p>To set up these tests:</p>
 
-<pre>
-$ cd hardware/libhardware/tests/camera*/
-$ mm
-$ adb remount; adb sync
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd hardware/libhardware/tests/camera*/</code>
+<code class="devsite-terminal">mm</code>
+<code class="devsite-terminal">adb remount; adb sync</code>
 </pre>
 
 <h3 id=hal_3_x_tests>[  ] 3.1. HAL 3.x tests</h3>
@@ -115,8 +115,8 @@
 
 <p>To run all tests:</p>
 
-<pre>
-$ adb shell /data/nativetest/camera3_test/camera3_test
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell /data/nativetest/camera3_test/camera3_test
 </pre>
 
 <p>You receive an <strong>OK</strong> for each passed test. Errors are logged
@@ -129,24 +129,22 @@
 
 <p>To run all tests:</p>
 
-<pre>
-$ adb shell /data/nativetest/camera3_test/camera3_test
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell /data/nativetest/camera3_test/camera3_test
 </pre>
 
 <p>To run a single test, pass the <code>--gtest_filter</code> argument and the
 test name, like so:</p>
 
-<pre>
-$ adb shell /data/nativetest/camera2_test/camera2_test \
---gtest_filter=Camera2Test.OpenClose
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell /data/nativetest/camera2_test/camera2_test --gtest_filter=Camera2Test.OpenClose
 </pre>
 
 <p>To run a subset of tests, use a wildcard with the
 <code>--gtest_filter</code> argument, like so:</p>
 
-<pre>
-$ adb shell /data/nativetest/camera2_test/camera2_test \
---gtest_filter=Camera2Test.*
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell /data/nativetest/camera2_test/camera2_test --gtest_filter=Camera2Test.*
 </pre>
 
 <h3 id=3_tests_that_interact_with_the_camera_service>[  ] 3.3. Tests that
@@ -213,11 +211,11 @@
 instructions on how to set up and run the tests. For setup: <code>make
 cts</code></p>
 
-<pre>
-$ extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
-$ cd android-cts-verifier
-$ adb install -r CtsVerifier.apk
-$ cd CameraITS
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip</code>
+<code class="devsite-terminal">cd android-cts-verifier</code>
+<code class="devsite-terminal">adb install -r CtsVerifier.apk</code>
+<code class="devsite-terminal">cd CameraITS</code>
 </pre>
 
 <p>See <code>tutorial.py</code> in the <code>tests</code> subdirectory for a
@@ -338,9 +336,9 @@
 
 <p>To set up these tests:</p>
 
-<pre>
-$ make mediaframeworktest
-$ adb install out/target/product/<em>&lt;name></em>/data/app/mediaframeworktest.apk
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">make mediaframeworktest</code>
+<code class="devsite-terminal">adb install out/target/product/<em>&lt;name></em>/data/app/mediaframeworktest.apk</code>
 </pre>
 
 <p>Where the <em><code><name></code></em> variable represents the directory
@@ -348,7 +346,7 @@
 
 <p>Find all of the tests in the following directory or its subdirectories:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
 </pre>
 
@@ -367,13 +365,13 @@
 
 <p>To see all of the available tests::</p>
 
-<pre>
-$ adb shell pm list instrumentation
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell pm list instrumentation
 </pre>
 
 <p>This will yield results resembling:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
 (target=com.android.mediaframeworktest)
 instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner
@@ -392,7 +390,7 @@
 
 <p>For instance:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
 com.android.mediaframeworktest/.MediaRecorderStressTestRunner
 com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
@@ -401,15 +399,14 @@
 
 <p>You may then pass each component to <code>adb shell am instrument</code> like so:</p>
 
-<pre>
-$ adb shell am instrument -w &lt;component.name&gt;
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell am instrument -w &lt;component.name&gt;
 </pre>
 
 <p>Where the &lt;component.name&gt; equals the extracted value above. For example:</p>
 
-<pre>
-$ adb shell am instrument -w \
-com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
 </pre>
 
 <p>Please note, while the class path is the Java package + class name, the
@@ -420,19 +417,15 @@
 <p>To run a single class of tests, pass the -e class <test-class> argument, like
 so:</p>
 
-<pre>
-$ adb shell am instrument -e class \
-com.android.mediaframeworktest.integration.CameraBinderTest -w \
-com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
 </pre>
 
 <p>To run only a single method in a test class, append a pound (#) sign and the
 method name (in this case, <code>testConnectPro</code>) to the class name, like so:</p>
 
-<pre>
-$ adb shell am instrument -e class \
-'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w
-\ com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
 </pre>
 
 <h3 id=media_settings_functional_tests>[  ] 7.2. Media settings functional tests</h3>
@@ -442,10 +435,8 @@
 exposure, WB, scene, picture size and geoTag)</p>
 
 <p>Run the test command:</p>
-<pre>
-$ adb shell am instrument -w -r  -e delay_msec 15 -e log true -e class \
-com.android.mediaframeworktest.functional.camera.CameraPairwiseTest \
-com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell am instrument -w -r  -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
 </pre>
 
 <h3 id=media_integration_tests>[  ] 7.3. Media integration tests</h3>
@@ -454,13 +445,13 @@
 mediaframeworktest/integration/CameraBinderTest.java and
 mediaframeworktest/CameraStressTestRunner.java:</p>
 
-<pre>
-$ adb  shell am instrument -e class \ 'com.android.mediaframeworktest.<strong>integration</strong>.<strong>CameraBinderTest'</strong> -w \ 'com.android.mediaframeworktest/.<strong>CameraStressTestRunner'</strong>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb  shell am instrument -e class \ 'com.android.mediaframeworktest.<strong>integration</strong>.<strong>CameraBinderTest'</strong> -w \ 'com.android.mediaframeworktest/.<strong>CameraStressTestRunner'</strong>
 </pre>
 
 <p>If successful, this results in output resembling:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 -----
 
 com.android.mediaframeworktest.integration.CameraBinderTest:...........
@@ -480,10 +471,8 @@
 fail If the difference is greater than 150kM.</p>
 
 <p>Run the test command:</p>
-<pre>
-$ adb shell am instrument -w -r  -e class \
-com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage
-\ com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell am instrument -w -r  -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
 </pre>
 
 <p>More detailed output can be found in:
@@ -494,10 +483,8 @@
 <p>The commands to run unit tests are all similar. For example, for
 CameraMetadataTest.java, the command would be:</p>
 
-<pre>
-$ adb  shell am instrument -e class \
-'com.android.mediaframeworktest.unit.CameraMetadataTest' -w \
-'com.android.mediaframeworktest/.CameraStressTestRunner'
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
 </pre>
 
 <h3 id=media_stress_tests>[  ] 7.6. Media stress tests</h3>
@@ -506,9 +493,8 @@
 
 <p>Run the test command:</p>
 
-<pre>
-$ adb shell am instrument -w
-com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
 </pre>
 
 <p>All tests should pass.</p>
diff --git a/en/compatibility/cts/camera-its-box.html b/en/compatibility/cts/camera-its-box.html
index b88b0b7..ac99753 100644
--- a/en/compatibility/cts/camera-its-box.html
+++ b/en/compatibility/cts/camera-its-box.html
@@ -110,7 +110,9 @@
 <li>Position the tablet face-up on a table (do not attach the tablet to the back
 panel of the box)</li>
 <li>Run the following command:
-<pre>$ python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+python tools/run_all_tests.py device=$device_id camera=0 chart=$chart_id scenes=2,3
+</pre>
 Scenes 2 and 3 require the tablet to display an image, so the tablet prompts you
 to "Allow Drive to access photos, media, and files on your device?". Clear this
 prompt (and prevent future prompts) by pressing <strong>Allow</strong>.</li>
@@ -135,25 +137,31 @@
 <ul>
 <li>One (1) Pixel NOF26W for the back camera(0) testing, S/N: FA6BM0305016. To
 install the CTS Verifier app, unzip android-cts-verifier.zip then run
-<pre>$ adb -s FA6BM0305016 install -r android-cts-verifier/CtsVerifier.apk</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb -s FA6BM0305016 install -r android-cts-verifier/CtsVerifier.apk
+</pre></li>
 <li>One (1) Pixel NOF26W for the front camera(1) testing, S/N: FA6BM0305439. To
 install the CTS Verifier app, unzip android-cts-verifier.zip then run
-<pre>$ adb -s FA6BM0305439 install -r android-cts-verifier/CtsVerifier.apk</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb -s FA6BM0305439 install -r android-cts-verifier/CtsVerifier.apk
+</pre>
+</li>
 </ul>
 </li></ul>
 
 <h3 id=scenes-0-4>Running scenes 0-4</h3>
 <p>To run scenes 0-4 on the front and back camera in parallel:</p>
-<pre>$ cd android-cts-verifier/CameraITS
-$ . build/envsetup.sh
-$ python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd android-cts-verifier/CameraITS</code>
+<code class="devsite-terminal">. build/envsetup.sh</code>
+<code class="devsite-terminal">python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011</code>
 </pre>
 
 <p>Examples:</p>
 <table>
 <tr>
-<td ><img src=images/camera_its_cam0.png align="center"></td>
-<td align="center"><img src=images/camera_its_cam0.png></td>
+<td ><img src=/compatibility/cts/images/camera_its_cam0.png align="center"></td>
+<td align="center"><img src=/compatibility/cts/images/camera_its_cam0.png></td>
 </tr>
 <tr>
 <td align="center"><p class=caption><strong>Figure 1</strong>. Camera 0 S/N:
@@ -169,9 +177,15 @@
 <p>You can retry scenes for both front and back cameras or a single camera:
 <ul>
 <li>To retry scenes on front and back cameras in parallel:
-<pre>$ python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011 scenes=3,4</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011 scenes=3,4
+</pre>
+</li>
 <li>To retry scenes on a single camera:
-<pre>$ python tools/run_all_tests.py device=FA6BM0305016 chart=5811000011 camera=1 scenes=3,4</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+python tools/run_all_tests.py device=FA6BM0305016 chart=5811000011 camera=1 scenes=3,4
+</pre>
+</li>
 </ul>
 
 <h3 id=scenes-0-4>Running scene 5</h3>
@@ -180,12 +194,15 @@
 (outside of the box) to test two devices in parallel.</p>
 <ul>
 <li>To run Scene 5 on front and back cameras on two devices in parallel:
-<pre>$ python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011 scenes=5</pre>
-<br><img src=images/camera_its_scene5.png width="50%"><br>
+<pre class="devsite-terminal devsite-click-to-copy">
+python tools/run_parallel_tests.py device0=FA6BM0305016 device1=FA6BM0305439 chart=5811000011 scenes=5
+</pre>
+<br><img src=/compatibility/cts/images/camera_its_scene5.png width="50%"><br>
 <strong>Figure 3</strong>. Camera scene 5.</li>
 <li>To run Scene 5 for front and back cameras on a single device:
-<pre>$ python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=5
-$ python tools/run_all_tests.py device=FA6BM0305016 camera=1 scenes=5
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">python tools/run_all_tests.py device=FA6BM0305016 camera=0 scenes=5</code>
+<code class="devsite-terminal">python tools/run_all_tests.py device=FA6BM0305016 camera=1 scenes=5</code>
 </pre></li>
 </ul>
 
@@ -199,21 +216,27 @@
 Device Monitor or <code>adb logcat</code> to verify progress and/or view
 screenshots.<br>
 <br>Example adb command:
-<pre>$ adb -s FA6BM0305016 logcat -v time</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb -s FA6BM0305016 logcat -v time
+</pre>
 Example screenshots command:
-<pre>$ adb -s FA6BM0305016 shell screencap -p /sdcard/screencap.png
-$ adb -s FA6BM0305016 pull /sdcard/screencap.png
-$ display ./screencap.png
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb -s FA6BM0305016 shell screencap -p /sdcard/screencap.png</code>
+<code class="devsite-terminal">adb -s FA6BM0305016 pull /sdcard/screencap.png</code>
+<code class="devsite-terminal">display ./screencap.png</code>
 </pre></li>
 <li><strong>View results</strong>. To save Camera ITS results as a report:
 <ol>
 <li>Press <strong>Pass</strong> and save the report:
-<br><img src=images/camera_its_results.png width="50%"><br>
+<br><img src=/compatibility/cts/images/camera_its_results.png width="50%"><br>
 <strong>Figure 4</strong>. Camera ITS report.</li>
 <li>Pull reports from the device:
-<pre>$ adb -s FA6BM0305016 pull /sdcard/verifierReports</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb -s FA6BM0305016 pull /sdcard/verifierReports
+</pre>
+</li>
 <li>Unzip the report file and view the test_result.xml.
-<br><img src=images/camera_its_reports.png><br>
+<br><img src=/compatibility/cts/images/camera_its_reports.png><br>
 <strong>Figure 5</strong>. Camera ITS reports.<br></li>
 </ol>
 </li>
diff --git a/en/compatibility/cts/development.html b/en/compatibility/cts/development.html
index 6e44d27..ae4c6e7 100644
--- a/en/compatibility/cts/development.html
+++ b/en/compatibility/cts/development.html
@@ -37,14 +37,16 @@
 <p class="note"><strong>Note:</strong> You may supply one of these other values
 for <code>TARGET_PRODUCT</code> to build for different architectures:
 <code>aosp_x86_64</code> or <code>aosp_mips</code></p>
-<pre><code>cd <em>/path/to/android/root</em>
-make cts -j32 TARGET_PRODUCT=aosp_arm64
-cts-tradefed
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd <em>/path/to/android/root</em></code>
+<code class="devsite-terminal">make cts -j32 TARGET_PRODUCT=aosp_arm64</code>
+<code class="devsite-terminal">cts-tradefed</code>
 </code></pre>
 
 <p>At the cts-tf console, enter e.g.:</p>
-<pre><code>run cts --plan CTS
-</code></pre>
+<pre class="devsite-click-to-copy">
+tf&gt; run cts --plan CTS
+</pre>
 
 <h2 id="writing-cts-tests">Writing CTS tests</h2>
 
@@ -106,7 +108,7 @@
 <p>
 The directory structure in CTS v1 tests looks like this:
 </p>
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 cts/
   tests/
     tests/
@@ -120,7 +122,7 @@
               cts/
                 SampleDeviceTest.java
 </pre>
-<h4 id="cts-v2"><strong>CTS v2</strong></h4>
+<h4 id="cts-v2">CTS v2</h4>
 <p>
 For Android 7.0 and later, use CTS v2.  For details, see <a
 href="https://android.googlesource.com/platform/cts/+/master/tests/sample/">the
@@ -130,7 +132,7 @@
 The CTS v2 directory structure looks like this:
 </p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 cts/
   tests/
     <em>module-name</em>/
@@ -169,7 +171,7 @@
 
 <ol>
   <li>Run this command to create the test directory and copy sample files to it:
-    <pre class="no-pretty-print">$ mkdir cts/tests/<i>module-name</i> && cp -r cts/tests/sample/* cts/tests/<i>module-name</i></pre>
+    <pre class="devsite-terminal devsite-click-to-copy">mkdir cts/tests/<i>module-name</i> && cp -r cts/tests/sample/* cts/tests/<i>module-name</i></pre>
   <li>Navigate to <code>cts/tests/<em>module-name</em></code> and substitute all instances of
 "[Ss]ample" following the recommended naming convention from above.
   <li>Update <code>SampleDeviceActivity</code> to exercise the feature you're testing.
@@ -177,7 +179,7 @@
 errors.</li>
 </ol>
 
-<h4><strong>Additional directories</strong></h4>
+<h4>Additional directories</h4>
 
 <p> Other Android directories such as <code>assets</code>, <code>jni</code>,
 <code>libs</code> and <code>res</code> can also be added. To add JNI code,
@@ -187,7 +189,7 @@
 <p>
 The makefile typically contains the following settings:
 </p>
-<pre>
+<pre class="devsite-click-to-copy">
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 LOCAL_MODULE := libCtsSample_jni
@@ -210,7 +212,7 @@
 need to be modified to build the native code and depend on it, as shown
 below:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 # All tests should include android.test.runner.
 LOCAL_JAVA_LIBRARIES := android.test.runner
 
diff --git a/en/compatibility/cts/downloads.html b/en/compatibility/cts/downloads.html
index 32186e7..c71ccb7 100644
--- a/en/compatibility/cts/downloads.html
+++ b/en/compatibility/cts/downloads.html
@@ -180,7 +180,7 @@
 </ul>
 <h2 id="android-23">Android 2.3</h2>
 <p>Android 2.3 is the release of the development milestone code-named
-Gingerbread. Source code for Android 2.3 is found in the 'gingerbread' branch in 
+Gingerbread. Source code for Android 2.3 is found in the 'gingerbread' branch in
 the open source tree.</p>
 <ul>
 <li><a href="https://dl.google.com/dl/android/cts/android-cts-2.3_r13-linux_x86-arm.zip">Android 2.3 R13 Compatibility Test Suite (CTS)</a></li>
@@ -211,6 +211,7 @@
 <h2 id="cts-media-files">CTS Media Files</h2>
 <p>These media files are required for the CTS media stress tests.</p>
 <ul>
+<li><a href="https://dl.google.com/dl/android/cts/android-cts-media-1.3.zip">CTS Media 1.3</a></li>
 <li><a href="https://dl.google.com/dl/android/cts/android-cts-media-1.2.zip">CTS Media 1.2</a></li>
 <li><a href="https://dl.google.com/dl/android/cts/android-cts-media-1.1.zip">CTS Media 1.1</a></li>
 <li><a href="https://dl.google.com/dl/android/cts/android-cts-media-1.0.zip">CTS Media 1.0</a></li>
diff --git a/en/compatibility/cts/interpret.html b/en/compatibility/cts/interpret.html
index 42ec941..75ada59 100644
--- a/en/compatibility/cts/interpret.html
+++ b/en/compatibility/cts/interpret.html
@@ -24,7 +24,7 @@
 
 
 <p>The CTS test results are placed in the file:</p>
-<pre>
+<pre class="devsite-click-to-copy">
 $CTS_ROOT/android-cts/repository/results/&lt;start_time&gt;.zip
 </pre>
 
@@ -73,14 +73,14 @@
 
   <section class="expandable">
     <h4 class="showalways">Show CTS v1 sample test summary</h4>
-    <img src="images/cts-test-summary.png" alt="CTS v1 test summary" id="figure1a" />
+    <img src="/compatibility/cts/images/cts-test-summary.png" alt="CTS v1 test summary" id="figure1a" />
     <p class="img-caption"><strong>Figure 1a.</strong> CTS v1 sample test summary </p>
   </section>
 
 
   <section class="expandable">
     <h4 class="showalways">Show CTS v2 sample test summary</h4>
-    <img src="images/cts-v2-test-summary.png" alt="CTS v2 test summary" id="figure1b" />
+    <img src="/compatibility/cts/images/cts-v2-test-summary.png" alt="CTS v2 test summary" id="figure1b" />
     <p class="img-caption"><strong>Figure 1b.</strong> CTS v2 sample test summary </p>
   </section>
 
@@ -104,13 +104,13 @@
 
   <section class="expandable">
     <h4 class="showalways">Show CTS v1 sample test report</h4>
-    <img src="images/cts-test-report.png" alt="CTS v1 test report" id="figure2a" />
+    <img src="/compatibility/cts/images/cts-test-report.png" alt="CTS v1 test report" id="figure2a" />
     <p class="img-caption"><strong>Figure 2a.</strong> CTS v1 sample test report</p>
   </section>
 
   <section class="expandable">
     <h4 class="showalways">Show CTS v2 sample test report</h4>
-    <img src="images/cts-v2-test-report.png" alt="CTS v2 test report" id="figure2b" />
+    <img src="/compatibility/cts/images/cts-v2-test-report.png" alt="CTS v2 test report" id="figure2b" />
     <p class="img-caption"><strong>Figure 2b.</strong> CTS v2 sample test report</p>
   </section>
 
diff --git a/en/compatibility/cts/setup.html b/en/compatibility/cts/setup.html
index e22f2fd..65bd848 100644
--- a/en/compatibility/cts/setup.html
+++ b/en/compatibility/cts/setup.html
@@ -68,8 +68,8 @@
 following command assumes you've opened the package archive in your home
 directory:</p>
 <hr>
-<pre>
-$ export PATH=$PATH:$HOME/android-sdk-linux/build-tools/&lt;version&gt;
+<pre class="devsite-terminal devsite-click-to-copy">
+export PATH=$PATH:$HOME/android-sdk-linux/build-tools/&lt;version&gt;
 </pre>
 
 <p class="note"><strong>Note:</strong> Please ensure your starting path and
@@ -132,7 +132,7 @@
 <p>OEMs can add <code>PRODUCT_PROPERTY_OVERRIDES</code> into their device.mk file to set
 this property, as shown in the following example: </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 #ro.product.first_api_level indicates the first api level, device has been commercially launched on.
 PRODUCT_PROPERTY_OVERRIDES +=\
 ro.product.first_api_level=21
diff --git a/en/compatibility/cts/verifier.html b/en/compatibility/cts/verifier.html
index ace9475..212b2bf 100644
--- a/en/compatibility/cts/verifier.html
+++ b/en/compatibility/cts/verifier.html
@@ -43,8 +43,8 @@
 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). <br>
-    <code>adb install -r -g CtsVerifier.apk</code>
+  <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>
@@ -52,7 +52,7 @@
   <li>After the CTS Verifier.apk has been installed, launch the CTS Verifier
     application:
 
-<img src="images/cts-verifier-icon.png" alt="CTS Verifier icon in launcher" id="figure1" />
+<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>
@@ -60,7 +60,7 @@
   <li>Once opened, the CTS Verifier displays a list of all test sets available for
     manual verification:
 
-<img src="images/cts-verifier-menu.png" alt="CTS Verifier menu of tests" id="figure2" />
+<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>
@@ -76,7 +76,7 @@
         press the <strong>Fail</strong> button (!).
     </ul>
 
-<img src="images/video-verifier.png" alt="Streaming video quality verifier" id="figure3" />
+<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>
@@ -91,17 +91,17 @@
   <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="images/screen-lock-test.png" alt="CTS Verifier screen lock test" id="figure4" />
+<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>
-out/host/linux-x86/cts-verifier/android-cts-verifier$ <strong>./cts-usb-accessory</strong>
+<pre class="devsite-click-to-copy">
 CTS USB Accessory Tester
 Found possible Android device (413c:2106) - attempting to switch to accessory
 mode...
@@ -138,7 +138,7 @@
 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="images/camera-printed-target.png" alt="Camera printed target" id="figure5" />
+<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>
@@ -177,11 +177,11 @@
   <li>
     After all tests are completed, tap the <strong>Save (disk)</strong> icon.
     <br>
-    <img src="images/verifier-save-icon.png" alt="CTS Verifier Save icon" id="figure6" />
+    <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="images/verifier-preview-icon.png" width="24" height="24">
+      <img src="/compatibility/cts/images/verifier-preview-icon.png" width="24" height="24">
     </p>
   </li>
   <li>
@@ -202,9 +202,10 @@
     <code>adb pull CTSVerifierReportPath</code> to download the report from the device.
     <ul>
       <li>
-        To download all reports run: <code>adb pull /sdcard/verifierReports</code>
-        <br/>
-        For Android 6.0 and earlier, run: <code>adb pull /mnt/sdcard/ctsVerifierReports/</code>
+        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.
diff --git a/en/devices/_toc-tech.yaml b/en/devices/_toc-tech.yaml
index 13534b2..fda6c38 100644
--- a/en/devices/_toc-tech.yaml
+++ b/en/devices/_toc-tech.yaml
@@ -101,6 +101,8 @@
     path: /devices/tech/debug/asan
   - title: Dumpsys
     path: /devices/tech/debug/dumpsys
+  - title: Using GDB
+    path: /devices/tech/debug/gdb
   - title: Native Memory Use
     path: /devices/tech/debug/native-memory
   - title: Network Use
diff --git a/en/devices/audio/attributes.html b/en/devices/audio/attributes.html
index b685e8b..61825c0 100644
--- a/en/devices/audio/attributes.html
+++ b/en/devices/audio/attributes.html
@@ -135,7 +135,7 @@
 <p>In this example, AudioAttributes.Builder defines the AudioAttributes to be used by a new
 AudioTrack instance:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 AudioTrack myTrack = new AudioTrack(
   new AudioAttributes.Builder()
  .setUsage(AudioAttributes.USAGE_MEDIA)
diff --git a/en/devices/audio/data_formats.html b/en/devices/audio/data_formats.html
index e11a1ab..382c956 100644
--- a/en/devices/audio/data_formats.html
+++ b/en/devices/audio/data_formats.html
@@ -118,7 +118,7 @@
 so the following holds where all values are in units of one
 <a href="https://en.wikipedia.org/wiki/Least_significant_bit">LSB</a>:
 </p>
-<pre>
+<pre class="devsite-click-to-copy">
 |largest negative value| = |largest positive value| + 1
 </pre>
 
@@ -306,7 +306,7 @@
 <p>
 For example, to convert a Q4.27 internal value to floating point, use:
 </p>
-<pre>
+<pre class="devsite-click-to-copy">
 float = integer * (2 ^ -27)
 </pre>
 
diff --git a/en/devices/audio/debugging.html b/en/devices/audio/debugging.html
index 9f8efb7..67e23d0 100644
--- a/en/devices/audio/debugging.html
+++ b/en/devices/audio/debugging.html
@@ -50,30 +50,31 @@
 <code>/data/misc/audioserver</code>.
 Additionally, you must use a userdebug or eng build.
 If you use a userdebug build, then disable verity with:</p>
-<pre>
-<code>$ adb root &amp;&amp; adb disable-verity &amp;&amp; adb reboot</code>
+
+<pre class="devsite-terminal devsite-click-to-copy">
+adb root &amp;&amp; adb disable-verity &amp;&amp; adb reboot
 </pre>
 
 <h3 id="compile">Compile-time setup</h3>
 
 <ol>
-<li><code>$ cd frameworks/av/services/audioflinger</code></li>
+  <li><code class="devsite-terminal">cd frameworks/av/services/audioflinger</code></li>
 <li>Edit <code>Configuration.h</code>.</li>
 <li>Uncomment <code>#define TEE_SINK</code>.</li>
 <li>Re-build <code>libaudioflinger.so</code>.</li>
-<li><code>$ adb root</code></li>
-<li><code>$ adb remount</code></li>
+<li><code class="devsite-terminal">adb root</code></li>
+<li><code class="devsite-terminal">adb remount</code></li>
 <li>Push or sync the new <code>libaudioflinger.so</code> to the device's <code>/system/lib</code>.</li>
 </ol>
 
 <h3 id="runtime">Run-time setup</h3>
 
 <ol>
-<li><code>$ adb shell getprop | grep ro.debuggable</code>
+<li><code class="devsite-terminal">adb shell getprop | grep ro.debuggable</code>
 <br />Confirm that the output is: <code>[ro.debuggable]: [1]</code>
 </li>
-<li><code>$ adb shell</code></li>
-<li><code>$ ls -ld /data/misc/media</code>
+<li><code class="devsite-terminal">adb shell</code></li>
+<li><code class="devsite-terminal">ls -ld /data/misc/media</code>
 <br />
 <p>
 Confirm that the output is:
@@ -81,20 +82,19 @@
 <pre>
 drwx------ media media ... media
 </pre>
-<br />
 <p>
 If the directory does not exist, create it as follows:
 </p>
-<pre>
-$ mkdir /data/misc/media
-$ chown media:media /data/misc/media
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">mkdir /data/misc/media</code>
+<code class="devsite-terminal">chown media:media /data/misc/media</code>
 </pre>
 </li>
-<li><code>$ echo af.tee=# &gt; /data/local.prop</code>
+<li><code class="devsite-terminal">echo af.tee=# &gt; /data/local.prop</code>
 <br />Where the <code>af.tee</code> value is a number described below.
 </li>
-<li><code>$ chmod 644 /data/local.prop</code></li>
-<li><code>$ reboot</code></li>
+<li><code class="devsite-terminal">chmod 644 /data/local.prop</code></li>
+<li><code class="devsite-terminal">reboot</code></li>
 </ol>
 
 <h4>Values for <code>af.tee</code> property</h4>
@@ -120,7 +120,7 @@
 
 <ol>
 <li>Run your audio test.</li>
-<li><code>$ adb shell dumpsys media.audio_flinger</code></li>
+<li><code class="devsite-terminal">adb shell dumpsys media.audio_flinger</code></li>
 <li>Look for a line in dumpsys output such as this:<br />
 <code>tee copied to /data/misc/media/20131010101147_2.wav</code>
 <br />This is a PCM .wav file.
@@ -165,10 +165,10 @@
 <li>Push or sync the restored <code>libaudioflinger.so</code>
 to the device's <code>/system/lib</code>.
 </li>
-<li><code>$ adb shell</code></li>
-<li><code>$ rm /data/local.prop</code></li>
-<li><code>$ rm /data/misc/media/*.wav</code></li>
-<li><code>$ reboot</code></li>
+<li><code class="devsite-terminal">adb shell</code></li>
+<li><code class="devsite-terminal">rm /data/local.prop</code></li>
+<li><code class="devsite-terminal">rm /data/misc/media/*.wav</code></li>
+<li><code class="devsite-terminal">reboot</code></li>
 </ol>
 
 <h2 id="mediaLog">media.log</h2>
@@ -345,7 +345,7 @@
 <p>
 In <code>FastMixer</code> and <code>FastCapture</code> threads, use code such as this:
 </p>
-<pre>
+<pre class="devsite-click-to-copy">
 logWriter-&gt;log("string");
 logWriter-&gt;logf("format", parameters);
 logWriter-&gt;logTimestamp();
@@ -359,7 +359,7 @@
 <p>
 In other AudioFlinger threads, use <code>mNBLogWriter</code>:
 </p>
-<pre>
+<pre class="devsite-click-to-copy">
 mNBLogWriter-&gt;log("string");
 mNBLogWriter-&gt;logf("format", parameters);
 mNBLogWriter-&gt;logTimestamp();
@@ -397,19 +397,19 @@
 <code>ro.test_harness</code> is <code>1</code>.  You can enable it by:
 </p>
 
-<pre>
-$ adb root
-$ adb shell
-$ echo ro.test_harness=1 > /data/local.prop
-$ chmod 644 /data/local.prop
-$ reboot
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell</code>
+<code class="devsite-terminal">echo ro.test_harness=1 > /data/local.prop</code>
+<code class="devsite-terminal">chmod 644 /data/local.prop</code>
+<code class="devsite-terminal">reboot</code>
 </pre>
 
 <p>
 The connection is lost during reboot, so:
 </p>
-<pre>
-$ adb shell
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell
 </pre>
 
 The command <code>ps media</code> will now show two processes:
@@ -427,8 +427,8 @@
 You can manually request a log dump at any time.
 This command shows logs from all the active and recent timelines, and then clears them:
 </p>
-<pre>
-$ dumpsys media.log
+<pre class="devsite-terminal devsite-click-to-copy">
+dumpsys media.log
 </pre>
 
 <p>
@@ -443,8 +443,9 @@
 the process ID you noted earlier.  You should see a dump from <code>media.log</code>
 in the main <code>logcat</code>, showing all the logs leading up to the crash.
 </p>
-<pre>
-$ dumpsys media.log
+
+<pre class="devsite-terminal devsite-click-to-copy">
+dumpsys media.log
 </pre>
 
   </body>
diff --git a/en/devices/audio/latency_app.html b/en/devices/audio/latency_app.html
index b4e7495..61a1c56 100644
--- a/en/devices/audio/latency_app.html
+++ b/en/devices/audio/latency_app.html
@@ -104,7 +104,7 @@
 and is not currently available online.  Open this link in a browser:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 NDKroot/docs/Additional_library_docs/opensles/index.html
 </pre>
 
diff --git a/en/devices/audio/midi.html b/en/devices/audio/midi.html
index 31b5518..ecebb01 100644
--- a/en/devices/audio/midi.html
+++ b/en/devices/audio/midi.html
@@ -153,7 +153,7 @@
 <p>
 To claim MIDI support, add this line to your <code>device.mk</code>:
 </p>
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_COPY_FILES += \
 frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.midi.xml
 </pre>
diff --git a/en/devices/audio/midi_test.html b/en/devices/audio/midi_test.html
index 303f098..d6531f9 100644
--- a/en/devices/audio/midi_test.html
+++ b/en/devices/audio/midi_test.html
@@ -104,9 +104,9 @@
   <li> On the workstation, enter:</li>
 </ol>
 
-<pre>
-cd <em>&lt;this-folder&gt;</em>
-adb install -r MidiScope.apk
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd <var>THIS_FOLDER</var></code>
+<code class="devsite-terminal">adb install -r MidiScope.apk</code>
 </pre>
 
 
diff --git a/en/devices/audio/tv.html b/en/devices/audio/tv.html
index 29c95bb..61bdbe4 100644
--- a/en/devices/audio/tv.html
+++ b/en/devices/audio/tv.html
@@ -73,12 +73,12 @@
 
 <p>Android supports the following audio devices for TV audio input/output.</p>
 
-<h4>system/media/audio/include/system/audio.h</h4>
+<h4><code>system/media/audio/include/system/audio.h</code></h4>
 
 <p class="note"><strong>Note:</strong> In Android 5.1 and earlier, the path to
 this file is: <code>system/core/include/system/audio.h</code></p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 /* output devices */
 AUDIO_DEVICE_OUT_AUX_DIGITAL  = 0x400,
 AUDIO_DEVICE_OUT_HDMI   = AUDIO_DEVICE_OUT_AUX_DIGITAL,
@@ -101,12 +101,12 @@
 
 <p>The Audio HAL extension for the audio routing API is defined by following:</p>
 
-<h4>system/media/audio/include/system/audio.h</h4>
+<h4><code>system/media/audio/include/system/audio.h</code></h4>
 
 <p class="note"><strong>Note:</strong> In Android 5.1 and earlier, the path to
 this file is: <code>system/core/include/system/audio.h</code></p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 /* audio port configuration structure used to specify a particular configuration of an audio port */
 struct audio_port_config {
     audio_port_handle_t      id;           /* port unique ID */
@@ -144,9 +144,9 @@
 };
 </pre>
 
-<h4>hardware/libhardware/include/hardware/audio.h</h4>
+<h4><code>hardware/libhardware/include/hardware/audio.h</code></h4>
 
-<pre>
+<pre class="devsite-click-to-copy">
 struct audio_hw_device {
   :
     /**
@@ -185,9 +185,9 @@
 
 <p>To test DEVICE_IN_LOOPBACK for TV monitoring, use the following testing code. After running the
 test, the captured audio saves to <code>/sdcard/record_loopback.raw</code>, where you can listen to
-it using <code>ffmeg</code>.</p>
+it using <code><a href="https://en.wikipedia.org/wiki/FFmpeg">FFmpeg</a></code>.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;uses-permission android:name="android.permission.MODIFY_AUDIO_ROUTING" /&gt;
 &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;
 
@@ -267,12 +267,12 @@
 </pre>
 
 <p>Locate the captured audio file in <code>/sdcard/record_loopback.raw</code> and listen to it using
-<code>ffmeg</code>:</p>
+<code>FFmpeg</code>:</p>
 
-<pre>
-adb pull /sdcard/record_loopback.raw
-ffmpeg -f s16le -ar 48k -ac 1 -i record_loopback.raw record_loopback.wav
-ffplay record_loopback.wav
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb pull /sdcard/record_loopback.raw</code>
+<code class="devsite-terminal">ffmpeg -f s16le -ar 48k -ac 1 -i record_loopback.raw record_loopback.wav</code>
+<code class="devsite-terminal">ffplay record_loopback.wav</code>
 </pre>
 
 <h2 id="useCases">Use cases</h2>
diff --git a/en/devices/audio/usb.html b/en/devices/audio/usb.html
index f1c99ff..d1dfcd3 100644
--- a/en/devices/audio/usb.html
+++ b/en/devices/audio/usb.html
@@ -572,7 +572,9 @@
 audio policy configuration file.  This is typically
 located here:
 </p>
-<pre>device/oem/codename/audio_policy.conf</pre>
+<pre class="devsite-click-to-copy">
+device/oem/codename/audio_policy.conf
+</pre>
 <p>
 The pathname component "oem" should be replaced by the name
 of the OEM who manufactures the Android device,
@@ -583,7 +585,7 @@
 An example entry is shown here:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 audio_hw_modules {
   ...
   usb {
@@ -620,7 +622,9 @@
 The audio Hardware Abstraction Layer (HAL)
 implementation for USB audio is located here:
 </p>
-<pre>hardware/libhardware/modules/usbaudio/</pre>
+<pre class="devsite-click-to-copy">
+hardware/libhardware/modules/usbaudio/
+</pre>
 <p>
 The USB audio HAL relies heavily on
 <i>tinyalsa</i>, described at <a href="terminology.html">Audio Terminology</a>.
diff --git a/en/devices/audio/warmup.html b/en/devices/audio/warmup.html
index e139e2f..7c37cd6 100644
--- a/en/devices/audio/warmup.html
+++ b/en/devices/audio/warmup.html
@@ -54,7 +54,9 @@
   the hardware itself might have its own power logic beyond the three seconds that AudioFlinger has.</li>
   <li>Press Home, and you should hear a click sound.</li>
   <li>Run the following command to receive the measured warmup:
-  <br /><code>adb shell dumpsys media.audio_flinger | grep measuredWarmup</code>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys media.audio_flinger | grep measuredWarmup
+</pre>
 
 <p>
 You should see output like this:
diff --git a/en/devices/camera/camera3_crop_reprocess.html b/en/devices/camera/camera3_crop_reprocess.html
index 00c5bbe..1e24db3 100644
--- a/en/devices/camera/camera3_crop_reprocess.html
+++ b/en/devices/camera/camera3_crop_reprocess.html
@@ -24,21 +24,21 @@
 
 
 <h2 id="output-stream">Output streams</h2>
-<p> Unlike the old camera subsystem, which has 3-4 different ways of producing data 
-  from the camera (ANativeWindow-based preview operations, preview callbacks, 
-  video callbacks, and takePicture callbacks), the new subsystem operates solely 
-  on the ANativeWindow-based pipeline for all resolutions and output formats. 
-  Multiple such streams can be configured at once, to send a single frame to many 
-  targets such as the GPU, the video encoder, RenderScript, or app-visible buffers 
+<p> Unlike the old camera subsystem, which has 3-4 different ways of producing data
+  from the camera (ANativeWindow-based preview operations, preview callbacks,
+  video callbacks, and takePicture callbacks), the new subsystem operates solely
+  on the ANativeWindow-based pipeline for all resolutions and output formats.
+  Multiple such streams can be configured at once, to send a single frame to many
+  targets such as the GPU, the video encoder, RenderScript, or app-visible buffers
   (RAW Bayer, processed YUV buffers, or JPEG-encoded buffers).</p>
-<p>As an optimization, these output streams must be configured ahead of time, and 
-  only a limited number may exist at once. This allows for pre-allocation of 
-  memory buffers and configuration of the camera hardware, so that when requests 
-  are submitted with multiple or varying output pipelines listed, there won't be 
+<p>As an optimization, these output streams must be configured ahead of time, and
+  only a limited number may exist at once. This allows for pre-allocation of
+  memory buffers and configuration of the camera hardware, so that when requests
+  are submitted with multiple or varying output pipelines listed, there won't be
   delays or latency in fulfilling the request.</p>
-<p>To support backwards compatibility with the current camera API, at least 3 
-  simultaneous YUV output streams must be supported, plus one JPEG stream. This is 
-  required for video snapshot support with the application also receiving YUV 
+<p>To support backwards compatibility with the current camera API, at least 3
+  simultaneous YUV output streams must be supported, plus one JPEG stream. This is
+  required for video snapshot support with the application also receiving YUV
   buffers:</p>
 <ul>
   <li>One stream to the GPU/SurfaceView (opaque YUV format) for preview</li>
@@ -49,48 +49,48 @@
 <p>The exact requirements are still being defined since the corresponding API
 isn't yet finalized.</p>
 <h2>Cropping</h2>
-<p>Cropping of the full pixel array (for digital zoom and other use cases where a 
-  smaller FOV is desirable) is communicated through the ANDROID_SCALER_CROP_REGION 
-  setting. This is a per-request setting, and can change on a per-request basis, 
+<p>Cropping of the full pixel array (for digital zoom and other use cases where a
+  smaller FOV is desirable) is communicated through the ANDROID_SCALER_CROP_REGION
+  setting. This is a per-request setting, and can change on a per-request basis,
   which is critical for implementing smooth digital zoom.</p>
-<p>The region is defined as a rectangle (x, y, width, height), with (x, y) 
-  describing the top-left corner of the rectangle. The rectangle is defined on the 
-  coordinate system of the sensor active pixel array, with (0,0) being the 
-  top-left pixel of the active pixel array. Therefore, the width and height cannot 
-  be larger than the dimensions reported in the ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY 
-  static info field. The minimum allowed width and height are reported by the HAL 
-  through the ANDROID_SCALER_MAX_DIGITAL_ZOOM static info field, which describes 
-  the maximum supported zoom factor. Therefore, the minimum crop region width and 
+<p>The region is defined as a rectangle (x, y, width, height), with (x, y)
+  describing the top-left corner of the rectangle. The rectangle is defined on the
+  coordinate system of the sensor active pixel array, with (0,0) being the
+  top-left pixel of the active pixel array. Therefore, the width and height cannot
+  be larger than the dimensions reported in the ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY
+  static info field. The minimum allowed width and height are reported by the HAL
+  through the ANDROID_SCALER_MAX_DIGITAL_ZOOM static info field, which describes
+  the maximum supported zoom factor. Therefore, the minimum crop region width and
   height are:</p>
-<pre>
+<pre class="devsite-click-to-copy">
   {width, height} =
    { floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
        ANDROID_SCALER_MAX_DIGITAL_ZOOM),
      floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
        ANDROID_SCALER_MAX_DIGITAL_ZOOM) }
-  </pre>
-<p>If the crop region needs to fulfill specific requirements (for example, it needs 
-  to start on even coordinates, and its width/height needs to be even), the HAL 
-  must do the necessary rounding and write out the final crop region used in the 
-  output result metadata. Similarly, if the HAL implements video stabilization, it 
-  must adjust the result crop region to describe the region actually included in 
-  the output after video stabilization is applied. In general, a camera-using 
-  application must be able to determine the field of view it is receiving based on 
+</pre>
+<p>If the crop region needs to fulfill specific requirements (for example, it needs
+  to start on even coordinates, and its width/height needs to be even), the HAL
+  must do the necessary rounding and write out the final crop region used in the
+  output result metadata. Similarly, if the HAL implements video stabilization, it
+  must adjust the result crop region to describe the region actually included in
+  the output after video stabilization is applied. In general, a camera-using
+  application must be able to determine the field of view it is receiving based on
   the crop region, the dimensions of the image sensor, and the lens focal length.</p>
-<p>Since the crop region applies to all streams, which may have different aspect 
-  ratios than the crop region, the exact sensor region used for each stream may be 
-  smaller than the crop region. Specifically, each stream should maintain square 
-  pixels and its aspect ratio by minimally further cropping the defined crop 
-  region. If the stream's aspect ratio is wider than the crop region, the stream 
-  should be further cropped vertically, and if the stream's aspect ratio is 
-  narrower than the crop region, the stream should be further cropped 
+<p>Since the crop region applies to all streams, which may have different aspect
+  ratios than the crop region, the exact sensor region used for each stream may be
+  smaller than the crop region. Specifically, each stream should maintain square
+  pixels and its aspect ratio by minimally further cropping the defined crop
+  region. If the stream's aspect ratio is wider than the crop region, the stream
+  should be further cropped vertically, and if the stream's aspect ratio is
+  narrower than the crop region, the stream should be further cropped
   horizontally.</p>
-<p>In all cases, the stream crop must be centered within the full crop region, and 
-  each stream is only either cropped horizontally or vertical relative to the full 
+<p>In all cases, the stream crop must be centered within the full crop region, and
+  each stream is only either cropped horizontally or vertical relative to the full
   crop region, never both.</p>
-<p>For example, if two streams are defined, a 640x480 stream (4:3 aspect), and a 
-  1280x720 stream (16:9 aspect), below demonstrates the expected output regions 
-  for each stream for a few sample crop regions, on a hypothetical 3 MP (2000 x 
+<p>For example, if two streams are defined, a 640x480 stream (4:3 aspect), and a
+  1280x720 stream (16:9 aspect), below demonstrates the expected output regions
+  for each stream for a few sample crop regions, on a hypothetical 3 MP (2000 x
   1500 pixel array) sensor.</p>
 </p>
   Crop region: (500, 375, 1000, 750) (4:3 aspect ratio)<br/>
@@ -118,7 +118,7 @@
   <strong>Figure 3.</strong> 1:1 aspect ratio
 </p>
 <p>
-  And a final example, a 1024x1024 square aspect ratio stream instead of the 480p 
+  And a final example, a 1024x1024 square aspect ratio stream instead of the 480p
   stream:<br/>
   Crop region: (500, 375, 1000, 750) (4:3 aspect ratio)<br/>
   1024x1024 stream crop: (625, 375, 750, 750)<br/>
@@ -129,9 +129,9 @@
   <strong>Figure 4.</strong> 4:3 aspect ratio, square
 </p>
 <h2 id="reprocessing">Reprocessing</h2>
-<p> Additional support for raw image files is provided by reprocessing support for RAW Bayer 
-  data. This support allows the camera pipeline to process a previously captured 
-  RAW buffer and metadata (an entire frame that was recorded previously), to 
+<p> Additional support for raw image files is provided by reprocessing support for RAW Bayer
+  data. This support allows the camera pipeline to process a previously captured
+  RAW buffer and metadata (an entire frame that was recorded previously), to
   produce a new rendered YUV or JPEG output.</p>
 
   </body>
diff --git a/en/devices/camera/camera3_error_stream.html b/en/devices/camera/camera3_error_stream.html
index 68b83a6..aebb325 100644
--- a/en/devices/camera/camera3_error_stream.html
+++ b/en/devices/camera/camera3_error_stream.html
@@ -24,137 +24,137 @@
 
 
 <h2 id="error-mgmt">Error management</h2>
-<p>Camera HAL device ops functions that have a return value will all return -ENODEV 
-  / NULL in case of a serious error. This means the device cannot continue 
-  operation, and must be closed by the framework. Once this error is returned by 
-  some method, or if notify() is called with ERROR_DEVICE, only the close() method 
-  can be called successfully. All other methods will return -ENODEV / NULL.<br/>
-  If a device op is called in the wrong sequence, for example if the framework 
-  calls configure_streams() is called before initialize(), the device must return 
-  -ENOSYS from the call, and do nothing.<br/>
-  Transient errors in image capture must be reported through notify() as follows:</p>
+<p>Camera HAL device ops functions that have a return value will all return <code>-ENODEV
+  / NULL</code> in case of a serious error. This means the device cannot continue
+  operation and must be closed by the framework. Once this error is returned by
+  some method, or if <code>notify()</code> is called with <code>ERROR_DEVICE</code>, only the <code>close()</code> method
+  can be called successfully. All other methods will return <code>-ENODEV / NULL</code>.</p>
+<p>If a device op is called in the wrong sequence, for example if the framework
+calls <code>configure_streams()</code> before <code>initialize()</code>, the device must return
+<code>-ENOSYS</code> from the call, and do nothing.</p>
+<p>Transient errors in image capture must be reported through <code>notify()</code> as follows:</p>
 <ul>
-  <li>The failure of an entire capture to occur must be reported by the HAL by 
-    calling notify() with ERROR_REQUEST. Individual errors for the result metadata 
+  <li>The failure of an entire capture to occur must be reported by the HAL by
+    calling <code>notify()</codE> with <code>ERROR_REQUEST</code>. Individual errors for the result metadata
     or the output buffers must not be reported in this case.</li>
-  <li>If the metadata for a capture cannot be produced, but some image buffers were 
-    filled, the HAL must call notify() with ERROR_RESULT.</li>
-  <li>If an output image buffer could not be filled, but either the metadata was 
-    produced or some other buffers were filled, the HAL must call notify() with 
-    ERROR_BUFFER for each failed buffer.</li>
+  <li>If the metadata for a capture cannot be produced, but some image buffers were
+    filled, the HAL must call <code>notify()</code> with <code>ERROR_RESULT</code>.</li>
+  <li>If an output image buffer could not be filled, but either the metadata was
+    produced or some other buffers were filled, the HAL must call <code>notify()</code> with
+    <code>ERROR_BUFFER</code> for each failed buffer.</li>
 </ul>
-<p>In each of these transient failure cases, the HAL must still call 
-  process_capture_result, with valid output buffer_handle_t. If the result 
-  metadata could not be produced, it should be NULL. If some buffers could not be 
-  filled, their sync fences must be set to the error state.<br/>
-  Invalid input arguments result in -EINVAL from the appropriate methods. In that 
+<p>In each of these transient failure cases, the HAL must still call
+<code>process_capture_result</code>, with valid output <code>buffer_handle_t</code>. If the result
+metadata could not be produced, it should be <code>NULL</code>. If some buffers could not be
+  filled, their sync fences must be set to the error state.</p>
+<p>Invalid input arguments result in <code>-EINVAL</code> from the appropriate methods. In that
   case, the framework must act as if that call had never been made.</p>
 <h2 id="stream-mgmt">Stream management</h2>
 <h3 id="configure_streams">configure_streams</h3>
-<p>Reset the HAL camera device processing pipeline and set up new input and output 
-  streams. This call replaces any existing stream configuration with the streams 
-  defined in the stream_list. This method will be called at least once after 
-  initialize() before a request is submitted with process_capture_request().<br/>
-  The stream_list must contain at least one output-capable stream, and may not 
-  contain more than one input-capable stream.<br/>
-  The stream_list may contain streams that are also in the currently-active set of 
-  streams (from the previous call to configure_stream()). These streams will 
-  already have valid values for usage, maxbuffers, and the private pointer. If 
-  such a stream has already had its buffers registered, register_stream_buffers() 
-  will not be called again for the stream, and buffers from the stream can be 
-  immediately included in input requests.<br/>
-  If the HAL needs to change the stream configuration for an existing stream due 
-  to the new configuration, it may rewrite the values of usage and/or maxbuffers 
-  during the configure call. The framework will detect such a change, and will 
-  then reallocate the stream buffers, and call register_stream_buffers() again 
-  before using buffers from that stream in a request.<br/>
-  If a currently-active stream is not included in stream_list, the HAL may safely 
-  remove any references to that stream. It will not be reused in a later 
-  configure() call by the framework, and all the gralloc buffers for it will be 
-  freed after the configure_streams() call returns.<br/>
-  The stream_list structure is owned by the framework, and may not be accessed 
-  once this call completes. The address of an individual camera3streamt 
-  structure will remain valid for access by the HAL until the end of the first 
-  configure_stream() call which no longer includes that camera3streamt in the 
-  stream_list argument. The HAL may not change values in the stream structure 
-  outside of the private pointer, except for the usage and maxbuffers members 
-  during the configure_streams() call itself.<br/>
-  If the stream is new, the usage, maxbuffer, and private pointer fields of the 
-  stream structure will all be set to 0. The HAL device must set these fields 
-  before the configure_streams() call returns. These fields are then used by the 
-  framework and the platform gralloc module to allocate the gralloc buffers for 
-  each stream.<br/>
-  Before such a new stream can have its buffers included in a capture request, the 
-  framework will call register_stream_buffers() with that stream. However, the 
-  framework is not required to register buffers for _all streams before 
-  submitting a request. This allows for quick startup of (for example) a preview 
+<p>Reset the HAL camera device processing pipeline and set up new input and output
+  streams. This call replaces any existing stream configuration with the streams
+  defined in the <code>stream_list</code>. This method will be called at least once after
+  <code>initialize()</code> before a request is submitted with <code>process_capture_request()</code>.</p>
+<p>The <code>stream_list</code> must contain at least one output-capable stream, and may not
+  contain more than one input-capable stream.
+  The <code>stream_list</code> may contain streams that are also in the currently-active set of
+  streams (from the previous call to <code>configure_stream()</code>). These streams will
+  already have valid values for usage, maxbuffers, and the private pointer. If
+  such a stream has already had its buffers registered, <code>register_stream_buffers()</code>
+  will not be called again for the stream, and buffers from the stream can be
+  immediately included in input requests.</p>
+<p>If the HAL needs to change the stream configuration for an existing stream due
+  to the new configuration, it may rewrite the values of usage and/or maxbuffers
+  during the configure call. The framework will detect such a change, and will
+  then reallocate the stream buffers, and call <code>register_stream_buffers()</code> again
+  before using buffers from that stream in a request.</p>
+<p>If a currently-active stream is not included in <code>stream_list</code>, the HAL may safely
+  remove any references to that stream. It will not be reused in a later
+  <code>configure()</code> call by the framework, and all the gralloc buffers for it will be
+  freed after the <code>configure_streams()</code> call returns.</p>
+<p>The <code>stream_list</code> structure is owned by the framework, and may not be accessed
+once this call completes. The address of an individual <code>camera3streamt</code>
+  structure will remain valid for access by the HAL until the end of the first
+  <code>configure_stream()</code> call which no longer includes that <code>camera3streamt</code> in the
+  <code>stream_list</code> argument. The HAL may not change values in the stream structure
+  outside of the private pointer, except for the usage and maxbuffers members
+  during the <code>configure_streams()</code> call itself.</p>
+<p>If the stream is new, the usage, maxbuffer, and private pointer fields of the
+  stream structure will all be set to 0. The HAL device must set these fields
+  before the <code>configure_streams()</code> call returns. These fields are then used by the
+  framework and the platform gralloc module to allocate the gralloc buffers for
+  each stream.</p>
+<p>Before such a new stream can have its buffers included in a capture request, the
+framework will call <code>register_stream_buffers()</code> with that stream. However, the
+  framework is not required to register buffers for _all streams before
+  submitting a request. This allows for quick startup of (for example) a preview
   stream, with allocation for other streams happening later or concurrently.</p>
 <h4><strong>Preconditions</strong></h4>
-<p>The framework will only call this method when no captures are being processed. 
-  That is, all results have been returned to the framework, and all in-flight 
-  input and output buffers have been returned and their release sync fences have 
-  been signaled by the HAL. The framework will not submit new requests for capture 
-  while the configure_streams() call is underway.</p>
+<p>The framework will only call this method when no captures are being processed.
+  That is, all results have been returned to the framework, and all in-flight
+  input and output buffers have been returned and their release sync fences have
+  been signaled by the HAL. The framework will not submit new requests for capture
+  while the <code>configure_streams()</code> call is underway.</p>
 <h4><strong>Postconditions</strong></h4>
-<p>The HAL device must configure itself to provide maximum possible output frame 
-  rate given the sizes and formats of the output streams, as documented in the 
+<p>The HAL device must configure itself to provide maximum possible output frame
+  rate given the sizes and formats of the output streams, as documented in the
   camera device's static metadata.</p>
 <h4><strong>Performance expectations</strong></h4>
-<p>This call is expected to be heavyweight and possibly take several hundred 
-  milliseconds to complete, since it may require resetting and reconfiguring the 
-  image sensor and the camera processing pipeline. Nevertheless, the HAL device 
-  should attempt to minimize the reconfiguration delay to minimize the 
-  user-visible pauses during application operational mode changes (such as 
+<p>This call is expected to be heavyweight and possibly take several hundred
+  milliseconds to complete, since it may require resetting and reconfiguring the
+  image sensor and the camera processing pipeline. Nevertheless, the HAL device
+  should attempt to minimize the reconfiguration delay to minimize the
+  user-visible pauses during application operational mode changes (such as
   switching from still capture to video recording).</p>
 <h4><strong>Return values</strong></h4>
 <ul>
-  <li>0: On successful stream configuration</li>
-  <li>undefined</li>
-  <li>-EINVAL: If the requested stream configuration is invalid. Some examples of 
+  <li><code>0</code>: On successful stream configuration</li>
+  <li><code>undefined</code></li>
+  <li><code>-EINVAL</code>: If the requested stream configuration is invalid. Some examples of
     invalid stream configurations include:
     <ul>
-      <li>Including more than 1 input-capable stream (INPUT or BIDIRECTIONAL)</li>
-      <li>Not including any output-capable streams (OUTPUT or BIDIRECTIONAL)</li>
-      <li>Including streams with unsupported formats, or an unsupported size for 
+      <li>Including more than 1 input-capable stream (<code>INPUT</code> or <code>BIDIRECTIONAL</code>)</li>
+      <li>Not including any output-capable streams (<code>OUTPUT</code> or <code>BIDIRECTIONAL</code>)</li>
+      <li>Including streams with unsupported formats, or an unsupported size for
         that format.</li>
       <li>Including too many output streams of a certain format.</li>
-      <li>Note that the framework submitting an invalid stream configuration is not 
-        normal operation, since stream configurations are checked before 
-        configure. An invalid configuration means that a bug exists in the 
-        framework code, or there is a mismatch between the HAL's static metadata 
+      <li>Note that the framework submitting an invalid stream configuration is not
+        normal operation, since stream configurations are checked before
+        configure. An invalid configuration means that a bug exists in the
+        framework code, or there is a mismatch between the HAL's static metadata
         and the requirements on streams.</li>
     </ul>
   </li>
-  <li>-ENODEV: If there has been a fatal error and the device is no longer 
-    operational. Only close() can be called successfully by the framework after 
+  <li><code>-ENODEV</code>: If there has been a fatal error and the device is no longer
+    operational. Only <code>close()</code> can be called successfully by the framework after
     this error is returned.</li>
 </ul>
 <h3 id="register-stream">register_stream_buffers</h3>
-<p>Register buffers for a given stream with the HAL device. This method is called 
-  by the framework after a new stream is defined by configure_streams, and before 
-  buffers from that stream are included in a capture request. If the same stream 
-  is listed in a subsequent configure_streams() call, register_stream_buffers will 
-  not be called again for that stream.<br/>
-  The framework does not need to register buffers for all configured streams 
-  before it submits the first capture request. This allows quick startup for 
-  preview (or similar use cases) while other streams are still being allocated.<br/>
-  This method is intended to allow the HAL device to map or otherwise prepare the 
-  buffers for later use. The buffers passed in will already be locked for use. At 
-  the end of the call, all the buffers must be ready to be returned to the stream. 
-  The bufferset argument is only valid for the duration of this call.<br/>
-  If the stream format was set to HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, the 
-  camera HAL should inspect the passed-in buffers here to determine any 
+<p>Register buffers for a given stream with the HAL device. This method is called
+by the framework after a new stream is defined by <code>configure_streams</code>, and before
+  buffers from that stream are included in a capture request. If the same stream
+  is listed in a subsequent <code>configure_streams()</code> call, <code>register_stream_buffers</code> will
+  not be called again for that stream.</p>
+<p>The framework does not need to register buffers for all configured streams
+  before it submits the first capture request. This allows quick startup for
+  preview (or similar use cases) while other streams are still being allocated.</p>
+<p>This method is intended to allow the HAL device to map or otherwise prepare the
+  buffers for later use. The buffers passed in will already be locked for use. At
+  the end of the call, all the buffers must be ready to be returned to the stream.
+  The bufferset argument is only valid for the duration of this call.</p>
+<p>If the stream format was set to <code>HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED</code>, the
+  camera HAL should inspect the passed-in buffers here to determine any
   platform-private pixel format information.</p>
 <h4><strong>Return values</strong></h4>
 <ul>
-  <li>0: On successful registration of the new stream buffers</li>
-  <li>-EINVAL: If the streambufferset does not refer to a valid active stream, or 
+  <li><code>0</code>: On successful registration of the new stream buffers</li>
+  <li><code>-EINVAL</code>: If the streambufferset does not refer to a valid active stream, or
     if the buffers array is invalid.</li>
-  <li>-ENOMEM: If there was a failure in registering the buffers. The framework must 
-    consider all the stream buffers to be unregistered, and can try to register 
+  <li><code>-ENOMEM</code>: If there was a failure in registering the buffers. The framework must
+    consider all the stream buffers to be unregistered, and can try to register
     again later.</li>
-  <li>-ENODEV: If there is a fatal error, and the device is no longer operational. 
-    Only close() can be called successfully by the framework after this error is 
+  <li><code>-ENODEV</code>: If there is a fatal error, and the device is no longer operational.
+    Only <code>close()</code> can be called successfully by the framework after this error is
     returned.</li>
 </ul>
 
diff --git a/en/devices/camera/camera3_requests_methods.html b/en/devices/camera/camera3_requests_methods.html
index d75376f..55c0db6 100644
--- a/en/devices/camera/camera3_requests_methods.html
+++ b/en/devices/camera/camera3_requests_methods.html
@@ -25,94 +25,94 @@
 
 <h2 id="request-creation">Request creation and submission</h2>
 <h3 id="default-settings">construct_default_request_settings</h3>
-<p>Create capture settings for standard camera use cases. The device must return a 
-  settings buffer that is configured to meet the requested use case, which must be 
-  one of the CAMERA3_TEMPLATE_* enums. All request control fields must be 
-  included.<br/>
-  The HAL retains ownership of this structure, but the pointer to the structure 
-  must be valid until the device is closed. The framework and the HAL may not 
-  modify the buffer once it is returned by this call. The same buffer may be 
+<p>Create capture settings for standard camera use cases. The device must return a
+  settings buffer that is configured to meet the requested use case, which must be
+  one of the <code>CAMERA3_TEMPLATE_*</code> enums. All request control fields must be
+  included.</p>
+<p>The HAL retains ownership of this structure, but the pointer to the structure
+  must be valid until the device is closed. The framework and the HAL may not
+  modify the buffer once it is returned by this call. The same buffer may be
   returned for subsequent calls for the same template, or for other templates.</p>
 <h4><strong>Return values</strong></h4>
 <ul>
   <li>Valid metadata: On successful creation of a default settings buffer.</li>
-  <li>NULL: In case of a fatal error. After this is returned, only the close() 
+  <li><code>NULL</code>: In case of a fatal error. After this is returned, only the <code>close()</code>
     method can be called successfully by the framework.</li>
 </ul>
 <h3 id="process-request">process_capture_request</h3>
-<p>Send a new capture request to the HAL. The HAL should not return from this call 
-  until it is ready to accept the next request to process. Only one call to 
-  process_capture_request() will be made at a time by the framework, and the calls 
-  will all be from the same thread. The next call to process_capture_request() 
-  will be made as soon as a new request and its associated buffers are available. 
-  In a normal preview scenario, this means the function will be called again by 
-  the framework almost instantly.<br/>
-  The actual request processing is asynchronous, with the results of capture being 
-  returned by the HAL through the process_capture_result() call. This call 
-  requires the result metadata to be available, but output buffers may simply 
-  provide sync fences to wait on. Multiple requests are expected to be in flight 
-  at once, to maintain full output frame rate.<br/>
-  The framework retains ownership of the request structure. It is only guaranteed 
-  to be valid during this call. The HAL device must make copies of the information 
-  it needs to retain for the capture processing. The HAL is responsible for 
-  waiting on and closing the buffers' fences and returning the buffer handles to 
-  the framework.<br/>
-  The HAL must write the file descriptor for the input buffer's release sync fence 
-  into input_buffer-&gt;release_fence, if input_buffer is not NULL. If the HAL 
-  returns -1 for the input buffer release sync fence, the framework is free to 
-  immediately reuse the input buffer. Otherwise, the framework will wait on the 
+<p>Send a new capture request to the HAL. The HAL should not return from this call
+  until it is ready to accept the next request to process. Only one call to
+  <code>process_capture_request()</code> will be made at a time by the framework, and the calls
+  will all be from the same thread. The next call to <code>process_capture_request()</code>
+  will be made as soon as a new request and its associated buffers are available.
+  In a normal preview scenario, this means the function will be called again by
+  the framework almost instantly.</p>
+<p>The actual request processing is asynchronous, with the results of capture being
+returned by the HAL through the <code>process_capture_result()</code> call. This call
+  requires the result metadata to be available, but output buffers may simply
+  provide sync fences to wait on. Multiple requests are expected to be in flight
+  at once, to maintain full output frame rate.</p>
+<p>The framework retains ownership of the request structure. It is only guaranteed
+  to be valid during this call. The HAL device must make copies of the information
+  it needs to retain for the capture processing. The HAL is responsible for
+  waiting on and closing the buffers' fences and returning the buffer handles to
+  the framework.</p>
+  The HAL must write the file descriptor for the input buffer's release sync fence
+  into <code>input_buffer</code>-&gt;<code>release_fence</code>, if <code>input_buffer</code> is not <code>NULL</code>. If the HAL
+  returns <code>-1</code> for the input buffer release sync fence, the framework is free to
+  immediately reuse the input buffer. Otherwise, the framework will wait on the
   sync fence before refilling and reusing the input buffer.</p>
 <h4><strong>Return values</strong></h4>
 <ul>
-  <li>0: On a successful start to processing the capture request</li>
-  <li>-EINVAL: If the input is malformed (the settings are NULL when not allowed, 
-    there are 0 output buffers, etc) and capture processing cannot start. Failures 
-    during request processing should be handled by calling 
-    camera3_callback_ops_t.notify(). In case of this error, the framework will 
-    retain responsibility for the stream buffers' fences and the buffer handles; 
-    the HAL should not close the fences or return these buffers with 
-    process_capture_result.</li>
-  <li>-ENODEV: If the camera device has encountered a serious error. After this 
-    error is returned, only the close() method can be successfully called by the 
+  <li><code>0</code>: On a successful start to processing the capture request</li>
+  <li><code>-EINVAL</code>: If the input is malformed (the settings are <code>NULL</code> when not allowed,
+    there are 0 output buffers, etc) and capture processing cannot start. Failures
+    during request processing should be handled by calling
+    <code>camera3_callback_ops_t.notify()</code>. In case of this error, the framework will
+    retain responsibility for the stream buffers' fences and the buffer handles;
+    the HAL should not close the fences or return these buffers with
+    <code>process_capture_result</code>.</li>
+  <li><code>-ENODEV</code>: If the camera device has encountered a serious error. After this
+    error is returned, only the <code>close()</code> method can be successfully called by the
     framework.</li>
 </ul>
 <h2 id="misc-methods">Miscellaneous methods</h2>
 <h3 id="get-metadata">get_metadata_vendor_tag_ops</h3>
-<p>Get methods to query for vendor extension metadata tag information. The HAL 
-  should fill in all the vendor tag operation methods, or leave ops unchanged if 
-  no vendor tags are defined. The definition of vendor_tag_query_ops_t can be 
-  found in system/media/camera/include/system/camera_metadata.h.</p>
+<p>Get methods to query for vendor extension metadata tag information. The HAL
+  should fill in all the vendor tag operation methods, or leave ops unchanged if
+  no vendor tags are defined. The definition of <code>vendor_tag_query_ops_t</code> can be
+  found in <code>system/media/camera/include/system/camera_metadata.h</code>.</p>
 <h3 id="dump">dump</h3>
-<p>Print out debugging state for the camera device. This will be called by the 
-  framework when the camera service is asked for a debug dump, which happens when 
-  using the dumpsys tool, or when capturing a bugreport. The passed-in file 
-  descriptor can be used to write debugging text using dprintf() or write(). The 
+<p>Print out debugging state for the camera device. This will be called by the
+  framework when the camera service is asked for a debug dump, which happens when
+  using the dumpsys tool, or when capturing a bugreport. The passed-in file
+  descriptor can be used to write debugging text using <code>dprintf()</code> or <code>write()</code>. The
   text should be in ASCII encoding only.</p>
 <h3 id="flush">flush</h3>
-<p>Flush all currently in-process captures and all buffers in the pipeline on the 
-  given device. The framework will use this to dump all state as quickly as 
-  possible in order to prepare for a configure_streams() call.<br/>
-  No buffers are required to be successfully returned, so every buffer held at the 
-  time of flush() (whether successfully filled or not) may be returned with
-  CAMERA3_BUFFER_STATUS_ERROR. Note the HAL is still allowed to return valid 
-  (STATUS_OK) buffers during this call, provided they are successfully filled.<br/>
-  All requests currently in the HAL are expected to be returned as soon as 
-  possible. Not-in-process requests should return errors immediately. Any 
-  interruptible hardware blocks should be stopped, and any uninterruptible blocks 
-  should be waited on.<br/>
-  flush() should only return when there are no more outstanding buffers or 
-  requests left in the HAL. The framework may call configure_streams (as the HAL 
-  state is now quiesced) or may issue new requests.<br/>
-  A flush() call should only take 100ms or less. The maximum time it can take is 1 
+<p>Flush all currently in-process captures and all buffers in the pipeline on the
+  given device. The framework will use this to dump all state as quickly as
+  possible in order to prepare for a <code>configure_streams()</code> call.</p>
+<p>No buffers are required to be successfully returned, so every buffer held at the
+time of <code>flush()</code> (whether successfully filled or not) may be returned with
+<code>CAMERA3_BUFFER_STATUS_ERROR</code>. Note the HAL is still allowed to return valid
+(<code>STATUS_OK</code>) buffers during this call, provided they are successfully filled.</p>
+<p>All requests currently in the HAL are expected to be returned as soon as
+  possible. Not-in-process requests should return errors immediately. Any
+  interruptible hardware blocks should be stopped, and any uninterruptible blocks
+  should be waited on.</p>
+<p><code>flush()</code> should only return when there are no more outstanding buffers or
+requests left in the HAL. The framework may call <code>configure_streams</code> (as the HAL
+  state is now quiesced) or may issue new requests.</p>
+<p>A <code>flush()</code> call should only take 100ms or less. The maximum time it can take is 1
   second.</p>
 <h4><strong>Version information</strong></h4>
-<p>This is available only if device version &gt;= CAMERA_DEVICE_API_VERSION_3_1.</p>
+<p>This is available only if device version &gt;= <code>CAMERA_DEVICE_API_VERSION_3_1</code>.</p>
 <h4><strong>Return values</strong></h4>
 <ul>
-  <li>0: On a successful flush of the camera HAL.</li>
-  <li>-EINVAL: If the input is malformed (the device is not valid).</li>
-  <li>-ENODEV: If the camera device has encountered a serious error. After this 
-    error is returned, only the close() method can be successfully called by the 
+  <li><code>0</code>: On a successful flush of the camera HAL.</li>
+  <li><code>-EINVAL</code>: If the input is malformed (the device is not valid).</li>
+  <li><code>-ENODEV</code>: If the camera device has encountered a serious error. After this
+    error is returned, only the <code>close()</code> method can be successfully called by the
     framework.</li>
 </ul>
 
diff --git a/en/devices/camera/index.html b/en/devices/camera/index.html
index dfa557e..c48e07b 100644
--- a/en/devices/camera/index.html
+++ b/en/devices/camera/index.html
@@ -133,7 +133,7 @@
 
 <li>Create an <code>Android.mk</code> file to build the shared library. Ensure
 the Makefile contains the following lines:
-<pre>
+<pre class="devsite-click-to-copy">
 LOCAL_MODULE := camera.&lt;device_name&gt;
 LOCAL_MODULE_RELATIVE_PATH := hw
 </pre>
@@ -148,7 +148,7 @@
 can autofocus, add the following lines in your device's
 <code>&lt;device&gt;/&lt;company_name&gt;/&lt;device_name&gt;/device.mk</code>
 Makefile:
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 PRODUCT_COPY_FILES := \ ...
 
 PRODUCT_COPY_FILES += \
@@ -168,7 +168,7 @@
 <code>device/&lt;company_name&gt;/&lt;device_name&gt;/device.mk</code> Makefile
 to copy the <code>media_profiles.xml</code> and <code>media_codecs.xml</code>
 files to the appropriate location:
-<pre>
+<pre class="devsite-click-to-copy">
 # media config xml file
 PRODUCT_COPY_FILES += \
     &lt;device&gt;/&lt;company&gt;/&lt;device&gt;/media_profiles.xml:system/etc/media_profiles.xml
@@ -182,7 +182,7 @@
 <code>PRODUCT_PACKAGES</code> variable in your device's
 <code>device/&lt;company&gt;/&lt;device&gt;/device.mk</code>
 Makefile:
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_PACKAGES := \
 Gallery2 \
 ...
diff --git a/en/devices/drm.html b/en/devices/drm.html
index a9bfcbf..42ab328 100644
--- a/en/devices/drm.html
+++ b/en/devices/drm.html
@@ -46,7 +46,7 @@
 href="https://developer.android.com/reference/android/media/MediaDrm.html">MediaDrm</a>
 for the class to obtain keys for decrypting protected media streams.</p>
 
- <img src="images/ape_fwk_drm.png" alt="Android DRM HAL" />
+ <img src="/devices/images/ape_fwk_drm.png" alt="Android DRM HAL" />
 
 <p class="img-caption"><strong>Figure 1.</strong> DRM Hardware Abstraction
 Layer</p>
@@ -121,8 +121,10 @@
 <p>Plug-ins are loaded automatically when DrmManagerService is launched. As
 shown in the figure below, the DRM plug-in manager loads/unloads all the
 available plug-ins. The DRM framework loads plug-ins automatically by finding
-them under:<br/>
-<code>/system/lib/drm/plugins/native/</code></p>
+them under:</p>
+<pre class="devsite-click-to-copy">
+/system/lib/drm/plugins/native/
+</pre>
  
 <img src="images/ape_fwk_drm_plugins_life.png" alt="Android DRM Plug-in Lifecycle" />
 
@@ -139,9 +141,9 @@
 developers must implement the interfaces specified in IDrmEngine and the
 listener interfaces specified below. The interface definition is available in
 the source tree at:<p/>
-<code>
-&lt;platform_root&gt;/frameworks/av/drm/libdrmframework/plugins/common/include
-</code>
+<pre class="devsite-click-to-copy">
+<var>PLATFORM_ROOT</var>/frameworks/av/drm/libdrmframework/plugins/common/include
+</pre>
 
 <h3 id="DrmInfo">DRM Info</h3>
 <p>DrmInfo is a wrapper class that wraps the protocol for communicating with the
@@ -151,12 +153,16 @@
 would accomplish the transaction by interpreting the protocol. The DRM framework
 defines an API to retrieve an instance of DrmInfo called acquireDrmInfo().</p>
 
-<code>DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest);</code>
+<pre class="devsite-click-to-copy prettyprint">
+DrmInfo* acquireDrmInfo(int uniqueId, const DrmInfoRequest* drmInfoRequest);
+</pre>
 <p>Retrieves necessary information for registration, deregistration or rights
 acquisition information. See <a
 href="http://developer.android.com/reference/android/drm/DrmInfoRequest.html">DrmInfoRequest</a> for more information.</p>
 
-<code>DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);</code>
+<pre class="devsite-click-to-copy prettyprint">
+DrmInfoStatus* processDrmInfo(int uniqueId, const DrmInfo* drmInfo);
+</pre>
 <p>processDrmInfo() behaves asynchronously and the results of the transaction can
 be retrieved either from OnEventListener or OnErrorListener.</p>
 
@@ -167,8 +173,9 @@
 the DRM framework so the Media Player application is abstracted from the existence
 of license.</p>
 
-<code>int checkRightsStatus(int uniqueId, const String8&amp; path, int
-action);</code>
+<pre class="devsite-click-to-copy prettyprint">
+int checkRightsStatus(int uniqueId, const String8&amp; path, int action);
+</pre>
 
 <p>Check whether the given content has valid rights or not.  The input
 parameters are the content file path where the content was saved and the action
@@ -176,7 +183,9 @@
 status of the rights for the protected content, such as
 RightsStatus::RIGHTS_VALID, RightsStatus::RIGHTS_EXPIRED.</p>
 
-<code>status_t saveRights(int uniqueId, const DrmRights&amp; drmRights, const String8&amp; rightsPath, const String8&amp; contentPath);</code>
+<pre class="devsite-click-to-copy prettyprint">
+status_t saveRights(int uniqueId, const DrmRights&amp; drmRights, const String8&amp; rightsPath, const String8&amp; contentPath);
+</pre>
 
 <p>Save DRM rights to the specified rights path and make association with content path.
 The input parameters are the DrmRights to be saved, the rights file path where rights
@@ -189,8 +198,10 @@
 href="http://developer.android.com/reference/android/drm/DrmManagerClient.html">DrmManagerClient</a>
 for more information.</p>
 
-<code>DrmConstraints* getConstraints(int uniqueId, const String path, int
-action);</code>
+<pre class="devsite-click-to-copy prettyprint">
+DrmConstraints* getConstraints(int uniqueId, const String path, int
+action);
+</pre>
 <p>The getConstraint function call returns key-value pairs of constraints
 embedded in protected content. To retrieve the constraints, the uniqueIds (the
 Unique identifier for a session and path of the protected content) are required.
@@ -200,7 +211,9 @@
 
 <p class="img-caption"><strong>Figure 5.</strong> Retrieve license metadata</p>
 
-<code>DrmMetadata* getMetadata(int uniqueId, const String path);</code>
+<pre class="devsite-click-to-copy prettyprint">
+DrmMetadata* getMetadata(int uniqueId, const String path);
+</pre>
 <p>Get metadata information associated with input content for a given path of the
 protected content to return key-value pairs of metadata.</p>
 
@@ -209,10 +222,10 @@
 invoke openDecryptSession() at the beginning of the decryption sequence.
 openDecryptSession() asks each DRM plug-in if it can handle input DRM
 content.</p>
-<code>
+<pre class="devsite-click-to-copy prettyprint">
 status_t openDecryptSession(
    int uniqueId, DecryptHandle* decryptHandle, int fd, off64_t offset, off64_t length);
-</code>
+</pre>
 
 <p>The above call allows you to save DRM rights to specified rights path and make
 association with content path. DrmRights parameter is the rights to be saved,
@@ -234,29 +247,29 @@
 <h3 id="source">Source</h3>
 
 <p>The Android DRM framework includes a couple of samples, a passthru plug-in
-and a forward lock plug-in, which can be found at:<br/>
-<code>
-&lt;platform_root&gt;/frameworks/av/drm/libdrmframework/plugins/passthru<br/>
-&lt;platform_root&gt;/frameworks/av/drm/libdrmframework/plugins/forward-lock
-</code></p>
+and a forward lock plug-in, which can be found at:</p>
+<pre class="devsite-click-to-copy">
+<var>PLATFORM_ROOT</var>/frameworks/av/drm/libdrmframework/plugins/passthru
+<var>PLATFORM_ROOT</var>/frameworks/av/drm/libdrmframework/plugins/forward-lock
+</pre>
 
 <h3 id="build">Build and Integration</h3>
 
 <p>Add the following to the Android.mk of the plug-in implementation. The
 passthruplugin is used as a sample.</p>
 
-<code>
-PRODUCT_COPY_FILES +=
-$(TARGET_OUT_SHARED_LIBRARIES)/&lt;plugin_library&gt;:system/lib/drm/plugins/native/&lt;plugin_library&gt;
-e.g.,<br/>
-PRODUCT_COPY_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/
-libdrmpassthruplugin.so:system/lib/drm/plugins/native/libdrmpassthruplugin.so
-</code>
-<br/>
-<br/>
+<pre class="devsite-click-to-copy">
+PRODUCT_COPY_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/<var>PLUGIN_LIBRARY</var>:system/lib/drm/plugins/native/<var>PLUGIN_LIBRARY</var>
+</pre>
+<p>e.g.,</p>
+<pre class="devsite-click-to-copy">
+PRODUCT_COPY_FILES += $(TARGET_OUT_SHARED_LIBRARIES)/libdrmpassthruplugin.so:system/lib/drm/plugins/native/libdrmpassthruplugin.so
+</pre>
 <p>Plug-in developers must  locate their respective plug-ins under this
-directory like so:<br/>
-<code>/system/lib/drm/plugins/native/libdrmpassthruplugin.so</code></p>
+directory like so:</p>
+<pre class="devsite-click-to-copy">
+/system/lib/drm/plugins/native/libdrmpassthruplugin.so
+</pre>
 
   </body>
 </html>
diff --git a/en/devices/graphics/arch-gameloops.html b/en/devices/graphics/arch-gameloops.html
index 574c5a0..272a779 100644
--- a/en/devices/graphics/arch-gameloops.html
+++ b/en/devices/graphics/arch-gameloops.html
@@ -25,7 +25,7 @@
 
 <p>A very popular way to implement a game loop looks like this:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 while (playing) {
     advance state by one frame
     render the new frame
@@ -130,7 +130,7 @@
 simple game that did nothing but move a block every 100ms, you could have a
 dedicated thread that just did this:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
     run() {
         Thread.sleep(100);
         synchronized (mLock) {
diff --git a/en/devices/graphics/automate-tests.html b/en/devices/graphics/automate-tests.html
index 1cfdf25..beee449 100644
--- a/en/devices/graphics/automate-tests.html
+++ b/en/devices/graphics/automate-tests.html
@@ -22,9 +22,6 @@
   -->
 
 
-
-<h2 id=intro>Introduction</h2>
-
 <p>Deqp test modules can be integrated to automated test systems in multiple ways.
 The best approach depends on the existing test infrastructure and target
 environment.</p>
@@ -67,9 +64,9 @@
 
 <h4 id=example_1_run_gles2_functional_tests>Example 1: Run GLES2 functional tests on an Android device:</h4>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 executor --connect=127.0.0.1 --port=50016 --binaryname=
-com.drawelements.deqp/android.app.NativeActivity 
+com.drawelements.deqp/android.app.NativeActivity
 --caselistdir=caselists
 --testset=dEQP-GLES2.* --out=BatchResult.qpa
 --cmdline="--deqp-crashhandler=enable --deqp-watchdog=enable
@@ -78,9 +75,9 @@
 
 <h4 id=example_2_continue_a_partial_opengl>Example 2: Continue a partial OpenGL ES 2 test run locally:</h4>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 executor --start-server=execserver/execserver --port=50016
---binaryname=deqp-gles2 --workdir=modules/opengl 
+--binaryname=deqp-gles2 --workdir=modules/opengl
 --caselistdir=caselists
 --testset=dEQP-GLES2.* --exclude=dEQP-GLES2.performance.* --in=BatchResult.qpa
 --out=BatchResult.qpa
@@ -99,14 +96,14 @@
 
 <h4 id=example_1_export_test_log_in_csv_format>Example 1: Export test log in CSV format</h4>
 
-<pre>
-testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csv
-testlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">testlog-to-csv --value=code BatchResult.qpa > Result_statuscodes.csv</code>
+<code class="devsite-terminal">testlog-to-csv --value=details BatchResult.qpa > Result_statusdetails.csv</code>
 </pre>
 
 <h4 id=example_2_list_differences>Example 2: List differences of test results between two test logs</h4>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 testlog-to-csv --mode=diff --format=text Device_v1.qpa Device_v2.qpa
 </pre>
 
diff --git a/en/devices/graphics/build-tests.html b/en/devices/graphics/build-tests.html
index 3e280ab..6b5049e 100644
--- a/en/devices/graphics/build-tests.html
+++ b/en/devices/graphics/build-tests.html
@@ -35,15 +35,14 @@
 
 <p>CMake is an open source build system that supports multiple platforms and
 toolchains. CMake generates native makefiles or IDE project files from
-target-independent configuration files. For more information on CMake, 
-please see the <a href="http://www.cmake.org/cmake/help/documentation.html">CMake</a> documentation.</p>
+target-independent configuration files. For more information on CMake, please see the <a href="http://www.cmake.org/cmake/help/documentation.html">CMake</a> documentation.</p>
 
 <p>CMake supports and recommends out-of-source-tree builds, i.e., you should
 always create makefiles or project files in a separate build directory
 outside the source tree. CMake does not have any kind of "distclean" target, so
 removing any files generated by CMake must be done manually.</p>
 
-<p>Configuration options are given to CMake using <code>-D&lt;OPTION_NAME&gt;=&lt;VALUE&gt;</code> syntax. Some commonly used options for deqp are listed below.</p>
+<p>Configuration options are given to CMake using <code>-D<var>OPTION_NAME</var>=<var>VALUE</var></code> syntax. Some commonly used options for deqp are listed below.</p>
 
 <table>
  <tr>
@@ -53,9 +52,9 @@
 
  <tr>
     <td><code>DEQP_TARGET</code></td>
-<td><p>Target name, for example: "android"</p> 
+<td><p>Target name, for example: "android"</p>
 <p>The deqp CMake scripts will include the file
-<code>targets/&lt;DEQP_TARGET&gt;/&lt;DEQP_TARGET&gt;.cmake</code> and expect to find target-specific build options from there.</p>
+<code>targets/<var>DEQP_TARGET</var>/<var>DEQP_TARGET</var>.cmake</code> and expect to find target-specific build options from there.</p>
 </td>
  </tr>
  <tr>
@@ -64,7 +63,7 @@
  </tr>
  <tr>
     <td><code>CMAKE_BUILD_TYPE</code></td>
-<td><p>Build type for makefile targets. Valid values are: "Debug" and "Release"</p> 
+<td><p>Build type for makefile targets. Valid values are: "Debug" and "Release"</p>
 <p>Note the interpretation and default type depend on the targeted build system.
 See the CMake documentation for details.</p>
 </td>
@@ -75,9 +74,9 @@
 
 <p>The deqp build system is configured for new targets using target build files.
 A target build file defines which features the platform supports and what libraries or
-additional include paths are required. Target file names follow the <code>targets/&lt;name&gt;/&lt;name&gt;.cmake</code> format and the target is selected using the <code>DEQP_TARGET</code> build parameter.</p>
+additional include paths are required. Target file names follow the <code>targets/<var>NAME</var>/<var>NAME</var>.cmake</code> format and the target is selected using the <code>DEQP_TARGET</code> build parameter.</p>
 
-<p>File paths in target files are relative to the base <code>deqp</code> directory, not the <code>targets/&lt;name&gt;</code> directory. The following standard variables can be set by target build file.</p>
+<p>File paths in target files are relative to the base <code>deqp</code> directory, not the <code>targets/<var>NAME</var></code> directory. The following standard variables can be set by target build file.</p>
 
 <table>
  <tr>
@@ -173,14 +172,14 @@
 
 <p>Visual Studio project files can be generated with the following command:</p>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 cmake path\to\src\deqp -G "Visual Studio 12"
 </pre>
 
-<p>A 64-bit build can be made by selecting "Visual Studio &lt;ver&gt; Win64" as the build
+<p>A 64-bit build can be made by selecting "Visual Studio <var>VERSION</var> Win64" as the build
 generator:</p>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 cmake path\to\src\deqp -G "Visual Studio 12 Win64"
 </pre>
 
@@ -223,7 +222,7 @@
   <li><a href="https://www.python.org/downloads/">Python 2.6</a> or newer in 2.x series; Python 3.x is not supported
   <li>For Windows: Either NMake or JOM in <code>PATH</code>
   <ul>
-    <li><a href="http://qt-project.org/wiki/jom">JOM</a> enables faster builds 
+    <li><a href="http://qt-project.org/wiki/jom">JOM</a> enables faster builds
   </ul>
   <li> Optional: Ninja make is also supported on Linux
 </ul>
@@ -231,7 +230,7 @@
 <p>Ant and SDK binaries are located based on the PATH environment variable with
 certain overriding defaults. The logic is controlled by <code>android/scripts/common.py</code>. </p>
 
-<p>The NDK directory must be either <code>~/android-ndk-&lt;version&gt;</code> or <code>C:/android/android-ndk-&lt;version&gt;</code> or defined via the <code>ANDROID_NDK_PATH</code> environment variable.</p>
+<p>The NDK directory must be either <code>~/android-ndk-<var>VERSION</var></code> or <code>C:/android/android-ndk-<var>VERSION</var></code> or defined via the <code>ANDROID_NDK_PATH</code> environment variable.</p>
 
 <p>Deqp on-device components, the test execution service, and test programs are
 built by executing the <code>android/scripts/build.py</code> script. The final .apk is created in <code>android/package/bin</code> and can be installed by the <code>install.py</code> script. If the <a href="port-tests.html#test_execution_service">command line executor</a> is used, the ExecService is launched with <code>launch.py</code> script on the device via ADB. The scripts can be executed from any directory.</p>
@@ -283,12 +282,12 @@
 <p>An example of a full command line used to do a 32-bit debug build against
 driver headers and libraries in a custom location is the following:</p>
 
-<pre>
-$ cmake &lt;path to src>/deqp -DDEQP_TARGET=x11_egl -DCMAKE_C_FLAGS="-m32"
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cmake &lt;path to src>/deqp -DDEQP_TARGET=x11_egl -DCMAKE_C_FLAGS="-m32"
 -DCMAKE_CXX_FLAGS="-m32" -DCMAKE_BUILD_TYPE=Debug
--DCMAKE_LIBRARY_PATH="&lt;path to driver>/lib" 
--DCMAKE_INCLUDE_PATH="&lt;path to driver>/inc"
-$ make -j4
+-DCMAKE_LIBRARY_PATH="<var>PATH_TO_DRIVER</var>/lib"
+-DCMAKE_INCLUDE_PATH="<var>PATH_TO_DRIVER</var>/inc"</code>
+<code class="devsite-terminal">make -j4</code>
 </pre>
 
 <h2 id=cross-compiling>Cross-compiling</h2>
@@ -334,10 +333,10 @@
 
 <p>The toolchain file can be selected using the <code>CMAKE_TOOLCHAIN_FILE</code> build parameter. For example, the following would create makefiles for a build using the CodeSourcery cross-compiler for ARM/Linux:</p>
 
-<pre>
-cmake &lt;path to src>/deqp –DDEQP_BUILD_TYPE="Release"
-–DCMAKE_TOOLCHAIN_FILE=&lt;path to src>/delibs/cmake/toolchain-arm-cs.cmake
-–DARM_CC_BASE=&lt;path to cc directory>
+<pre class="devsite-terminal devsite-click-to-copy">
+cmake <var>PATH_TO_SRC</var>/deqp –DDEQP_BUILD_TYPE="Release"
+–DCMAKE_TOOLCHAIN_FILE=<var>PATH_TO_SRC</var>/delibs/cmake/toolchain-arm-cs.cmake
+–DARM_CC_BASE=<var>PATH_TO_CC_DIRECTORY</var>
 </pre>
 
 <h2 id=run-time_linking_of_gles_and_egl_libraries>Run-time linking of GLES and EGL libraries</h2>
diff --git a/en/devices/graphics/cts-integration.html b/en/devices/graphics/cts-integration.html
index 89169ee..cf105b1 100644
--- a/en/devices/graphics/cts-integration.html
+++ b/en/devices/graphics/cts-integration.html
@@ -35,8 +35,8 @@
 source tree. You can run deqp tests through the <code>cts-tradefed</code>
 utility with the following command:</p>
 
-<pre>
-$ cts-tradefed run cts --plan CTS-DEQP
+<pre class="devsite-terminal devsite-click-to-copy">
+cts-tradefed run cts --plan CTS-DEQP
 </pre>
 
 <h2 id=duplicating_runs_without_cts>Duplicating runs without CTS</h2>
@@ -44,8 +44,8 @@
 <p>To replicate the CTS run, install the deqp APK of the CTS package and use the
 following command:</p>
 
-<pre>
-$ adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \
+<pre class="devsite-terminal devsite-click-to-copy">
+adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \
 cmdLine "deqp --deqp-case=dEQP-GLES3.some_group.* --deqp-gl-config-name=rgba8888d24s8 --deqp-log-filename=/sdcard/dEQP-Log.qpa
 </pre>
 
diff --git a/en/devices/graphics/implement-hwc.html b/en/devices/graphics/implement-hwc.html
index 76c58f5..903d335 100644
--- a/en/devices/graphics/implement-hwc.html
+++ b/en/devices/graphics/implement-hwc.html
@@ -206,7 +206,7 @@
 <li>Change some of the layer composition types and re-validate the display.</li>
 </ul>
 
-<blockquote><strong><em>OR</strong></em></blockquote>
+<em><strong>OR</strong></em>
 
 <ul>
 <li>Call <code>acceptDisplayChanges</code>, which has the same effect as
@@ -252,7 +252,7 @@
 the contents of one display are updated.</p>
 <p>For example, if only the external display is updated, the sequence is:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 // Update state for internal display
 // Update state for external display
 validateDisplay(&lt;internal display&gt;)
diff --git a/en/devices/graphics/implement-vsync.html b/en/devices/graphics/implement-vsync.html
index 9fa1252..828d8d1 100644
--- a/en/devices/graphics/implement-vsync.html
+++ b/en/devices/graphics/implement-vsync.html
@@ -32,7 +32,9 @@
 <p>The Hardware Composer (HWC) has a function pointer indicating the function
 to implement for VSYNC:</p>
 
-<pre class=prettyprint> int (waitForVsync*) (int64_t *timestamp) </pre>
+<pre class="prettyprint">
+int (waitForVsync*) (int64_t *timestamp)
+</pre>
 
 <p>This function blocks until a VSYNC occurs and returns the timestamp of the
 actual VSYNC. A message must be sent every time VSYNC occurs. A client can
@@ -179,7 +181,7 @@
 those buffers on the display, and block while the buffer is visible. For
 example:</p>
 
-<pre class=prettyprint>
+<pre class="prettyprint">
 /*
  * assumes buf is ready to be displayed.  returns when buffer is no longer on
  * screen.
@@ -197,7 +199,7 @@
 As you queue up buffers, the kernel will list dependencies with the
 synchronization framework:</p>
 
-<pre class=prettyprint>
+<pre class="prettyprint">
 /*
  * will display buf when fence is signaled.  returns immediately with a fence
  * that will signal when buf is no longer displayed.
diff --git a/en/devices/graphics/implement-vulkan.html b/en/devices/graphics/implement-vulkan.html
index ca5c1a0..918343e 100644
--- a/en/devices/graphics/implement-vulkan.html
+++ b/en/devices/graphics/implement-vulkan.html
@@ -81,7 +81,7 @@
 Vulkan drivers are:</p>
 
 <p>
-<pre>
+<pre class="devsite-click-to-copy">
 /vendor/lib/hw/vulkan.&lt;ro.product.platform&gt;.so
 /vendor/lib64/hw/vulkan.&lt;ro.product.platform&gt;.so
 </pre>
@@ -176,7 +176,7 @@
 flags into gralloc usage flags by calling:</p>
 
 <p>
-<pre>
+<pre class="devsite-click-to-copy">
 VkResult VKAPI vkGetSwapchainGrallocUsageANDROID(
     VkDevice            device,
     VkFormat            format,
@@ -203,7 +203,7 @@
 the number of native buffers requested for the swapchain, then creates a
 <code>VkImage</code> for each one:</p>
 
-<p><pre>
+<pre class="devsite-click-to-copy">
 typedef struct {
     VkStructureType             sType; // must be VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID
     const void*                 pNext;
@@ -216,12 +216,12 @@
     int                         format;
     int                         usage;
 } VkNativeBufferANDROID;
-</pre></p>
+</pre>
 
 <p>When creating a gralloc-backed image, the <code>VkImageCreateInfo</code> has
 the following data:</p>
 
-<p><pre>
+<pre class="devsite-click-to-copy">
  .imageType           = VK_IMAGE_TYPE_2D
   .format              = a VkFormat matching the format requested for the gralloc buffer
   .extent              = the 2D dimensions requested for the gralloc buffer
@@ -241,7 +241,7 @@
 and imports an externally-signalled native fence into both an existing
 <code>VkSemaphore</code> object and an existing <code>VkFence</code> object:</p>
 
-<p><pre>
+<pre class="devsite-click-to-copy">
 VkResult VKAPI vkAcquireImageANDROID(
     VkDevice            device,
     VkImage             image,
@@ -249,7 +249,7 @@
     VkSemaphore         semaphore,
     VkFence             fence
 );
-</pre></p>
+</pre>
 
 <p>This function is called during <code>vkAcquireNextImageWSI</code> to import a
 native fence into the <code>VkSemaphore</code> and <code>VkFence</code> objects
@@ -274,13 +274,13 @@
 external use, and creates a native fence and schedules it to be signalled when
 prior work on the queue has completed:</p>
 
-<p><pre>
+<pre class="devsite-click-to-copy">
 VkResult VKAPI vkQueueSignalReleaseImageANDROID(
     VkQueue             queue,
     VkImage             image,
     int*                pNativeFenceFd
 );
-</pre></p>
+</pre>
 
 <p>This API is called during <code>vkQueuePresentWSI</code> on the provided
 queue. Effects are similar to <code>vkQueueSignalSemaphore</code>, except with a
diff --git a/en/devices/graphics/run-tests.html b/en/devices/graphics/run-tests.html
index f7846a6..b0d043b 100644
--- a/en/devices/graphics/run-tests.html
+++ b/en/devices/graphics/run-tests.html
@@ -209,19 +209,19 @@
 test sets grow, the repetitive prefixes can be cumbersome. To avoid repeating
 the prefixes, use a trie (also known as a prefix tree) syntax shown below.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 {nodeName{firstChild{…},…lastChild{…}}}
 </pre>
 
 <p>For example:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 {dEQP-EGL{config-list,create_context{rgb565_depth_stencil}}}
 </pre>
 
 <p>Translates into the following two test cases:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 dEQP-EGL.config_list
 dEQP-EGL.create_context.rgb565_depth_stencil
 </pre>
@@ -235,20 +235,22 @@
 <p>The application package can be installed with the following command (name
 shown is the name of the APK in the Android CTS package; which name depends on
 the build):</p>
-<pre>$ adb –d install –r com.drawelements.deqp.apk</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb –d install –r com.drawelements.deqp.apk
+</pre>
 
 <p>To launch the test execution service and to setup port forwarding, use the
 following:</p>
-<pre>
-$ adb –d forward tcp:50016 tcp:50016
-$ adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb –d forward tcp:50016 tcp:50016</code>
+<code class="devsite-terminal">adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter</code>
 </pre>
 
 <p>Debug prints can be enabled by executing the following before starting the
 tests:</p>
 
-<pre>
-$ adb –d shell setprop log.tag.dEQP DEBUG
+<pre class="devsite-terminal devsite-click-to-copy">
+adb –d shell setprop log.tag.dEQP DEBUG
 </pre>
 
 <h3 id=executing_tests_on_android_without_android_cts>Executing tests on
@@ -267,7 +269,8 @@
 utility. For example, to run <code>dEQP-GLES2.info</code> tests on a platform
 supporting <code>NativeActivity,</code> use the following commands.</p>
 
-<pre>$ adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \
+<pre class="devsite-terminal devsite-click-to-copy">
+adb -d shell am start -n com.drawelements.deqp/android.app.NativeActivity -e \
 cmdLine "deqp --deqp-case=dEQP-GLES2.info.* --deqp-log-filename=/sdcard/dEQP-Log.qpa
 </pre>
 
@@ -276,15 +279,16 @@
 <p>To run the tests under the GDB debugger on Android, first compile and install
 the debug build by running the following two scripts:</p>
 
-<pre>
-$ python android/scripts/build.py --native-build-type=Debug
-$ python android/scripts/install.py
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">python android/scripts/build.py --native-build-type=Debug</code>
+<code class="devsite-terminal">python android/scripts/install.py</code>
 </pre>
 
 <p>After the debug build is installed on the device, to launch the tests under
 GDB running on the host, run the following command:</p>
 
-<pre>$ python android/scripts/debug.py \
+<pre class="devsite-terminal devsite-click-to-copy">
+python android/scripts/debug.py \
 --deqp-commandline="--deqp-log-filename=/sdcard/TestLog.qpa --deqp-case=dEQP-GLES2.functional.*"
 </pre>
 
@@ -310,8 +314,7 @@
 <code>&lt;path-to-ndk&gt;/prebuilt/windows/bin</code> to the PATH variable.</p>
 
 <p class="note"><strong>Note:</strong> Native code debugging does not work on
-stock Android 4.3; for workarounds, refer to
-<a href="https://code.google.com/p/android/issues/detail?id=58373">https://code.google.com/p/android/issues/detail?id=58373</a>.
+stock Android 4.3; for workarounds, refer to <a href="https://issuetracker.google.com/issues/36976703">this public bug</a>.
 Android 4.4 and higher do not contain this bug.</p>
 
   </body>
diff --git a/en/devices/graphics/test-groups.html b/en/devices/graphics/test-groups.html
index 943c114..e39ac44 100644
--- a/en/devices/graphics/test-groups.html
+++ b/en/devices/graphics/test-groups.html
@@ -35,14 +35,14 @@
 can occur: The operating system may kill the test process instead of allowing a
 driver to handle or otherwise provide an out-of-memory error. On such
 platforms, tests that are designed to cause out-of-memory errors are disabled
-by default, and must be enabled using the  <code>--deqp-test-oom=enable</code> command line argument. 
+by default, and must be enabled using the  <code>--deqp-test-oom=enable</code> command line argument.
 It is recommended that you run such tests manually to
 check if the system behaves correctly under resource pressure. However, in such
 a situation, a test process crash should be interpreted as a pass.</p>
 
 <h3 id=test_groups>Test groups</h3>
 
-<pre>
+<pre class="devsite-click-to-copy">
 dEQP-GLES2.stress.memory.*
 dEQP-GLES3.stress.memory.*
 </pre>
@@ -55,7 +55,7 @@
 
 <h3 id=test_groups2>Test groups</h3>
 
-<pre>
+<pre class="devsite-click-to-copy">
 dEQP-GLES2.stress.long.*
 dEQP-GLES3.stress.long.*
 </pre>
diff --git a/en/devices/input/diagnostics.html b/en/devices/input/diagnostics.html
index bd5036d..9278001 100644
--- a/en/devices/input/diagnostics.html
+++ b/en/devices/input/diagnostics.html
@@ -29,8 +29,8 @@
 
 <h2 id="input">Input</h2>
 <p>To dump the input system’s state, run the following command:</p>
-<pre>
-$ adb shell dumpsys input
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys input
 </pre>
 
 <h2 id="output">Output</h2>
@@ -46,7 +46,7 @@
 
 <h3 id="event_hub_state">Event Hub State</h3>
 
-<pre><code>
+<pre class="devsite-click-to-copy">
 INPUT MANAGER (dumpsys input)
 
 Event Hub State:
@@ -171,7 +171,7 @@
 
 <p>As an example, this is what a special function keypad looks like:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 Input Reader State
 ...
   Device 3: tuna-gpio-keypad
@@ -192,7 +192,7 @@
 <p>Here is a touch screen.  Notice all of the information about the resolution of
 the device and the calibration parameters that were used.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 Input Reader State
 ...
   Device 6: Melfas MMSxxx Touchscreen
@@ -264,7 +264,8 @@
 <p>Here is an external keyboard / mouse combo HID device.  (This device doesn't actually
 have a mouse but its HID descriptor says it does.)</p>
 
-<pre><code>  Device 7: Motorola Bluetooth Wireless Keyboard
+<pre class="devsite-click-to-copy">
+ Device 7: Motorola Bluetooth Wireless Keyboard
     IsExternal: true
     Sources: 0x00002103
     KeyboardType: 2
@@ -302,7 +303,8 @@
 </code></pre>
 <p>Here is a joystick.  Notice how all of the axes have been scaled to a normalized
 range.  The axis mapping can be configured using key layout files.</p>
-<pre><code>Device 18: Logitech Logitech Cordless RumblePad 2
+<pre class="devsite-click-to-copy">
+Device 18: Logitech Logitech Cordless RumblePad 2
     IsExternal: true
     Sources: 0x01000511
     KeyboardType: 1
@@ -345,7 +347,8 @@
 </code></pre>
 <p>At the end of the input reader dump there is some information about global configuration
 parameters such as the mouse pointer speed.</p>
-<pre><code>  Configuration:
+<pre class="devsite-click-to-copy">
+  Configuration:
     ExcludedDeviceNames: []
     VirtualKeyQuietTime: 0.0ms
     PointerVelocityControlParameters: scale=1.000, lowThreshold=500.000, highThreshold=3000.000, acceleration=3.000
@@ -378,7 +381,7 @@
 <p>The <code>InputDispatcher</code> is responsible for sending input events to applications.
 Its state dump shows information about which window is being touched, the
 state of the input queue, whether an ANR is in progress, and so on.</p>
-<pre>
+<pre class="devsite-click-to-copy">
 Input Dispatcher State:
   DispatchEnabled: 1
   DispatchFrozen: 0
diff --git a/en/devices/input/getevent.html b/en/devices/input/getevent.html
index c6f2c36..69746bc 100644
--- a/en/devices/input/getevent.html
+++ b/en/devices/input/getevent.html
@@ -30,12 +30,15 @@
 desired stream of input events.</p>
 
 <h2 id="showing-device-capabilities">Showing device capabilities</h2>
-<p>Use the <code>-p</code> option to see all of the keys and axes a device
-reports. The following example lists the Linux key codes and other events a
+<p>Use the <code>-p</code> option with the <code>adb</code> command to see all of the keys and axes a device
+reports.</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">adb shell su -- getevent -p</pre>
+
+<p>The following example lists the Linux key codes and other events a
 particular keyboard says it supports.</p>
 
-<pre><code>$ adb shell su -- getevent -p
-
+<pre>
   name:     "Motorola Bluetooth Wireless Keyboard"
   events:
     KEY (0001): 0001  0002  0003  0004  0005  0006  0007  0008
@@ -69,15 +72,17 @@
     LED (0011): 0000  0001  0002  0003  0004
   input props:
     &lt;none&gt;
-</code></pre>
+</pre>
 
 <p>Use the <code>-i</code> option to get more information, including HID mapping
 tables and debugging information.</p>
 
-<p>Use the <code>-l</code> option to display textual labels for all event codes.
-Example:</p>
-<pre><code>$ adb shell su -- getevent -lp /dev/input/event1
-
+<p>Use the <code>-l</code> option to display textual labels for all event codes.</p>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell su -- getevent -lp /dev/input/event1
+</pre>
+<p>Example:</p>
+<pre>
   name:     "Melfas MMSxxx Touchscreen"
   events:
     ABS (0003): ABS_MT_SLOT           : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0
@@ -95,8 +100,12 @@
 option displays textual labels and the <code>-t</code> option displays
 timestamps.</p>
 
-<pre><code>$ adb shell su -- getevent -lt /dev/input/event1
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell su -- getevent -lt /dev/input/event1
+</pre>
 
+<p>Example:</p>
+<pre>
 [   78826.389007] EV_ABS       ABS_MT_TRACKING_ID   0000001f
 [   78826.389038] EV_ABS       ABS_MT_PRESSURE      000000ab
 [   78826.389038] EV_ABS       ABS_MT_POSITION_X    000000ab
@@ -112,7 +121,7 @@
 [   78826.468719] EV_ABS       ABS_MT_SLOT          00000001
 [   78826.468719] EV_ABS       ABS_MT_TRACKING_ID   ffffffff
 [   78826.468719] EV_SYN       SYN_REPORT           00000000
-</code></pre>
+</pre>
 <p class="note"><strong>Note:</strong> <code>getevent</code> timestamps use
 the format $SECONDS.$MICROSECONDS in the CLOCK_MONOTONIC timebase. For details,
 refer to getevent.c.</p>
diff --git a/en/devices/input/input-device-configuration-files.html b/en/devices/input/input-device-configuration-files.html
index 3e0f6da..20402da 100644
--- a/en/devices/input/input-device-configuration-files.html
+++ b/en/devices/input/input-device-configuration-files.html
@@ -68,8 +68,9 @@
 <h3 id="properties">Properties</h3>
 <p>Property assignments each consist of a property name, an <code>=</code>, a property value,
 and a new line.  Like this:</p>
-<pre><code>property = value
-</code></pre>
+<pre class="devsite-click-to-copy">
+property = value
+</pre>
 <p>Property names are non-empty literal text identifiers.  They must not contain
 whitespace.  Each components of the input system defines a set of properties
 that are used to configure its function.</p>
@@ -78,11 +79,13 @@
 <p>Property names and values are case-sensitive.</p>
 <h3 id="comments">Comments</h3>
 <p>Comment lines begin with '#' and continue to the end of the line.  Like this:</p>
-<pre><code># A comment!
-</code></pre>
+<pre class="devsite-click-to-copy">
+# A comment!
+</pre>
 <p>Blank lines are ignored.</p>
 <h3 id="example">Example</h3>
-<pre><code># This is an example of an input device configuration file.
+<pre class="devsite-click-to-copy">
+# This is an example of an input device configuration file.
 # It might be used to describe the characteristics of a built-in touch screen.
 
 # This is an internal device, not an external peripheral attached to the USB
@@ -96,9 +99,9 @@
 
 # Additional calibration properties...
 # etc...
-</code></pre>
+</pre>
 <h2 id="common-properties">Common Properties</h2>
-<p>The following properties are common to all input device classes.</p>
+<p>The following property is common to all input device classes.</p>
 <p>Refer to the documentation of each input device class for information about the
 special properties used by each class.</p>
 <h4 id="deviceinternal"><code>device.internal</code></h4>
diff --git a/en/devices/input/key-character-map-files.html b/en/devices/input/key-character-map-files.html
index 68e370e..803610e 100644
--- a/en/devices/input/key-character-map-files.html
+++ b/en/devices/input/key-character-map-files.html
@@ -50,7 +50,7 @@
 <li><code>/data/system/devices/keychars/Virtual.kcm</code></li>
 </ul>
 <p>When constructing a file path that contains the device name, all characters
-in the device name other than '0'-'9', 'a'-'z', 'A'-'Z', '-' or '<em>' are replaced by '</em>'.</p>
+in the device name other than '0'-'9', 'a'-'z', 'A'-'Z', '-' or '_' are replaced by '_'.</p>
 <h2 id="generic-key-character-map-file">Generic Key Character Map File</h2>
 <p>The system provides a special built-in key character map file called <code>Generic.kcm</code>.
 This key character map is intended to support a variety of standard external
@@ -76,8 +76,9 @@
 <p>A keyboard type declaration describes the overall behavior of the keyboard.
 A character map file must contain a keyboard type declaration.  For clarity,
 it is often placed at the top of the file.</p>
-<pre><code>type FULL
-</code></pre>
+<pre class="devsite-click-to-copy">
+type FULL
+</pre>
 <p>The following keyboard types are recognized:</p>
 <ul>
 <li>
@@ -120,13 +121,14 @@
 <h3 id="key-declarations">Key Declarations</h3>
 <p>Key declarations each consist of the keyword <code>key</code> followed by an Android key code
 name, an open curly brace, a set of properties and behaviors and a close curly brace.</p>
-<pre><code>key A {
+<pre class="devsite-click-to-copy">
+key A {
     label:                              'A'
     base:                               'a'
     shift, capslock:                    'A'
     ctrl, alt, meta:                    none
 }
-</code></pre>
+</pre>
 <h4 id="properties">Properties</h4>
 <p>Each key property establishes a mapping from a key to a behavior.  To make the
 key character map files more compact, several properties can be mapped to the
@@ -254,8 +256,9 @@
 <p>Refer to <code>KeyCharacterMap.getDeadChar</code> for more information about dead key handling.</p>
 <h3 id="comments">Comments</h3>
 <p>Comment lines begin with '#' and continue to the end of the line.  Like this:</p>
-<pre><code># A comment!
-</code></pre>
+<pre class="devsite-click-to-copy">
+# A comment!
+</pre>
 <p>Blank lines are ignored.</p>
 <h3 id="how-key-combinations-are-mapped-to-behaviors">How Key Combinations are Mapped to Behaviors</h3>
 <p>When the user presses a key, the system looks up the behavior associated with
@@ -263,13 +266,14 @@
 <h4 id="shift-a">SHIFT + A</h4>
 <p>Suppose the user pressed A and SHIFT together.  The system first locates
 the set of properties and behaviors associated with <code>KEYCODE_A</code>.</p>
-<pre><code>key A {
+<pre class="devsite-click-to-copy">
+key A {
     label:                              'A'
     base:                               'a'
     shift, capslock:                    'A'
     ctrl, alt, meta:                    none
 }
-</code></pre>
+</pre>
 <p>The system scans the properties from first to last and left to right, ignoring
 the <code>label</code> and <code>number</code> properties, which are special.</p>
 <p>The first property encountered is <code>base</code>.  The <code>base</code> property always applies to
@@ -295,12 +299,13 @@
 <p>So the resulting behavior for the key combination CONTROL + A is <code>none</code>.</p>
 <h4 id="escape">ESCAPE</h4>
 <p>Now suppose the user pressed ESCAPE.</p>
-<pre><code>key ESCAPE {
+<pre class="devsite-click-to-copy">
+key ESCAPE {
     base:                               fallback BACK
     alt, meta:                          fallback HOME
     ctrl:                               fallback MENU
 }
-</code></pre>
+</pre>
 <p>This time the system obtains the behavior <code>fallback BACK</code>, a fallback behavior.
 Because no character literal appears, no character will be typed.</p>
 <p>When processing the key, the system will first deliver <code>KEYCODE_ESCAPE</code> to the
@@ -317,19 +322,21 @@
 when NUM LOCK is pressed.  When NUM LOCK is not pressed, the key is delivered
 to the application as usual, and if it is not handled, then the fallback
 key <code>KEYCODE_INSERT</code> is delivered instead.</p>
-<pre><code>key NUMPAD_0 {
+<pre class="devsite-click-to-copy">
+key NUMPAD_0 {
     label, number:                      '0'
     base:                               fallback INSERT
     numlock:                            '0'
     ctrl, alt, meta:                    none
 }
-</code></pre>
+</pre>
 <p>As we can see, fallback key declarations greatly improve compatibility
 with older applications that do not recognize or directly support all of the keys
 that are present on a full PC style keyboard.</p>
 <h3 id="examples">Examples</h3>
 <h4 id="full-keyboard">Full Keyboard</h4>
-<pre><code># This is an example of part of a key character map file for a full keyboard
+<pre class="devsite-click-to-copy">
+# This is an example of part of a key character map file for a full keyboard
 # include a few fallback behaviors for special keys that few applications
 # handle themselves.
 
@@ -357,9 +364,10 @@
     numlock:                            '9'
     ctrl, alt, meta:                    none
 }
-</code></pre>
+</pre>
 <h4 id="alphanumeric-keyboard">Alphanumeric Keyboard</h4>
-<pre><code># This is an example of part of a key character map file for an alphanumeric
+<pre class="devsite-click-to-copy">
+# This is an example of part of a key character map file for an alphanumeric
 # thumb keyboard.  Some keys are combined, such as `A` and `2`.  Here we
 # specify `number` labels to tell the system what to do when the user is
 # typing a number into a dial pad.
@@ -386,9 +394,10 @@
     alt:                                '\uef01'
     shift+alt:                          '\uef01'
 }
-</code></pre>
+</pre>
 <h4 id="game-pad">Game Pad</h4>
-<pre><code># This is an example of part of a key character map file for a game pad.
+<pre class="devsite-click-to-copy">
+# This is an example of part of a key character map file for a game pad.
 # It defines fallback actions that enable the user to navigate the user interface
 # by pressing buttons.
 
@@ -409,7 +418,7 @@
 key BUTTON_SELECT {
     base:                               fallback MENU
 }
-</code></pre>
+</pre>
 <h2 id="compatibility-note">Compatibility Note</h2>
 <p>Prior to Android Honeycomb 3.0, the Android key character map was specified
 using a very different syntax and was compiled into a binary file format
diff --git a/en/devices/input/key-layout-files.html b/en/devices/input/key-layout-files.html
index b9ee2be..22faf84 100644
--- a/en/devices/input/key-layout-files.html
+++ b/en/devices/input/key-layout-files.html
@@ -70,11 +70,12 @@
 integer, where the high 16-bits represent the HID usage page and the low 16-bits
 represent the HID usage ID. Either declaration can be followed by an optional
 set of whitespace-delimited policy flags.</p>
-<pre><code>key 1     ESCAPE
+<pre class="devsite-click-to-copy">
+key 1     ESCAPE
 key 114   VOLUME_DOWN
 key 16    Q                 VIRTUAL
 key usage 0x0c006F          BRIGHTNESS_UP
-</code></pre>
+</pre>
 <p>The following policy flags are recognized:</p>
 <ul>
 <li><code>FUNCTION</code>: The key should be interpreted as if the FUNCTION key
@@ -95,7 +96,9 @@
 <p>A basic axis simply maps a Linux axis code to an Android axis code name. The
 following declaration maps <code>ABS_X</code> (indicated by <code>0x00</code>)
 to <code>AXIS_X</code> (indicated by <code>X</code>).</p>
-<pre><code>axis 0x00 X</code></pre>
+<pre class="devsite-click-to-copy">
+axis 0x00 X
+</pre>
 <p>In the above example, if the value of <code>ABS_X</code> is <code>5</code>
 then <code>AXIS_X</code> is set to <code>5</code>.</p>
 
@@ -108,7 +111,8 @@
 (indicated by <code>0x01</code>) to <code>AXIS_GAS</code> when less than
 <code>0x7f</code> or to <code>AXIS_BRAKE</code> when greater than
 <code>0x7f</code>.</p>
-<pre><code>axis 0x01 split 0x7f GAS BRAKE</code></pre>
+<pre class="devsite-click-to-copy">
+axis 0x01 split 0x7f GAS BRAKE</pre>
 <p>In the above example, if the value of <code>ABS_Y</code> is <code>0x7d</code>
 then <code>AXIS_GAS</code> is set to <code>2</code> (<code>0x7f - 0x7d</code>)
 and <code>AXIS_BRAKE</code> is set to <code>0</code>. Conversely, if the value
@@ -123,7 +127,9 @@
 declaration maps <code>ABS_RZ</code> (indicated by <code>0x05</code>) to
 <code>AXIS_BRAKE</code> (indicated by <code>BRAKE</code>), and inverts the
 output by negating it.</p>
-<pre><code>axis 0x05 invert BRAKE</code></pre>
+<pre class="devsite-click-to-copy">
+axis 0x05 invert BRAKE
+</pre>
 <p>In the above example, if the value of <code>ABS_RZ</code> is <code>2</code>
 then <code>AXIS_BRAKE</code> is set to <code>-2</code>.</p>
 
@@ -136,19 +142,24 @@
 them provide incorrect values. To resolve this issue, an axis declaration may be
 followed by a <code>flat</code> option that specifies the value of the center
 flat position for the axis.</p>
-<pre><code>axis 0x03 Z flat 4096</code></pre>
+<pre class="devsite-click-to-copy">
+axis 0x03 Z flat 4096
+</pre>
 <p>In the above example, the center flat position is set to <code>4096</code>.
 </p>
 
 <h3 id="comments">Comments</h3>
 <p>Comment lines begin with # and continue to the end of the line:</p>
-<pre><code># A comment!</code></pre>
+<pre class="devsite-click-to-copy">
+# A comment!
+</pre>
 <p>Blank lines are ignored.</p>
 
 <h3 id="examples">Examples</h3>
 
 <h4 id="keyboard">Keyboard</h4>
-<pre><code># This is an example of a key layout file for a keyboard.
+<pre class="devsite-click-to-copy">
+# This is an example of a key layout file for a keyboard.
 
 key 1     ESCAPE
 key 2     1
@@ -166,29 +177,32 @@
 key 14    DEL
 
 # etc...
-</code></pre>
+</pre>
 
 <h4 id="system-controls">System Controls</h4>
-<pre><code># This is an example of a key layout file for basic system controls,
+<pre class="devsite-click-to-copy">
+# This is an example of a key layout file for basic system controls,
 # such as volume and power keys which are typically implemented as GPIO pins
 # the device decodes into key presses.
 
 key 114   VOLUME_DOWN
 key 115   VOLUME_UP
 key 116   POWER
-</code></pre>
+</pre>
 
 <h4 id="capacitive-buttons">Capacitive Buttons</h4>
-<pre><code># This is an example of a key layout file for a touch device with capacitive buttons.
+<pre class="devsite-click-to-copy">
+# This is an example of a key layout file for a touch device with capacitive buttons.
 
 key 139    MENU           VIRTUAL
 key 102    HOME           VIRTUAL
 key 158    BACK           VIRTUAL
 key 217    SEARCH         VIRTUAL
-</code></pre>
+</pre>
 
 <h4 id="headset-jack-media-controls">Headset Jack Media Controls</h4>
-<pre><code># This is an example of a key layout file for headset mounted media controls.
+<pre class="devsite-click-to-copy">
+# This is an example of a key layout file for headset mounted media controls.
 # A typical headset jack interface might have special control wires or detect known
 # resistive loads as corresponding to media functions or volume controls.
 # This file assumes that the driver decodes these signals and reports media
@@ -197,10 +211,11 @@
 key 163   MEDIA_NEXT
 key 165   MEDIA_PREVIOUS
 key 226   HEADSETHOOK
-</code></pre>
+</pre>
 
 <h4 id="joystick">Joystick</h4>
-<pre><code># This is an example of a key layout file for a joystick.
+<pre class="devsite-click-to-copy">
+# This is an example of a key layout file for a joystick.
 
 # These are the buttons that the joystick supports, represented as keys.
 key 304   BUTTON_A
@@ -231,7 +246,7 @@
 # Hat.
 axis 0x10 HAT_X
 axis 0x11 HAT_Y
-</code></pre>
+</pre>
 
 <h2 id="virtual-soft-keys">Virtual Soft Keys</h2>
 <p>The input system provides special features for implementing virtual soft keys
@@ -268,22 +283,24 @@
 <ol>
 <li>Provide a key layout file for the touch screen or capacitive button
 input device with the <code>VIRTUAL</code> flag set for each key.
-<pre><code>key 139    MENU           VIRTUAL
+<pre class="devsite-click-to-copy">
+key 139    MENU           VIRTUAL
 key 102    HOME           VIRTUAL
 key 158    BACK           VIRTUAL
 key 217    SEARCH         VIRTUAL
-</code></pre>
+</pre>
 </li>
 <li>Set the value of the virtual key quiet time in a resource overlay for the
 framework <code>config.xml</code> resource.
-<pre><code>&lt;!-- Specifies the amount of time to disable virtual keys after the screen
+<pre class="devsite-click-to-copy">
+&lt;!-- Specifies the amount of time to disable virtual keys after the screen
 is touched to filter out accidental virtual key presses due to swiping gestures
 or taps near the edge of the display. May be 0 to disable the feature.
 It is recommended that this value be no more than 250 ms.
 This feature should be disabled for most devices. --&gt;
 
 &lt;integer name="config_virtualKeyQuietTimeMillis"&gt;250&lt;/integer&gt;
-</code></pre>
+</pre>
 </li>
 </ol>
 
diff --git a/en/devices/input/keyboard-devices.html b/en/devices/input/keyboard-devices.html
index 94ff317..34f3575 100644
--- a/en/devices/input/keyboard-devices.html
+++ b/en/devices/input/keyboard-devices.html
@@ -229,7 +229,8 @@
 regardless of the setting of this property.  This is because a special-function
 keyboard is by definition not intended to be used for general purpose typing.</p>
 <h3 id="example-configurations">Example Configurations</h3>
-<pre><code># This is an example input device configuration file for a built-in
+<pre class="devsite-click-to-copy">
+# This is an example input device configuration file for a built-in
 # keyboard that has a DPad.
 
 # The keyboard is internal because it is part of the device.
@@ -245,7 +246,7 @@
 # DPad always means 'up' from the perspective of the user, even when the entire
 # device has been rotated.
 keyboard.orientationAware = 1
-</code></pre>
+</pre>
 <h3 id="compatibility-notes">Compatibility Notes</h3>
 <p>Prior to Honeycomb, the keyboard input mapper did not use any configuration properties.
 All keyboards were assumed to be physically attached and orientation aware.  The default
diff --git a/en/devices/input/touch-devices.html b/en/devices/input/touch-devices.html
index bc65c5c..8cbcc66 100644
--- a/en/devices/input/touch-devices.html
+++ b/en/devices/input/touch-devices.html
@@ -357,9 +357,10 @@
 <p>For a touch screen, the system automatically interpolates the reported touch
 positions in surface units to obtain touch positions in display pixels according
 to the following calculation:</p>
-<pre><code>displayX = (x - minX) * displayWidth / (maxX - minX + 1)
+<pre class="devsite-click-to-copy">
+displayX = (x - minX) * displayWidth / (maxX - minX + 1)
 displayY = (y - minY) * displayHeight / (maxY - minY + 1)
-</code></pre>
+</pre>
 <p>A touch screen may report touches outside of the reported active area.</p>
 <p>Touches that are initiated outside the active area are not delivered to applications
 but may be used for virtual keys.</p>
@@ -713,7 +714,8 @@
 <h4 id="calculation">Calculation</h4>
 <p>The calculation is straightforward: positional information from the touch driver is
 linearly interpolated to the output coordinate system.</p>
-<pre><code>xScale = output.width / raw.width
+<pre class="devsite-click-to-copy">
+xScale = output.width / raw.width
 yScale = output.height / raw.height
 
 If not orientation aware or screen rotation is 0 degrees:
@@ -729,7 +731,7 @@
     output.x = (raw.y.max - raw.y) * yScale
     output.y = (raw.x - raw.x.min) * xScale
 End If
-</code></pre>
+</pre>
 <h3 id="touchmajor-touchminor-toolmajor-toolminor-size-fields"><code>TouchMajor</code>, <code>TouchMinor</code>, <code>ToolMajor</code>, <code>ToolMinor</code>, <code>Size</code> Fields</h3>
 <p>The <code>TouchMajor</code> and <code>TouchMinor</code> fields describe the approximate dimensions
 of the contact area in output units (pixels).</p>
@@ -807,7 +809,8 @@
 <h4 id="calculation_1">Calculation</h4>
 <p>The calculation of the <code>TouchMajor</code>, <code>TouchMinor</code>, <code>ToolMajor</code>, <code>ToolMinor</code>
 and <code>Size</code> fields depends on the specified calibration parameters.</p>
-<pre><code>If raw.touchMajor and raw.toolMajor are available:
+<pre class="devsite-click-to-copy">
+If raw.touchMajor and raw.toolMajor are available:
     touchMajor = raw.touchMajor
     touchMinor = raw.touchMinor
     toolMajor = raw.toolMajor
@@ -879,7 +882,7 @@
 End If
 
 output.size = size
-</code></pre>
+</pre>
 <h3 id="pressure-field"><code>Pressure</code> Field</h3>
 <p>The <code>Pressure</code> field describes the approximate physical pressure applied to the
 touch device as a normalized value between 0.0 (no touch) and 1.0 (full force).</p>
@@ -911,7 +914,7 @@
 <p>The default value is <code>1.0 / raw.pressure.max</code>.</p>
 <h4 id="calculation_2">Calculation</h4>
 <p>The calculation of the <code>Pressure</code> field depends on the specified calibration parameters.</p>
-<pre><code>If touch.pressure.calibration == "physical" or "amplitude":
+<pre class="devsite-click-to-copy">If touch.pressure.calibration == "physical" or "amplitude":
     output.pressure = raw.pressure * touch.pressure.scale
 Else
     If hovering:
@@ -920,7 +923,7 @@
         output.pressure = 1
     End If
 End If
-</code></pre>
+</pre>
 <h3 id="orientation-and-tilt-fields"><code>Orientation</code> and <code>Tilt</code> Fields</h3>
 <p>The <code>Orientation</code> field describes the orientation of the touch and tool as an
 angular measurement.  An orientation of <code>0</code> indicates that the major axis is
@@ -959,7 +962,8 @@
 <h4 id="calculation_3">Calculation</h4>
 <p>The calculation of the <code>Orientation</code> and <code>Tilt</code> fields depends on the specified
 calibration parameters and available input.</p>
-<pre><code>If touch.tiltX and touch.tiltY are available:
+<pre class="devsite-click-to-copy">
+If touch.tiltX and touch.tiltY are available:
     tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
     tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
     tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
@@ -1005,7 +1009,7 @@
         output.orientation = output.orientation + PI / 2
     End If
 End If
-</code></pre>
+</pre>
 <h3 id="distance-field"><code>Distance</code> Field</h3>
 <p>The <code>Distance</code> field describes the distance between the tool and the touch device
 surface.  A value of 0.0 indicates direct contact and larger values indicate
@@ -1032,14 +1036,15 @@
 <p>The default value is <code>1.0</code>.</p>
 <h4 id="calculation_4">Calculation</h4>
 <p>The calculation of the <code>Distance</code> field depends on the specified calibration parameters.</p>
-<pre><code>If touch.distance.calibration == "scaled":
+<pre class="devsite-click-to-copy">If touch.distance.calibration == "scaled":
     output.distance = raw.distance * touch.distance.scale
 Else
     output.distance = 0
 End If
-</code></pre>
+</pre>
 <h3 id="example">Example</h3>
-<pre><code># Input device configuration file for a touch screen that supports pressure,
+<pre class="devsite-click-to-copy">
+# Input device configuration file for a touch screen that supports pressure,
 # size and orientation.  The pressure and size scale factors were obtained
 # by measuring the characteristics of the device itself and deriving
 # useful approximations based on the resolution of the touch sensor and the
@@ -1070,7 +1075,7 @@
 
 # Orientation
 touch.orientation.calibration = vector
-</code></pre>
+</pre>
 <h3 id="compatibility-notes">Compatibility Notes</h3>
 <p>The configuration properties for touch devices changed significantly in
 Android Ice Cream Sandwich 4.0.  <strong>All input device configuration files for touch
@@ -1107,16 +1112,18 @@
 </ul>
 <p>All coordinates and sizes are specified in terms of the display coordinate system.</p>
 <p>Here is a virtual key map file all written on one line.</p>
-<pre><code># All on one line
+<pre class="devsite-click-to-copy">
+# All on one line
 0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55
-</code></pre>
+</pre>
 <p>The same virtual key map file can also be written on multiple lines.</p>
-<pre><code># One key per line
+<pre class="devsite-click-to-copy">
+# One key per line
 0x01:158:55:835:90:55
 0x01:139:172:835:125:55
 0x01:102:298:835:115:55
 0x01:217:412:835:95:55
-</code></pre>
+</pre>
 <p>In the above example, the touch screen has a resolution of 480x800.  Accordingly, all of
 the virtual keys have a &lt;centerY&gt; coordinate of 835, which is a little bit below
 the visible area of the touch screen.</p>
@@ -1124,20 +1131,22 @@
 centerY of <code>835</code>, width of <code>90</code> and height of <code>55</code>.</p>
 <h3 id="example_1">Example</h3>
 <p>Virtual key map file: <code>/sys/board_properties/virtualkeys.touchyfeely</code>.</p>
-<pre><code>0x01:158:55:835:90:55
+<pre class="devsite-click-to-copy">
+0x01:158:55:835:90:55
 0x01:139:172:835:125:55
 0x01:102:298:835:115:55
 0x01:217:412:835:95:55
-</code></pre>
+</pre>
 <p>Key layout file: <code>/system/usr/keylayout/touchyfeely.kl</code>.</p>
-<pre><code>key 158 BACK
+<pre class="devsite-click-to-copy">key 158 BACK
 key 139 MENU
 key 102 HOME
 key 217 SEARCH
-</code></pre>
+</pre>
 <p>Key character map file: <code>/system/usr/keychars/touchyfeely.kcm</code>.</p>
-<pre><code>type SPECIAL_FUNCTION
-</code></pre>
+<pre class="devsite-click-to-copy">
+type SPECIAL_FUNCTION
+</pre>
 <h2 id="indirect-multi-touch-pointer-gestures">Indirect Multi-touch Pointer Gestures</h2>
 <p>In pointer mode, the system interprets the following gestures:</p>
 <ol>
diff --git a/en/devices/input/validate-keymaps.html b/en/devices/input/validate-keymaps.html
index 4eabb40..9aac7e1 100644
--- a/en/devices/input/validate-keymaps.html
+++ b/en/devices/input/validate-keymaps.html
@@ -29,41 +29,51 @@
 <h2 id="compilation">Compilation</h2>
 <p>To compile <code>validatekeymaps</code>, set up the development environment, download
 the Android source tree, compile it, then run:</p>
-<pre><code>$ mmm frameworks/base/tools/validatekeymaps
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+mmm frameworks/base/tools/validatekeymaps
+</pre>
 <p>This command should compile a host tool called validatekeymaps into the
 <code>out/host/&lt;os&gt;/bin</code> directory.</p>
 <h2 id="usage">Usage</h2>
 <p>If you ran <code>envsetup.sh</code> to set up your development environment, then the
 <code>validatekeymaps</code> tool should already be on your path.  You can verify
 this by running <code>validatekeymaps</code>.</p>
-<pre><code>$ validatekeymaps
-
+<pre class="devsite-terminal devsite-click-to-copy">
+validatekeymaps
+</pre>
+<p>You should see the following output:</p>
+<pre>
 Keymap Validation Tool
 
 Usage:
  validatekeymaps [*.kl] [*.kcm] [*.idc] [virtualkeys.*] [...]
    Validates the specified key layouts, key character maps, 
    input device configurations, or virtual key definitions.
-</code></pre>
-<p>Then all you need to do is run <code>validatekeymaps</code> an give it the path of
+</pre>
+<p>Then all you need to do is run <code>validatekeymaps</code> and give it the path of
 one or more files to validate.</p>
-<pre><code>$ validatekeymaps frameworks/base/data/keyboards/Generic.kl
-
+<pre class="devsite-terminal devsite-click-to-copy">
+validatekeymaps frameworks/base/data/keyboards/Generic.kl
+</pre>
+<p>Example:</p>
+<pre>
 Validating file 'frameworks/base/data/keyboards/Generic.kl'...
 No errors.
 
 Success.
-</code></pre>
+</pre>
 <p>And if there is an error...</p>
-<pre><code>$ validatekeymaps Bad.kl
-
+<pre class="devsite-terminal devsite-click-to-copy">
+validatekeymaps Bad.kl
+</pre>
+<p>Example:</p>
+<pre>
 Validating file 'Bad.kl'...
 E/KeyLayoutMap(87688): Bad.kl:24: Expected keyword, got 'ke'.
 Error -22 parsing key layout file.
 
 Failed!
-</code></pre>
+</pre>
 <h2 id="automation">Automation</h2>
 <p>It is a <em>very</em> good idea to run <code>validatekeymaps</code> on all configuration files
 before installing them on a device.</p>
@@ -71,7 +81,8 @@
 script or a makefile.</p>
 <p>The following sample makefile is based on the contents of
 <code>frameworks/base/data/keyboards/Android.mk</code>.</p>
-<pre><code># This makefile performs build time validation of framework keymap files.
+<pre class="devsite-click-to-copy">
+# This makefile performs build time validation of framework keymap files.
 
 LOCAL_PATH := $(call my-dir)
 
@@ -89,7 +100,7 @@
     $(hide) $(validatekeymaps) $(files)
 
 include $(BUILD_PHONY_PACKAGE)
-</code></pre>
+</pre>
 
   </body>
 </html>
diff --git a/en/devices/media/index.html b/en/devices/media/index.html
index f52da0e..834c5cf 100644
--- a/en/devices/media/index.html
+++ b/en/devices/media/index.html
@@ -44,7 +44,7 @@
 <h2 id="architecture">Architecture</h2>
 <p>Media applications interact with the Android native multimedia framework
 according to the following architecture.</p>
-<img src="images/ape_fwk_media.png" alt="Android media architecture"
+<img src="/devices/media/images/ape_fwk_media.png" alt="Android media architecture"
 id="figure1" /><p class="img-caption"><strong>Figure 1.</strong> Media
 architecture</p>
 
@@ -98,14 +98,18 @@
 <li>Build your plugin as a shared library with the name
 <code>libstagefrighthw.so</code> in your product Makefile. For example:
 <br>
-<p><pre>LOCAL_MODULE := libstagefrighthw</pre></p>
+<pre class="devsite-click-to-copy">
+LOCAL_MODULE := libstagefrighthw
+</pre>
 <p>In your device's Makefile, ensure you declare the module as a product
 package:</p>
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_PACKAGES += \
   libstagefrighthw \
   ...
-</pre></li></ol>
+</pre>
+</li>
+</ol>
 
 <h2 id="expose">Exposing codecs to the framework</h2>
 <p>The Stagefright service parses the <code>system/etc/media_codecs.xml</code>
@@ -116,7 +120,7 @@
 in the <code>device/&lt;company&gt;/&lt;device&gt;/</code> directory
 and copy this over to the system image's <code>system/etc</code> directory in
 your device's Makefile. For example:</p>
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_COPY_FILES += \
   device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \
   device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \
diff --git a/en/devices/media/oem.html b/en/devices/media/oem.html
index 73bcc64..c9d2e42 100644
--- a/en/devices/media/oem.html
+++ b/en/devices/media/oem.html
@@ -31,14 +31,14 @@
 <p>The <code>CodecCapabilities.getMaxSupportedInstances</code> interface
 returns the maximum number of supported concurrent codec instances.</p>
 
-<p>The CTS test 
+<p>The CTS test
 <code>testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)</code>
-is used to enforce the proper maximum is set in 
+is used to enforce the proper maximum is set in
 <code>/etc/media_codecs.xml</code>.</p>
 
 <p>Here is an example:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 ...
 &lt;MediaCodecs&gt;
     ...
@@ -60,7 +60,7 @@
     <li>Run the test first using cts-tradefed.
     <li>Evaluate the resulting failure message. Here is an example:
 
-<pre>
+<pre class="devsite-click-to-copy">
 There was 1 failure:
 1) testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)
 junit.framework.AssertionFailedError: In order to pass the test, please publish
@@ -120,7 +120,7 @@
 This is usually done by placing the XML file in the device project
 (device/<em>&lt;vendor&gt;</em>/<em>&lt;product&gt;</em>) and adding a
 <code>PRODUCT_COPY_FILES</code> line to <code>device.mk</code> like so:
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_COPY_FILES += \
 ...
    device/moto/shamu/media_codecs.xml:system/etc/media_codecs.xml \
@@ -136,7 +136,7 @@
 If the instance of secure codec and the instance of non-secure codec can’t
 co-exist at the same time, that should be indicated as global setting in the
 <code>media_codecs.xml</code> file.
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;MediaCodecs&gt;
     &lt;Settings&gt;
         &lt;Setting name="supports-secure-with-non-secure-codec" value="false" /&gt;
@@ -147,7 +147,7 @@
   <li>supports-multiple-secure-codecs &mdash;
 If co-exist of multiple secure codec instances is not supported, that should be
 indicated as a global setting in the <code>media_codecs.xml</code> file.
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;MediaCodecs&gt;
     &lt;Settings&gt;
         &lt;Setting name="supports-multiple-secure-codecs" value="false" /&gt;
diff --git a/en/devices/sensors/hal-interface.html b/en/devices/sensors/hal-interface.html
index d229e73..b04686e 100644
--- a/en/devices/sensors/hal-interface.html
+++ b/en/devices/sensors/hal-interface.html
@@ -23,7 +23,7 @@
 
 
 
-<p>The HAL interface, declared in <a href="/devices/halref/sensors_8h.html">sensors.h</a>, represents the interface between the Android <a href="sensor-stack.html#framework">framework</a> and the hardware-specific software. A HAL implementation must define each
+<p>The HAL interface, declared in <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a>, represents the interface between the Android <a href="sensor-stack.html#framework">framework</a> and the hardware-specific software. A HAL implementation must define each
   function declared in sensors.h. The main functions are:</p>
 <ul>
   <li><code>get_sensors_list</code> - Returns the list of all sensors. </li>
@@ -46,9 +46,9 @@
   <li><code>sensor_t</code></li>
   <li><code>sensors_event_t</code></li>
 </ul>
-<p>In addition to the sections below, see <a href="/devices/halref/sensors_8h.html">sensors.h</a> for more information on those types.</p>
+<p>In addition to the sections below, see <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> for more information on those types.</p>
 <h2 id="get_sensors_list_list">get_sensors_list(list)</h2>
-<pre>int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t
+<pre class="prettyprint">int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t
   const** list);</pre>
 <p>Provides the list of sensors implemented by the HAL. See <a href="#sensor_t">sensor_t</a> for details on how the sensors are defined.</p>
 <p>The order in which the sensors appear in the list is the order in which the
@@ -59,7 +59,7 @@
   <code>getDefaultSensor(int sensorType, bool wakeUp)</code>.</p>
 <p>This function returns the number of sensors in the list.</p>
 <h2 id="activate_sensor_true_false">activate(sensor, true/false)</h2>
-<pre>int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int
+<pre class="prettyprint">int (*activate)(struct sensors_poll_device_t *dev, int sensor_handle, int
   enabled);</pre>
 <p>Activates or deactivates a sensor.</p>
 <p><code>sensor_handle</code> is the handle of the sensor to activate/deactivate. A sensor’s
@@ -79,7 +79,7 @@
   and succeeds.</p>
 <p>This function returns 0 on success and a negative error number otherwise.</p>
 <h2 id="batch_sensor_flags_sampling_period_maximum_report_latency">batch(sensor, flags, sampling period, maximum report latency)</h2>
-<pre>
+<pre class="prettyprint">
 int (*batch)(
      struct sensors_poll_device_1* dev,
      int sensor_handle,
@@ -180,7 +180,7 @@
 <p>See <a href="batching.html">Batching</a> for more details on sensor
 batching, including behaviors in suspend mode and out of suspend mode.</p>
 <h2 id="setdelay_sensor_sampling_period">setDelay(sensor, sampling period)</h2>
-<pre>
+<pre class="prettyprint">
 int (*setDelay)(
      struct sensors_poll_device_t *dev,
      int sensor_handle,
@@ -191,7 +191,7 @@
   <code>sampling_period_ns</code> parameter.</p>
 <p>In HAL version 1.0, setDelay was used instead of batch to set <a href="#sampling_period_ns">sampling_period_ns</a>.</p>
 <h2 id="flush_sensor">flush(sensor)</h2>
-<pre>int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);</pre>
+<pre class="prettyprint">int (*flush)(struct sensors_poll_device_1* dev, int sensor_handle);</pre>
 <p>Add a <a href="#metadata_flush_complete_events">flush complete event</a> to the end of the hardware FIFO for the specified sensor and flushes the FIFO;
   those events are delivered as usual (i.e.: as if the maximum reporting latency
   had expired) and removed from the FIFO.</p>
@@ -213,7 +213,7 @@
 <p>This function returns 0 on success, <code>-EINVAL</code> if the specified sensor is a
   one-shot sensor or wasn’t enabled, and a negative error number otherwise.</p>
 <h2 id="poll">poll()</h2>
-<pre>int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int
+<pre class="prettyprint">int (*poll)(struct sensors_poll_device_t *dev, sensors_event_t* data, int
   count);</pre>
 <p>Returns an array of sensor data by filling the <code>data</code> argument. This function
   must block until events are available. It will return the number of events read
@@ -239,7 +239,7 @@
   <code>HAL_MODULE_INFO_SYM</code> of this type to expose the <a
   href="#get_sensors_list_list">get_sensors_list</a> function. See the definition
   of <code>sensors_module_t</code> in <a
-  href="/devices/halref/sensors_8h.html">sensors.h</a> and the
+  href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> and the
   definition of <code>hw_module_t</code> for more information.</p>
 <h2 id="sensors_poll_device_t_sensors_poll_device_1_t">sensors_poll_device_t / sensors_poll_device_1_t</h2>
 <p><code>sensors_poll_device_1_t</code> contains the rest of the methods defined above:
@@ -267,7 +267,7 @@
   <em>Cool-product</em> team at Fictional-Company could use
   <code>stringType=”com.fictional_company.cool_product.unicorn_detector”</code>.
   The <code>stringType</code> is used to uniquely identify non-official sensors types. See <a
-  href="/devices/halref/sensors_8h.html">sensors.h</a> for more
+  href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> for more
   information on types and string types.</p>
 <p><strong>requiredPermission:</strong> A string representing the permission that applications must
   possess to see the sensor, register to it and receive its data. An empty string
@@ -343,7 +343,7 @@
   <code>elapsedRealtimeNano</code> clock, as the sensor clock drifts.</p>
 <p><strong>data and overlapping fields:</strong> The values measured by the sensor. The meaning and
   units of those fields are specific to each sensor type. See <a
-  href="/devices/halref/sensors_8h.html">sensors.h</a> and the
+  href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> and the
   definition of the different <a href="sensor-types.html">Sensor types</a> for a
   description of the data fields. For some sensors, the accuracy of the
   readings is also reported as part of the data, through a <code>status</code> field. This
diff --git a/en/devices/sensors/index.html b/en/devices/sensors/index.html
index 71ca2e7..1613131 100644
--- a/en/devices/sensors/index.html
+++ b/en/devices/sensors/index.html
@@ -24,7 +24,7 @@
 
 <img style="float: right; margin: 0px 15px 15px 15px;" src="images/ape_fwk_hal_sensors.png" alt="Android Sensors HAL icon"/>
 
-<p>Android sensors give applications access to a mobile device's underlying physical sensors. They are data-providing virtual devices defined by <a href="/devices/halref/sensors_8h.html">sensors.h</a>, the sensor Hardware Abstraction Layer (HAL).</p>
+<p>Android sensors give applications access to a mobile device's underlying physical sensors. They are data-providing virtual devices defined by <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a>, the sensor Hardware Abstraction Layer (HAL).</p>
 
 <h2 id="what_are_“android_sensors”">What are Android sensors?</h2>
 <p>Android sensors are virtual devices that provide data coming from a set of physical sensors: accelerometers, gyroscopes, magnetometers, barometer, humidity, pressure, light, proximity and heart rate sensors.</p>
@@ -48,7 +48,7 @@
     <p>Each Android sensor has a “type” representing how the sensor behaves and what
       data it provides.</p>
     <ul>
-      <li> The official Android <a href="sensor-types.html">Sensor types</a> are defined in <a href="/devices/halref/sensors_8h.html">sensors.h</a> under the names SENSOR_TYPE_…
+      <li> The official Android <a href="sensor-types.html">Sensor types</a> are defined in <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">sensors.h</a> under the names SENSOR_TYPE_…
         <ul>
           <li> The vast majority of sensors have an official sensor type. </li>
           <li> Those types are documented in the Android SDK. </li>
@@ -130,7 +130,7 @@
       </li>
       <li> Hardware abstraction layer (HAL)
         <ul>
-          <li> <a href="/devices/halref/sensors_8h_source.html">https://source.android.com/devices/halref/sensors_8h_source.html</a></li>
+          <li> <a href="https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h">https://android.googlesource.com/platform/hardware/libhardware/+/master/include/hardware/sensors.h</a></li>
           <li> Also known as “sensors.h” </li>
           <li> The source of truth. First document to be updated when new features are
             developed. </li>
diff --git a/en/devices/storage/config-example.html b/en/devices/storage/config-example.html
index 16e4c91..0a5416c 100644
--- a/en/devices/storage/config-example.html
+++ b/en/devices/storage/config-example.html
@@ -39,30 +39,34 @@
 it. <code>vold</code> will then manage the <code>fuse_sdcard0</code> service
 when media is inserted/removed.
 <h4>fstab.hardware</h4>
-<pre><code>[physical device node]  auto  vfat  defaults  voldmanaged=sdcard0:auto,noemulatedsd
-</code></pre>
+<pre class="devsite-click-to-copy">
+[physical device node]  auto  vfat  defaults  voldmanaged=sdcard0:auto,noemulatedsd
+</pre>
 <h4>init.hardware.rc</h4>
-<pre><code>on init
+<pre class="devsite-click-to-copy">
+on init
     mkdir /mnt/media_rw/sdcard0 0700 media_rw media_rw
     mkdir /storage/sdcard0 0700 root root
     export EXTERNAL_STORAGE /storage/sdcard0
 service fuse_sdcard0 /system/bin/sdcard -u 1023 -g 1023 -d /mnt/media_rw/sdcard0 /storage/sdcard0
     class late_start
     disabled
-</code></pre>
+</pre>
 <h4>storage_list.xml</h4>
-<pre><code>&lt;storage
+<pre class="devsite-click-to-copy">
+&lt;storage
     android:mountPoint="/storage/sdcard0"
     android:storageDescription="@string/storage_sd_card"
     android:removable="true"
     android:primary="true"
     android:maxFileSize="4096" /&gt;
-</code></pre>
+</pre>
 <h3 id=android_5_x_emulated>Emulated primary only</h3>
 <p>This is a typical configuration for a device with single external storage
 device which is backed by internal storage on the device, like Nexus 4.</p>
 <h4>init.hardware.rc</h4>
-<pre><code>on init
+<pre class="devsite-click-to-copy">
+on init
     mkdir /mnt/shell/emulated 0700 shell shell
     mkdir /storage/emulated 0555 root root
     export EXTERNAL_STORAGE /storage/emulated/legacy
@@ -72,13 +76,14 @@
     setprop ro.crypto.fuse_sdcard true
 service sdcard /system/bin/sdcard -u 1023 -g 1023 -l /data/media /mnt/shell/emulated
     class late_start
-</code></pre>
+</pre>
 <h4>storage_list.xml</h4>
-<pre><code>&lt;storage
+<pre class="devsite-click-to-copy">
+&lt;storage
     android:storageDescription="@string/storage_internal"
     android:emulated="true"
     android:mtpReserve="100" /&gt;
-</code></pre>
+</pre>
 <h3 id=android_5_x_both>Emulated primary, physical secondary</h3>
 <p>This is a typical configuration for a device with multiple external
 storage devices, where the primary device is backed by internal storage
@@ -88,10 +93,12 @@
 access it. <code>vold</code> will then manage the <code>fuse_sdcard1</code>
 service when media is inserted/removed.</p>
 <h4>fstab.hardware</h4>
-<pre><code>[physical device node]  auto  vfat  defaults  voldmanaged=sdcard1:auto
-</code></pre>
+<pre class="devsite-click-to-copy">
+[physical device node]  auto  vfat  defaults  voldmanaged=sdcard1:auto
+</pre>
 <h4>init.hardware.rc</h4>
-<pre><code>on init
+<pre class="devsite-click-to-copy">
+on init
     mkdir /mnt/shell/emulated 0700 shell shell
     mkdir /storage/emulated 0555 root root
     mkdir /mnt/media_rw/sdcard1 0700 media_rw media_rw
@@ -107,9 +114,10 @@
 service fuse_sdcard1 /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/sdcard1 /storage/sdcard1
     class late_start
     disabled
-</code></pre>
+</pre>
 <h4>storage_list.xml</h4>
-<pre><code>&lt;storage
+<pre class="devsite-click-to-copy">
+&lt;storage
     android:storageDescription="@string/storage_internal"
     android:emulated="true"
     android:mtpReserve="100" /&gt;
@@ -118,7 +126,7 @@
     android:storageDescription="@string/storage_sd_card"
     android:removable="true"
     android:maxFileSize="4096" /&gt;
-</code></pre>
+</pre>
 
 <h2 id=android_6>Android 6.0</h2>
 <h3 id=android_6_physical>Physical primary only</h3>
@@ -126,14 +134,16 @@
 device which is a physical SD card, like the original Android One. There is no
 secondary shared storage and the device cannot support multi-user.</p>
 <h4>fstab.device</h4>
-<pre><code>/devices/platform/mtk-msdc.1/mmc_host*         auto        auto       defaults
+<pre class="devsite-click-to-copy">
+/devices/platform/mtk-msdc.1/mmc_host*         auto        auto       defaults
 voldmanaged=sdcard0:auto,encryptable=userdata,noemulatedsd
-</code></pre>
+</pre>
 <h4>init.device.rc</h4>
-<pre><code>on init
+<pre class="devsite-click-to-copy">
+on init
     # By default, primary storage is physical
     setprop ro.vold.primary_physical 1
-    </code></pre>
+</pre>
 <h3 id=android_6_emulated> Emulated primary only</h3>
 <p>This is a typical configuration for a device with single external storage
 device which is backed by internal storage on the device, like Nexus 6.</p>
@@ -144,8 +154,9 @@
   <li>Supports multi-user.
 </ul>
 <h4>fstab.device</h4>
-<pre><code>/devices/*/xhci-hcd.0.auto/usb*             auto            auto    defaults
-                                                    voldmanaged=usb:auto</code></pre>
+<pre class="devsite-click-to-copy">/devices/*/xhci-hcd.0.auto/usb*             auto            auto    defaults
+                                                    voldmanaged=usb:auto
+</pre>
 <h3 id=android_6_both>Emulated primary, physical secondary</h3>
 <p>This is a typical configuration for a device with multiple external storage
 devices, where the primary device is backed by internal storage on the device,
@@ -156,9 +167,10 @@
   <li>Supports multi-user.
 </ul>
 <h4>fstab.device</h4>
-<pre><code>/devices/platform/mtk-msdc.1/mmc_host*           auto      auto     defaults
+<pre class="devsite-click-to-copy">
+/devices/platform/mtk-msdc.1/mmc_host*           auto      auto     defaults
 voldmanaged=sdcard1:auto,encryptable=userdata
-</code></pre>
+</pre>
 
   </body>
 </html>
diff --git a/en/devices/storage/config.html b/en/devices/storage/config.html
index 5a213f6..91442b2 100644
--- a/en/devices/storage/config.html
+++ b/en/devices/storage/config.html
@@ -32,8 +32,9 @@
 <p>For Android 4.2.2 and earlier, the device-specific <code>vold.fstab</code>
 configuration file defines mappings from sysfs devices to filesystem mount
 points, and each line follows this format:</p>
-<pre><code>dev_mount &lt;label&gt; &lt;mount_point&gt; &lt;partition&gt; &lt;sysfs_path&gt; [flags]
-</code></pre>
+<pre class="devsite-click-to-copy">
+dev_mount &lt;label&gt; &lt;mount_point&gt; &lt;partition&gt; &lt;sysfs_path&gt; [flags]
+</pre>
 <ul>
 <li><code>label</code>: Label for the volume.</li>
 <li><code>mount_point</code>: Filesystem path where the volume should be mounted.</li>
@@ -47,8 +48,9 @@
 recovery were unified in the <code>/fstab.&lt;device&gt;</code> file. For external
 storage volumes that are managed by <code>vold</code>, the entries should have the
 following format:</p>
-<pre><code>&lt;src&gt; &lt;mnt_point&gt; &lt;type&gt; &lt;mnt_flags&gt; &lt;fs_mgr_flags&gt;
-</code></pre>
+<pre class="devsite-click-to-copy">
+&lt;src&gt; &lt;mnt_point&gt; &lt;type&gt; &lt;mnt_flags&gt; &lt;fs_mgr_flags&gt;
+</pre>
 <ul>
 <li><code>src</code>: A path under sysfs (usually mounted at /sys) to the device that
 can provide the mount point. The path must start with <code>/</code>.</li>
@@ -95,10 +97,11 @@
 permissionless filesystem backed by internal storage. One possible
 implementation is provided by the FUSE daemon in <code>system/core/sdcard</code>, which can
 be added as a device-specific <code>init.rc</code> service:</p>
-<pre><code># virtual sdcard daemon running as media_rw (1023)
+<pre class="devsite-click-to-copy">
+# virtual sdcard daemon running as media_rw (1023)
 service sdcard /system/bin/sdcard &lt;source_path&gt; &lt;dest_path&gt; 1023 1023
     class late_start
-</code></pre>
+</pre>
 <p>Where <code>source_path</code> is the backing internal storage and <code>dest_path</code> is the
 target mount point.</p>
 <p>When configuring a device-specific <code>init.rc</code> script, the <code>EXTERNAL_STORAGE</code>
@@ -130,9 +133,10 @@
 
 <h4 id=adoptable_storage>Adoptable storage </h4>
 <p>To indicate an adoptable storage device in the <code>fstab</code>, use the <code>encryptable=userdata</code> attribute in the <code>fs_mgr_flags</code> field. Here’s a typical definition:</p>
-<pre><code>/devices/platform/mtk-msdc.1/mmc_host*           auto      auto     defaults
+<pre class="devsite-click-to-copy">
+/devices/platform/mtk-msdc.1/mmc_host*           auto      auto     defaults
 voldmanaged=sdcard1:auto,encryptable=userdata
-</code></pre>
+</pre>
 <p>When a storage device is adopted, the platform erases the contents and writes a
 GUID partition table that defines two partitions:</p>
 <ul>
@@ -144,9 +148,10 @@
 <h4 id=portable_storage>Portable storage </h4>
 <p>In the <code>fstab</code>, storage devices with the <code>voldmanaged</code> attribute are considered to be portable by default unless another attribute
 like <code>encryptable=userdata</code> is defined. For example, here’s a typical definition for USB OTG devices:</p>
-<pre><code>/devices/*/xhci-hcd.0.auto/usb*             auto            auto    defaults
+<pre class="devsite-click-to-copy">
+/devices/*/xhci-hcd.0.auto/usb*             auto            auto    defaults
                                                     voldmanaged=usb:auto
-</code></pre>
+</pre>
 <p>The platform uses <code>blkid</code> to detect filesystem types before mounting, and users can choose to format the
 media when the filesystem is unsupported.</p>
 
diff --git a/en/devices/tech/admin/implement.html b/en/devices/tech/admin/implement.html
index ada8d28..f930e90 100644
--- a/en/devices/tech/admin/implement.html
+++ b/en/devices/tech/admin/implement.html
@@ -87,7 +87,7 @@
 <h3 id=uses-feature>Uses-feature</h3>
 <p>Devices must define the following <code>uses-feature</code>:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 android.software.managed_users
 android.software.device_admin
 </pre>
@@ -100,15 +100,19 @@
 should be enabled as part of provisioning a managed device. OEMs must ensure the
 managed profile or device has all required applications by modifying:</p>
 
-<pre>vendor_required_apps_managed_profile.xml
+<pre class="devsite-click-to-copy">
+vendor_required_apps_managed_profile.xml
 vendor_required_apps_managed_device.xml
 </pre>
 
 <p>Examples from a Nexus device:</p>
 
-<p><code>packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml</code></p>
+<pre class="devsite-click-to-copy">
+packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_device.xml
+</pre>
 
-<pre>&lt;resources&gt;
+<pre class="devsite-click-to-copy">
+&lt;resources&gt;
   &lt;!-- A list of apps to be retained on the managed device --&gt;
   &lt;string-array name="vendor_required_apps_managed_device"&gt;
     &lt;item&gt;com.android.vending&lt;/item&gt; &lt;!--­Google Play --&gt;
@@ -121,11 +125,11 @@
 &lt;/resources&gt;
 </pre>
 
-<p><code>
+<pre class="devsite-click-to-copy">
 packages/apps/ManagedProvisioning/res/values/vendor_required_apps_managed_profile.xml
-</code></p>
+</pre>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;resources&gt;
     &lt;!-- A list of apps to be retained in the managed profile. This includes any Google experience apps required. --&gt;
     &lt;string-array name="vendor_required_apps_managed_profile"&gt;
@@ -150,8 +154,12 @@
 <p>Devices with NFC must enable NFC during the out-of-the-box experience (i.e.,
 setup wizard) and be configured to accept managed provisioning intents:</p>
 
-<p><code>packages/apps/Nfc/res/values/provisioning.xml</code></p>
-<pre>&lt;bool name="enable_nfc_provisioning"&gt;true&lt;/bool&gt;
+<pre class="devsite-click-to-copy">
+packages/apps/Nfc/res/values/provisioning.xml
+</pre>
+
+<pre class="devsite-click-to-copy">
+&lt;bool name="enable_nfc_provisioning"&gt;true&lt;/bool&gt;
 &lt;item>application/com.android.managedprovisioning&lt;/item&gt;
 </pre>
 
@@ -167,7 +175,8 @@
 <p>To meet setup requirements, add the following code to the device setup's main
 activity:</p>
 
-<pre>&#64;Override
+<pre class="devsite-click-to-copy">
+&#64;Override
    protected void onStart() {
         super.onStart();
 
diff --git a/en/devices/tech/admin/managed-profiles.html b/en/devices/tech/admin/managed-profiles.html
index 95c7771..eb04205 100644
--- a/en/devices/tech/admin/managed-profiles.html
+++ b/en/devices/tech/admin/managed-profiles.html
@@ -81,11 +81,15 @@
 
 <p>Managed profiles are implemented as a new kind of secondary user, such that:</p>
 
-<pre>uid = 100000 * userid + appid</pre>
+<pre class="devsite-click-to-copy">
+uid = 100000 * userid + appid
+</pre>
 
 <p>They have separate app data like regular users:</p>
 
-<pre>/data/user/&lt;userid&gt;</pre>
+<pre class="devsite-click-to-copy">
+/data/user/&lt;userid&gt;
+</pre>
 
 <p>The UserId is calculated for all system requests using
 <code>Binder.getCallingUid()</code>, and all system state and responses are
diff --git a/en/devices/tech/admin/multi-user.html b/en/devices/tech/admin/multi-user.html
index cc18766..e19eaea 100644
--- a/en/devices/tech/admin/multi-user.html
+++ b/en/devices/tech/admin/multi-user.html
@@ -101,7 +101,8 @@
 the following values in <code>frameworks/base/core/res/res/values/config.xml</code>:
 </p>
 
-<pre>&lt;!--  Maximum number of supported users --&gt;
+<pre class="devsite-click-to-copy">
+&lt;!--  Maximum number of supported users --&gt;
 &lt;integer name="config_multiuserMaximumUsers"&gt;1&lt;/integer&gt;
 &lt;!--  Whether Multiuser UI should be shown --&gt;
 &lt;bool name="config_enableMultiUserUI"&gt;false&lt;/bool&gt;
diff --git a/en/devices/tech/admin/multiuser-apps.html b/en/devices/tech/admin/multiuser-apps.html
index 546659d..c3efcd6 100644
--- a/en/devices/tech/admin/multiuser-apps.html
+++ b/en/devices/tech/admin/multiuser-apps.html
@@ -38,7 +38,7 @@
 
 <p>See the diagram below for a depiction of permissions flow with multiple users.</p>
 
-<p><img src="images/multi-user-perms.png" alt="Multiple users permissions flow" />
+<p><img src="/devices/tech/admin/images/multi-user-perms.png" alt="Multiple users permissions flow" />
 <p class="img-caption"><strong>Figure 1.</strong> Multiple users permissions</p>
 
 <h2 id=enabling_a_singleton_component>Enabling a singleton component</h2>
@@ -59,7 +59,7 @@
 
 <p>These permissions are required</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 INTERACT_ACROSS_USERS (signature|system)
 INTERACT_ACROSS_USERS_FULL (signature)
 </pre>
@@ -74,7 +74,7 @@
     <li> <code>int userHandle = UserHandle.getCallingUserId()</code>
   </ul>
   <li> Use new, protected APIs to start services, activities, broadcasts on a specific
-user: 
+user:
   <ul>
     <li><code>Context.startActivityAsUser(Intent, UserHandle)</code>
     <li><code>Context.bindServiceAsUser(Intent, …, UserHandle)</code>
@@ -102,5 +102,28 @@
 information about which user has caused the callback.
 </ol>
 
+<h3 id="work-profiles">Services in multiple users or profiles</h3>
+
+<p>Not all services need to run an instance in another user or work profile. If your system service
+only needs to run as user 0, disable the service's components when running under other users to
+help preserve resources. The following example shows how you might do this at your service's entry
+points:</p>
+
+<pre class="devsite-click-to-copy">
+// Add on all entry points such as boot_completed or other manifest-listed receivers and providers
+if (!UserManager.isSystemUser()) {
+    // Disable the service
+    ComponentName targetServiceName = new ComponentName(this, TargetService.class);
+    context.getPackageManager().setComponentEnabledSetting(
+        targetServiceName, COMPONENT_ENABLED_STATE_DISABLED, 0);
+}
+</pre>
+
+<p>The example could also use <code>PackageManager.setApplicationEnabledSetting()</code> to disable
+the entire app.</p>
+
+
+
+
   </body>
 </html>
diff --git a/en/devices/tech/admin/provision.html b/en/devices/tech/admin/provision.html
index 9ab1937..e1acd3e 100644
--- a/en/devices/tech/admin/provision.html
+++ b/en/devices/tech/admin/provision.html
@@ -94,13 +94,14 @@
 . Below is a sample intent that triggers the creation of the managed profile
 and sets the DeviceAdminSample as the profile owner:</p>
 
-<pre>adb shell am start -a android.app.action.PROVISION_MANAGED_PROFILE \
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell am start -a android.app.action.PROVISION_MANAGED_PROFILE \
           -c android.intent.category.DEFAULT \
 	      -e wifiSsid $(printf '%q' \"WifiSSID\") \
           -e deviceAdminPackage "com.google.android.deviceadminsample" \
 	      -e android.app.extra.deviceAdminPackageName $(printf '%q'
                         .DeviceAdminSample\$DeviceAdminSampleReceiver) \
-	      -e android.app.extra.DEFAULT_MANAGED_PROFILE_NAME "My Organisation"
+              -e android.app.extra.DEFAULT_MANAGED_PROFILE_NAME "My Organisation"</code>
 </pre>
 
 <h2 id=device_owner_provisioning_via_nfc>Device owner provisioning</h2>
@@ -117,7 +118,7 @@
 
 <p>A typical NFC bundle includes the following:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME
                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_LOCATION
                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM
@@ -128,8 +129,10 @@
 <p>Devices must have NFC configured to accept the managed provisioning
 mimetype from the setup experience:</p>
 
-<pre>/packages/apps/Nfc/res/values/provisioning.xml
-
+<pre class="devsite-click-to-copy">
+/packages/apps/Nfc/res/values/provisioning.xml
+</pre>
+<pre class="devsite-click-to-copy">
       &lt;bool name="enable_nfc_provisioning"&gt;true&lt;/bool&gt;
       &lt;item&gt;application/com.android.managedprovisioning&lt;/item&gt;
 </pre>
diff --git a/en/devices/tech/admin/testing-provision.html b/en/devices/tech/admin/testing-provision.html
index d080bad..a8a219d 100644
--- a/en/devices/tech/admin/testing-provision.html
+++ b/en/devices/tech/admin/testing-provision.html
@@ -50,13 +50,13 @@
 the branch name is <code>afw-test-harness-nougat-dev</code>. To initialize
 the repo and download source code for this branch, use:</p>
 
-<pre>
-$ mkdir WORKING_DIRECTORY
-$ cd WORKING_DIRECTORY
-$ git config --global user.name "Your Name"
-$ git config --global user.email "[email protected]"
-$ repo init -u https://android.googlesource.com/platform/manifest -b afw-test-harness-nougat-dev
-$ repo sync -j24
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">mkdir WORKING_DIRECTORY</code>
+<code class="devsite-terminal">cd WORKING_DIRECTORY</code>
+<code class="devsite-terminal">git config --global user.name "Your Name"</code>
+<code class="devsite-terminal">git config --global user.email "[email protected]"</code>
+<code class="devsite-terminal">repo init -u https://android.googlesource.com/platform/manifest -b afw-test-harness-nougat-dev</code>
+<code class="devsite-terminal">repo sync -j24</code>
 </pre>
 
 <p>To check out the source code for a different version, specify the branch with
@@ -92,9 +92,9 @@
 <p>To view and edit AfW source code in Android Studio:</p>
 <ol>
 <li>Run the following commands
-<pre>
-$ make idegen
-$ development/tools/idegen/idegen.sh
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">make idegen</code>
+<code class="devsite-terminal">development/tools/idegen/idegen.sh</code>
 </pre>
 </li>
 <li>In Android Studio, open <code>android.ipr</code>.</li>
@@ -109,7 +109,8 @@
 <ol>
 <li>Configure the Wi-Fi network in <code>afw-test.props</code> with the
 following properties:
-<pre>wifi_ssid
+<pre class="devsite-click-to-copy">
+wifi_ssid
 wifi_password (optional)
 wifi_security_type (optional, available options are: NONE, WEP or WPA)
 </pre>
@@ -117,7 +118,7 @@
 <li>Obtain at least one account from a domain that is bound to Test DPC as
 its device policy controller. Specify the details in <code>afw-test.props</code>
 with the following properties:
-<pre>
+<pre class="devsite-click-to-copy">
 work_account_username
 work_account_password
 </pre>
@@ -128,15 +129,17 @@
 
 <h2 id=build_harness>Building the AfW Test Harness</h2>
 <p>Initialize the build configuration using:</p>
-<pre>
-$ source build/envsetup.sh
-$ lunch
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">source build/envsetup.sh</code>
+<code class="devsite-terminal">lunch</code>
 </pre>
 
 <p>Select a device type and press <strong>Enter</strong>.</p>
 
 <p>Build the harness using:</p>
-<pre>$ make afw-test-harness -j32</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+make afw-test-harness -j32
+</pre>
 <p>This creates a directory (<code>out/host/linux-x86/afw-th/android-cts</code>)
 with all necessary binaries, configuration files, and tools to run the test
 harness. This directory is also zipped into a file
@@ -147,13 +150,17 @@
 <p>Use the following steps to run the AfW Test Harness:</p>
 <ol>
 <li>In your build environment, launch the test runner using:
-<pre>$ afw-test-tradefed</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+afw-test-tradefed
+</pre>
 This starts the <code>cts-tf</code> console, loads test plans, test cases,
 and <code>afw-test.props</code> from
 <code>out/host/linux-x86/afw-th/android-cts</code>.</li>
 <li>From the unzipped folder of <code>android-afw-test-harness.zip</code>,
 launch the test runner using:
-<pre>$ cts-tf &gt; ./android‐cts/tools/afw-test‐tradefed</pre>
+<pre class="devsite-click-to-copy">
+cts-tf&gt; ./android‐cts/tools/afw-test‐tradefed
+</pre>
 This loads test plans, test cases, and <code>afw-test.props</code> from
 <code>android-cts</code> directory. Ensure
 <code>./android‐cts/repository/testcases/afw-test.props</code> has the work
@@ -172,14 +179,17 @@
 </ul>
 
 <br>To run the test plan <code>afw-userdebug-build</code>, use:
-<pre>$ cts-tf &gt; run cts --plan afw-userdebug-build</pre>
+<pre class="devsite-click-to-copy">
+cts-tf&gt; run cts --plan afw-userdebug-build
+</pre>
 To see all test plans, use the command <code>list plans</code>. To view plan
 definitions, refer to
 <code>out/host/linux-x86/afw-th/android-cts/repository/plans</code>.
 <br>
 </li>
 <li>Run a test package. To run a single test package, use
-<pre>$ cts-tf &gt; run cts --package com.android.afwtest.NfcProvisioning
+<pre class="devsite-click-to-copy">
+cts-tf&gt; run cts --package com.android.afwtest.NfcProvisioning
 </pre>
 To view all packages, use the command <code>list packages</code>. For more
 options, use the command <code>run cts --help</code>.</li>
@@ -192,16 +202,23 @@
 
 <li>Display more information with the <code>-l INFO</code> or <code>-l
 DEBUG</code> flags. Example:
-<pre>$ cts-tf &gt; run cts ‐‐plan afw-userdebug-build -l DEBUG</pre></li>
+<pre class="devsite-click-to-copy">
+cts-tf&gt; run cts ‐‐plan afw-userdebug-build -l DEBUG
+</pre>
+</li>
 
 <li>Run the test harness on a specific device with the <code>-s</code> flag.
 Example:
-<pre>$ cts-tf &gt; run cts ‐‐plan afw-userdebug-build -l DEBUG -s device_sn</pre>
+<pre class="devsite-click-to-copy">
+cts-tf&gt; run cts ‐‐plan afw-userdebug-build -l DEBUG -s device_sn
+</pre>
 </li>
 
 <li>Run test harness on all connected devices with the
 <code>--all-devices</code> flag. Example:
-<pre>$ cts-tf &gt; run cts ‐‐plan afw-userdebug-build -l DEBUG --all-devices</pre>
+<pre class="devsite-click-to-copy">
+cts-tf&gt; run cts ‐‐plan afw-userdebug-build -l DEBUG --all-devices
+</pre>
 </li>
 
 <li>View current running executions using <code>list invocations</code> or
@@ -246,7 +263,8 @@
 </li>
 <li>If a test failed during the provisioning process, logcat contains an error
 similar to:
-<pre>TestRunner: java.lang.RuntimeException: Failed to load page: com.android.afwtest.uiautomator.pages.packageinstaller.DeviceAccessPage
+<pre class="devsite-click-to-copy">
+TestRunner: java.lang.RuntimeException: Failed to load page: com.android.afwtest.uiautomator.pages.packageinstaller.DeviceAccessPage
 </pre>
 This is typically caused by errors in a previous UI page or the page that
 failed to load, so try to find other error messages in logcat before this error,
@@ -306,7 +324,7 @@
 Skip, Finish, Done, Accept, Agree, Next, Continue, or Proceed. Alternatively,
 you can define a button in <code>afw-test.props</code> to configure the test
 harness to skip your UI. Example:</em></p>
-<pre>
+<pre class="devsite-click-to-copy">
 oem_widgets=your_btn
 your_btn.text=your_customized_text
 your_btn.package=your_package
diff --git a/en/devices/tech/admin/testing-setup.html b/en/devices/tech/admin/testing-setup.html
index 8a47fcf..dc89c1a 100644
--- a/en/devices/tech/admin/testing-setup.html
+++ b/en/devices/tech/admin/testing-setup.html
@@ -61,7 +61,9 @@
   </ul>
   </li>
   <li>Set the TestDPC app as the device owner using the following command:<br>
-  <pre>$ adb shell dpm set-device-owner "com.afwsamples.testdpc/.DeviceAdminReceiver"</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dpm set-device-owner "com.afwsamples.testdpc/.DeviceAdminReceiver"
+</pre>
   </li>
   <li>Go through device owner setup on the device (encrypt, select Wi-Fi, etc.)</li>
 </ol>
diff --git a/en/devices/tech/config/carrier.html b/en/devices/tech/config/carrier.html
index 11a1fd5..81a1ece 100644
--- a/en/devices/tech/config/carrier.html
+++ b/en/devices/tech/config/carrier.html
@@ -178,7 +178,7 @@
 
 <p>An example is below:</p>
 
-<pre>
+<pre class="prettyprint">
 public class SampleCarrierConfigService extends CarrierService {
 
     private static final String TAG = "SampleCarrierConfigService";
@@ -210,7 +210,7 @@
 
 <p>An example is below:</p>
 
-<pre>
+<pre class="prettyprint">
 &lt;service android:name=".SampleCarrierConfigService"
 android:label="&#64;string/service_name"
 android:permission="android.permission.BIND_CARRIER_SERVICES"&gt;
diff --git a/en/devices/tech/config/filesystem.html b/en/devices/tech/config/filesystem.html
index c2a3fd3..98a72ba 100644
--- a/en/devices/tech/config/filesystem.html
+++ b/en/devices/tech/config/filesystem.html
@@ -139,7 +139,7 @@
 <code>/system</code>, they can typically do anything they want.</li>
 </ul>
 
-<pre>
+<pre class="devsite-click-to-copy">
 diff --git a/android_filesystem_config.h b/android_filesystem_config.h
 new file mode 100644
 index 0000000..874195f
diff --git a/en/devices/tech/config/kernel.html b/en/devices/tech/config/kernel.html
index 2ac4e4c..14d2ee1 100644
--- a/en/devices/tech/config/kernel.html
+++ b/en/devices/tech/config/kernel.html
@@ -54,7 +54,9 @@
 <p>For devices that have a minimalist defconfig, you can use the following to
 enable options:</p>
 
-<pre><code>ARCH=<em>arch</em> scripts/kconfig/merge_config.sh <em>path</em>/<em>device</em>_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg</code></pre>
+<pre class="devsite-click-to-copy">
+ARCH=<em>arch</em> scripts/kconfig/merge_config.sh <em>path</em>/<em>device</em>_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg
+</pre>
 
 <p>This generates a .config file you can use to save a new defconfig or
 compile a new kernel with Android features enabled.</p>
@@ -62,13 +64,16 @@
 <h2 id="usb">Enabling USB host mode options</h2>
 
 <p>For USB host mode audio, enable the following options:</p>
-<pre><code>CONFIG_SND_USB=y
+<pre class="devsite-click-to-copy">
+CONFIG_SND_USB=y
 CONFIG_SND_USB_AUDIO=y
 # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
-</code></pre>
+</pre>
 
 <p>For USB host mode MIDI, enable the following option:</p>
-<pre><code>CONFIG_SND_USB_MIDI=y</code></pre>
+<pre class="devsite-click-to-copy">
+CONFIG_SND_USB_MIDI=y
+</pre>
 
 <h2 id="Seccomp-BPF-TSYNC">Seccomp-BPF with TSYNC</h2>
 <p>Seccomp-BPF is a kernel security technology that enables the creation of
diff --git a/en/devices/tech/config/kernel_network_tests.html b/en/devices/tech/config/kernel_network_tests.html
index a1e83a2..bc437ad 100644
--- a/en/devices/tech/config/kernel_network_tests.html
+++ b/en/devices/tech/config/kernel_network_tests.html
@@ -77,7 +77,9 @@
 href="https://android.googlesource.com/kernel/tests/+/master/net/test/README">kernel
 network test README file</a>. Basically, from the top of your kernel tree, run:</p>
 
-<pre>  &lt;android tree&gt;/kernel/tests/net/test/run_net_test.sh all_tests.sh</pre>
+<pre class="devsite-click-to-copy">
+<var>ANDROID_TREE</var>/kernel/tests/net/test/run_net_test.sh all_tests.sh
+</pre>
 
 <h3 id=passing>Passing the tests</h3> <p>The kernel network test Python
 source files contain comments that specify kernel commits that are known to be
diff --git a/en/devices/tech/config/low-ram.html b/en/devices/tech/config/low-ram.html
index 10f1cbf..100b4ab 100644
--- a/en/devices/tech/config/low-ram.html
+++ b/en/devices/tech/config/low-ram.html
@@ -82,9 +82,11 @@
 <code>ActivityManager.isLowRamDevice()</code> for applications to  determine if
 they should turn off specific memory-intensive
   features that work poorly on low-memory devices.</p>
-<p>For 512MB devices, this API is expected to return: "true" It can be enabled by
-  the following system property in the device makefile.<br/>
-<code>PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true</code></p>
+<p>For 512MB devices, this API is expected to return <code>true</code>. It can be enabled by
+  the following system property in the device makefile.</p>
+<pre class="devsite-click-to-copy">
+PRODUCT_PROPERTY_OVERRIDES += ro.config.low_ram=true
+</pre>
 
 <h3 id="jit">Disable JIT</h3>
 
@@ -99,8 +101,10 @@
   memory usage, but if set too low will send the JIT into a thrashing mode.  For
 the really low-memory devices, we recommend the JIT be disabled entirely.</p>
 
-<p>This can be achieved by adding the following line to the product makefile:<br/>
-<code>PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.jit.codecachesize=0</code></p>
+<p>This can be achieved by adding the following line to the product makefile:</p>
+<pre class="devsite-click-to-copy">
+PRODUCT_PROPERTY_OVERRIDES += dalvik.vm.jit.codecachesize=0
+</pre>
 <h3 id="launcher">Launcher Configs</h3>
 
 
@@ -136,7 +140,7 @@
 
 <p>These thresholds can be configured via the framework config.xml</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;!-- Device configuration setting the /proc/sys/vm/extra_free_kbytes tunable
 in the kernel (if it exists).  A high value will increase the amount of memory
 that the kernel tries to keep free, reducing allocation time and causing the
@@ -148,7 +152,7 @@
 &lt;integer name=&quot;config_extraFreeKbytesAbsolute&quot;&gt;-1&lt;/integer&gt;
 </pre>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;!-- Device configuration adjusting the /proc/sys/vm/extra_free_kbytes
 tunable in the kernel (if it exists).  0 uses the default value chosen by
 ActivityManager.  A positive value  will increase the amount of memory that the
@@ -172,7 +176,7 @@
 backed pages, so that background processes are being killed long before disk
 thrashing would occur due to the cache getting too small.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;!-- Device configuration setting the minfree tunable in the lowmemorykiller
 in the kernel.  A high value will cause the lowmemorykiller to fire earlier,
 keeping more memory in the file cache and preventing I/O thrashing, but
@@ -184,7 +188,7 @@
 &lt;integer name=&quot;config_lowMemoryKillerMinFreeKbytesAbsolute&quot;&gt;-1&lt;/integer&gt;
 </pre>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;!-- Device configuration adjusting the minfree tunable in the
 lowmemorykiller in the kernel.  A high value will cause the lowmemorykiller to
 fire earlier, keeping more memory in the file cache and preventing I/O
@@ -215,7 +219,7 @@
 <p>To enable KSM, enable <code>CONFIG_KSM</code> in the kernel and then add the
 following lines to your` <code>init.&lt;device&gt;.rc</code> file:<br>
 
-<pre>
+<pre class="devsite-click-to-copy">
 write /sys/kernel/mm/ksm/pages_to_scan 100
 write /sys/kernel/mm/ksm/sleep_millisecs 500
 write /sys/kernel/mm/ksm/run 1
@@ -249,29 +253,35 @@
       <li><code>CONFIG_ZRAM</code></li>
     </ul>
   </li>
-  <li>Then, you should add a line that looks like this to your fstab:<br />
-    <code>/dev/block/zram0 none swap defaults zramsize=&lt;size in bytes&gt;,swapprio=&lt;swap partition priority&gt;</code><br />
-  <code><br />
-  zramsize</code> is mandatory and indicates how much uncompressed memory you want
-    the zram area to hold. Compression ratios in the 30-50% range are usually
-  observed.<br />
-  <br />
-  <code>swapprio</code> is optional and not needed if you don't have more than one swap
-  area.<br />
-  <br />
-  You should also be sure to label the associated block device as a swap_block_device
+  <li>Then, you should add a line that looks like this to your fstab:
+<pre class="devsite-click-to-copy">
+/dev/block/zram0 none swap defaults zramsize=&lt;size in bytes&gt;,swapprio=&lt;swap partition priority&gt;
+</pre>
+  <ul>
+   <li><code>zramsize</code> is mandatory and indicates how much uncompressed memory you want the zram area to hold. Compression ratios in the 30-50% range are usually observed.</li>
+   <li><code>swapprio</code> is optional and not needed if you don't have more than one swap
+     area.</li>
+  </ul>
+  <p>You should also be sure to label the associated block device as a swap_block_device
   in the device-specific <a href="/security/selinux/implement.html">
-  sepolicy/file_contexts</a> so that it is treated properly by SELinux. <br />
-  <code>/dev/block/zram0 u:object_r:swap_block_device:s0</code><br />
-  <br />
+  sepolicy/file_contexts</a> so that it is treated properly by SELinux.</p>
+<pre class="devsite-click-to-copy">
+/dev/block/zram0 u:object_r:swap_block_device:s0
+</pre>
   </li>
   <li>By default, the Linux kernel swaps in 8 pages of memory at a time. When
     using ZRAM, the incremental cost of reading 1 page at a time is negligible
     and may help in case the device is under extreme memory pressure. To read
-    only 1 page at a time, add the following to your <code>init.rc</code>:<br />
-  <code>write /proc/sys/vm/page-cluster 0</code></li>
-  <li>In your <code>init.rc</code> after the <code>mount_all /fstab.X</code> line, add:<br />
-  <code>swapon_all /fstab.X</code></li>
+    only 1 page at a time, add the following to your <code>init.rc</code>:
+<pre class="devsite-click-to-copy">
+write /proc/sys/vm/page-cluster 0
+</pre>
+  </li>
+  <li>In your <code>init.rc</code> after the <code>mount_all /fstab.X</code> line, add:
+<pre class="devsite-click-to-copy">
+swapon_all /fstab.X
+</pre>
+  </li>
   <li>The memory cgroups are automatically configured at boot time if the
     feature is enabled in kernel.</li>
   <li>If memory cgroups are available, the ActivityManager will mark lower
@@ -324,9 +334,11 @@
 <li>Don't enable code that is writing Parcel data to disk and reading it later.</li>
 <li>Don't subscribe to every package installed, instead use ssp filtering. Add
 filtering like below:
-<br />
-  <code>&lt;data android:scheme=&quot;package&quot; android:ssp=&quot;com.android.pkg1&quot; /&gt;<br />
-  &lt;data android:scheme=&quot;package&quot; android:ssp=&quot;com.myapp.act1&quot; /&gt;</code></li>
+<pre class="devsite-click-to-copy">
+&lt;data android:scheme=&quot;package&quot; android:ssp=&quot;com.android.pkg1&quot; /&gt;
+&lt;data android:scheme=&quot;package&quot; android:ssp=&quot;com.myapp.act1&quot; /&gt;
+</pre>
+</li>
 </ul>
 
 <h3 id="process-states">Understand the various process states in Android</h3>
@@ -387,7 +399,7 @@
 <code>procstats</code>, and <code>usagestats</code>. You can find them with
 lines like this:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 ------ CHECKIN BATTERYSTATS (dumpsys batterystats --checkin) ------
 7,0,h,-2558644,97,1946288161,3,2,0,340,4183
 7,0,h,-2553041,97,1946288161,3,2,0,340,4183
@@ -403,7 +415,7 @@
 
 <p>Run for longer durations and track the memory of the process. Does it
 increase? Does it stay constant? Create Canonical use cases and run longevity
-tests on these scenarios</p>
+tests on these scenarios.</p>
 
   </body>
 </html>
diff --git a/en/devices/tech/config/runtime_perms.html b/en/devices/tech/config/runtime_perms.html
index 68e72c0..9681b98 100644
--- a/en/devices/tech/config/runtime_perms.html
+++ b/en/devices/tech/config/runtime_perms.html
@@ -57,7 +57,8 @@
 <code>READ_CALENDAR</code>) that grant requesting applications access to private
 user data or control over the device that can negatively impact the user. To
 view a list of dangerous permissions, run the command:</p>
-<pre>
+
+<pre class="devsite-terminal devsite-click-to-copy">
 adb shell pm list permissions -g -d
 </pre>
 
@@ -159,10 +160,14 @@
 providers for core OS functionality using the
 <code>DefaultPermissionGrantPolicy.java</code> in PackageManager. Examples:</p>
 
-<p><code>ACTION_CALL (Dialer) Default</code><br>
-<code>Phone, Contacts, SMS, Microphone</code></p>
-<p><code>SMS_DELIVER_ACTION (SMS/MMS) Default</code><br>
-<code>Phone, Contacts, SMS</code></p>
+<pre class="devsite-click-to-copy">
+ACTION_CALL (Dialer) Default
+Phone, Contacts, SMS, Microphone
+</pre>
+<pre class="devsite-click-to-copy">
+SMS_DELIVER_ACTION (SMS/MMS) Default
+Phone, Contacts, SMS
+</pre>
 
 <h3 id="defining-custom-perms">Defining custom permissions</h3>
 <p>You can define custom permissions and groups as <em>normal</em> or
diff --git a/en/devices/tech/config/uicc.html b/en/devices/tech/config/uicc.html
index 676d816..1fa6952 100644
--- a/en/devices/tech/config/uicc.html
+++ b/en/devices/tech/config/uicc.html
@@ -74,10 +74,12 @@
 <h3 id=rule_example>Rule example</h3>
 <p>The application name is <code>com.google.android.apps.myapp</code> and the
 SHA-1 certificate in hex string is:</p>
-<pre>AB:CD:92:CB:B1:56:B2:80:FA:4E:14:29:A6:EC:EE:B6:E5:C1:BF:E4</pre>
+<pre class="devsite-click-to-copy">
+AB:CD:92:CB:B1:56:B2:80:FA:4E:14:29:A6:EC:EE:B6:E5:C1:BF:E4
+</pre>
 
 <p>The rule on UICC in hex string is:</p>
-<pre>
+<pre class="devsite-click-to-copy">
 E243 &lt;= 43 is value length in hex
   E135
     C114 ABCD92CBB156B280FA4E1429A6ECEEB6E5C1BFE4
@@ -97,10 +99,13 @@
 with AID <code>FFFFFFFFFFFF</code>. Entries with different AIDs are ignored, so
 rules for other use cases can co-exist.</p>
 <p>Example ACRF content in hex string:</p>
-<pre>30 10 A0 08 04 06 FF FF FF FF FF FF 30 04 04 02 43 10</pre>
+<pre class="devsite-click-to-copy">
+30 10 A0 08 04 06 FF FF FF FF FF FF 30 04 04 02 43 10
+</pre>
 
 <p>Example Access Control Conditions File (ACCF) content:</p>
-<pre>30 16 04 14 61 ED 37 7E 85 D3 86 A8 DF EE 6B 86 4B D8 5B 0B FA A5 AF 81
+<pre class="devsite-click-to-copy">
+30 16 04 14 61 ED 37 7E 85 D3 86 A8 DF EE 6B 86 4B D8 5B 0B FA A5 AF 81
 </pre>
 
 <p>In above example, <code>0x4310</code> is the address for ACCF, which contains
@@ -204,7 +209,7 @@
 tests also print out the expected certificate hash if certificates on UICC
 mismatch.</p>
 <p>Example output:</p>
-<pre>
+<pre class="devsite-click-to-copy">
 junit.framework.AssertionFailedError: This test requires a SIM card with carrier privilege rule on it.
 Cert hash: 61ed377e85d386a8dfee6b864bd85b0bfaa5af81
 </pre>
@@ -222,7 +227,9 @@
 support the device token <code>sim-card-with-certs</code>. For example, the
 following device token restricts carrier API tests to run only on device
 <code>abcd1234</code>:</p>
-<pre>cts-tradefed run cts  --device-token abcd1234:sim-card-with-certs</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+cts-tradefed run cts  --device-token abcd1234:sim-card-with-certs
+</pre>
 
 <p>When running a test without using a device token, the test runs on all
 devices.</p>
diff --git a/en/devices/tech/connect/block-numbers.html b/en/devices/tech/connect/block-numbers.html
index 69e00e6..2b79754 100644
--- a/en/devices/tech/connect/block-numbers.html
+++ b/en/devices/tech/connect/block-numbers.html
@@ -91,7 +91,7 @@
 
 <h2 id="data-flow">Data flow</h2>
 
-<img src="images/block-numbers-flow.png" alt="block numbers data flow" id="block-numbers-flow" />
+<img src="/devices/tech/connect/images/block-numbers-flow.png" alt="block numbers data flow" id="block-numbers-flow" />
 <p class="img-caption">
   <strong>Figure 1.</strong> Block phone numbers data flow
 </p>
@@ -104,13 +104,13 @@
 
 <h3 id="launch-from-app">Launch blocked number manager from app</h3>
 
-<pre>
+<pre class="prettyprint">
 Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);
 </pre>
 
 <h3 id="query-blocked-numbers">Query blocked numbers</h3>
 
-<pre>
+<pre class="prettyprint">
 Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI,
          new String[]{BlockedNumbers.COLUMN_ID,
          BlockedNumbers.COLUMN_ORIGINAL_NUMBER,
@@ -119,7 +119,7 @@
 
 <h3 id="put-blocked-number">Put blocked number</h3>
 
-<pre>
+<pre class="prettyprint">
 ContentValues values = new ContentValues();
 values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
 Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
@@ -127,7 +127,7 @@
 
 <h3 id="delete-blocked-number">Delete blocked number</h3>
 
-<pre>
+<pre class="prettyprint">
 ContentValues values = new ContentValues();
 values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
 Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
@@ -233,7 +233,7 @@
 running the following CTS tests:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 android.provider.cts.BlockedNumberContractTest
 com.android.cts.numberblocking.hostside.NumberBlockingTest
 android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected
@@ -244,11 +244,11 @@
 The <code>BlockedNumberProvider</code> can be manipulated using <code>adb</code> commands
 after running <code>$ adb root</code>. For example:
 </p>
-<pre>
-$ adb root
-$ adb shell content query --uri content://com.android.blockednumber/blocked
-$ adb shell content insert --uri / content://com.android.blockednumber/blocked --bind / original_number:s:'6501002000'
-$ adb shell content delete --uri / content://com.android.blockednumber/blocked/1
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell content query --uri content://com.android.blockednumber/blocked</code>
+<code class="devsite-terminal">adb shell content insert --uri / content://com.android.blockednumber/blocked --bind / original_number:s:'6501002000'</code>
+<code class="devsite-terminal">adb shell content delete --uri / content://com.android.blockednumber/blocked/1</code>
 </pre>
 
   </body>
diff --git a/en/devices/tech/connect/data-saver.html b/en/devices/tech/connect/data-saver.html
index 0d5721b..e962429 100644
--- a/en/devices/tech/connect/data-saver.html
+++ b/en/devices/tech/connect/data-saver.html
@@ -62,22 +62,22 @@
 These screenshots show the Data Saver mode in use.
 </p>
 
-<img src="images/data-saver-use.png" width="397" alt="Toggling Data Saver off/on" />
+<img src="/devices/tech/connect/images/data-saver-use.png" width="397" alt="Toggling Data Saver off/on" />
 <p class="img-caption">
   <strong>Figure 1.</strong> Toggling Data Saver off/on
   </p>
 
-<img src="images/data-battery-saver.png" width="641" alt="Battery saver and Data Saver are on" />
+<img src="/devices/tech/connect/images/data-battery-saver.png" width="641" alt="Battery saver and Data Saver are on" />
 <p class="img-caption">
   <strong>Figure 2.</strong> When both battery saver and Data Saver are on
   </p>
 
-<img src="images/data-saver-app.png" width="376" alt="App-specific data usage screen" />
+<img src="/devices/tech/connect/images/data-saver-app.png" width="376" alt="App-specific data usage screen" />
 <p class="img-caption">
   <strong>Figure 3.</strong> App-specific data usage screen: Settings > Apps > Data usage
   </p>
 
-<img src="images/data-saver-quick-settings.png" width="446" alt="Data saver in the Quick Settings" />
+<img src="/devices/tech/connect/images/data-saver-quick-settings.png" width="446" alt="Data saver in the Quick Settings" />
 <p class="img-caption">
   <strong>Figure 4.</strong> Data saver states on the Quick Settings menu
   </p>
@@ -130,20 +130,22 @@
 running the following CTS test:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 com.android.cts.net.HostsideRestrictBackgroundNetworkTests
 </pre>
 
 <p>
 In addition, <code>adb</code> commands can be used to conduct tests manually by
-first running this command to see all available options:<br>
-<code>$ adb shell cmd netpolicy</code>
-</p>
+first running this command to see all available options:</p>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell cmd netpolicy
+</pre>
 
 <p>
-For example, this command returns the UIDs of the whitelisted apps:<br>
-<code>$ adb shell cmd netpolicy list restrict-background-whitelist</code>
-</p>
+For example, this command returns the UIDs of the whitelisted apps:</p>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell cmd netpolicy list restrict-background-whitelist
+</pre>
 
   </body>
 </html>
diff --git a/en/devices/tech/connect/emergency-affordance.html b/en/devices/tech/connect/emergency-affordance.html
index 383449b..bbaccac 100644
--- a/en/devices/tech/connect/emergency-affordance.html
+++ b/en/devices/tech/connect/emergency-affordance.html
@@ -111,12 +111,12 @@
 
 <table>
   <tr>
-    <td width="50%"><img src="images/emergency-button.png" alt="emergency
+    <td width="50%"><img src="/devices/tech/connect/images/emergency-button.png" alt="emergency
 button" width="246" id="emergency-button" />
 <p class="img-caption">
   <strong>Figure 1.</strong> Long press the <strong>EMERGENCY</strong> button,
 highlighted with a red box, on the lock screen.</p></td>
-    <td width="50%"><img src="images/emergency-option.png" alt="emergency
+    <td width="50%"><img src="/devices/tech/connect/images/emergency-option.png" alt="emergency
 option" width="247" id="emergency-option" />
 <p class="img-caption">
   <strong>Figure 2.</strong> Tap the <strong>Emergency</strong> action item on
@@ -125,11 +125,17 @@
 </table>
 
 <p>This feature introduces the following internal components:</p> <ul>
-<li>EmergencyAffordanceManager<br>
-<code>frameworks/base/core/java/com/android/internal/policy/EmergencyAffordanceManager.java</code>
-</li> <li>EmergencyAffordanceService<br>
-<code>frameworks/base/services/core/java/com/android/server/emergency/EmergencyAffordanceService.java</code>
-</li> </ul>
+<li>EmergencyAffordanceManager
+<pre class="devsite-click-to-copy">
+frameworks/base/core/java/com/android/internal/policy/EmergencyAffordanceManager.java
+</pre>
+</li>
+<li>EmergencyAffordanceService
+<pre class="devsite-click-to-copy">
+frameworks/base/services/core/java/com/android/server/emergency/EmergencyAffordanceService.java
+</pre>
+</li>
+</ul>
 
 <h3 id="EmergencyAffordanceManager">EmergencyAffordanceManager</h3> <p>The
 EmergencyAffordanceManager provides an internal API to use the Emergency
@@ -218,23 +224,23 @@
 
 <h2 id="validation">Validation</h2> <p>While testing, on a debuggable build,
 the number that is called can be changed with the following command:</p>
-<pre>
-$ adb shell settings put global emergency_affordance_number <i>&lt;number_to_call&gt;</i>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell settings put global emergency_affordance_number <var>NUMBER_TO_CALL</var>
 </pre>
 
 <p>Although this setting can be set on a normal user build, it will be ignored.
 To actually connect the call the number must be in the list of emergency
 numbers provided by the RIL. This can be temporarily set using the following
 command executed from a root shell on a userdebug device:</p>
-<pre>
-$ setprop ril.ecclist "$(getprop ril.ecclist),<i>&lt;number_to_call&gt;</i>"
+<pre class="devsite-terminal devsite-click-to-copy">
+setprop ril.ecclist "$(getprop ril.ecclist),<var>NUMBER_TO_CALL</var>"
 </pre>
 
 <p>The following command can also be used to force the Emergency Affordance
 feature to be enabled even in the absence of an Indian mobile network being
 detected or an Indian SIM card being inserted.</p>
-<pre>
-$ adb shell settings put global force_emergency_affordance 1
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell settings put global force_emergency_affordance 1
 </pre>
 
 <p>During testing it is recommend that at least the following cases are
diff --git a/en/devices/tech/dalvik/configure.html b/en/devices/tech/dalvik/configure.html
index 79d61fd..2018b9c 100644
--- a/en/devices/tech/dalvik/configure.html
+++ b/en/devices/tech/dalvik/configure.html
@@ -104,7 +104,7 @@
 
 <p>Example usage (in product’s BoardConfig.mk):</p>
 
-<pre><code>WITH_DEXPREOPT := true</code></pre>
+<pre class="devsite-click-to-copy">WITH_DEXPREOPT := true</pre>
 
 <h3 id=dont_dexpreopt_prebuilts>DONT_DEXPREOPT_PREBUILTS</h3>
 
@@ -116,8 +116,10 @@
 
 <p>Example usage (in product’s BoardConfig.mk):</p>
 
-<pre><code>WITH_DEXPREOPT := true
-DONT_DEXPREOPT_PREBUILTS := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+DONT_DEXPREOPT_PREBUILTS := true
+</pre>
 
 <h3 id=with_dexpreopt_boot_img_only>WITH_DEXPREOPT_BOOT_IMG_ONLY</h3>
 
@@ -130,8 +132,10 @@
 
 <p>Example usage (in product’s BoardConfig.mk):</p>
 
-<pre><code>WITH_DEXPREOPT := true
-WITH_DEXPREOPT_BOOT_IMG_ONLY := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+WITH_DEXPREOPT_BOOT_IMG_ONLY := true
+</pre>
 
 <h3 id=local_dex_preopt>LOCAL_DEX_PREOPT</h3>
 
@@ -152,7 +156,9 @@
 
 <p>Example usage (in app’s Android.mk):</p>
 
-<pre><code>LOCAL_DEX_PREOPT := false</code></pre>
+<pre class="devsite-click-to-copy">
+LOCAL_DEX_PREOPT := false
+</pre>
 
 <h3 id=product_dex_preopt_*>PRODUCT_DEX_PREOPT_*</h3>
 
@@ -177,8 +183,10 @@
 
 <p>Example usage (in product’s device.mk):</p>
 
-<pre><code>PRODUCT_DEX_PREOPT_DEFAULT_FLAGS := --compiler-filter=interpret-only
-$(call add-product-dex-preopt-module-config,services,--compiler-filter=space)</code></pre>
+<pre class="devsite-click-to-copy">
+PRODUCT_DEX_PREOPT_DEFAULT_FLAGS := --compiler-filter=interpret-only
+$(call add-product-dex-preopt-module-config,services,--compiler-filter=space)
+</pre>
 
 <p>These flags can also be used to selectively disable pre-optimization of a
 particular module or package by specifying <code>$(call
@@ -187,7 +195,9 @@
 
 <p>Example usage (in product’s device.mk):</p>
 
-<pre><code>$(call add-product-dex-preopt-module-config,Calculator,disable)</code></pre>
+<pre class="devsite-click-to-copy">
+$(call add-product-dex-preopt-module-config,Calculator,disable)
+</pre>
 
 <h2 id=other_odex>First boot installation of DEX_PREOPT files</h2>
 
@@ -199,14 +209,17 @@
 
 <p>Example usage (in device-common.mk):</p>
 
-<pre><code>PRODUCT_PACKAGES += \
+<pre class="devsite-click-to-copy">
+PRODUCT_PACKAGES += \
      cppreopts.sh
 PRODUCT_PROPERTY_OVERRIDES += \
      ro.cp_system_other_odex=1
-</code></pre>
+</pre>
 
 <p>And in device's BoardConfig.mk:</p>
-<pre><code>BOARD_USES_SYSTEM_OTHER_ODEX := true</code></pre>
+<pre class="devsite-click-to-copy">
+BOARD_USES_SYSTEM_OTHER_ODEX := true
+</pre>
 
 <p>See <a href="/devices/tech/ota/ab_updates.html#compilation">App
 compilation in background</a> to optionally include the compilation script and
@@ -226,7 +239,9 @@
 
 <p>Example usage (in product’s device.mk):</p>
 
-<pre><code>PRODUCT_COPY_FILES += &lt;filename&gt;:system/etc/preloaded-classes</code></pre>
+<pre class="devsite-click-to-copy">
+PRODUCT_COPY_FILES += &lt;filename&gt;:system/etc/preloaded-classes
+</pre>
 
 <p class="note"><strong>Note:</strong> This line must be placed before
 inheriting any product configuration makefiles that get the default one from
@@ -246,7 +261,9 @@
 
 <p>Example usage (in product’s device.mk):</p>
 
-<pre><code>PRODUCT_DEX_PREOPT_BOOT_FLAGS += --image-classes=&lt;filename&gt;</code></pre>
+<pre class="devsite-click-to-copy">
+PRODUCT_DEX_PREOPT_BOOT_FLAGS += --image-classes=&lt;filename&gt;
+</pre>
 
 <h2 id=compiled_classes_list>Compiled Classes List</h2>
 
@@ -262,7 +279,9 @@
 
 <p>Example usage (in product’s device.mk):</p>
 
-<pre><code>PRODUCT_COPY_FILES += &lt;filename&gt;:system/etc/compiled-classes</code></pre>
+<pre class="devsite-click-to-copy">
+PRODUCT_COPY_FILES += &lt;filename&gt;:system/etc/compiled-classes
+</pre>
 
 <p class="note"><strong>Note:</strong> This line must be placed before
 inheriting any product configuration makefiles that get the default one from
@@ -280,9 +299,13 @@
 representation.
   <li><em>speed</em> - compiles most methods and maximizes runtime performance, which is the
 default option.
+  <li><em>speed-profile</em> - compiles methods passed from a profile file
+  through the <em>--profile-file</em> option or <em>--profile-file-fd</em> option.
   <li><em>balanced</em> - attempts to get the best performance return on compilation investment.
   <li><em>space</em> - compiles a limited number of methods, prioritizing storage space.
   <li><em>interpret-only</em> - skips all compilation and relies on the interpreter to run code.
+  <li><em>verify-profile</em> - skips all compilation and only performs verification of methods passed
+  from a profile file through the <em>--profile-file</em> option or <em>--profile-file-fd</em> option.
   <li><em>verify-none</em> - special option that skips verification and compilation, should be used only
 for trusted system code.
 </ul>
@@ -299,8 +322,10 @@
 
 <p>Example usage (in product’s device.mk):</p>
 
-<pre><code>WITH_DEXPREOPT := true
-WITH_DEXPREOPT_PIC := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+WITH_DEXPREOPT_PIC := true
+</pre>
 
 <p>Starting in Android 7.0, PIC compilation is enabled by default.</p>
 
@@ -316,14 +341,18 @@
 
 <p>Example usage (in product’s device.mk):</p>
 
-<pre><code>WITH_ART_SMALL_MODE := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_ART_SMALL_MODE := true
+</pre>
 
 <p>In future releases, this build option will be removed since it can be done with
 this (in product’s device.mk):</p>
 
-<pre><code>PRODUCT_PROPERTY_OVERRIDES += \
+<pre class="devsite-click-to-copy">
+PRODUCT_PROPERTY_OVERRIDES += \
      dalvik.vm.dex2oat-filter=interpret-only \
-     dalvik.vm.image-dex2oat-filter=speed</code></pre>
+     dalvik.vm.image-dex2oat-filter=speed
+</pre>
 
 <h2 id=dalvik_vm_properties>dalvik.vm Properties</h2>
 
@@ -383,23 +412,29 @@
 
 <p>BoardConfig.mk:</p>
 
-<pre><code>WITH_DEXPREOPT := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+</pre>
 
 <p>If this causes the system image to become too large, the next thing to try is
 disabling pre-optimization of the prebuilts.
 
 <p>BoardConfig.mk:</p>
 
-<pre><code>WITH_DEXPREOPT := true
-DONT_DEXPREOPT_PREBUILTS := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+DONT_DEXPREOPT_PREBUILTS := true
+</pre>
 
 <p>Again, if the system image is still too large, try pre-optimizing only the boot
 image.
 
 <p>BoardConfig.mk:</p>
 
-<pre><code>WITH_DEXPREOPT := true
-WITH_DEXPREOPT_BOOT_IMG_ONLY := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+WITH_DEXPREOPT_BOOT_IMG_ONLY := true
+</pre>
 
 <p>However, limiting to pre-optimizing only the boot-image means all apps will
 have to be optimized on first boot. In order to avoid this, it is possible to
@@ -413,12 +448,16 @@
 
 <p>BoardConfig.mk:</p>
 
-<pre><code>WITH_DEXPREOPT := true
-DONT_DEXPREOPT_PREBUILTS := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+DONT_DEXPREOPT_PREBUILTS := true
+</pre>
 
 <p>device.mk:</p>
 
-<pre><code>PRODUCT_DEX_PREOPT_BOOT_FLAGS := --compiler-filter=space</code></pre>
+<pre class="devsite-click-to-copy">
+PRODUCT_DEX_PREOPT_BOOT_FLAGS := --compiler-filter=space
+</pre>
 
 <p>If a device has very limited system partition space, it’s possible to compile a
 subset of classes in the boot classpath using the compiled classes list. Boot
@@ -427,12 +466,16 @@
 
 <p>BoardConfig.mk:</p>
 
-<pre><code>WITH_DEXPREOPT := true
-WITH_DEXPREOPT_BOOT_IMG_ONLY := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+WITH_DEXPREOPT_BOOT_IMG_ONLY := true
+</pre>
 
 <p>device.mk:</p>
 
-<pre><code>PRODUCT_COPY_FILES += &lt;filename&gt;:system/etc/compiled-classes</code></pre>
+<pre class="devsite-click-to-copy">
+PRODUCT_COPY_FILES += &lt;filename&gt;:system/etc/compiled-classes
+</pre>
 
 <p>If a device has both limited space in the system and data partitions, compiler
 filter flags can be used to disable compilation of certain apps. This will save
@@ -446,13 +489,17 @@
 
 <p>BoardConfig.mk:</p>
 
-<pre><code>WITH_DEXPREOPT := true
-DONT_DEXPREOPT_PREBUILTS := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+DONT_DEXPREOPT_PREBUILTS := true
+</pre>
 
 <p>device.mk:</p>
 
-<pre><code>PRODUCT_DEX_PREOPT_DEFAULT_FLAGS := --compiler-filter=interpret-only
-$(call add-product-dex-preopt-module-config,services,--compiler-filter=space)</code></pre>
+<pre class="devsite-click-to-copy">
+PRODUCT_DEX_PREOPT_DEFAULT_FLAGS := --compiler-filter=interpret-only
+$(call add-product-dex-preopt-module-config,services,--compiler-filter=space)
+</pre>
 
 <p>For a major version upgrade OTA, it can be useful to blacklist certain apps
 from being pre-optimized since they will likely be out of date. This can be
@@ -461,11 +508,15 @@
 
 <p>BoardConfig.mk:</p>
 
-<pre><code>WITH_DEXPREOPT := true</code></pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+</pre>
 
 <p>Android.mk (of blacklisted apps):</p>
 
-<pre><code>LOCAL_DEX_PREOPT := false</code></pre>
+<pre class="devsite-click-to-copy">
+LOCAL_DEX_PREOPT := false
+</pre>
 
   </body>
 </html>
diff --git a/en/devices/tech/dalvik/dex-format.html b/en/devices/tech/dalvik/dex-format.html
index 3ff22c0..fde14a8 100644
--- a/en/devices/tech/dalvik/dex-format.html
+++ b/en/devices/tech/dalvik/dex-format.html
@@ -291,7 +291,7 @@
 encodes a format version number as three decimal digits, which is
 expected to increase monotonically over time as the format evolves.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 ubyte[8] DEX_FILE_MAGIC = { 0x64 0x65 0x78 0x0a 0x30 0x33 0x38 0x00 }
                         = "dex\n038\0"
 </pre>
@@ -328,7 +328,7 @@
 instead of <code>ENDIAN_CONSTANT</code>, it would know that the file
 has been byte-swapped from the expected form.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 uint ENDIAN_CONSTANT = 0x12345678;
 uint REVERSE_ENDIAN_CONSTANT = 0x78563412;
 </pre>
@@ -345,7 +345,7 @@
 <p>The chosen value for <code>NO_INDEX</code> is
 representable as a single byte in the <code>uleb128p1</code> encoding.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 uint NO_INDEX = 0xffffffff;    // == -1 if treated as a signed int
 </pre>
 
@@ -2659,7 +2659,7 @@
 registers by a small amount and then emit a new position table entry.
 The formula for the increments are as follows:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 DBG_FIRST_SPECIAL = 0x0a  // the smallest special opcode
 DBG_LINE_BASE   = -4      // the smallest line number increment
 DBG_LINE_RANGE  = 15      // the number of line increments represented
diff --git a/en/devices/tech/dalvik/gc-debug.html b/en/devices/tech/dalvik/gc-debug.html
index 029fde2..b1a62fe 100644
--- a/en/devices/tech/dalvik/gc-debug.html
+++ b/en/devices/tech/dalvik/gc-debug.html
@@ -216,8 +216,11 @@
 the ANR request signal (SIGQUIT) it dumps information related to its locks,
 thread stacks, and GC performance.</p>
 
-<p>The way to get GC timing dumps is to use:<br>
-<code>$ adb shell kill -S QUIT <pid></code></p>
+<p>The way to get GC timing dumps is to use:</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell kill -S QUIT <var>PID</var>
+</pre>
 
 <p>This creates a <code>traces.txt</code> file in <code>/data/anr/</code>. This
 file contains some ANR dumps as well as GC timings. You can locate the
@@ -226,7 +229,7 @@
 each GC type’s phases and pauses. The pauses are usually more important to look
 at. For example:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 sticky concurrent mark sweep paused:	Sum: 5.491ms 99% C.I. 1.464ms-2.133ms Avg: 1.830ms Max: 2.133ms
 </pre>
 
@@ -240,14 +243,14 @@
 suspending slowly. Here is an example of what a normal time to suspend
 resembles on a Nexus 5:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 suspend all histogram:	Sum: 1.513ms 99% C.I. 3us-546.560us Avg: 47.281us Max: 601us
 </pre>
 
 <p>There are also a few other areas of interest, such as total time spent, GC
 throughput, etc. Examples:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 Total time spent in GC: 502.251ms
 Mean GC size throughput: 92MB/s
 Mean GC object throughput: 1.54702e+06 objects/s
@@ -255,15 +258,15 @@
 
 <p>Here is an example of how to dump the GC timings of an already running app:
 
-<pre>
-$ adb shell kill -s QUIT &lt;pid&gt;
-$ adb pull /data/anr/traces.txt
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell kill -s QUIT <var>PID</var></code>
+<code class="devsite-terminal">adb pull /data/anr/traces.txt</code>
 </pre>
 
 <p>At this point the GC timings are inside of traces.txt. Here is example output
 from Google maps:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 Start Dumping histograms for 34 iterations for sticky concurrent mark sweep
 ScanGrayAllocSpaceObjects:	Sum: 196.174ms 99% C.I. 0.011ms-11.615ms Avg: 1.442ms Max: 14.091ms
 FreeList:	Sum: 140.457ms 99% C.I. 6us-1676.749us Avg: 128.505us Max: 9886us
@@ -342,8 +345,8 @@
 such as using invalid/stale local and global references. Here is how to enable
 CheckJNI:</p>
 
-<pre>
-$ adb shell setprop dalvik.vm.checkjni true
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell setprop dalvik.vm.checkjni true
 </pre>
 
 <p>Forcecopy mode is another part of CheckJNI that is very useful for detecting
@@ -355,8 +358,8 @@
 or underrun occurred. This would cause CheckJNI to abort. Here is how to enable
 forcecopy mode:</p>
 
-<pre>
-$ adb shell setprop dalvik.vm.jniopts forcecopy
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell setprop dalvik.vm.jniopts forcecopy
 </pre>
 
 <p>One example of an error that CheckJNI should catch is writing past the end of
@@ -388,18 +391,18 @@
 
 <p>Here is an example use:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 # build and install
-$ mmm external/valgrind
-$ adb remount && adb sync
+<code class="devsite-terminal">mmm external/valgrind</code>
+<code class="devsite-terminal">adb remount && adb sync</code>
 # disable selinux
-$ adb shell setenforce 0
-$ adb shell setprop wrap.com.android.calculator2
+<code class="devsite-terminal">adb shell setenforce 0</code>
+<code class="devsite-terminal">adb shell setprop wrap.com.android.calculator2</code>
 "TMPDIR=/data/data/com.android.calculator2 logwrapper valgrind"
 # push symbols
-$ adb shell mkdir /data/local/symbols
-$ adb push $OUT/symbols /data/local/symbols
-$ adb logcat
+<code class="devsite-terminal">adb shell mkdir /data/local/symbols</code>
+<code class="devsite-terminal">adb push $OUT/symbols /data/local/symbols</code>
+<code class="devsite-terminal">adb logcat</code>
 </pre>
 
 
@@ -410,7 +413,7 @@
 <code>art E  5955  5955 art/runtime/gc/collector/mark_sweep.cc:383] Tried to mark 0x2
 not contained by any spaces</code></p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 art E  5955  5955 art/runtime/gc/collector/mark_sweep.cc:384] Attempting see if
 it's a bad root
 art E  5955  5955 art/runtime/gc/collector/mark_sweep.cc:485] Found invalid
@@ -435,7 +438,7 @@
 <p>In the case where the object isn’t a root, output similar to the following
 prints:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 01-15 12:38:00.196  1217  1238 E art     : Attempting see if it's a bad root
 01-15 12:38:00.196  1217  1238 F art     :
 art/runtime/gc/collector/mark_sweep.cc:381] Can't mark invalid object
diff --git a/en/devices/tech/dalvik/jit-compiler.html b/en/devices/tech/dalvik/jit-compiler.html
index 6c874d8..9090349 100644
--- a/en/devices/tech/dalvik/jit-compiler.html
+++ b/en/devices/tech/dalvik/jit-compiler.html
@@ -54,7 +54,7 @@
 
 <h2 id="architectural-overview">Architectural Overview</h2>
 
-<img src="images/jit-arch.png" alt="JIT architecture" width="633" id="JIT-architecture" />
+<img src="/devices/tech/dalvik/images/jit-arch.png" alt="JIT architecture" width="633" id="JIT-architecture" />
 <p class="img-caption">
   <strong>Figure 1.</strong> JIT architecture - how it works
 </p>
@@ -83,12 +83,12 @@
 compilation.</li>
 </ol>
 
-<img src="images/jit-profile-comp.png" alt="Profile-guided comp" width="452" id="JIT-profile-comp" />
+<img src="/devices/tech/dalvik/images/jit-profile-comp.png" alt="Profile-guided comp" width="452" id="JIT-profile-comp" />
 <p class="img-caption">
   <strong>Figure 2.</strong> Profile-guided compilation
 </p>
 
-<img src="images/jit-daemon.png" alt="JIT daemon" width="718" id="JIT-daemon" />
+<img src="/devices/tech/dalvik/images/jit-daemon.png" alt="JIT daemon" width="718" id="JIT-daemon" />
 <p class="img-caption">
   <strong>Figure 3.</strong> How the daemon works
 </p>
@@ -103,7 +103,7 @@
 See the following high-level overview of how JIT works in the next diagram.
 </p>
 
-<img src="images/jit-workflow.png" alt="JIT architecture" width="707" id="JIT-workflow" />
+<img src="/devices/tech/dalvik/images/jit-workflow.png" alt="JIT architecture" width="707" id="JIT-workflow" />
 <p class="img-caption">
   <strong>Figure 4.</strong> JIT data flow
 </p>
@@ -183,7 +183,7 @@
 system properties with the defaults being:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 pm.dexopt.install=interpret-only
 pm.dexopt.bg-dexopt=speed-profile
 pm.dexopt.ab-ota=speed-profile
@@ -211,20 +211,20 @@
 
 <h3 id="turn-on-jit-logging">Turn on JIT logging</h3>
 
-<pre>
-$ adb root
-$ adb shell stop
-$ adb shell setprop dalvik.vm.extra-opts -verbose:jit
-$ adb shell start
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell stop</code>
+<code class="devsite-terminal">adb shell setprop dalvik.vm.extra-opts -verbose:jit</code>
+<code class="devsite-terminal">adb shell start</code>
 </pre>
 
 <h3 id="disable-jit-and-run-applications-in-interpreter">Disable JIT</h3>
 
-<pre>
-$ adb root
-$ adb shell stop
-$ adb shell setprop dalvik.vm.usejit false
-$ adb shell start
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell stop</code>
+<code class="devsite-terminal">adb shell setprop dalvik.vm.usejit false</code>
+<code class="devsite-terminal">adb shell start</code>
 </pre>
 
 <h3 id="force-compilation-of-a-specific-package">Force compilation of a specific
@@ -232,11 +232,15 @@
 
 <ul>
 <li>Profile-based:
-<code>$ adb shell cmd package compile -m speed-profile -f
-my-package</code>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell cmd package compile -m speed-profile -f my-package
+</pre>
+</li>
 <li>Full:
-<code>$ adb shell cmd package compile -m speed -f
-my-package</code></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell cmd package compile -m speed -f my-package
+</pre>
+</li>
 </ul>
 
 <h3 id="force-compilation-of-all-packages">Force compilation of all
@@ -244,20 +248,31 @@
 
 <ul>
 <li>Profile-based:
-<code>$ adb shell cmd package compile -m speed-profile -f
--a</code>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell cmd package compile -m speed-profile -f -a
+</pre>
+</li>
 <li>Full:
-<code>$ adb shell cmd package compile -m speed -f -a</code></li></ul>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell cmd package compile -m speed -f -a
+</pre>
+</li>
+</ul>
 
 <h3 id="clear-profile-data-and-remove-compiled-code">Clear profile data and
 remove compiled code</h3>
 
 <ul>
 <li>One package:
-<code>$ adb shell cmd package compile --reset my-package</code>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell cmd package compile --reset my-package
+</pre>
+</li>
 <li>All packages
-<code>$ adb shell cmd package compile --reset
--a</code></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell cmd package compile --reset -a
+</pre>
+</li>
 </ul>
 
 <h2 id="recommendation">Recommendation</h2>
@@ -270,7 +285,7 @@
 support.
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 pm.dexopt.install=interpret-only
 pm.dexopt.bg-dexopt=speed-profile
 pm.dexopt.boot=verify-profile (or interpret-only)
@@ -281,7 +296,7 @@
 reasoning for our recommendations:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 pm.dexopt.install
 </pre>
 
@@ -290,7 +305,7 @@
 Play Store. For faster installs we recommend <code>interpret-only</code>.
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 pm.dexopt.bg-dexopt
 </pre>
 
@@ -300,7 +315,7 @@
 of profile guided compilation and save on storage.
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 pm.dexopt.ab-ota
 </pre>
 
@@ -311,7 +326,7 @@
 save on storage.
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 pm.dexopt.nsys-library
 pm.dexopt.shared-apk
 pm.dexopt.core-app
@@ -324,7 +339,7 @@
 profiling of them.
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 pm.dexopt.first-boot
 </pre>
 
@@ -336,7 +351,7 @@
 are already speed compiled, <code>pm.dexopt.first-boot</code> has no effect.
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 pm.dexopt.boot
 </pre>
 
@@ -364,11 +379,13 @@
 
 <p>Add the following entry to <code>BoardConfig.mk</code>:</p>
 
-<pre>WITH_DEXPREOPT := true</pre>
+<pre class="devsite-click-to-copy">
+WITH_DEXPREOPT := true
+</pre>
 
 <p>Add the following entry to <code>device.mk</code>:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_DEX_PREOPT_DEFAULT_FLAGS := --compiler-filter=interpret-only
 </pre>
 
diff --git a/en/devices/tech/datausage/tags-explained.html b/en/devices/tech/datausage/tags-explained.html
index 1d3dc6b..73fb8e1 100644
--- a/en/devices/tech/datausage/tags-explained.html
+++ b/en/devices/tech/datausage/tags-explained.html
@@ -35,10 +35,11 @@
 portion separately.</p>
 <p>Without explicit tagging, the qtaguid module will assume the
 <code>default_tag:  {acct_tag=0, uid_tag=10003}</code></p>
-<pre><code>    a:  {acct_tag=1, uid_tag=10003}
+<pre class="devsite-click-to-copy">
+    a:  {acct_tag=1, uid_tag=10003}
     b:  {acct_tag=2, uid_tag=10003}
     c:  {acct_tag=3, uid_tag=10003}
-</code></pre>
+</pre>
 <p><code>a, b, c…</code> represent explicit tags associated with specific sockets.</p>
 <p><code>default_tag (acct_tag=0)</code> is the default accounting tag that contains
 the total traffic for that uid, including all untagged
diff --git a/en/devices/tech/debug/asan.html b/en/devices/tech/debug/asan.html
index 0ab286d..353aa4b 100644
--- a/en/devices/tech/debug/asan.html
+++ b/en/devices/tech/debug/asan.html
@@ -62,7 +62,7 @@
 <p>Add <code>LOCAL_SANITIZE:=address</code> to the build rule of the
 executable.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 LOCAL_SANITIZE:=address
 </pre>
 
@@ -83,7 +83,7 @@
 recommended way to do this is to add the following to <code>Android.mk</code>
 for the module in question:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 LOCAL_SANITIZE:=address
 LOCAL_MODULE_RELATIVE_PATH := asan
 </pre>
@@ -95,7 +95,7 @@
 <p>For system daemons, add the following to the appropriate section of
 <code>/init.rc</code> or <code>/init.$device$.rc</code>.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 setenv LD_LIBRARY_PATH /system/lib/asan
 </pre>
 
@@ -111,9 +111,9 @@
 when present by reading <code>/proc/$PID/maps</code>. If it's not, you may need
 to disable SELinux, like so:</p>
 
-<pre>
-$ adb root
-$ adb shell setenforce 0
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell setenforce 0</code>
 # restart the process with adb shell kill $PID
 # if it is a system service, or may be adb shell stop; adb shell start.
 </pre>
@@ -126,7 +126,7 @@
 only one or two meaningful frames. To fix this, either rebuild the library with
 ASan (recommended!), or with:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 LOCAL_CFLAGS:=-fno-omit-frame-pointer
 LOCAL_ARM_MODE:=arm
 </pre>
@@ -167,7 +167,7 @@
 <code>system/core/rootdir/init.zygote(<em>32|64</em>).rc</code> to add the
 following lines:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 setenv LD_LIBRARY_PATH /system/lib/asan:/system/lib
 setenv ASAN_OPTIONS
 allow_user_segv_handler=true
@@ -186,10 +186,10 @@
 that’s used to run apps under Valgrind. The following example runs the Gmail app
 under ASan:</p>
 
-<pre>
-$ adb root
-$ adb shell setenforce 0  # disable SELinux
-$ adb shell setprop wrap.com.google.android.gm "asanwrapper"
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb root</code>
+<code class="devsite-terminal">adb shell setenforce 0  # disable SELinux</code>
+<code class="devsite-terminal">adb shell setprop wrap.com.google.android.gm "asanwrapper"</code>
 </pre>
 
 <p>In this context, asanwrapper rewrites <code>/system/bin/app_process</code>
@@ -209,16 +209,16 @@
 
 <p>Run the following commands in the same build tree.</p>
 
-<pre>
-$ make -j42
-$ SANITIZE_TARGET=address make -j42
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">make -j42</code>
+<code class="devsite-terminal">SANITIZE_TARGET=address make -j42</code>
 </pre>
 
 <p>In this mode, <code>userdata.img</code> contains extra libraries and must be
 flashed to the device as well. Use the following command line:</p>
 
-<pre>
-$ fastboot flash userdata && fastboot flashall
+<pre class="devsite-terminal devsite-click-to-copy">
+fastboot flash userdata && fastboot flashall
 </pre>
 
 <p>At the moment of this writing, modern Nexus and Pixel devices boot to the UI in this mode.</p>
diff --git a/en/devices/tech/debug/dumpsys.html b/en/devices/tech/debug/dumpsys.html
index 80f93e5..e87722b 100644
--- a/en/devices/tech/debug/dumpsys.html
+++ b/en/devices/tech/debug/dumpsys.html
@@ -34,8 +34,8 @@
 
 <p>For example, the following command:</p>
 
-<pre>
-$ adb shell dumpsys input
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys input
 </pre>
 
 <p>provides system data for input components such as touchscreens or built-in
@@ -47,8 +47,12 @@
 <p>For a complete list of system services that you can use with dumpsys, try the
 following command:</p>
 
-<pre class="no-pretty-print">
-$ adb shell dumpsys -l
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys -l
+</pre>
+
+<p>Example output:</p>
+<pre class="devsite-click-to-copy">
 Currently running services:
   DockObserver
   SurfaceFlinger
diff --git a/en/devices/tech/debug/eval_perf.html b/en/devices/tech/debug/eval_perf.html
index 44173fe..79c77de 100644
--- a/en/devices/tech/debug/eval_perf.html
+++ b/en/devices/tech/debug/eval_perf.html
@@ -169,8 +169,10 @@
 because uninterruptible sleep is a very common indicator of jitter.</li>
 <li>Ensure you have sufficient tracing for the GPU and display pipelines. On
 recent Qualcomm SOCs, tracepoints are enabled using:</li>
-<pre>$ adb shell "echo 1 &gt; /d/tracing/events/kgsl/enable"
-$ adb shell "echo 1 &gt; /d/tracing/events/mdss/enable"</pre>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell "echo 1 &gt; /d/tracing/events/kgsl/enable"</code>
+<code class="devsite-terminal">adb shell "echo 1 &gt; /d/tracing/events/mdss/enable"</code>
+</pre>
 
 <p>These events remain enabled when you run systrace so you can see additional
 information in the trace about the display pipeline (MDSS) in the
diff --git a/en/devices/tech/debug/ftrace.html b/en/devices/tech/debug/ftrace.html
index e48362d..2fbaba4 100644
--- a/en/devices/tech/debug/ftrace.html
+++ b/en/devices/tech/debug/ftrace.html
@@ -55,10 +55,14 @@
 divided into categories in <code>/d/tracing/events</code>.
 
 <p>To enable events on a per-category basis, use:
-<pre>$ echo 1 &gt; /d/tracing/events/irq/enable</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 1 &gt; /d/tracing/events/irq/enable
+</pre>
 
 <p>To enable events on per-event basis, use:
-<pre>$ echo 1 &gt; /d/tracing/events/sched/sched_wakeup/enable</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 1 &gt; /d/tracing/events/sched/sched_wakeup/enable
+</pre>
 
 <p>If extra events have been enabled by writing to sysfs nodes, they will
 <strong>not</strong> be reset by atrace. A common pattern
@@ -66,9 +70,11 @@
 <code>mdss</code> (display pipeline) tracepoints and then use atrace or
 <a href="/devices/tech/debug/systrace.html">systrace</a>:</p>
 
-<pre>$ adb shell "echo 1 &gt; /d/tracing/events/mdss/enable"
-$ adb shell "echo 1 &gt; /d/tracing/events/kgsl/enable"
-$ ./systrace.py sched freq idle am wm gfx view binder_driver irq workq ss sync -t 10 -b 96000 -o full_trace.html</pre>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell "echo 1 &gt; /d/tracing/events/mdss/enable"</code>
+<code class="devsite-terminal">adb shell "echo 1 &gt; /d/tracing/events/kgsl/enable"</code>
+<code class="devsite-terminal">./systrace.py sched freq idle am wm gfx view binder_driver irq workq ss sync -t 10 -b 96000 -o full_trace.html</code>
+</pre>
 
 <p>You can also use ftrace without atrace or systrace, which is
 useful when you want kernel-only traces (or if you've taken the time to write
@@ -76,13 +82,25 @@
 
 <ol>
 <li>Set the buffer size to a value large enough for your trace:
-<pre>$ echo 96000 &gt; /d/tracing/buffer_size_kb</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 96000 &gt; /d/tracing/buffer_size_kb
+</pre>
+</li>
 <li>Enable tracing:
-<pre>$ echo 1 &gt; /d/tracing/tracing_on</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 1 &gt; /d/tracing/tracing_on
+</pre>
+</li>
 <li>Run your test, then disable tracing:
-<pre>$ echo 0 &gt; /d/tracing/tracing_on</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 0 &gt; /d/tracing/tracing_on
+</pre>
+</li>
 <li>Dump the trace:
-<pre>$ cat /d/tracing/trace &gt; /data/local/tmp/trace_output</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+cat /d/tracing/trace &gt; /data/local/tmp/trace_output
+</pre>
+</li>
 </ol>
 
 <p>The trace_output gives the trace in text form. To visualize it using
@@ -90,7 +108,9 @@
 <a href="https://github.com/catapult-project/catapult/tree/master/">Catapult
 repository</a> from Github and run trace2html:</p>
 
-<pre>$ catapult/tracing/bin/trace2html ~/path/to/trace_file</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+catapult/tracing/bin/trace2html ~/path/to/trace_file
+</pre>
 
 <p>By default, this writes <code>trace_file.html</code> in the same
 directory.</p>
@@ -120,7 +140,9 @@
 
 <li>Find a line at the beginning of the trace containing
 <code>tracing_mark_sync</code>. It should look something like this:
-<pre>&lt;5134&gt;-5134  (-----) [003] ...1    68.104349: tracing_mark_write: trace_event_clock_sync: parent_ts=68.104286</pre>
+<pre class="devsite-click-to-copy">
+&lt;5134&gt;-5134  (-----) [003] ...1    68.104349: tracing_mark_write: trace_event_clock_sync: parent_ts=68.104286
+</pre>
 
 <br>If this line does not exist (or if you used ftrace without atrace), then
 timings will be relative from the first event in the ftrace log.
@@ -154,11 +176,16 @@
 </li>
 <li>Rebuild and boot the new kernel.</li>
 <li>Run the following to check for available tracers:
-<pre>$ cat /d/tracing/available_tracers</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+cat /d/tracing/available_tracers
+</pre>
+</li>
 <li>Confirm the command returns <code>function</code>, <code>irqsoff</code>,
 <code>preemptoff</code>, and <code>preemptirqsoff</code>.</li>
 <li>Run the following to ensure dynamic ftrace is working:
-<pre>$ cat /d/tracing/available_filter_functions | grep &lt;a function you care about&gt;</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+cat /d/tracing/available_filter_functions | grep &lt;a function you care about&gt;
+</pre>
 </li>
 </ol>
 
@@ -195,22 +222,43 @@
 <ol>
 <li>As functions are sometimes renamed by the compiler, confirm
 <code>ion_client_destroy</code> is there by using:
-<pre>$ cat /d/tracing/available_filter_functions | grep ion_client_destroy</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+cat /d/tracing/available_filter_functions | grep ion_client_destroy
+</pre>
 </li>
 <li>After confirming it is there, use it as the ftrace filter:
-<pre>$ echo ion_client_destroy &gt; /d/tracing/set_ftrace_filter</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo ion_client_destroy &gt; /d/tracing/set_ftrace_filter
+</pre>
+</li>
 <li>Turn on the function profiler:
-<pre>$ echo function &gt; /d/tracing/current_tracer</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo function &gt; /d/tracing/current_tracer
+</pre>
+</li>
 <li>Turn on stack traces whenever a filter function is called:
-<pre>$ echo func_stack_trace &gt; /d/tracing/trace_options</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo func_stack_trace &gt; /d/tracing/trace_options
+</pre>
+</li>
 <li>Increase the buffer size:
-<pre>$ echo 64000 &gt; /d/tracing/buffer_size_kb</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 64000 &gt; /d/tracing/buffer_size_kb
+</pre>
+</li>
 <li>Turn on tracing:
-<pre>$ echo 1 &gt; /d/tracing/trace_on</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 1 &gt; /d/tracing/trace_on
+</pre>
+</li>
 <li>Run the test and get the trace:
-<pre>$ cat /d/tracing/trace &gt; /data/local/tmp/trace</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+cat /d/tracing/trace &gt; /data/local/tmp/trace
+</pre>
+</li>
 <li>View the trace to see lots and lots of stack traces:
-<pre>    cameraserver-643   [003] ...1    94.192991: ion_client_destroy &lt;-ion_release
+<pre class="devsite-click-to-copy">
+    cameraserver-643   [003] ...1    94.192991: ion_client_destroy &lt;-ion_release
     cameraserver-643   [003] ...1    94.192997: &lt;stack trace&gt;
  =&gt; ftrace_ops_no_ops
  =&gt; ftrace_graph_call
@@ -220,7 +268,9 @@
  =&gt; ____fput
  =&gt; task_work_run
  =&gt; do_notify_resume
- =&gt; work_pending</pre></li>
+ =&gt; work_pending
+ </pre>
+</li>
  </ol>
 
 <p>Based on inspection of the ion driver, we can see that
@@ -286,12 +336,21 @@
 ftrace:</p>
 <ol>
 <li>Enable tracing:
-<pre>$ echo 1 &gt; /proc/sys/kernel/lock_stat</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 1 &gt; /proc/sys/kernel/lock_stat
+</pre>
+</li>
 <li>Run your test.</li>
 <li>Disable tracing:
-<pre>$ echo 0 &gt; /proc/sys/kernel/lock_stat</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+echo 0 &gt; /proc/sys/kernel/lock_stat
+</pre>
+</li>
 <li>Dump your trace:
-<pre>$ cat /proc/lock_stat &gt; /data/local/tmp/lock_stat</pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+cat /proc/lock_stat &gt; /data/local/tmp/lock_stat
+</pre>
+</li>
 </ol>
 
 <p>For help interpreting the resulting output, refer to lockstat documentation
diff --git a/en/devices/tech/debug/gdb.html b/en/devices/tech/debug/gdb.html
new file mode 100644
index 0000000..27c9932
--- /dev/null
+++ b/en/devices/tech/debug/gdb.html
@@ -0,0 +1,141 @@
+<html devsite>
+  <head>
+    <title>Using GDB</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 GNU Project debugger (GDB) is a commonly used Unix debugger. This page
+details using <code>gdb</code> to debug Android apps and processes.</p>
+
+<h2 id=running>Debugging running apps or processes</h2>
+
+<p>To connect to an already-running app or native daemon, use
+<code>gdbclient</code> with a PID. For example, to debug the process with PID
+1234, run:</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">
+gdbclient 1234
+</pre>
+
+<p>The script sets up port forwarding, starts the appropriate
+<code>gdbserver</code> on the device, starts the appropriate <code>gdb</code> on
+the host, configures <code>gdb</code> to find symbols, and connects
+<code>gdb</code> to the remote <code>gdbserver</code>.</p>
+
+<h2 id=starts>Debugging native process startup</h2>
+
+<p>To debug a process as it starts, use <code>gdbserver</code> or
+<code>gdbserver64</code> (for 64-bit processes). For example:</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell gdbserver :5039 /system/bin/<var>MY_TEST_APP</var>
+</pre>
+
+<p>Example output:</p>
+<pre class="devsite-click-to-copy">
+Process <var>MY_TEST_APP</var> created; pid = 3460
+Listening on port 5039
+</pre>
+
+<p>Next, identify the application PID from the <code>gdbserver</code> output and
+use it in another terminal window:</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">
+gdbclient <var>APP_PID</var>
+</pre>
+
+<p>Finally, enter <strong>continue</strong> at the <code>gdb</code> prompt.</p>
+
+<p class="note"><strong>Note:</strong> If you specify the wrong
+<code>gdbserver</code>, you'll get an unhelpful error message (such as
+"<code>Reply contains invalid hex digit 59</code>").</p>
+
+<h2 id="app-startup">Debugging app startup</h2>
+
+<p>Sometimes you want to debug an app as it starts, such as when there's a crash
+and you want to step through code to see what happens <em>before</em> the crash.
+<a href="#running">Attaching</a> works in some cases, but in other cases is
+impossible because the app crashes before you can attach. The
+<code>logwrapper</code> approach (used for <code>strace</code> and
+<code>valgrind</code>) does not always work because the app might not have
+permissions to open a port, and <code>gdbserver</code> inherits that
+restriction.</p>
+
+<p>To debug app startup, use the developer options in Settings to instruct
+the app to wait for a Java debugger to attach:</p>
+
+<ol>
+<li>Go to <em>Settings > Developer options > Select debug app</em> and choose
+your app from the list, then press <strong>Wait for debugger</strong>.</li>
+
+<li>Start the app, either from the launcher or by using the command line to run:
+<pre class="devsite-terminal devsite-click-to-copy">
+am start -a android.intent.action.MAIN -n <var>APP_NAME</var>/.<var>APP_ACTIVITY</var>
+</pre></li>
+
+<li>Wait for the app to load and a dialog to appear telling you the app is
+waiting for a debugger.</li>
+
+<li>Attach <code>gdbserver</code>/<code>gdbclient</code> normally, set
+breakpoints, then continue the process.</li></ol>
+
+<p>To let the app actually run, attach a Java Debug Wire Protocol (JDWP)
+debugger such as Java Debugger (jdb):</p>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb forward tcp:12345 jdwp:<var>XXX</var>  # (Where XXX is the pid of the debugged process.)</code>
+<code class="devsite-terminal">jdb -attach localhost:12345</code>
+</pre>
+
+<h2 id=crash>Debugging apps or processes that crash</h2>
+
+<p>If you want <code>debuggerd</code> to suspend crashed processes so you can
+attach <code>gdb</code>, set the appropriate property:</p>
+
+<pre class="devsite-click-to-copy">
+# Android 7.0 Nougat and later.
+<code class="devsite-terminal">adb shell setprop debug.debuggerd.wait_for_gdb true</code>
+</pre>
+
+<pre class="devsite-click-to-copy">
+# Android 6.0 Marshmallow and earlier.
+<code class="devsite-terminal">adb shell setprop debug.db.uid 999999</code>
+</pre>
+
+<p>At the end of the usual crash output, <code>debuggerd</code> provides
+instructions on how to connect <code>gdb</code> using the command:
+<pre class="devsite-terminal devsite-click-to-copy">
+gdbclient <var>PID</var>
+</pre>
+
+
+<h2 id=symbols>Debugging without symbols</h2>
+
+<p>For 32-bit ARM, if you don’t have symbols, <code>gdb</code> can get confused
+about the instruction set it is disassembling (ARM or Thumb). To specify the
+instruction set chosen as the default when symbol information is missing, set
+the following property:</p>
+
+<pre class="devsite-terminal devsite-click-to-copy">
+set arm fallback-mode arm  # or thumb
+</pre>
+
+  </body>
+</html>
diff --git a/en/devices/tech/debug/index.html b/en/devices/tech/debug/index.html
index b2f4c14..268f24e 100644
--- a/en/devices/tech/debug/index.html
+++ b/en/devices/tech/debug/index.html
@@ -25,11 +25,11 @@
 
 <p>This section summarizes useful tools and related commands for debugging,
 tracing, and profiling native Android platform code when developing
-platform-level features. This page covers use of <code>debuggerd</code>, a
-daemon process for collecting error information after applications crash, and
-the GNU Project debugger (GDB).</p>
+platform-level features.</p>
 
-<p>Other pages in this section explore system services with
+<p>This page covers use of <code>debuggerd</code>, a daemon process for
+collecting error information after applications crash. Other pages in this
+section explore system services with
 <a href="/devices/tech/debug/dumpsys.html">Dumpsys</a>, viewing
 <a href="/devices/tech/debug/native-memory.html">native memory</a>,
 <a href="/devices/tech/debug/netstats.html">network</a>, and
@@ -37,8 +37,9 @@
 <a href="/devices/tech/debug/asan.html">AddressSanitizer</a> to detect memory
 bugs in native code, evaluating
 <a href="/devices/tech/debug/eval_perf.html"> performance issues</a> (includes
-<a href="/devices/tech/debug/systrace">systrace</a>), and several other
-debugging tools.</p>
+<a href="/devices/tech/debug/systrace">systrace</a>), and using
+<a href="/devices/tech/debug/gdb.html">GNU Project debugger (GDB)</a> and
+other debugging tools.</p>
 
 <h2 id=debuggerd>Using debuggerd</h2>
 
@@ -57,7 +58,7 @@
 <p>Example <code>debuggerd</code> output (with timestamps and extraneous
 information removed):</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
 Build fingerprint: 'Android/aosp_angler/angler:7.1.1/NYC/enh12211018:eng/test-keys'
 Revision: '0'
@@ -95,8 +96,12 @@
 <code>stack</code> will be on your $PATH already so you don't need to give the
 full path.</p>
 
-<pre>
-$ development/tools/stack
+<pre class="devsite-terminal devsite-click-to-copy">
+development/tools/stack
+</pre>
+
+<p>Example output:</p>
+<pre class="devsite-click-to-copy">
 Reading native crash info from stdin
 03-02 23:53:49.477 17951 17951 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
 03-02 23:53:49.477 17951 17951 F DEBUG   : Build fingerprint: 'Android/aosp_angler/angler:7.1.1/NYC/enh12211018:eng/test-keys'
@@ -146,93 +151,20 @@
 space as an unstripped version.</p>
 
 <p>You can also <code>stack</code> an entire tombstone. Example:</p>
-<pre>
-$ stack < FS/data/tombstones/tombstone_05
+<pre class="devsite-terminal devsite-click-to-copy">
+stack < FS/data/tombstones/tombstone_05</code>
 </pre>
 <p>This is useful if you've just unzipped a bugreport in the current directory.
 For more information about diagnosing native crashes and tombstones, see
 <a href="/devices/tech/debug/native-crash.html">Diagnosing Native Crashes</a>.
 </p>
 
-<h3>Getting a stack trace/tombstone from a running process</h3>
+<h2 id="tombstone">Getting a stack trace/tombstone from a running process</h2>
 
 <p>You can also use <code>debuggerd</code> on a running process. From the
 command line, invoke <code>debuggerd</code> using a process ID (PID) to dump the
 full tombstone to <code>stdout</code>. To get just the stack for every thread in
-the process, include the <code>-b</code> or <code>--backtrace</code> flag.
-
-<h2 id=native>Using GDB</h2>
-
-<p>The GNU Project debugger (GDB) is a commonly used Unix debugger.</p>
-
-<h3 id=running>Debugging a running app</h3>
-
-<p>To connect to an already-running app or native daemon, use
-<code>gdbclient</code> with a PID. For example, to debug the process with PID
-1234, run:</p>
-
-<pre class="no-pretty-print">
-$ gdbclient 1234
-</pre>
-
-<p>The script sets up port forwarding, starts the appropriate
-<code>gdbserver</code> on the device, starts the appropriate <code>gdb</code> on
-the host, configures <code>gdb</code> to find symbols, and connects
-<code>gdb</code> to the remote <code>gdbserver</code>.</p>
-
-<h3 id=starts>Debugging a native process as it starts</h3>
-
-<p>To debug a process as it starts, use <code>gdbserver</code> or
-<code>gdbserver64</code> (for 64-bit processes). For example:</p>
-
-<pre class="no-pretty-print">
-$ adb shell gdbserver :5039 /system/bin/<em>my_test_app</em>
-Process my_test_app created; pid = 3460
-Listening on port 5039
-</pre>
-
-<p>Next, identify the application PID from the <code>gdbserver</code> output and
-use it in another terminal window:</p>
-
-<pre class="no-pretty-print">
-$ gdbclient <em>&lt;app pid&gt;</em>
-</pre>
-
-<p>Finally, enter <strong>continue</strong> at the <code>gdb</code> prompt.</p>
-
-<p class="note"><strong>Note:</strong> If you use the wrong
-<code>gdbserver</code>, you'll get an unhelpful error message (such as
-"<code>Reply contains invalid hex digit 59</code>").</p>
-
-<h3 id=crash>Debugging processes that crash</h3>
-
-<p>If you want <code>debuggerd</code> to suspend crashed processes so you can
-attach <code>gdb</code>, set the appropriate property:</p>
-
-<pre class="no-pretty-print">
-# Android 7.0 Nougat and later.
-$ adb shell setprop debug.debuggerd.wait_for_gdb true
-
-# Android 6.0 Marshmallow and earlier.
-$ adb shell setprop debug.db.uid 999999
-</pre>
-
-<p>At the end of the usual crash output, <code>debuggerd</code> provides
-instructions on how to connect <code>gdb</code> using the command:
-<pre class="no-pretty-print">
-$ gdbclient &lt;pid&gt;
-</pre>
-
-<h3 id=symbols>Debugging without symbols</h3>
-
-<p>For 32-bit ARM, if you don’t have symbols, <code>gdb</code> can get confused
-about the instruction set it is disassembling (ARM or Thumb). To specify the
-instruction set chosen as the default when symbol information is missing, set
-the following property:</p>
-
-<pre class="no-pretty-print">
-$ set arm fallback-mode arm   # or thumb
-</pre>
+the process, include the <code>-b</code> or <code>--backtrace</code> flag.</p>
 
   </body>
 </html>
diff --git a/en/devices/tech/debug/native-crash.html b/en/devices/tech/debug/native-crash.html
index fec6069..c1658cc 100644
--- a/en/devices/tech/debug/native-crash.html
+++ b/en/devices/tech/debug/native-crash.html
@@ -59,7 +59,7 @@
 between the original abort call (frame 4 here) and the actual sending of the
 signal (frame 0 here):
 </p>
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 pid: 1656, tid: 1656, name: crasher  >>> crasher <<<
 signal 6 (<i style="color:Orange">SIGABRT</i>), code -6 (SI_TKILL), fault addr --------
 <i style="color:Orange">Abort message</i>: 'some_file.c:123: some_function: assertion "false" failed'
@@ -85,7 +85,8 @@
 directly from <code>abort</code>, so there are fewer stack frames for you to
 skip over before you get to the interesting frames:
 
-<pre class="no-pretty-print">pid: 25301, tid: 25301, name: crasher  >>> crasher <<<
+<pre class="devsite-click-to-copy">
+pid: 25301, tid: 25301, name: crasher  >>> crasher <<<
 signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
     r0 00000000  r1 000062d5  r2 00000006  r3 00000008
     r4 ffa09dd8  r5 000062d5  r6 000062d5  r7 0000010c
@@ -119,7 +120,8 @@
 of the calling code. In this case, frame #01 is the bad caller.
 </p>
 
-<pre class="no-pretty-print">pid: 25326, tid: 25326, name: crasher  >>> crasher <<<
+<pre class="devsite-click-to-copy">
+pid: 25326, tid: 25326, name: crasher  >>> crasher <<<
 signal 11 (<i style="color:Orange">SIGSEGV</i>), code 1 (SEGV_MAPERR), <i style="color:Orange">fault addr 0x0</i>
     r0 00000000  r1 00000000  r2 00004c00  r3 00000000
     r4 ab088071  r5 fff92b34  r6 00000002  r7 fff92b40
@@ -157,7 +159,9 @@
 <p>
 Here's an example of <code>readdir</code>:
 </p>
-<pre class="no-pretty-print">pid: 25405, tid: 25405, name: crasher  >>> crasher <<<
+
+<pre class="devsite-click-to-copy">
+pid: 25405, tid: 25405, name: crasher  >>> crasher <<<
 signal 11 (<i style="color:Orange">SIGSEGV</i>), code 1 (SEGV_MAPERR), <i style="color:Orange">fault addr 0xc</i>
     r0 0000000c  r1 00000000  r2 00000000  r3 3d5f0000
     r4 00000000  r5 0000000c  r6 00000002  r7 ff8618f0
@@ -190,7 +194,7 @@
 At this point you can paste the stack into the stack tool to find out
 <em>where</em> in logcat this happened.
 
-<pre class="no-pretty-print">
+<pre class="prettyprint">
   struct DIR {
     int fd_;
     size_t available_bytes_;
@@ -220,7 +224,8 @@
 <code>read(fd, buf, 32)</code> into a buffer that's actually only 10 bytes
 long...
 </p>
-<pre class="no-pretty-print">pid: 25579, tid: 25579, name: crasher  >>> crasher <<<
+<pre class="devsite-click-to-copy">
+pid: 25579, tid: 25579, name: crasher  >>> crasher <<<
 signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
 Abort message: '<i style="color:Orange">FORTIFY: read: prevented 32-byte write into 10-byte buffer'</i>
     r0 00000000  r1 000063eb  r2 00000006  r3 00000008
@@ -254,7 +259,8 @@
 it was overwritten by a buffer overrun, so the epilogue calls
 <code>__stack_chk_fail</code> to log a message and abort.
 </p>
-<pre class="no-pretty-print">pid: 26717, tid: 26717, name: crasher  >>> crasher <<<
+<pre class="devsite-click-to-copy">
+pid: 26717, tid: 26717, name: crasher  >>> crasher <<<
 signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
 <i style="color:Orange">Abort message: 'stack corruption detected'</i>
     r0 00000000  r1 0000685d  r2 00000006  r3 00000008
@@ -294,7 +300,7 @@
 
 <p>To introduce the different pieces in a crash dump, let's work through this example crash dump:</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
 Build fingerprint: 'Android/aosp_flounder/flounder:5.1.51/AOSP/enh08201009:eng/test-keys'
 Revision: '0'
@@ -318,15 +324,14 @@
     #08 pc 00016795  /system/lib/libc.so (__libc_init+44)
     #09 pc 00000abc  /system/xbin/crasher
 Tombstone written to: /data/tombstones/tombstone_06
+*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
 </pre>
 
-<pre class="no-pretty-print">*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***</pre>
-
 <p>The line of asterisks with spaces is helpful if you're searching a log
 for native crashes. The string "*** ***" rarely shows up in logs other than
 at the beginning of a native crash.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 Build fingerprint:
 'Android/aosp_flounder/flounder:5.1.51/AOSP/enh08201009:eng/test-keys'
 </pre>
@@ -334,7 +339,7 @@
 <p>The fingerprint lets you identify exactly which build the crash occurred
 on. This is exactly the same as the <code>ro.build.fingerprint</code> system property.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 Revision: '0'
 </pre>
 
@@ -343,7 +348,7 @@
 to be caused by bad hardware. This is exactly the same as the <code>ro.revision</code>
 system property.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 ABI: 'arm'
 </pre>
 
@@ -351,7 +356,7 @@
 mostly useful for the <code>stack</code> script mentioned above, so that it knows
 what toolchain to use.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 pid: 1656, tid: 1656, name: crasher &gt;&gt;&gt; crasher &lt;&lt;&lt;
 </pre>
 
@@ -364,7 +369,7 @@
 pid and tid can also be useful in finding the relevant log lines preceding
 the crash.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
 </pre>
 
@@ -373,7 +378,7 @@
 SIGBUS, SIGFPE, SIGILL, SIGSEGV, and SIGTRAP. The signal-specific codes vary
 based on the specific signal.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 Abort message: 'some_file.c:123: some_function: assertion "false" failed'
 </pre>
 
@@ -382,7 +387,7 @@
 this pid/tid, and in the case of a deliberate abort is likely to give an
 explanation of why the program killed itself.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 r0 00000000 r1 00000678 r2 00000006 r3 f70b6dc8
 r4 f70b6dd0 r5 f70b6d80 r6 00000002 r7 0000010c
 r8 ffffffed r9 00000000 sl 00000000 fp ff96ae1c
@@ -393,7 +398,7 @@
 signal was received. (This section varies wildly between ABIs.) How useful
 these are will depend on the exact crash.<p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 backtrace:
     #00 pc 00042c98 /system/lib/libc.so (tgkill+12)
     #01 pc 00041ed1 /system/lib/libc.so (pthread_kill+32)
@@ -419,7 +424,7 @@
 
 <h2 id=tombstones>Tombstones</h2>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 Tombstone written to: /data/tombstones/tombstone_06
 </pre>
 
@@ -434,7 +439,7 @@
 includes a full memory map (similar to <code>/proc/<i>pid</i>/maps</code>). Here's an
 annotated example from a 32-bit ARM process crash:</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 memory map: (fault address prefixed with ---&gt;)
 ---&gt;ab15f000-ab162fff r-x 0 4000 /system/xbin/crasher (BuildId:
 b9527db01b5cf8f5402f899f64b9b121)
@@ -461,7 +466,7 @@
 BuildId by default since Android M. NDK r12 and later automatically pass
 <code>-Wl,--build-id</code> to the linker too.)<p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 ab163000-ab163fff r--      3000      1000  /system/xbin/crasher
 ab164000-ab164fff rw-         0      1000
 f6c80000-f6d7ffff rw-         0    100000  [anon:libc_malloc]
@@ -470,7 +475,7 @@
 <p>On Android the heap isn't necessarily a single region. Heap regions will
 be labeled <code>[anon:libc_malloc]</code>.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 f6d82000-f6da1fff r--         0     20000  /dev/__properties__/u:object_r:logd_prop:s0
 f6da2000-f6dc1fff r--         0     20000  /dev/__properties__/u:object_r:default_prop:s0
 f6dc2000-f6de1fff r--         0     20000  /dev/__properties__/u:object_r:logd_prop:s0
@@ -504,7 +509,7 @@
 (in hex), the fourth column the size of the region (in hex), and the fifth
 column the file (or other region name).</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 f6f34000-f6f53fff r-x         0     20000  /system/lib/libm.so (BuildId: 76ba45dcd9247e60227200976a02c69b)
 f6f54000-f6f54fff ---         0      1000
 f6f55000-f6f55fff r--     20000      1000  /system/lib/libm.so
@@ -537,7 +542,7 @@
 regions so there are fewer mystery regions.
 </p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 f6fcb000-f6fccfff rw- 0 2000 [stack:5081]
 </pre>
 
@@ -545,7 +550,7 @@
 Regions named <code>[stack:<i>tid</i>]</code> are the stacks for the given threads.
 </p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 f6fcd000-f702afff r-x         0     5e000  /system/bin/linker (BuildId: 84f1316198deee0591c8ac7f158f28b7)
 f702b000-f702cfff r--     5d000      2000  /system/bin/linker
 f702d000-f702dfff rw-     5f000      1000  /system/bin/linker
diff --git a/en/devices/tech/debug/netstats.html b/en/devices/tech/debug/netstats.html
index a396700..78ddef0 100644
--- a/en/devices/tech/debug/netstats.html
+++ b/en/devices/tech/debug/netstats.html
@@ -31,8 +31,8 @@
 
 <p>To view network usage statistics, run the following command:</p>
 
-<pre class=prettyprint>
-$ adb shell dumpsys netstats detail
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys netstats detail
 </pre>
 
 
@@ -56,7 +56,7 @@
 <p>Here is sample output for the active interfaces and active UID interfaces
 sections:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 Active interfaces:
   iface=wlan0 ident=[{type=WIFI, subType=COMBINED, networkId="GoogleGuest"}]
 Active UID interfaces:
@@ -72,7 +72,7 @@
 
 <p>Here is sample output for the Dev statistics section:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 Dev stats:
   Pending bytes: 170775
   Complete history:
@@ -94,7 +94,7 @@
 
 <h3 id=uid_stats>UID stats</h3>
 
-<pre>
+<pre class="devsite-click-to-copy">
 UID stats:
   Pending bytes: 744
   Complete history:
@@ -120,9 +120,11 @@
 <p>In our example, suppose we are trying to find network usage for our app
 “com.example.myapp”. We would run the following command:</p>
 
-<pre>
-$ adb shell dumpsys package com.example.myapp | grep userId
-
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys package com.example.myapp | grep userId
+</pre>
+<p>This returns the following output:</p>
+<pre class="devsite-click-to-copy">
     userId=10007 gids=[3003, 1028, 1015]
 </pre>
 
diff --git a/en/devices/tech/debug/procstats.html b/en/devices/tech/debug/procstats.html
index 0725016..285ea7e 100644
--- a/en/devices/tech/debug/procstats.html
+++ b/en/devices/tech/debug/procstats.html
@@ -33,8 +33,8 @@
 <p>To get application memory usage stats for the last three hours, in
 human-readable form, run the following command:</p>
 
-<pre class=prettyprint>
-$ adb shell dumpsys procstats --hours 3
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys procstats --hours 3
 </pre>
 
 
@@ -46,7 +46,7 @@
 time the application was running, while the numbers following show PSS and USS
 as minPSS-avgPSS-maxPSS/minUSS-avgUSS-maxUSS over samples.</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 AGGREGATED OVER LAST 3 HOURS:
   * com.android.systemui / u0a20 / v22:
            TOTAL: 100% (109MB-126MB-159MB/108MB-125MB-157MB over 18)
diff --git a/en/devices/tech/debug/strace.html b/en/devices/tech/debug/strace.html
index a69a64b..5f2affb 100644
--- a/en/devices/tech/debug/strace.html
+++ b/en/devices/tech/debug/strace.html
@@ -30,16 +30,16 @@
 <h2 id=build-strace>Building strace</h2>
 
 <p>To build strace, run the following:
-<pre>
-$ mmma -j6 external/strace
+<pre class="devsite-terminal devsite-click-to-copy">
+mmma -j6 external/strace
 </pre>
 
 <h2 id=attach-strace>Attaching to a running process</h2>
 
 <p>The simplest and most common use case for strace is to attach it to a running
 process, which you can do with:</p>
-<pre>
-$ adb shell strace -f -p PID
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell strace -f -p PID
 </pre>
 <p>The <code>-f</code> flag tells strace to attach to all the threads in the
 process, plus any new threads spawned later.</p>
@@ -49,16 +49,16 @@
 
 <ol>
 <li>Set up a directory for strace logs:
-<pre>
-$ adb shell setenforce 0
-$ adb shell mkdir /data/local/tmp/strace
-$ adb shell chmod 777 /data/local/tmp/strace
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell setenforce 0</code>
+<code class="devsite-terminal">adb shell mkdir /data/local/tmp/strace</code>
+<code class="devsite-terminal">adb shell chmod 777 /data/local/tmp/strace</code>
 </pre>
 </li>
 
 <li>Choose the process to trace before launching it:
-<pre>
-$ adb shell setprop wrap.com.google.android.browser "logwrapper strace -f -o /data/local/tmp/strace/strace.com.google.android.browser.txt"
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell setprop wrap.com.google.android.browser "logwrapper strace -f -o /data/local/tmp/strace/strace.com.google.android.browser.txt"
 </pre>
 </li>
 <li>Launch the process normally.</li>
@@ -69,9 +69,9 @@
 line (requires <code>adb shell setenforce 0</code>):
 </p>
 
-<pre>
-$ cd system/core/
-$ patch -p1 &lt;&lt;EOF
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">cd system/core/</code>
+<code class="devsite-terminal">patch -p1 &lt;&lt;EOF
 --- a/rootdir/init.zygote32.rc
 +++ b/rootdir/init.zygote32.rc
 @@ -1,4 +1,4 @@
@@ -80,7 +80,7 @@
      class main
      socket zygote stream 660 root system
      onrestart write /sys/android_power/request_state wake
-EOF
+EOF</code>
 </pre>
 
 <h2 id=get-logs-boot>Getting strace logs during Android boot</h2>
@@ -93,7 +93,7 @@
 SELinux <code>file_context</code> for <code>strace</code>. The solution is to
 add a new line for strace in <code>system/sepolicy/private/file_contexts</code>
 and copy the original file context over. Example:
-<pre>
+<pre class="devsite-click-to-copy">
 /dev/socket/zygote      u:object_r:zygote_socket:s0
 + /system/xbin/strace u:object_r:zygote_socket:s0
 </pre>
@@ -108,7 +108,7 @@
 <br>
 <br>Example for the Pixel (sailfish) device in
 <code>/device/google/marlin/sailfish/BoardConfig.mk</code>:
-<pre>
+<pre class="devsite-click-to-copy">
 - BOARD_KERNEL_CMDLINE := ....  androidboot.hardware=sailfish ...
 +BOARD_KERNEL_CMDLINE := ....  androidboot.hardware=sailfish ...  androidboot.selinux=permissive
 </pre>
diff --git a/en/devices/tech/debug/systrace.html b/en/devices/tech/debug/systrace.html
index 4334f9d..036bd6d 100644
--- a/en/devices/tech/debug/systrace.html
+++ b/en/devices/tech/debug/systrace.html
@@ -49,7 +49,9 @@
 <p>When debugging jitter on Pixel/Pixel XL, start with the following
 command:</p>
 
-<pre>$ ./systrace.py sched freq idle am wm gfx view sync binder_driver irq workq input -b 96000</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+./systrace.py sched freq idle am wm gfx view sync binder_driver irq workq input -b 96000
+</pre>
 
 <p>When combined with the additional tracepoints required for GPU and display
 pipeline activity, this gives you the ability to trace from user input to frame
@@ -106,7 +108,7 @@
 
 <p>Let's walk through the frame beginning at 15409ms:</p>
 
-<p><img src="images/perf_trace_normal_pipeline.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_normal_pipeline.png"></p>
 <p class="img-caption"><strong>Figure 1.</strong> Normal UI pipeline,
 EventThread running.</p>
 
@@ -139,14 +141,14 @@
 <p>While EventThread is running, the UI thread for TouchLatency becomes
 runnable. To see what woke it, click the blue section:</p>
 
-<p><img src="images/perf_trace_tl.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_tl.png"></p>
 <p class="img-caption"><strong>Figure 2.</strong> UI thread for
 TouchLatency.</p>
 
 <p>Figure 2 shows the TouchLatency UI thread was woken by tid 6843, which
 corresponds to EventThread. The UI thread wakes:</p>
 
-<p><img src="images/perf_trace_wake_render_enqueue.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_wake_render_enqueue.png"></p>
 <p class="img-caption"><strong>Figure 3.</strong> UI thread wakes, renders a
 frame, and enqueues it for SurfaceFlinger to consume.</p>
 
@@ -154,7 +156,7 @@
 binder transaction to view information on all of the processes involved in that
 transaction:</p>
 
-<p><img src="images/perf_trace_binder_trans.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_binder_trans.png"></p>
 <p class="img-caption"><strong>Figure 4.</strong> Binder transaction.</p>
 
 <p>Figure 4 shows that, at 15,423.65ms, Binder:6832_1 in SurfaceFlinger becomes
@@ -164,7 +166,7 @@
 <p>During the queueBuffer on the SurfaceFlinger side, the number of pending
 frames from TouchLatency goes from 1 to 2:</p>
 
-<p><img src="images/perf_trace_pending_frames.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_pending_frames.png"></p>
 <p class="img-caption"><strong>Figure 5.</strong> Pending frames goes from 1 to
 2.</p>
 
@@ -176,14 +178,14 @@
 <p>Soon after, SurfaceFlinger's main thread is woken by a second EventThread so
 it can output the older pending frame to the display:</p>
 
-<p><img src="images/perf_trace_sf_woken_et.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_sf_woken_et.png"></p>
 <p class="img-caption"><strong>Figure 6.</strong> SurfaceFlinger's main thread
 is woken by a second EventThread.</p>
 
 <p>SurfaceFlinger first latches the older pending buffer, which causes the
 pending buffer count to decrease from 2 to 1:</p>
 
-<p><img src="images/perf_trace_sf_latches_pend.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_sf_latches_pend.png"></p>
 <p class="img-caption"><strong>Figure 7.</strong> SurfaceFlinger first latches
 the older pending buffer.</p>
 
@@ -191,7 +193,7 @@
 final frame to the display. (Some of these sections are enabled as part of the
 <code>mdss</code> tracepoint, so they may not be there on your SOC.)</p>
 
-<p><img src="images/perf_trace_sf_comp_submit.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_sf_comp_submit.png"></p>
 <p class="img-caption"><strong>Figure 8.</strong> SurfaceFlinger sets up
 composition and submits the final frame.</p>
 
@@ -200,7 +202,7 @@
 We can see <code>mdss_fb0</code> as its own row in the trace (scroll down to
 view).</p>
 
-<p><img src="images/perf_trace_wake_cpu0.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_wake_cpu0.png"></p>
 <p class="img-caption"><strong>Figure 9.</strong> <code>mdss_fb0</code> wakes
 on CPU 0.</p>
 
@@ -215,14 +217,14 @@
 
 <h2 id="example_2">Example: Non-working frame</h2>
 <p>This example describes a systrace used to debug Pixel/Pixel XL jitter. To
-follow along with the example, <a href="perf_traces.zip">download the zip
+follow along with the example, <a href="/devices/tech/debug/perf_traces.zip">download the zip
 file</a> of traces (which also includes other traces referred to in this
 section), upzip the file, and open the systrace_tutorial.html file in your
 browser.</p>
 
 <p>When you first open the systrace, you'll see something like this:</p>
 
-<p><img src="images/perf_trace_tl_pxl.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_tl_pxl.png"></p>
 <p class="img-caption"><strong>Figure 10</strong>. TouchLatency running on Pixel
 XL (most options enabled, including mdss and kgsl tracepoints).</p>
 
@@ -234,7 +236,7 @@
 extremely-regular runtimes and an unchanged pending-buffer count for the app
 (<code>com.prefabulated.touchlatency</code>) at a vsync:</p>
 
-<p><img src="images/perf_trace_fm_sf.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_fm_sf.png"></p>
 <p class="img-caption"><strong>Figure 11</strong>. FrameMissed correlation with
 SurfaceFlinger.</p>
 
@@ -250,7 +252,7 @@
 pending frames from TouchLatency, there are two frames (a good clue to help
 figure out what's going on).</p>
 
-<p><img src="images/perf_trace_sf_wake_sleep.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_sf_wake_sleep.png"></p>
 <p class="img-caption"><strong>Figure 12.</strong> SurfaceFlinger wakes and
 immediately goes to sleep.</p>
 
@@ -269,7 +271,7 @@
 work with your SOC vendor to understand the meaning of fence categories in your
 traces.</p>
 
-<p><img src="images/perf_traces_fences.png"></p>
+<p><img src="/devices/tech/debug/images/perf_traces_fences.png"></p>
 <p class="img-caption"><strong>Figure 13.</strong> <code>mdss_fb0_retire</code>
 fences.</p>
 
@@ -277,7 +279,7 @@
 Halfway through that slice, that frame should have been replaced by a new one
 but wasn't. View the previous frame and look for anything interesting:</p>
 
-<p><img src="images/perf_trace_frame_previous.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_frame_previous.png"></p>
 <p class="img-caption"><strong>Figure 14.</strong> Frame previous to busted
 frame.</p>
 
@@ -288,7 +290,7 @@
 
 <p>Investigate exactly where that fence ends to determine what controls it:</p>
 
-<p><img src="images/perf_trace_fence_end.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_fence_end.png"></p>
 <p class="img-caption"><strong>Figure 15.</strong> Investigate fence end.</p>
 
 <p>A workqueue contains a <code>__vsync_retire_work_handler</code> that is
@@ -301,7 +303,7 @@
 <p>Check the previous frame to determine if that contributed; sometimes jitter
 can add up over time and eventually cause us to miss a deadline.</p>
 
-<p><img src="images/perf_trace_previous_frame.png"></p>
+<p><img src="/devices/tech/debug/images/perf_trace_previous_frame.png"></p>
 <p class="img-caption"><strong>Figure 16.</strong> Previous frame.</p>
 
 <p>The runnable line on the kworker isn't visible because the viewer turns it
diff --git a/en/devices/tech/debug/valgrind.html b/en/devices/tech/debug/valgrind.html
index d8f1e42..9ae0f08 100644
--- a/en/devices/tech/debug/valgrind.html
+++ b/en/devices/tech/debug/valgrind.html
@@ -31,16 +31,16 @@
 
 <h2 id=build-valgrind>Building Valgrind</h2>
 <p>To build Valgrind:</p>
-<pre class="no-pretty-print">
-$ mmma -j6 external/valgrind
+<pre class="devsite-terminal devsite-click-to-copy">
+mmma -j6 external/valgrind
 </pre>
 
 <h2 id=app-valgrind>Using on an application</h2>
 <p>To use Valgrind on an application:</p>
 
-<pre class="no-pretty-print">
-$ adb shell setprop wrap.<em>app_name</em> "logwrapper valgrind"
-$ adb shell am start -a android.intent.action.MAIN -n <em>app_name</em>/.MainActivity
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell setprop wrap.<em>app_name</em> "logwrapper valgrind"</code>
+<code class="devsite-terminal">adb shell am start -a android.intent.action.MAIN -n <em>app_name</em>/.MainActivity</code>
 </pre>
 
 <code><em>app_name</em></code> must be a fully-qualified name such as
@@ -49,25 +49,25 @@
 <h2 id=server-valgrind>Using on the system server</h2>
 <p>To run the system server with Valgrind:</p>
 
-<pre class="no-pretty-print">
-$ adb shell setprop wrap.system_server "logwrapper valgrind"
-$ adb shell stop && adb shell start
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell setprop wrap.system_server "logwrapper valgrind"</code>
+<code class="devsite-terminal">adb shell stop && adb shell start</code>
 </pre>
 
 
 <h2 id=symbols-valgrind>Getting debug symbols</h2>
 <p>For debug symbols, push unstripped libraries to <code>/data/local/symbols</code>:</p>
-<pre class="no-pretty-print">
-$ adb shell mkdir /data/local/symbols
-$ adb push $OUT/symbols /data/local/symbols
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell mkdir /data/local/symbols</code>
+<code class="devsite-terminal">adb push $OUT/symbols /data/local/symbols</code>
 </pre>
 
 <h2 id=boot-valgrind>Using during boot up</h2>
 <p>To use Valgrind during boot up, edit
 <code>out/target/product/XXXX/root/init.rc</code> by changing</p>
-<p><code>service example /system/bin/foo --arg1 --arg2</code></p>
+<pre class="devsite-click-to-copy">service example /system/bin/foo --arg1 --arg2</pre>
 <p>to:</p>
-<p><code>service example /system/bin/logwrapper /system/bin/valgrind /system/bin/foo --arg1 --arg2</code></p>
+<pre class="devsite-click-to-copy">>service example /system/bin/logwrapper /system/bin/valgrind /system/bin/foo --arg1 --arg2</pre>
 <p>To see the effects, create a <code>boot.img</code> and reflash the
 device.</p>
 
diff --git a/en/devices/tech/display/app-shortcuts.html b/en/devices/tech/display/app-shortcuts.html
index 7db7bd2..fdabeb8 100644
--- a/en/devices/tech/display/app-shortcuts.html
+++ b/en/devices/tech/display/app-shortcuts.html
@@ -52,7 +52,8 @@
 You can find the primary implementation of this feature in the following files:
 </p>
 
-<pre>frameworks/base/services/core/java/com/android/server/policy/ShortcutManager.java
+<pre class="devsite-click-to-copy">
+frameworks/base/services/core/java/com/android/server/policy/ShortcutManager.java
 frameworks/base/services/core/java/com/android/server/pm/ShortcutPackage.java
 frameworks/base/services/core/java/com/android/server/pm/ShortcutUser.java
 frameworks/base/services/core/java/com/android/server/pm/ShortcutPackageInfo.java
@@ -73,7 +74,7 @@
 <code>ShortcutManager.java</code>):
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java
 frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
 </pre>
@@ -83,7 +84,7 @@
 shortcuts:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 packages/apps/Launcher3/
 </pre>
 
@@ -91,7 +92,8 @@
 Finally, see the following files for public Javadoc.
 </p>
 
-<pre>frameworks/base/core/java/android/content/pm/ShortcutManager.java
+<pre class="devsite-click-to-copy">
+frameworks/base/core/java/android/content/pm/ShortcutManager.java
 frameworks/base/core/java/android/content/pm/ShortcutInfo.java
 frameworks/base/core/java/android/content/pm/LauncherApps.java
 </pre>
@@ -138,7 +140,7 @@
 version of the feature (ShortcutManager and LauncherApps) works as intended:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 cts/tests/tests/shortcutmanager/
 cts/hostsidetests/shortcuts/
 </pre>
@@ -147,20 +149,22 @@
 And find the unit tests for the AOSP implementation here:
 </p>
 
-<pre>frameworks/base/services/tests/servicestests/
+<pre class="devsite-click-to-copy">
+frameworks/base/services/tests/servicestests/
 </pre>
 
 <p>
 Which includes:
 </p>
 
-<pre>src/com/android/server/pm/ShortcutManagerTest*.java
+<pre class="devsite-click-to-copy">
+src/com/android/server/pm/ShortcutManagerTest*.java
 </pre>
 <p>
 You may also employ the CTS Verifier test for shortcut manager:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 cts/apps/CtsVerifier/src/com/android/cts/verifier/notifications/ShortcutThrottlingResetActivity.java
 </pre>
 
diff --git a/en/devices/tech/display/circular-icons.html b/en/devices/tech/display/circular-icons.html
index 65f7976..eed152a 100644
--- a/en/devices/tech/display/circular-icons.html
+++ b/en/devices/tech/display/circular-icons.html
@@ -38,7 +38,7 @@
 <p>To enable circular icons, change the <code>config_useRoundIcon</code>
 setting in your overlay file from <code>false</code> to <code>true</code>:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;!-- Flag indicating whether round icons should be parsed from the application manifest. --&gt;
 &lt;bool name="config_useRoundIcon"&gt;true&lt;/bool&gt;
 </pre>
diff --git a/en/devices/tech/display/hdr.html b/en/devices/tech/display/hdr.html
index 6331114..f85ff1d 100644
--- a/en/devices/tech/display/hdr.html
+++ b/en/devices/tech/display/hdr.html
@@ -174,13 +174,13 @@
 
 <h4>Dolby-Vision</h4>
 
-<p><code>MediaFormat</code> mime constant:
-<blockquote><pre>
+<p><code>MediaFormat</code> mime constant:</p>
+<pre class="devsite-click-to-copy">
 String MIMETYPE_VIDEO_DOLBY_VISION
-</pre></blockquote></p>
+</pre>
 
 <p><code>MediaCodecInfo.CodecProfileLevel</code> profile constants:</p>
-<blockquote><pre>
+<pre class="devsite-click-to-copy">
 int DolbyVisionProfileDvavPen
 int DolbyVisionProfileDvavPer
 int DolbyVisionProfileDvheDen
@@ -189,7 +189,7 @@
 int DolbyVisionProfileDvheDth
 int DolbyVisionProfileDvheDtr
 int DolbyVisionProfileDvheStn
-</pre></blockquote>
+</pre>
 
 <p>Dolby Vision video layers and metadata must be concatenated into a single
 buffer per frames by video applications. This is done automatically by the
@@ -197,19 +197,19 @@
 
 <h4>HEVC HDR 10</h4>
 
-<p><code>MediaCodecInfo.CodecProfileLevel</code> profile constants:<p>
-<blockquote><pre>
+<p><code>MediaCodecInfo.CodecProfileLevel</code> profile constants:</p>
+<pre class="devsite-click-to-copy">
 int HEVCProfileMain10HDR10
-</pre></blockquote>
+</pre>
 
 <h4>VP9 HLG & PQ</h4>
 
 <p><code>MediaCodecInfo.CodecProfileLevel</code> profile
 constants:</p>
-<blockquote><pre>
+<pre class="devsite-click-to-copy">
 int VP9Profile2HDR
 int VP9Profile3HDR
-</pre></blockquote>
+</pre>
 
 <p>If a platform supports an HDR-capable decoder, it shall also support an
 HDR-capable extractor.</p>
@@ -553,7 +553,7 @@
 
 <h3 id="hdr10decoder">HDR10 decoder pipeline</h3>
 
-<p><img src="../images/hdr10_decoder_pipeline.png"></p>
+<p><img src="/devices/tech/images/hdr10_decoder_pipeline.png"></p>
 
 <p class="img-caption"><strong>Figure 1.</strong> HDR10 pipeline</p>
 
@@ -588,7 +588,7 @@
 
 <h3 id="dvdecoder">Dolby Vision decoder pipeline</h3>
 
-<p><img src="../images/dolby_vision_decoder_pipleline.png"></p>
+<p><img src="/devices/tech/images/dolby_vision_decoder_pipleline.png"></p>
 
 <p class="img-caption"><strong>Figure 2.</strong> Dolby Vision pipeline</p>
 
@@ -658,7 +658,7 @@
 
 <h3 id="v9decoder">VP9 decoder pipeline</h3>
 
-<p><img src="../images/vp9-pq_decoder_pipleline.png"></p>
+<p><img src="/devices/tech/images/vp9-pq_decoder_pipleline.png"></p>
 
 <p class="img-caption"><strong>Figure 3.</strong> VP9-PQ pipeline</p>
 
diff --git a/en/devices/tech/display/multi-window.html b/en/devices/tech/display/multi-window.html
index 8d0ecbe..dbb8df3 100644
--- a/en/devices/tech/display/multi-window.html
+++ b/en/devices/tech/display/multi-window.html
@@ -81,7 +81,7 @@
 href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml">config.xml</a>.
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;bool name="config_freeformWindowManagement"&gt;true&lt;/bool&gt;
 </pre>
 
diff --git a/en/devices/tech/display/night-light.html b/en/devices/tech/display/night-light.html
index 22b3451..8c6609f 100644
--- a/en/devices/tech/display/night-light.html
+++ b/en/devices/tech/display/night-light.html
@@ -43,7 +43,8 @@
 <code><a href="https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml">
 /android/frameworks/base/core/res/res/values/config.xml</a></code>
 
-<pre>&lt;!-- Control whether Night display is available. This should only be enabled
+<pre class="devsite-click-to-copy">
+&lt;!-- Control whether Night display is available. This should only be enabled
       on devices with HWC 2 color transform  support. --&gt;
  &lt;bool name="config_nightDisplayAvailable">false&lt;/bool&gt;
  &lt;!-- Default mode to control how Night display is automatically activated.
@@ -63,7 +64,8 @@
 <p>
 The code is divided between framework, system services, SystemUI, and Settings:
 </p>
-<pre>platform/frameworks/base/core
+<pre class="devsite-click-to-copy">
+platform/frameworks/base/core
 ├ java/android/provider/Settings.java
 ├ java/com/android/internal/app/NightDisplayController.java
 └ res/res/values/config.xml
diff --git a/en/devices/tech/display/retail-mode.html b/en/devices/tech/display/retail-mode.html
index 0e8c9ac..b694e61 100644
--- a/en/devices/tech/display/retail-mode.html
+++ b/en/devices/tech/display/retail-mode.html
@@ -43,7 +43,7 @@
 
 <h2 id="lifecycle">Lifecycle</h2>
 
-<img src="images/retail-demo-flow.png" alt="retail demo mode flow" width="XXX" id="retail-demo-flow" />
+<img src="/devices/tech/display/images/retail-demo-flow.png" alt="retail demo mode flow" width="XXX" id="retail-demo-flow" />
 <p class="img-caption">
   <strong>Figure 1.</strong> Retail demonstration mode option in Language selection
 </p>
@@ -58,7 +58,7 @@
 available.  Once selected, the device finishes SUW with an abbreviated flow.
 </p>
 
-<img src="images/retail-demo-wizard.png" alt="retail demo wizard use" width="XXX" id="retail-demo-wizard" />
+<img src="/devices/tech/display/images/retail-demo-wizard.png" alt="retail demo wizard use" width="XXX" id="retail-demo-wizard" />
 <p class="img-caption">
   <strong>Figure 2.</strong> Retail demonstration mode option in Language
 selection
@@ -135,9 +135,10 @@
 <h2 id="examples-and-source">Examples and source</h2>
 
 <p>
-Find the custom launcher that plays a video in a loop within:<br>
-<code>/packages/apps/RetailDemo</code>
-</p>
+Find the custom launcher that plays a video in a loop within:</p>
+<pre class="devsite-click-to-copy">
+/packages/apps/RetailDemo
+</pre>
 
 <h2 id="implementation">Implementation</h2>
 
@@ -165,7 +166,7 @@
 For example, with:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;!-- Component that is the default launcher when Retail Mode is enabled. --&gt;
 &lt;string name="config_demoModeLauncherComponent"&gt;com.android.retaildemo/.DemoPlayer&lt;/string&gt;
 </pre>
@@ -288,7 +289,7 @@
 RetailDemo app:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;!-- URL where the retail demo video can be downloaded from. --&gt;
 &lt;string name="retail_demo_video_download_url"&gt;&lt;/string&gt;
 </pre>
@@ -306,7 +307,7 @@
 In <code>res/values-en-rUS/strings.xml</code>:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;string name="retail_demo_video_download_url"&gt;download URL for US video goes here&lt;/string&gt;
 </pre>
 
@@ -314,7 +315,7 @@
 And similarly in <code>res/values-en-rGB/strings.xml</code>:
 </p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;string name="retail_demo_video_download_url"&gt;download URL for UK video goes here&lt;/string&gt;
 </pre>
 
diff --git a/en/devices/tech/ota/ab_updates.html b/en/devices/tech/ota/ab_updates.html
index 0c53808..282ea5a 100644
--- a/en/devices/tech/ota/ab_updates.html
+++ b/en/devices/tech/ota/ab_updates.html
@@ -375,7 +375,7 @@
   <li>Implement the state machine as shown in Figure 1:</li>
 </ul>
 
-<img src="images/ab-updates-state-machine.png">
+<img src="/devices/tech/ota/images/ab-updates-state-machine.png">
 
 <p class="img-caption"><strong>Figure 1.</strong> Bootloader state machine</p>
 
@@ -423,8 +423,9 @@
   extra arguments:
 </p>
 
-<pre>skip_initramfs rootwait ro init=/init root="/dev/dm-0 dm=system none ro,0 1 \
-  android-verity &lt;public-key-id&gt; &lt;path-to-system-partition&gt;"
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">skip_initramfs rootwait ro init=/init root="/dev/dm-0 dm=system none ro,0 1 \
+  android-verity &lt;public-key-id&gt; &lt;path-to-system-partition&gt;"</code>
 </pre>
 
 <p>
@@ -444,19 +445,23 @@
     <code>openssl</code> command to convert from <code>.pem</code> to
     <code>.der</code> format (if the .X509 certificate is formatted in
     <code>.pem</code> format):
-    <pre>openssl x509 -in &lt;x509-pem-certificate&gt; -outform der -out &lt;x509-der-certificate&gt;</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+openssl x509 -in &lt;x509-pem-certificate&gt; -outform der -out &lt;x509-der-certificate&gt;
+</pre>
   </li>
   <li>
     Once copied to the kernel build root, build the <code>zImage</code> to
     include the certificate as part of the system keyring. This can be verified
     from the following <code>procfs</code> entry (requires
     <code>KEYS_CONFIG_DEBUG_PROC_KEYS</code> to be enabled):
-    <pre>angler:/# cat /proc/keys
+<pre class="devsite-click-to-copy">
+angler:/# cat /proc/keys
 
 1c8a217e I------     1 perm 1f010000     0     0 asymmetri
 Android: 7e4333f9bba00adfe0ede979e28ed1920492b40f: X509.RSA 0492b40f []
 2d454e3e I------     1 perm 1f030000     0     0 keyring
-.system_keyring: 1/4</pre>
+.system_keyring: 1/4
+</pre>
   </li>
 </ol>
 
@@ -550,8 +555,10 @@
   the A/B-ed partitions. For example:
 </p>
 
-<pre>&lt;path-to-block-device&gt;/vendor  /vendor  ext4  ro
-wait,verify=&lt;path-to-block-device&gt;/metadata,slotselect</pre>
+<pre class="devsite-click-to-copy">
+&lt;path-to-block-device&gt;/vendor  /vendor  ext4  ro
+wait,verify=&lt;path-to-block-device&gt;/metadata,slotselect
+</pre>
 
 <p>
   Please note that there should be no partition named <code>vendor</code> but
@@ -628,7 +635,8 @@
   For example, use the following to generate a full OTA:
 </p>
 
-<pre>./build/tools/releasetools/ota_from_target_files \
+<pre class="devsite-terminal devsite-click-to-copy">
+./build/tools/releasetools/ota_from_target_files \
   dist_output/tardis-target_files.zip ota_update.zip
 </pre>
 
@@ -636,7 +644,8 @@
   Or, generate an incremental OTA:
 </p>
 
-<pre>./build/tools/releasetools/ota_from_target_files \
+<pre class="devsite-terminal devsite-click-to-copy">
+./build/tools/releasetools/ota_from_target_files \
   -i PREVIOUS-tardis-target_files.zip \
   dist_output/tardis-target_files.zip incremental_ota_update.zip
 </pre>
@@ -661,7 +670,8 @@
   configuration:
 </p>
 
-<pre>AB_OTA_PARTITIONS := \
+<pre class="devsite-click-to-copy">
+AB_OTA_PARTITIONS := \
   boot \
   system \
   bootloader
@@ -692,7 +702,8 @@
   applicable):
 </p>
 
-<pre>AB_OTA_POSTINSTALL_CONFIG += \
+<pre class="devsite-click-to-copy">
+AB_OTA_POSTINSTALL_CONFIG += \
   RUN_POSTINSTALL_system=true \
   POSTINSTALL_PATH_system=usr/bin/postinst \
   FILESYSTEM_TYPE_system=ext4
@@ -706,14 +717,14 @@
 <ol>
   <li>Include the native components in the build. This ensures the compilation
   script and binaries are compiled and included in the system image.
-  <pre>
+<pre class="devsite-click-to-copy">
   # A/B OTA dexopt package
   PRODUCT_PACKAGES += otapreopt_script
 </pre>
   </li>
   <li>Connect the compilation script to <code>update_engine</code> such that it
   is run as a post-install step.
-  <pre>
+<pre class="devsite-click-to-copy">
   # A/B OTA dexopt update_engine hookup
   AB_OTA_POSTINSTALL_CONFIG += \
     RUN_POSTINSTALL_system=true \
diff --git a/en/devices/tech/ota/device_code.html b/en/devices/tech/ota/device_code.html
index 144f43f..98f37f0 100644
--- a/en/devices/tech/ota/device_code.html
+++ b/en/devices/tech/ota/device_code.html
@@ -38,9 +38,11 @@
 specify the name of the map file in TARGET_RECOVERY_FSTAB in BoardConfig.mk.</p>
 <p>A sample partition map file might look like this:</p>
 
-<p><code>device/yoyodyne/tardis/recovery.fstab</code></p>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/recovery.fstab
+</pre>
 
-<pre>
+<pre class="devsite-click-to-copy">
 # mount point       fstype  device       [device2]        [options (3.0+ only)]
 
 /sdcard     vfat    /dev/block/mmcblk0p1 /dev/block/mmcblk0
@@ -131,9 +133,11 @@
 makes a good starting point to copy when writing a version of this file for
 your device.</p>
 
-<p><code>device/yoyodyne/tardis/recovery/recovery_ui.cpp</code></p>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/recovery/recovery_ui.cpp
+</pre>
 
-<pre>
+<pre class="prettyprint">
 #include &lt;linux/input.h&gt;
 
 #include "common.h"
@@ -147,7 +151,7 @@
 appear in the hidden recovery menu. Headers describe how to operate the menu
 (i.e. controls to change/select the highlighted item).</p>
 
-<pre>
+<pre class="prettyprint">
 static const char* HEADERS[] = { "Volume up/down to move highlight;",
                                  "power button to select.",
                                  "",
@@ -171,7 +175,7 @@
 function to customize from ScreenRecoveryUI is <code>CheckKey()</code>, which
 does the initial asynchronous key handling:</p>
 
-<pre>
+<pre class="prettyprint">
 class TardisUI : public ScreenRecoveryUI {
   public:
     virtual KeyAction CheckKey(int key) {
@@ -212,7 +216,7 @@
 and the device can be rebooted immediately by pressing the power button five
 times in a row (with no other intervening keys):</p>
 
-<pre>
+<pre class="prettyprint">
 class TardisUI : public ScreenRecoveryUI {
   private:
     int consecutive_power_keys;
@@ -263,7 +267,7 @@
 instance of your UI class and return that from the <code>GetUI()</code>
 function:</p>
 
-<pre>
+<pre class="prettyprint">
 class TardisDevice : public Device {
   private:
     TardisUI* ui;
@@ -283,7 +287,7 @@
 so you do not need to provide this in your subclass if you have nothing to do:
 </p>
 
-<pre>
+<pre class="prettyprint">
    void StartRecovery() {
        // ... do something tardis-specific here, if needed ....
     }
@@ -294,7 +298,7 @@
 of items. In this implementation, it returns the static arrays defined at the
 top of the file:</p>
 
-<pre>
+<pre class="prettyprint">
 const char* const* GetMenuHeaders() { return HEADERS; }
 const char* const* GetMenuItems() { return ITEMS; }
 </pre>
@@ -303,7 +307,7 @@
 <p>Next, provide a <code>HandleMenuKey()</code> function, which takes a
 keypress and the current menu visibility, and decides what action to take:</p>
 
-<pre>
+<pre class="prettyprint">
    int HandleMenuKey(int key, int visible) {
         if (visible) {
             switch (key) {
@@ -350,7 +354,7 @@
 devices pressing Alt-W in recovery would start a data wipe whether the menu
 was visible or not. YOu could implement like this:</p>
 
-<pre>
+<pre class="prettyprint">
    int HandleMenuKey(int key, int visible) {
         if (ui->IsKeyPressed(KEY_LEFTALT) &amp;&amp; key == KEY_W) {
             return 2;  // position of the "wipe data" item in the menu
@@ -369,7 +373,7 @@
 positions in the array of items returned by <code>GetMenuItems()</code> to
 actions. For the array of items in the tardis example, use:</p>
 
-<pre>
+<pre class="prettyprint">
    BuiltinAction InvokeMenuItem(int menu_position) {
         switch (menu_position) {
           case 0: return REBOOT;
@@ -409,7 +413,7 @@
 value for failure, though currently the return value is ignored. The user data
 and cache partitions are wiped whether you return success or failure.</p>
 
-<pre>
+<pre class="prettyprint">
    int WipeData() {
        // ... do something tardis-specific here, if needed ....
        return 0;
@@ -421,7 +425,7 @@
 for the <code>make_device()</code> function that creates and returns an
 instance of your Device class:</p>
 
-<pre>
+<pre class="prettyprint">
 class TardisDevice : public Device {
    // ... all the above methods ...
 };
@@ -436,9 +440,11 @@
 on your device. In Android.mk, create a static library that contains only this
 C++ file:</p>
 
-<p><code>device/yoyodyne/tardis/recovery/Android.mk</code></p>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/recovery/Android.mk
+</pre>
 
-<pre>
+<pre class="devsite-click-to-copy">
 LOCAL_PATH := $(call my-dir)
 include $(CLEAR_VARS)
 
@@ -455,7 +461,7 @@
 <p>Then, in the board configuration for this device, specify your static
 library as the value of TARGET_RECOVERY_UI_LIB.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 device/yoyodyne/tardis/BoardConfig.mk
  [...]
 
@@ -483,11 +489,11 @@
 <tbody>
 <tr>
 <td>
-<img src="../images/icon_error.png" alt="image shown during ota error">
+<img src="/devices/tech/images/icon_error.png" alt="image shown during ota error">
 <p class="img-caption"><strong>Figure 1.</strong> icon_error.png</p>
 </td>
 <td>
-<img src="../images/icon_installing_5x.png" alt="image shown during ota install"
+<img src="/devices/tech/images/icon_installing_5x.png" alt="image shown during ota install"
 height="275">
 <p class="img-caption"><strong>Figure 2.</strong> icon_installing.png</p>
 </td>
@@ -521,11 +527,11 @@
 <tbody>
 <tr>
 <td rowspan="2">
-<img src="../images/icon_installing.png" alt="image shown during ota install">
+<img src="/devices/tech/images/icon_installing.png" alt="image shown during ota install">
 <p class="img-caption"><strong>Figure 3.</strong> icon_installing.png</p>
 </td>
 <td>
-<img src="../images/icon_installing_overlay01.png" alt="image shown as first
+<img src="/devices/tech/images/icon_installing_overlay01.png" alt="image shown as first
 overlay">
 <p class="img-caption"><strong>Figure 4.</strong> icon-installing_overlay01.png
 </p>
@@ -533,7 +539,7 @@
 </tr>
 <tr>
 <td>
-<img src="../images/icon_installing_overlay07.png" alt="image shown as seventh
+<img src="/devices/tech/images/icon_installing_overlay07.png" alt="image shown as seventh
 overlay">
 <p class="img-caption"><strong>Figure 5.</strong> icon_installing_overlay07.png
 </p>
@@ -551,12 +557,12 @@
 <table style="border-collapse:collapse;">
 <tbody>
 <tr>
-<td><img align="center" src="../images/composite01.png" alt="composite image of
+<td><img align="center" src="/devices/tech/images/composite01.png" alt="composite image of
 install plus first overlay">
 <p class="img-caption"><strong>Figure 6.</strong> Installing animation frame 1
 (icon_installing.png + icon_installing_overlay01.png)
 </td>
-<td><img align="center" src="../images/composite07.png" alt="composite image of
+<td><img align="center" src="/devices/tech/images/composite07.png" alt="composite image of
 install plus seventh overlay">
 <p class="img-caption"><strong>Figure 7.</strong> Installing animation frame 7
 (icon_installing.png + icon_installing_overlay07.png)
@@ -593,7 +599,7 @@
 
 <p>Sample image of recovery text strings:</p>
 
-<img src="../images/installing_text.png" alt="image of recovery text">
+<img src="/devices/tech/images/installing_text.png" alt="image of recovery text">
 <p class="img-caption"><strong>Figure 8.</strong> Localized text for recovery
 messages</p>
 
@@ -623,9 +629,9 @@
 <p>Progress bars can appear below the main image (or animation). The progress
 bar is made by combining two input images, which must be of the same size:</p>
 
-<img src="../images/progress_empty.png" alt="empty progress bar">
+<img src="/devices/tech/images/progress_empty.png" alt="empty progress bar">
 <p class="img-caption"><strong>Figure 9.</strong> progress_empty.png</p>
-<img src="../images/progress_fill.png" alt="full progress bar">
+<img src="/devices/tech/images/progress_fill.png" alt="full progress bar">
 <p class="img-caption"><strong>Figure 10.</strong> progress_fill.png</p>
 
 <p>The left end of the <i>fill</i> image is displayed next to the right end of
@@ -633,11 +639,11 @@
 between the two images is changed to indicate the progress. For example, with
 the above pairs of input images, display:</p>
 
-<img src="../images/progress_1.png" alt="progress bar at 1%">
+<img src="/devices/tech/images/progress_1.png" alt="progress bar at 1%">
 <p class="img-caption"><strong>Figure 11.</strong> Progress bar at 1%></p>
-<img src="../images/progress_10.png" alt="progress bar at 10%">
+<img src="/devices/tech/images/progress_10.png" alt="progress bar at 10%">
 <p class="img-caption"><strong>Figure 12.</strong> Progress bar at 10%</p>
-<img src="../images/progress_50.png" alt="progress bar at 50%">
+<img src="/devices/tech/images/progress_50.png" alt="progress bar at 50%">
 <p class="img-caption"><strong>Figure 13.</strong> Progress bar at 50%</p>
 
 <p>You can provide device-specific versions of these images by placing them
@@ -678,8 +684,10 @@
 by providing your own extension functions that can be called from within your
 updater script. Here's a sample function for the tardis device:</p>
 
-<p><code>device/yoyodyne/tardis/recovery/recovery_updater.c</code></p>
-<pre>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/recovery/recovery_updater.c
+</pre>
+<pre class="prettyprint">
 #include &lt;stdlib.h&gt;
 #include &lt;string.h&gt;
 
@@ -691,7 +699,7 @@
 incoming arguments, and an array of <code>Expr*</code> pointers representing
 the arguments. The return value is a newly-allocated <code>Value*</code>.</p>
 
-<pre>
+<pre class="prettyprint">
 Value* ReprogramTardisFn(const char* name, State* state, int argc, Expr* argv[]) {
     if (argc != 2) {
         return ErrorAbort(state, "%s() expects 2 args, got %d", name, argc);
@@ -711,7 +719,7 @@
 <p>Suppose the function needs two arguments: a string-valued <b>key</b> and a
 blob-valued <b>image</b>. You could read arguments like this:</p>
 
-<pre>
+<pre class="prettyprint">
    Value* key = EvaluateValue(state, argv[0]);
     if (key == NULL) {
         return NULL;
@@ -738,7 +746,7 @@
 for multiple arguments. The <code>ReadValueArgs()</code> function can make this
 easier. Instead of the code above, you could have written this:</p>
 
-<pre>
+<pre class="prettyprint">
    Value* key;
     Value* image;
     if (ReadValueArgs(state, argv, 2, &amp;key, &amp;image) != 0) {
@@ -763,7 +771,7 @@
 
 <p>After evaluating the arguments, do the work of the function:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
    // key-&gt;data is a NUL-terminated string
     // image-&gt;data and image-&gt;size define a block of binary data
     //
@@ -781,7 +789,7 @@
 </code> both. Don't forget to call <code>FreeValue()</code> on the objects you
 got by evaluating your arguments!</p>
 
-<pre>
+<pre class="prettyprint">
    FreeValue(key);
     FreeValue(image);
 
@@ -796,7 +804,7 @@
 <p>The convenience function <code>StringValue()</code> wraps a string into a
 new Value object. Use to write the above code more succinctly:</p>
 
-<pre>
+<pre class="prettyprint">
    FreeValue(key);
     FreeValue(image);
 
@@ -811,7 +819,7 @@
 functions <code><i>device</i>.<i>whatever</i></code> to avoid conflicts with
 future built-in functions added.</p>
 
-<pre>
+<pre class="prettyprint">
 void Register_librecovery_updater_tardis() {
     RegisterFunction("tardis.reprogram", ReprogramTardisFn);
 }
@@ -821,9 +829,11 @@
 code. (This is the same makefile used to customize the recovery UI in the
 previous section; your device may have both static libraries defined here.)</p>
 
-<p><code>device/yoyodyne/tardis/recovery/Android.mk</code></p>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/recovery/Android.mk
+</pre>
 
-<pre>
+<pre class="devsite-click-to-copy">
 include $(CLEAR_VARS)
 LOCAL_SRC_FILES := recovery_updater.c
 LOCAL_C_INCLUDES += bootable/recovery
@@ -832,7 +842,7 @@
 <p>The name of the static library must match the name of the
 <code>Register_<i>libname</i></code> function contained within it.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 LOCAL_MODULE := librecovery_updater_tardis
 include $(BUILD_STATIC_LIBRARY)
 </pre>
@@ -847,9 +857,11 @@
 device-specific code wanted to use zlib to decompress data, you would include
 libz here.</p>
 
-<p><code>device/yoyodyne/tardis/BoardConfig.mk</code></p>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/BoardConfig.mk
+</pre>
 
-<pre>
+<pre class="devsite-click-to-copy">
  [...]
 
 # add device-specific extensions to the updater binary
@@ -873,8 +885,10 @@
 Assuming your data file is in <code>device/yoyodyne/tardis/tardis.dat</code>,
 declare the following in your device's AndroidBoard.mk:</p>
 
-<p><code>device/yoyodyne/tardis/AndroidBoard.mk</code></p>
-<pre>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/AndroidBoard.mk
+</pre>
+<pre class="devsite-click-to-copy">
   [...]
 
 $(call add-radio-file,tardis.dat)
@@ -886,8 +900,10 @@
 devices, you only want the tardis.dat file added when building the tardis
 device.)</p>
 
-<p><code>device/yoyodyne/tardis/Android.mk</code></p>
-<pre>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/Android.mk
+</pre>
+<pre class="devsite-click-to-copy">
   [...]
 
 # an alternative to specifying it in AndroidBoard.mk
@@ -907,8 +923,10 @@
 <p>To extend the release tools, write a Python module (must be named
 releasetools.py) the tools can call into if present. Example:</p>
 
-<p><code>device/yoyodyne/tardis/releasetools.py</code></p>
-<pre>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/releasetools.py
+</pre>
+<pre class="prettyprint">
 import common
 
 def FullOTA_InstallEnd(info):
@@ -924,7 +942,7 @@
 <p>A separate function handles the case of generating an incremental OTA
 package. For this example, suppose you need to reprogram the tardis only when
 the tardis.dat file has changed between two builds.</p>
-<pre>
+<pre class="prettyprint">
 def IncrementalOTA_InstallEnd(info):
   # copy the data into the package.
   source_tardis_dat = info.source_zip.read("RADIO/tardis.dat")
@@ -1016,9 +1034,11 @@
 <p>Specify the location of your device's releasetools.py script in your
 BoardConfig.mk file:</p>
 
-<p><code>device/yoyodyne/tardis/BoardConfig.mk</code></p>
+<pre class="devsite-click-to-copy">
+device/yoyodyne/tardis/BoardConfig.mk
+</pre>
 
-<pre>
+<pre class="devsite-click-to-copy">
  [...]
 
 TARGET_RELEASETOOLS_EXTENSIONS := device/yoyodyne/tardis
@@ -1042,30 +1062,15 @@
 picks up the device-specific module from the target_files .zip file and uses
 it when generating OTA packages:</p>
 
-<pre>
-% <b>./build/tools/releasetools/ota_from_target_files \
-    -i PREVIOUS-tardis-target_files.zip \
-    dist_output/tardis-target_files.zip incremental_ota_update.zip</b>
-unzipping target target-files...
-<b>using device-specific extensions from target_files</b>
-unzipping source target-files...
-   [...]
-done.
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">./build/tools/releasetools/ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip</code>
 </pre>
 
 <p>Alternatively, you can specify device-specific extensions when you run
 <code>ota_from_target_files</code>.</p>
 
-<pre>
-% <b>./build/tools/releasetools/ota_from_target_files \
-    -s device/yoyodyne/tardis \  # specify the path to device-specific extensions
-    -i PREVIOUS-tardis-target_files.zip \
-    dist_output/tardis-target_files.zip incremental_ota_update.zip</b>
-unzipping target target-files...
-<b>loaded device-specific extensions from device/yoyodyne/tardis</b>
-unzipping source target-files...
-   [...]
-done.
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">./build/tools/releasetools/ota_from_target_files -s device/yoyodyne/tardis -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip</code>
 </pre>
 
 <p class="note"><strong>Note:</strong> For a complete list of options, refer
diff --git a/en/devices/tech/ota/reduce_size.html b/en/devices/tech/ota/reduce_size.html
index 6a4e618..227c40d 100644
--- a/en/devices/tech/ota/reduce_size.html
+++ b/en/devices/tech/ota/reduce_size.html
@@ -175,8 +175,8 @@
 
 <p>To use the build diff tool, run the following command:</p>
 
-<pre class=prettyprint>
-$ target_files_diff.py dir1 dir2
+<pre class="devsite-terminal devsite-click-to-copy">
+target_files_diff.py dir1 dir2
 </pre>
 
 <p><code>dir1</code> and <code>dir2</code> are base directories that contain the extracted target
diff --git a/en/devices/tech/ota/sign_builds.html b/en/devices/tech/ota/sign_builds.html
index 4829547..fbc0d71 100644
--- a/en/devices/tech/ota/sign_builds.html
+++ b/en/devices/tech/ota/sign_builds.html
@@ -52,12 +52,12 @@
 <p>To generate your own unique set of release-keys, run these commands from
 the root of your Android tree:</p>
 
-<pre class="no-pretty-print">
-subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'
-mkdir ~/.android-certs
-for x in releasekey platform shared media; do \
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'</code>
+<code class="devsite-terminal">mkdir ~/.android-certs</code>
+<code class="devsite-terminal">for x in releasekey platform shared media; do \
     ./development/tools/make_key ~/.android-certs/$x "$subject"; \
-done
+done</code>
 </pre>
 
 <p><code>$subject</code> should be changed to reflect your organization's
@@ -69,12 +69,12 @@
 
 <p>To generate a release image, use:</p>
 
-<pre class="no-pretty-print">
-make dist
-./build/tools/releasetools/sign_target_files_apks \
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">make dist</code>
+<code class="devsite-terminal">./build/tools/releasetools/sign_target_files_apks \
     -o \    # explained in the next section
     -d ~/.android-certs out/dist/*-target_files-*.zip \
-    signed-target_files.zip
+    signed-target_files.zip</code>
 </pre>
 
 <p>The <code>sign_target_files_apks</code> script takes a target-files .zip
@@ -87,11 +87,11 @@
 A signed target-files zip can be converted into a signed OTA update zip
 using the following procedure:
 
-<pre class="no-pretty-print">
-./build/tools/releasetools/ota_from_target_files \
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">./build/tools/releasetools/ota_from_target_files \
     -k ~/.android-certs/releasekey \
     signed-target_files.zip \
-    signed-ota_update.zip
+    signed-ota_update.zip</code>
 </pre>
 
 <h3 id="signatures-sideloading">Signatures and sideloading</h3>
@@ -126,8 +126,10 @@
 included only in recovery by setting the PRODUCT_EXTRA_RECOVERY_KEYS
 variable in your product definition:</p>
 
-<p><code>vendor/yoyodyne/tardis/products/tardis.mk</code></p>
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
+vendor/yoyodyne/tardis/products/tardis.mk
+</pre>
+<pre class="devsite-click-to-copy">
  [...]
 
 PRODUCT_EXTRA_RECOVERY_KEYS := vendor/yoyodyne/security/tardis/sideload
@@ -165,8 +167,10 @@
 in their Android.mk file. (testkey is used if this variable is not set.) You
 can also specify an entirely different key by pathname, e.g.:</p>
 
-<p><code>device/yoyodyne/apps/SpecialApp/Android.mk</code></p>
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
+device/yoyodyne/apps/SpecialApp/Android.mk
+</pre>
+<pre class="devsite-click-to-copy">
  [...]
 
 LOCAL_CERTIFICATE := device/yoyodyne/security/special
@@ -185,7 +189,7 @@
 replace all those in <code>build/target/product/security</code>; it is
 equivalent to using <code>-k</code> four times to specify the mappings:</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 build/target/product/security/testkey  = dir/releasekey
 build/target/product/security/platform = dir/platform
 build/target/product/security/shared   = dir/shared
@@ -198,7 +202,7 @@
 required by SpecialApp in the example above. If the keys were in the following
 files:</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 vendor/yoyodyne/security/tardis/releasekey.x509.pem
 vendor/yoyodyne/security/tardis/releasekey.pk8
 vendor/yoyodyne/security/tardis/platform.x509.pem
@@ -215,12 +219,12 @@
 
 <p>Then you would sign all the apps like this:</p>
 
-<pre class="no-pretty-print">
-% <b>./build/tools/releasetools/sign_target_files_apks \
-    -d vendor/yoyodyne/security/tardis \
-    -k vendor/yoyodyne/special=vendor/yoyodyne/special-release \
-    -o \
-    tardis-target_files.zip signed-tardis-target_files.zip</b>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">./build/tools/releasetools/sign_target_files_apks -d vendor/yoyodyne/security/tardis -k vendor/yoyodyne/special=vendor/yoyodyne/special-release -o tardis-target_files.zip signed-tardis-target_files.zip</code>
+</pre>
+
+<p>This brings up the following:</p>
+<pre class="devsite-click-to-copy">
 Enter password for vendor/yoyodyne/security/special-release key&gt;
 Enter password for vendor/yoyodyne/security/tardis/media key&gt;
 Enter password for vendor/yoyodyne/security/tardis/platform key&gt;
@@ -267,24 +271,22 @@
 certificate/private key pairs using the openssl tool from
 <a href="https://www.openssl.org/">openssl.org</a>:</p>
 
-<pre class="no-pretty-print">
+<pre class="devsite-click-to-copy">
 # generate RSA key
-% <b>openssl genrsa -3 -out temp.pem 2048</b>
+<code class="devsite-terminal">openssl genrsa -3 -out temp.pem 2048</code>
 Generating RSA private key, 2048 bit long modulus
 ....+++
 .....................+++
 e is 3 (0x3)
 
 # create a certificate with the public part of the key
-% <b>openssl req -new -x509 -key temp.pem -out releasekey.x509.pem \
-  -days 10000 \
-  -subj '/C=US/ST=California/L=San Narciso/O=Yoyodyne, Inc./OU=Yoyodyne Mobility/CN=Yoyodyne/[email protected]'</b>
+<code class="devsite-terminal">openssl req -new -x509 -key temp.pem -out releasekey.x509.pem -days 10000 -subj '/C=US/ST=California/L=San Narciso/O=Yoyodyne, Inc./OU=Yoyodyne Mobility/CN=Yoyodyne/[email protected]'</code>
 
 # create a PKCS#8-formatted version of the private key
-% <b>openssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt</b>
+<code class="devsite-terminal">openssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt</code>
 
 # securely delete the temp.pem file
-% <b>shred --remove temp.pem</b>
+<code class="devsite-terminal">shred --remove temp.pem</code>
 </pre>
 
 <p>The openssl pkcs8 command given above creates a .pk8 file with <i>no</i>
@@ -315,7 +317,7 @@
 tree:
 </p>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 ./build/tools/releasetools/img_from_target_files signed-target-files.zip signed-img.zip
 </pre>
 
@@ -324,7 +326,7 @@
 To load an image onto a device, use fastboot as
 follows:
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 fastboot update signed-img.zip
 </pre>
 
diff --git a/en/devices/tech/ota/tools.html b/en/devices/tech/ota/tools.html
index 1b26f91..4ad58d9 100644
--- a/en/devices/tech/ota/tools.html
+++ b/en/devices/tech/ota/tools.html
@@ -39,26 +39,18 @@
 <p>Example: Using the release tools to build a full update for the
 hypothetical <b>tardis</b> device:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 # first, build the target-files .zip
-% <b>. build/envsetup.sh &amp;&amp; lunch tardis-eng</b>
-% <b>mkdir dist_output</b>
-% <b>make dist DIST_DIR=dist_output</b>
-  [...]
-% <b>ls -l dist_output/*target_files*</b>
--rw-r----- 1 user eng  69965275 Sep 29 15:51 tardis-target_files.zip
+<code class="devsite-terminal">. build/envsetup.sh &amp;&amp; lunch tardis-eng</code>
+<code class="devsite-terminal">mkdir dist_output</code>
+<code class="devsite-terminal">make dist DIST_DIR=dist_output</code>
 </pre>
 
 <p>The target-files .zip contains everything needed to construct OTA packages.
 </p>
 
-<pre>
-% <b>./build/tools/releasetools/ota_from_target_files \
-    dist_output/tardis-target_files.zip ota_update.zip</b>
-unzipping target target-files...
-done.
-% <b>ls -l ota_update.zip</b>
--rw-r----- 1 user eng 62236561 Sep 29 15:58 ota_update.zip
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">./build/tools/releasetools/ota_from_target_files dist_output/tardis-target_files.zip ota_update.zip</code>
 </pre>
 
 <p>The ota_update.zip is now ready to be sent to test devices (everything is
@@ -81,16 +73,8 @@
 (the one you want to update <i>from</i>) as well as the target_files .zip from
 the new build.</p>
 
-<pre>
-% <b>./build/tools/releasetools/ota_from_target_files \
-    -i PREVIOUS-tardis-target_files.zip \  </b># make incremental from this older version<b>
-    dist_output/tardis-target_files.zip incremental_ota_update.zip</b>
-unzipping target target-files...
-unzipping source target-files...
-   [...]
-done.
-% <b>ls -l incremental_ota_update.zip</b>
--rw-r----- 1 user eng 1175314 Sep 29 16:10 incremental_ota_update.zip
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">./build/tools/releasetools/ota_from_target_files -i PREVIOUS-tardis-target_files.zip dist_output/tardis-target_files.zip incremental_ota_update.zip # make incremental from the older version</code>
 </pre>
 
 <p>This build is very similar to the previous build, and the incremental
diff --git a/en/devices/tech/power/batterystats.html b/en/devices/tech/power/batterystats.html
index 75c1e9e..10cf934 100644
--- a/en/devices/tech/power/batterystats.html
+++ b/en/devices/tech/power/batterystats.html
@@ -48,8 +48,9 @@
 
   <h2 id="command-line_options">Command input</h2>
   <p>The basic <code>batterystats</code> command is:</p>
-  <pre class="prettyprint">
-$ adb shell dumpsys batterystats</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys batterystats
+</pre>
   <p>Supported options:</p>
   <ul>
   <li><code>--help</code> displays additional options for tailoring the output.
@@ -59,13 +60,15 @@
   </ul>
   <p>For example, to print battery usage statistics in csv format for all apps
   since the device was last charged, run the command:</p>
-  <pre class="prettyprint">
-$ adb shell dumpsys batterystats --charged --checkin</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys batterystats --charged --checkin
+</pre>
   <p>You can also specify a package name to get statistics for a single app. For
   example, to print battery usage statistics for a given app package
   since the device was last charged, run the command:</p>
-  <pre class="prettyprint">
-$ adb shell dumpsys batterystats --charged &lt;package-name&gt;</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell dumpsys batterystats --charged &lt;package-name&gt;
+</pre>
 
   <h2 id="output">Command output</h2>
 
@@ -101,7 +104,7 @@
 
 <p>Sample output:</p>
 
-  <pre class="no-pretty-print">
+  <pre class="devsite-click-to-copy">
   9,0,i,vers,11,116,K,L 9,0,i,uid,1000,android
   9,0,i,uid,1000,com.android.providers.settings
   9,0,i,uid,1000,com.android.inputdevices
diff --git a/en/devices/tech/power/component.html b/en/devices/tech/power/component.html
index 90edf65..0b69358 100644
--- a/en/devices/tech/power/component.html
+++ b/en/devices/tech/power/component.html
@@ -105,8 +105,8 @@
 suspending while the screen is off, use a temporary partial wakelock. Using a USB cable, connect
 the device to a development host, then issue the following command:</p>
 
-<pre>
-$ adb shell "echo temporary &gt; /sys/power/wake_lock"
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell "echo temporary &gt; /sys/power/wake_lock"
 </pre>
 
 <p>While in <code>wake_lock</code>, the screen off state does not trigger a system suspend.
@@ -114,8 +114,8 @@
 
 <p>To remove the wakelock:</p>
 
-<pre>
-$ adb shell "echo temporary &gt; /sys/power/wake_unlock"
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell "echo temporary &gt; /sys/power/wake_unlock"
 </pre>
 
 <h3 id="measure-suspend">Measuring system suspend</h3>
@@ -155,7 +155,7 @@
 
 <p>You must specify the available CPU speeds for your device in the power profile <code>cpu.speeds</code> entry. To get a list of available CPU speeds, run:</p>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
 </pre>
 
@@ -167,12 +167,12 @@
 speed. For example, to set speed for 200MHz on a system with only 1 CPU or all CPUs sharing a
 common cpufreq policy, use the system console or adb shell to run the following commands:</p>
 
-<pre>
-echo userspace &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
-echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
-echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
-echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
-cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">echo userspace &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor</code>
+<code class="devsite-terminal">echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq</code>
+<code class="devsite-terminal">echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq</code>
+<code class="devsite-terminal">echo 200000 &gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed</code>
+<code class="devsite-terminal">cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq</code>
 </pre>
 
 <p class="note">
@@ -187,7 +187,7 @@
 
 <p>To measure current consumed by a CPU running at various speeds, use the system console to place
 the CPU in a CPU-bound loop using the command:</p>
-<pre>
+<pre class="devsite-click-to-copy">
 # while true; do true; done
 </pre>
 
diff --git a/en/devices/tech/power/device.html b/en/devices/tech/power/device.html
index 160cbb1..8844366 100644
--- a/en/devices/tech/power/device.html
+++ b/en/devices/tech/power/device.html
@@ -45,7 +45,7 @@
 
 <p>To read power consumption data, insert calls to the API in your testing code.</p>
 
-<pre>
+<pre class="prettyprint">
 import android.os.BatteryManager;
 import android.content.Context;
 BatteryManager mBatteryManager =
@@ -59,7 +59,7 @@
 
 <p>Android supports the following battery fuel gauge properties:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 BATTERY_PROPERTY_CHARGE_COUNTER   Remaining battery capacity in microampere-hours
 BATTERY_PROPERTY_CURRENT_NOW      Instantaneous battery current in microamperes
 BATTERY_PROPERTY_CURRENT_AVERAGE  Average battery current in microamperes
diff --git a/en/devices/tech/power/mgmt.html b/en/devices/tech/power/mgmt.html
index 2108689..7dd0862 100644
--- a/en/devices/tech/power/mgmt.html
+++ b/en/devices/tech/power/mgmt.html
@@ -97,11 +97,11 @@
 <h3 id=testing_app_standby>Testing App Standby</h3>
 <p>You can manually test App Standby using the following <code>adb</code> commands:</p>
 
-<pre>
-$ adb shell dumpsys battery unplug
-$ adb shell am set-idle packageName true
-$ adb shell am set-idle packageName false
-$ adb shell am get-idle packageName
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">adb shell dumpsys battery unplug</code>
+<code class="devsite-terminal">adb shell am set-idle packageName true</code>
+<code class="devsite-terminal">adb shell am set-idle packageName false</code>
+<code class="devsite-terminal">adb shell am get-idle packageName</code>
 </pre>
 
 <h2 id="doze">Doze</h2>
@@ -195,7 +195,7 @@
 
 <p>Android 7.0 and later extends Doze by enabling a lightweight sleep mode during screen
 off, before the device is idle.</p>
-<p><img src="../images/doze_lightweight.png"></p>
+<p><img src="/devices/tech/images/doze_lightweight.png"></p>
 <p class="img-caption">Figure 1. Doze modes for non-stationary and stationary
 devices.</p>
 
@@ -258,10 +258,10 @@
 <li>In the device overlay config file
 <code>overlay/frameworks/base/core/res/res/values/config.xml</code>, set
 <code>config_enableAutoPowerModes</code> to <strong>true</strong>:
-<pre>
-bool name="config_enableAutoPowerModes"&gt;true&lt;/bool&gt;
+<pre class="devsite-click-to-copy">
+&lt;bool name="config_enableAutoPowerModes"&gt;true&lt;/bool&gt;
 </pre>
-<br>In AOSP, this parameter is set to false (Doze disabled) by default.<br>
+In AOSP, this parameter is set to false (Doze disabled) by default.<br>
 </li>
 <li>Confirm that preloaded apps and services:
 <ul>
diff --git a/en/devices/tech/power/values.html b/en/devices/tech/power/values.html
index 472b820..e4c6842 100644
--- a/en/devices/tech/power/values.html
+++ b/en/devices/tech/power/values.html
@@ -68,7 +68,7 @@
 
 <p>Example of cluster CPUs and speeds:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 &lt;array name="cpu.active.cluster0"&gt;
 &lt;value&gt;200&lt;/value&gt;
 &lt;value&gt;300&lt;/value&gt;
diff --git a/en/devices/tech/test_infra/tradefed/full_example.html b/en/devices/tech/test_infra/tradefed/full_example.html
index c8f44f9..f2bbb70 100644
--- a/en/devices/tech/test_infra/tradefed/full_example.html
+++ b/en/devices/tech/test_infra/tradefed/full_example.html
@@ -58,7 +58,8 @@
 tradefed test generally implements the
 <a href="/reference/com/android/tradefed/testtype/IRemoteTest.html">IRemoteTest</a>
 interface. Here's an implementation for the HelloWorldTest:</p>
-<pre><code>package com.android.tradefed.example;
+<pre class="prettyprint">
+package com.android.tradefed.example;
 
 import com.android.tradefed.device.DeviceNotAvailableException;
 import com.android.tradefed.result.ITestInvocationListener;
@@ -70,12 +71,14 @@
         System.out.println("Hello, TF World!");
     }
 }
-</code></pre>
+</pre>
 
 <p>Save this sample code to
 <code>&lt;tree&gt;/tools/tradefederation/core/prod-tests/src/com/android/tradefed/example/HelloWorldTest.java</code>
 and rebuild tradefed from your shell:</p>
-<pre><code>m -jN</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+m -jN
+</pre>
 
 <p>Note that <code>System.out</code> in the example above may not actually
 direct output to the console. While this is acceptable for this test example,
@@ -94,9 +97,10 @@
 
 <p>Lets create a new Configuration for our HelloWorldTest (note the full class
 name of the HelloWorldTest):</p>
-<pre><code>&lt;configuration description="Runs the hello world test"&gt;
+<pre class="prettyprint">
+&lt;configuration description="Runs the hello world test"&gt;
     &lt;test class="com.android.tradefed.example.HelloWorldTest" /&gt;
-&lt;/configuration&gt;</code></pre>
+&lt;/configuration&gt;</pre>
 
 <p>Save this data to a <code>helloworld.xml</code> file anywhere on your local
 filesystem (e.g. <code>/tmp/helloworld.xml</code>). TF will parse the
@@ -106,21 +110,24 @@
 
 <h2 id="runconfig">Running the config (R)</h2>
 <p>From your shell, launch the tradefed console:</p>
-<pre><code>$ tradefed.sh
-</code></pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+tradefed.sh
+</pre>
 
 <p>Ensure a device is connected to the host machine and is visible to tradefed:</p>
-<pre><code>tf &gt;list devices
+<pre class="devsite-click-to-copy">
+tf&gt; list devices
 Serial            State      Product   Variant   Build   Battery
 004ad9880810a548  Available  mako      mako      JDQ39   100
-</code></pre>
+</pre>
 
 <p>Configurations can be executed using the <code>run &lt;config&gt;</code>
 console command. Try:</p>
-<pre><code>tf&gt; run /tmp/helloworld.xml
+<pre class="devsite-click-to-copy">
+tf&gt; run /tmp/helloworld.xml
 05-12 13:19:36 I/TestInvocation: Starting invocation for target stub on build 0 on device 004ad9880810a548
 Hello, TF World!
-</code></pre>
+</pre>
 <p>You should see "Hello, TF World!" output on the terminal.</p>
 
 <h2 id="addconfig">Adding the config to the Classpath (D, I, R)</h2>
@@ -133,13 +140,15 @@
 (<code>&lt;tree&gt;/tools/tradefederation/core/prod-tests/res/config/example/helloworld.xml</code>).
 Rebuild tradefed, restart the tradefed console, then ask tradefed to display the
 list of configurations from the classpath:</p>
-<pre><code>tf&gt; list configs
+<pre class="devsite-click-to-copy">
+tf&gt; list configs
 […]
 example/helloworld: Runs the hello world test
-</code></pre>
+</pre>
 
 <p>You can now run the helloworld config using:</p>
-<pre><code>tf &gt;run example/helloworld
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld
 05-12 13:21:21 I/TestInvocation: Starting invocation for target stub on build 0 on device 004ad9880810a548
 Hello, TF World!
 </code></pre>
@@ -152,7 +161,8 @@
 <p>Tests can get a reference to an Android device by implementing the
 <a href="/reference/com/android/tradefed/testtype/IDeviceTest.html">IDeviceTest</a>
 interface. Here's a sample implementation of what this looks like:</p>
-<pre><code>public class HelloWorldTest implements IRemoteTest, IDeviceTest {
+<pre class="prettyprint">
+public class HelloWorldTest implements IRemoteTest, IDeviceTest {
     private ITestDevice mDevice;
     &#64;Override
     public void setDevice(ITestDevice device) {
@@ -165,7 +175,7 @@
     }

 }
-</code></pre>
+</pre>
 
 <p>The Trade Federation framework will inject the <code>ITestDevice</code>
 reference into your test via the <code>IDeviceTest#setDevice</code> method,
@@ -173,25 +183,30 @@
 
 <p>Let's modify the HelloWorldTest print message to display the serial number of
 the device:</p>
-<pre><code>&#64;Override
+<pre class="prettyprint">
+&#64;Override
 public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {
     System.out.println("Hello, TF World! I have device " + getDevice().getSerialNumber());
 }
-</code></pre>
+</pre>
 
 <p>Now rebuild tradefed and check the list of devices:</p>
-<pre><code>$ tradefed.sh
-tf &gt;list devices
+<pre class="devsite-terminal devsite-click-to-copy">
+tradefed.sh
+</pre>
+<pre class="devsite-click-to-copy">
+tf&gt; list devices
 Serial            State      Product   Variant   Build   Battery
 004ad9880810a548  Available  mako      mako      JDQ39   100
-</code></pre>
+</pre>
 
 <p>Take note of the serial number listed as <strong>Available</strong>; that is
 the device that should be allocated to HelloWorld:</p>
-<pre><code>tf &gt;run example/helloworld
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld
 05-12 13:26:18 I/TestInvocation: Starting invocation for target stub on build 0 on device 004ad9880810a548
 Hello, TF World! I have device 004ad9880810a548
-</code></pre>
+</pre>
 
 <p>You should see the new print message displaying the serial number of the
 device.</p>
@@ -213,7 +228,8 @@
 
 <p>Here's what the HelloWorldTest implementation might look like with a single
 failed test result.</p>
-<pre><code>&#64;Override
+<pre class="prettyprint">
+&#64;Override
 public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {
     System.out.println("Hello, TF World! I have device " + getDevice().getSerialNumber());
 
@@ -223,7 +239,8 @@
     listener.testFailed(testId, "oh noes, test failed");
     listener.testEnded(testId, Collections.emptyMap());
     listener.testRunEnded(0, Collections.emptyMap());
-}</code></pre>
+}
+</pre>
 
 <p>TF includes several <code>IRemoteTest</code> implementations you can reuse
 instead of writing your own from scratch. For example,
@@ -239,15 +256,18 @@
 <a href="/reference/com/android/tradefed/result/TextResultReporter.html">TextResultReporter</a>,
 which dumps the results of an invocation to stdout. To illustrate, run the
 HelloWorldTest config from the previous section:</p>
-<pre><code>$ ./tradefed.sh
-tf &gt;run example/helloworld
+<pre class="devsite-terminal devsite-click-to-copy">
+./tradefed.sh
+</pre>
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld
 05-16 20:03:15 I/TestInvocation: Starting invocation for target stub on build 0 on device 004ad9880810a548
 Hello, TF World! I have device 004ad9880810a548
 05-16 20:03:15 I/InvocationToJUnitResultForwarder: run helloworldrun started: 1 tests
 Test FAILURE: com.example.TestClassName#sampleTest
  stack: oh noes, test failed
 05-16 20:03:15 I/InvocationToJUnitResultForwarder: run ended 0 ms
-</code></pre>
+</pre>
 
 <p>To store the results of an invocation elsewhere, such as in a file, specify a
 custom <code>ITestInvocationListener</code> implementation using the
@@ -259,14 +279,16 @@
 used by the <em>ant</em> JUnit XML writer. To specify the result_reporter in the
 configuration, edit the <code>…/res/config/example/helloworld.xml</code>
 config:</p>
-<pre><code>&lt;configuration description="Runs the hello world test"&gt;
+<pre class="prettyprint">
+&lt;configuration description="Runs the hello world test"&gt;
     &lt;test class="com.android.tradefed.example.HelloWorldTest" /&gt;
     &lt;result_reporter class="com.android.tradefed.result.XmlResultReporter" /&gt;
 &lt;/configuration&gt;
-</code></pre>
+</pre>
 
 <p>Now rebuild tradefed and re-run the hello world sample:</p>
-<pre><code>tf &gt;run example/helloworld
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld
 05-16 21:07:07 I/TestInvocation: Starting invocation for target stub on build 0 on device 004ad9880810a548
 Hello, TF World! I have device 004ad9880810a548
 05-16 21:07:07 I/XmlResultReporter: Saved device_logcat log to /tmp/0/inv_2991649128735283633/device_logcat_6999997036887173857.txt
@@ -276,7 +298,8 @@
 
 <p>Notice the log message stating that an XML file has been generated; the
 generated file should look like this:</p>
-<pre><code>&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
+<pre class="prettyprint">
+&lt;?xml version='1.0' encoding='UTF-8' ?&gt;
 &lt;testsuite name="stub" tests="1" failures="1" errors="0" time="9" timestamp="2011-05-17T04:07:07" hostname="localhost"&gt;
   &lt;properties /&gt;
   &lt;testcase name="sampleTest" classname="com.example.TestClassName" time="0"&gt;
@@ -284,7 +307,7 @@
     &lt;/failure&gt;
   &lt;/testcase&gt;
 &lt;/testsuite&gt;
-</code></pre>
+</pre>
 
 <p>You can also write your own custom invocation listeners&mdash;they simply
 need to implement the
@@ -313,19 +336,21 @@
 for the ddmlib Log class. Let's convert the
 previous <code>System.out.println</code> call in HelloWorldTest to a
 <code>CLog</code> call:</p>
-<pre><code>&#64;Override
+<pre class="prettyprint">
+&#64;Override
 public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {
     CLog.i("Hello, TF World! I have device %s", getDevice().getSerialNumber());
-</code></pre>
+</pre>
 
 <p><code>CLog</code> handles string interpolation directly, similar to
 <code>String.format</code>. When you rebuild and rerun TF, you should see the
 log message on stdout:</p>
-<pre><code>tf&gt; run example/helloworld
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld

 05-16 21:30:46 I/HelloWorldTest: Hello, TF World! I have device 004ad9880810a548

-</code></pre>
+</pre>
 
 <p>By default, tradefed
 <a href"/reference/com/android/tradefed/log/StdoutLogger.html">outputs host log
@@ -334,7 +359,8 @@
 <a href="/reference/com/android/tradefed/log/FileLogger.html">FileLogger</a>.
 To add file logging, add a <code>logger</code> tag to the config, specifying the
 full class name of <code>FileLogger</code>:</p>
-<pre><code>&lt;configuration description="Runs the hello world test"&gt;
+<pre class="prettyprint">
+&lt;configuration description="Runs the hello world test"&gt;
     &lt;test class="com.android.tradefed.example.HelloWorldTest" /&gt;
     &lt;result_reporter class="com.android.tradefed.result.XmlResultReporter" /&gt;
     &lt;logger class="com.android.tradefed.log.FileLogger" /&gt;
@@ -342,7 +368,8 @@
 </code></pre>
 
 <p>Now, rebuild and run the helloworld example again:</p>
-<pre><code>tf &gt;run example/helloworld
+<pre class="devsite-click-to-copy">
+tf &gt;run example/helloworld

 05-16 21:38:21 I/XmlResultReporter: Saved device_logcat log to /tmp/0/inv_6390011618174565918/device_logcat_1302097394309452308.txt
 05-16 21:38:21 I/XmlResultReporter: Saved host_log log to /tmp/0/inv_6390011618174565918/host_log_4255420317120216614.txt
@@ -350,10 +377,13 @@
 </code></pre>
 <p>The log message indicates the path of the host log, which, when viewed,
 should contain your HelloWorldTest log message:</p>
-<pre><code>$ more /tmp/0/inv_6390011618174565918/host_log_4255420317120216614.txt
+<pre class="devsite-terminal devsite-click-to-copy">
+more /tmp/0/inv_6390011618174565918/host_log_4255420317120216614.txt</pre>
+<p>Example output:</p>
+<pre class="devsite-click-to-copy">

 05-16 21:38:21 I/HelloWorldTest: Hello, TF World! I have device 004ad9880810a548
-</code></pre>
+</pre>
 
 <h2 id="optionhandling">Handling options (D, I, R)</h2>
 <p>Objects loaded from a TF Configuration (aka <b>Configuration objects</b>)
@@ -371,41 +401,46 @@
 </p>
 
 <p>Let's add an <code>@Option</code> to HelloWorldTest:</p>
-<pre><code>@Option(name="my_option",
+<pre class="prettyprint">
+@Option(name="my_option",
         shortName='m',
         description="this is the option's help text",
         // always display this option in the default help text
         importance=Importance.ALWAYS)
 private String mMyOption = "thisisthedefault";
-</code></pre>
+</pre>
 
 <p>Next, let's add a log message to display the value of the option in
 HelloWorldTest so we can demonstrate it was received correctly:</p>
-<pre><code>&#64;Override
+<pre class="prettyprint">
+&#64;Override
 public void run(ITestInvocationListener listener) throws DeviceNotAvailableException {

     CLog.logAndDisplay(LogLevel.INFO, "I received option '%s'", mMyOption);
-</code></pre>
+</pre>
 
 <p>Finally, rebuild TF and run helloworld; you should see a log message with the
 <code>my_option</code> default value:</p>
-<pre><code>tf&gt; run example/helloworld
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld

 05-24 18:30:05 I/HelloWorldTest: I received option 'thisisthedefault'
-</code></pre>
+</pre>
 
 <h3 id="passclivalues">Passing values from the command line</h3>
 <p>Pass in a value for <code>my_option</code>; you should see
 <code>my_option</code> populated with that value:</p>
-<pre><code>tf&gt; run example/helloworld --my_option foo
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld --my_option foo

 05-24 18:33:44 I/HelloWorldTest: I received option 'foo'
-</code></pre>
+</pre>
 
 <p>TF configurations also include a help system, which automatically displays
 help text for <code>@Option</code> fields. Try it now, and you should see the
 help text for <code>my_option</code>:</p>
-<pre><code>tf&gt; run example/helloworld --help
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld --help
 Printing help for only the important options. To see help for all options, use the --help-all flag
 
   cmd_options options:
@@ -432,21 +467,24 @@
 <p>You can also specify an Option value within the config by adding a
 <code>&lt;option name="" value=""&gt;</code> element. Test it using
 <code>helloworld.xml</code>:</p>
-<pre><code>&lt;test class="com.android.tradefed.example.HelloWorldTest" &gt;
+<pre class="prettyprint">
+&lt;test class="com.android.tradefed.example.HelloWorldTest" &gt;
     &lt;option name="my_option" value="fromxml" /&gt;
 &lt;/test&gt;
-</code></pre>
+</pre>
 
 <p>Re-building and running helloworld should now produce this output:</p>
-<pre><code>05-24 20:38:25 I/HelloWorldTest: I received option 'fromxml'
-</code></pre>
+<pre class="devsite-click-to-copy">
+05-24 20:38:25 I/HelloWorldTest: I received option 'fromxml'
+</pre>
 
 <p>The configuration help should also update to indicate the default value of
 <code>my_option</code>:</p>
-<pre><code>tf&gt; run example/helloworld --help
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld --help
   test options:
     -m, --my_option      this is the option's help text Default: fromxml.
-</code></pre>
+</pre>
 
 <p>Other configuration objects included in the helloworld config, such as
 <code>FileLogger</code>, also accept options. The option
@@ -458,7 +496,8 @@
 
 <p>Try this now, and you should see the 'I have device' log message reappear on
 stdout, in addition to being logged to a file:</p>
-<pre><code>tf &gt;run example/helloworld --log-level-display info
+<pre class="devsite-click-to-copy">
+tf&gt; run example/helloworld --log-level-display info

 05-24 18:53:50 I/HelloWorldTest: Hello, TF World! I have device 004ad9880810a548
 </code></pre>
diff --git a/en/devices/tech/test_infra/tradefed/fundamentals/machine_setup.html b/en/devices/tech/test_infra/tradefed/fundamentals/machine_setup.html
index 71dcf5c..47b99bd 100644
--- a/en/devices/tech/test_infra/tradefed/fundamentals/machine_setup.html
+++ b/en/devices/tech/test_infra/tradefed/fundamentals/machine_setup.html
@@ -33,7 +33,7 @@
 <p>
   From the root directory of the Android source tree:
 </p>
-<pre>
+<pre class="devsite-click-to-copy">
 <code class="devsite-terminal">source ./build/make/envsetup.sh</code>
 <code class="devsite-terminal">lunch &lt;device-target&gt;</code>
 <code class="devsite-terminal">make tradefed-all -j8</code>
@@ -44,7 +44,7 @@
 <p>
   TradeFed requires the <code>adb</code> utility in your <code>$PATH</code>:
 </p>
-<pre class="devsite-terminal">
+<pre class="devsite-terminal devsite-click-to-copy">
 export PATH=$PATH:&lt;path/to/adb&gt;
 </pre>
 
@@ -52,7 +52,7 @@
   Once TradeFed is built, the <code>tradefed.sh</code> launcher script is
   accessible from your path. To launch the Trade Federation console:
 </p>
-<pre class="devsite-terminal">
+<pre class="devsite-terminal devsite-click-to-copy">
 tradefed.sh
 </pre>
 <p>
diff --git a/en/devices/tech/test_infra/tradefed/fundamentals/options.html b/en/devices/tech/test_infra/tradefed/fundamentals/options.html
index fc494f3..bb891b7 100644
--- a/en/devices/tech/test_infra/tradefed/fundamentals/options.html
+++ b/en/devices/tech/test_infra/tradefed/fundamentals/options.html
@@ -46,7 +46,8 @@
 <p>As an example, let's say we want to build a functional phone test which will dial a variety of
 phone numbers, and will expect to receive a sequence of DTMF tones from each number after it
 connects.</p>
-<code><pre>public class PhoneCallFuncTest extends IRemoteTest {
+<pre class="prettyprint">
+public class PhoneCallFuncTest extends IRemoteTest {
     &#64;Option(name = "timeout", description = "How long to wait for connection, in millis")
     private long mWaitTime = 30 * 1000;  // 30 seconds
 
@@ -56,7 +57,8 @@
 
     public PhoneCallFuncTest() {
         mCalls.add("123-456-7890", "01134");  // default
-    }</pre></code>
+    }
+</pre>
 
 <p>That's all that's required for the Developer to set up two points of configuration for that
 test.  They could then go off and use <code>mWaitTime</code> and <code>mCalls</code> as normal,
@@ -73,21 +75,24 @@
 as a long-running test that calls a variety of numbers.  They could create a pair of configurations
 that might look like the following:</p>
 
-<code><pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
+<pre class="prettyprint">
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
 &lt;configuration description="low-latency default test; low-latency.xml"&gt;
     &lt;test class="com.example.PhoneCallFuncTest"&gt;
         &lt;option name="timeout" value="5000" /&gt;
     &lt;/test&gt;
-&lt;/configuration&gt;</pre></code>
+&lt;/configuration&gt;</pre>
 
-<code><pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
+<pre class="prettyprint">
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
 &lt;configuration description="call a bunch of numbers; many-numbers.xml"&gt;
     &lt;test class="com.example.PhoneCallFuncTest"&gt;
         &lt;option name="call" key="111-111-1111" value="#*#*TEST1*#*#" /&gt;
         &lt;option name="call" key="222-222-2222" value="#*#*TEST2*#*#" /&gt;
         &lt;!-- ... --&gt;
     &lt;/test&gt;
-&lt;/configuration&gt;</pre></code>
+&lt;/configuration&gt;
+</pre>
 
 <h2 id="testrunner">Test Runner</h2>
 <p>The Test Runner also has access to these configuration points via the Trade Federation console.
@@ -98,11 +103,14 @@
 
 <p>To run the low-latency test with the <code>many-numbers</code> phone numbers, the Test Runner
 could execute:</p>
-<code><pre>tf >run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#</pre></code>
+<pre class="devsite-click-to-copy">
+tf&gt; run low-latency.xml --call 111-111-1111 #*#*TEST1*#*# --call 222-222-2222 #*#*TEST2*#*#
+</pre>
 
 <p>Or, to get a similar effect from the opposite direction, the Test Runner could reduce the wait time
 for the <code>many-numbers</code> test:</p>
-<code><pre>tf >run many-numbers.xml --timeout 5000</code></pre>
+<pre class="devsite-click-to-copy">
+tf&gt; run many-numbers.xml --timeout 5000</pre>
 
   </body>
 </html>
diff --git a/en/devices/tech/test_infra/tradefed/fundamentals/vts.html b/en/devices/tech/test_infra/tradefed/fundamentals/vts.html
index 473db22..8ba912d 100644
--- a/en/devices/tech/test_infra/tradefed/fundamentals/vts.html
+++ b/en/devices/tech/test_infra/tradefed/fundamentals/vts.html
@@ -31,27 +31,41 @@
 <p>To set up a testing environment:</p>
 <ol>
 <li>Install Python development kit:
-<pre><code>$ sudo apt-get install python-dev</code></pre></li>
+<pre class="devsite-terminal devsite-click-to-copy">
+sudo apt-get install python-dev
+</pre>
+</li>
 <li>Install Protocol Buffer tools (for Python):
-<pre><code>$ sudo apt-get install python-protobuf<br>
-$ sudo apt-get install protobuf-compiler
-</code></pre></li>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">sudo apt-get install python-protobuf</code>
+<code class="devsite-terminal">sudo apt-get install protobuf-compiler</code>
+</pre>
+</li>
 <li>Install Python virtual environment-related tools:
-<pre><code>$ sudo apt-get install python-virtualenv<br>
-$ sudo apt-get install python-pip
-</code></pre></li></ol>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">sudo apt-get install python-virtualenv</code>
+<code class="devsite-terminal">sudo apt-get install python-pip</code>
+</pre>
+</li>
+</ol>
 
 <h2 id="test">Testing a patch</h2>
 <p>To test a patch:</p>
 <ol>
 <li>Build a VTS host-side package:
-<pre><code>$ . build/envsetup.sh
-$ lunch aosp_arm64-userdebug
-$ make vts -j</code></pre></li>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">. build/envsetup.sh</code>
+<code class="devsite-terminal">lunch aosp_arm64-userdebug</code>
+<code class="devsite-terminal">make vts -j</code>
+</pre>
+</li>
 <li>Run the default VTS tests:
-<pre><code>$ vts-tradefed<br>
-&gt; run vts     // where vts is the test plan name
-</pre></code></li></ol>
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">vts-tradefed</code>
+tf&gt; run vts     // where vts is the test plan name
+</pre>
+</li>
+</ol>
 
 <h2 id="plans">VTS plans</h2>
 <p>Available VTS test plans include:</p>
diff --git a/en/devices/tv/hdmi-cec.html b/en/devices/tv/hdmi-cec.html
index 942626a..6510901 100644
--- a/en/devices/tv/hdmi-cec.html
+++ b/en/devices/tv/hdmi-cec.html
@@ -70,7 +70,7 @@
 controller to an implementation of the simpler HDMI-CEC hardware abstraction
 layer (HAL).</p>
 
-<img src="images/HDMI_Control_Service.png" alt="Diagram that shows how HDMI-CEC was implemented before and after Android 5.0">
+<img src="/devices/tv/images/HDMI_Control_Service.png" alt="Diagram that shows how HDMI-CEC was implemented before and after Android 5.0">
 
 <p class="img-caption"><strong>Figure 1.</strong> HDMI Control Service replacement</p>
 
@@ -79,7 +79,7 @@
 
 <p>See the following diagram for a detailed view of the HDMI control service.</p>
 
-<img src="images/HDMI_Control_Service_Flow.png" alt="Image that shows how HDMI Control service details">
+<img src="/devices/tv/images/HDMI_Control_Service_Flow.png" alt="Image that shows how HDMI Control service details">
 
 <p class="img-caption"><strong>Figure 2.</strong> HDMI Control Service details</p>
 
@@ -96,7 +96,7 @@
 
 <p class="note"><strong>Note</strong>: Device manufacturers should add the following line into <code>PRODUCT_COPY_FILES</code> in <code>device.mk</code>.</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_COPY_FILES += \
 frameworks/native/data/etc/android.hardware.hdmi.cec.xml:system/etc/permissions/android.hardware.hdmi.cec.xml
 </pre>
@@ -107,13 +107,13 @@
 
 <p>For HDMI source devices, like Over the Top (OTT) boxes, set:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=<strong>4</strong>
 </pre>
 
 <p>For HDMI sink devices, like panel TVs, set:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 PRODUCT_PROPERTY_OVERRIDES += ro.hdmi.device_type=<strong>0</strong></pre>
 </p>
 
@@ -169,7 +169,7 @@
 
 <p>Here is an excerpt of the HDMI-CEC HAL definition regarding APIs:</p>
 
-<pre>
+<pre class="devsite-click-to-copy">
 #ifndef ANDROID_INCLUDE_HARDWARE_HDMI_CEC_H
 #define ANDROID_INCLUDE_HARDWARE_HDMI_CEC_H
 
diff --git a/en/devices/tv/reference-tv-app.html b/en/devices/tv/reference-tv-app.html
index 1989e0d..db4b176 100644
--- a/en/devices/tv/reference-tv-app.html
+++ b/en/devices/tv/reference-tv-app.html
@@ -84,10 +84,10 @@
 different one listed in the table above.</p>
 
 
-<pre>
-$ mkdir live-tv && cd live-tv
-$ repo init -u <a href="https://android.googlesource.com/platform/manifest">https://android.googlesource.com/platform/manifest</a> -b master
-$ repo sync -j8 -c
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">mkdir live-tv && cd live-tv</code>
+<code class="devsite-terminal">repo init -u <a href="https://android.googlesource.com/platform/manifest">https://android.googlesource.com/platform/manifest</a> -b master</code>
+<code class="devsite-terminal">repo sync -j8 -c</code>
 </pre>
 
 
@@ -96,10 +96,10 @@
 
 <p>To build the Live TV code, run:</p>
 
-<pre>
-$ . build/envsetup.sh
-$ tapas LiveTv x86
-$ make LiveTv
+<pre class="devsite-click-to-copy">
+<code class="devsite-terminal">. build/envsetup.sh</code>
+<code class="devsite-terminal">apas LiveTv x86</code>
+<code class="devsite-terminal">make LiveTv</code>
 </pre>
 
 
@@ -108,14 +108,16 @@
 
 <p>To push Live TV to your test device:</p>
 
-<pre>
-$ adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk
+<pre class="devsite-terminal devsite-click-to-copy">
+adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk
 </pre>
 
 <p>If the developer wants the LIVE TV app to have system permissions, the first time it
 is installed it needs to be pushed to /system/priv-app with:</p>
 
-<pre>adb push $OUT/system/priv-app/LiveTv/LiveTv.apk  /system/priv-app/LiveTv/</pre>
+<pre class="devsite-terminal devsite-click-to-copy">
+adb push $OUT/system/priv-app/LiveTv/LiveTv.apk  /system/priv-app/LiveTv/
+</pre>
 
 <h2 id=test>Test</h2>
 
@@ -129,8 +131,8 @@
 <p>There are unit and functional tests for the Live TV app. You must have a
 device (or emulator) connected to run the tests.</p>
 
-<pre>
-$ adb shell logcat -c
+<pre class="devsite-terminal devsite-click-to-copy">
+adb shell logcat -c
 m LiveTv TVTestInput TVUnitTests -j20 &&\
 adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk &&\
 adb install -r -d $OUT/system/app/TVTestInput/TVTestInput.apk && \
@@ -148,7 +150,7 @@
 
 <h3 id=functional_tests>Functional Tests</h3>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 $ adb shell logcat -c
 m LiveTv TVTestInput TVFuncTests -j20 &&\
 adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk &&\
@@ -170,7 +172,7 @@
 
 <p>The Jank tests look for dropped frames and delays in rendering.</p>
 
-<pre>
+<pre class="devsite-terminal devsite-click-to-copy">
 $ adb shell logcat -c
 m LiveTv TVTestInput TVJankTests -j20 &&\
 adb install -r -d $OUT/system/priv-app/LiveTv/LiveTv.apk &&\
diff --git a/en/security/overview/acknowledgements.html b/en/security/overview/acknowledgements.html
index 7524e93..1460e75 100644
--- a/en/security/overview/acknowledgements.html
+++ b/en/security/overview/acknowledgements.html
@@ -71,13 +71,13 @@
 
 <p>Daxing Guo (<a href="https://twitter.com/freener0">@freener0</a>) of Xuanwu
   Lab, Tencent</p>
-  
+
 <p><a href="mailto:[email protected]">derrek</a>
   (<a href="https://twitter.com/derrekr6">@derrekr6</a>)</p>
-  
+
 <p>Di Shen (<a href="https://twitter.com/returnsme">@returnsme</a>) of KeenLab
   (<a href="https://twitter.com/keen_lab">@keen_lab</a>), Tencent</p>
-  
+
 <p>donfos (Aravind Machiry) of Shellphish Grill Team, UC Santa Barbara</p>
 
 <p><a href="http://www.linkedin.com/in/dzima">Dzmitry Lukyanenka</a></p>
@@ -136,7 +136,7 @@
 
 <p>Jianqiang Zhao (<a href="https://twitter.com/jianqiangzhao">@jianqiangzhao</a>)
    of IceSword Lab, Qihoo 360</p>
-   
+
 <p>Jon Sawyer (<a href="http://twitter.com/jcase">@jcase</a>)</p>
 
 <p>Juhu Nie of Xiaomi Inc.</p>
@@ -192,10 +192,10 @@
 
 <p>Peter Pi (<a href="https://twitter.com/heisecode">@heisecode</a>)
    of Trend Micro</p>
-  
+
 <p><a href="http://weibo.com/jfpan">pjf</a> of IceSword Lab, Qihoo 360
   Technology Co. Ltd.</p>
-  
+
 <p>Qidan He (何淇丹) (<a href="https://twitter.com/flanker_hqd">@flanker_hqd</a>)
   of KeenLab, Tencent (腾讯科恩实验室)</p>
 
@@ -204,8 +204,8 @@
 <p>Qiwu Huang of Xiaomi Inc.</p>
 
 <p>Quhe of Ant-financial Light-Year Security Lab (蚂蚁金服巴斯光年安全实验室)</p>
- 
-<p>Roee Hay of IBM Security X-Force</p>
+
+<p>Roee Hay of <a href="https://alephsecurity.com/">Aleph Research</a>, HCL Technologies</p>
 
 <p>Sagi Kedmi of IBM X-Force Research</p>
 
@@ -226,7 +226,7 @@
 
 <p><a href="mailto:[email protected]">Stéphane Marques</a> of <a
 href="http://www.byterev.com">ByteRev</a></p>
- 
+
 <p>Stephen Morrow</p>
 
 <p>Svetoslav Ganov of Google</p>
@@ -244,10 +244,10 @@
   Research Team, <a href="http://www.trendmicro.com">Trend Micro</a></p>
 
 <p>wanchouchou of Ant-financial Light-Year Security Lab (蚂蚁金服巴斯光年安全实验室)</p>
- 
+
 <p>Weichao Sun (<a href="https://twitter.com/sunblate">@sunblate</a>) of
   Alibaba Inc.</p>
-  
+
 <p><a href="mailto:[email protected]">Wenke Dou</a> of
    <a href="http://c0reteam.org">C0RE Team</a></p>
 
@@ -257,7 +257,7 @@
 <p>Wish Wu (<a href="https://twitter.com/wish_wu">@wish_wu</a>)
 (<a href="http://www.weibo.com/wishlinux">吴潍浠</a> 此彼) of Ant-financial Light-Year
   Security Lab</p>
-  
+
 <p><a href="mailto:[email protected]">Xiaodong Wang</a>
 of <a href="http://c0reteam.org">C0RE Team</a></p>
 
@@ -278,7 +278,7 @@
 
 <p><a href="mailto:[email protected]">Yao Jun</a> of
    <a href="http://c0reteam.org">C0RE Team</a></p>
-   
+
 <p>Yong Wang (王勇) (<a href="https://twitter.com/ThomasKing2014">@ThomasKing2014</a>)
    of Alibaba Inc.</p>
 
@@ -288,7 +288,7 @@
 <p>Dr. Yossi Oren of Ben Gurion University Cyber Lab</p>
 
 <p>Yu Pan of Vulpecker Team, Qihoo 360 Technology Co. Ltd</p>
- 
+
 <p><a href="mailto:[email protected]">Yuan-Tsung Lo</a> of
    <a href="http://c0reteam.org">C0RE Team</a></p>
 
@@ -297,14 +297,14 @@
 
 <p>Yuxiang Li (<a href="https://twitter.com/xbalien29">@Xbalien29</a>) of
   Tencent Security Platform Department</p>
-  
+
 <p>Zhanpeng Zhao (行之) (<a href="https://twitter.com/0xr0ot">@0xr0ot</a>) of
   Security Research Lab, <a href="http://www.cmcm.com/">Cheetah Mobile</a></p>
 
 <p><a href="mailto:[email protected]">Zhen Zhou</a> (
  <a href="https://twitter.com/henices">@henices</a>) of 
  <a href="http://www.nsfocus.com">NSFocus</a></p>
-  
+
  <p><a href="mailto:[email protected]">Zhixin Li</a> of 
  <a href="http://www.nsfocus.com">NSFocus</a></p>
 
@@ -314,7 +314,7 @@
  <p>Zubin Mithra of Google</p>
 
  </div>
- 
+
 <h2 id="2016">2016</h2>
 
 <div style="LINE-HEIGHT:25px;">
diff --git a/en/source/jack.html b/en/source/jack.html
index 7c3e952..b7f3f5a 100644
--- a/en/source/jack.html
+++ b/en/source/jack.html
@@ -28,9 +28,10 @@
 <p class="warning">
   <b>The Jack toolchain is deprecated</b>, as per
   <a href="https://android-developers.googleblog.com/2017/03/future-of-java-8-language-feature.html">
-  this announcement</a>. However, you may continue to use it to
-  <a href="https://developer.android.com/preview/j8-jack.html">enable Java 8 language features</a>
-  until the replacement is available.
+  this announcement</a>. You may continue to use it or try the latest
+  <a href="https://developer.android.com/studio/preview/index.html">preview version of
+  Android Studio</a>, which provides improved support for <a href="https://developer.android.com/studio/preview/features/java8-support.html">
+  Java 8 language features built into the default toolchain</a>.
 </p>
 
 <p>Jack is an Android toolchain that compiles Java