Merge "Docs: Changes to Storage section for M" into mnc-dev
diff --git a/src/compatibility/android-cdd.html b/src/compatibility/android-cdd.html
index 276bb5a..1d46261 100644
--- a/src/compatibility/android-cdd.html
+++ b/src/compatibility/android-cdd.html
@@ -350,7 +350,7 @@
 implementer to ensure compatibility with existing implementations.</p>
 
 <p>For this reason, the Android Open Source Project [<a href="http://source.android.com/">Resources, 2</a>] is both the reference and preferred implementation of Android. Device
-implementers are strongly encouraged to base their implementations to the
+implementers are STRONGLY RECOMMENDED to base their implementations to the
 greatest extent possible on the &ldquo;upstream&rdquo; source code available from the
 Android Open Source Project. While some components can hypothetically be
 replaced with alternate implementations this practice is strongly discouraged,
@@ -595,13 +595,13 @@
     <td>VERSION.SDK</td>
     <td>The version of the currently-executing Android system, in a format accessible
 to third-party application code. For Android ANDROID_VERSION, this field MUST have the
-integer value 22.</td>
+integer value ANDROID_VERSION_INT.</td>
  </tr>
  <tr>
     <td>VERSION.SDK_INT</td>
     <td>The version of the currently-executing Android system, in a format accessible
 to third-party application code. For Android ANDROID_VERSION, this field MUST have the
-integer value 22.</td>
+integer value ANDROID_VERSION_INT.</td>
  </tr>
  <tr>
     <td>VERSION.INCREMENTAL</td>
@@ -917,7 +917,7 @@
 implemented.</p>
 
 <p>Native code compatibility is challenging. For this reason, device implementers
-are <strong>very strongly encouraged</strong> to use the implementations of the libraries listed above from the upstream
+are <strong>STRONGLY RECOMMENDED</strong> to use the implementations of the libraries listed above from the upstream
 Android Open Source Project. </p>
 
 <h3 id="3_3_2_32-bit_arm_native_code_compatibility">
@@ -975,14 +975,12 @@
 build from the upstream Android Open Source Project for Android ANDROID_VERSION. This build
 includes a specific set of functionality and security fixes for the WebView [<a href="http://www.chromium.org/">Resources, 13</a>].</li>
   <li>The user agent string reported by the WebView MUST be in this format:
-<p>Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD)$(WEBVIEW))
+<p>Mozilla/5.0 (Linux; Android $(VERSION); $(MODEL) Build/$(BUILD); wv)
 AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile
 Safari/537.36</p>
   <ul>
     <li>The value of the $(VERSION) string MUST be the same as the value for
 android.os.Build.VERSION.RELEASE.</li>
-    <li>The $(WEBVIEW) string MAY be omitted, but if included MUST be "; wv" to
-        note that this is a webview</li>
     <li>The value of the $(MODEL) string MUST be the same as the value for
 android.os.Build.MODEL.</li>
     <li>The value of the $(BUILD) string MUST be the same as the value for
@@ -1435,7 +1433,7 @@
 interacts with screens.</li>
 </ul>
 
-<p>Device implementations are STRONGLY ENCOURAGED to use the upstream Android user
+<p>Device implementations are STRONGLY RECOMMENDED to use the upstream Android user
 interface (or a similar thumbnail-based interface) for the overview screen.</p>
 
 <h3 id="3_8_9_input_management">3.8.9. Input Management</h3>
@@ -1725,8 +1723,8 @@
     <td></td>
     <td>REQUIRED <br>(Android 3.1+)</td>
     <td>Mono/Stereo (no multichannel). Sample rates up to 48 kHz (but up to 44.1 kHz is
-recommended on devices with 44.1 kHz output, as the 48 to 44.1 kHz downsampler
-does not include a low-pass filter). 16-bit recommended; no dither applied for
+RECOMMENDED on devices with 44.1 kHz output, as the 48 to 44.1 kHz downsampler
+does not include a low-pass filter). 16-bit RECOMMENDED; no dither applied for
 24-bit.</td>
     <td>FLAC (.flac) only</td>
  </tr>
@@ -1917,7 +1915,7 @@
 
 <p class="table_footnote">4 Device implementations SHOULD support writing Matroska WebM files.</p>
 
-<p class="table_footnote">5 Strongly recommended for Android Automotive, optional for Android Watch, and required for all other device types.</p>
+<p class="table_footnote">5 STRONGLY RECOMMENDED for Android Automotive, optional for Android Watch, and required for all other device types.</p>
 
 <h2 id="5_2_video_encoding">5.2. Video Encoding</h2>
 
@@ -2193,7 +2191,7 @@
 
 <p>While some of the requirements outlined in this section are stated as SHOULD
 since Android 4.3, the Compatibility Definition for a future version is planned
-to change these to MUST. Existing and new Android devices are <strong>very strongly encouraged</strong> to meet these requirements, or they will not be able to attain Android
+to change these to MUST. Existing and new Android devices are <strong>STRONGLY RECOMMENDED</strong> to meet these requirements, or they will not be able to attain Android
 compatibility when upgraded to the future version.</p>
 
 <h3 id="5_4_1_raw_audio_capture">5.4.1. Raw Audio Capture</h3>
@@ -2341,7 +2339,7 @@
 NDK_root/docs/opensles/index.html.</li>
 </ul>
 
-<p>Device implementations that declare android.hardware.audio.output SHOULD meet
+<p>Device implementations that declare android.hardware.audio.output are STRONGLY RECOMMENDED to meet
 or exceed these audio output requirements:</p>
 
 <ul>
@@ -2358,7 +2356,7 @@
 android.content.pm.PackageManager class [<a href="http://developer.android.com/reference/android/content/pm/PackageManager.html">Resources, 53</a>]. Conversely, if the device implementation does not meet these requirements it
 MUST NOT report support for low-latency audio.</p>
 
-<p>Device implementations that include android.hardware.microphone SHOULD meet
+<p>Device implementations that include android.hardware.microphone are STRONGLY RECOMMENDED to meet
 these input audio requirements:</p>
 
 <ul>
@@ -2438,7 +2436,7 @@
 <ul>
 
 <li>
-The device implementation MUST support android.hardware.audio.low_latency
+The device implementation MUST report support for feature android.hardware.audio.low_latency.
 </li>
 
 <li> The continuous round-trip audio latency, as defined in section 5.6 Audio Latency,
@@ -2447,7 +2445,7 @@
 </li>
 
 <li>
-If the device implementation includes a 4 conductor 3.5mm audio jack,
+If the device includes a 4 conductor 3.5mm audio jack,
 the continuous round-trip audio latency MUST be 20 milliseconds or less over the audio jack path,
 and SHOULD be 10 milliseconds or less over at the audio jack path.
 </li>
@@ -2463,7 +2461,7 @@
 
 <li>
 If the device includes an HDMI port, the device implementation
-MUST support output in stereo and 8 channels
+MUST support output in stereo and eight channels
 at 20-bit or 24-bit depth and 192 kHz without bit-depth loss or resampling.
 </li>
 
@@ -2471,6 +2469,14 @@
 The device implementation MUST report support for feature android.software.midi.
 </li>
 
+<li>
+If the device includes a 4 conductor 3.5mm audio jack,
+the device implementation is STRONGLY RECOMMENDED to comply with section
+<a href="https://source.android.com/accessories/headset/specification.html#mobile_device_jack_specifications">Mobile device (jack) specifications</a>
+of the
+<a href="https://source.android.com/accessories/headset/specification.html">Wired Audio Headset Specification (v1.1)</a>.
+</li>
+
 </ul>
 
 <h1 id="6_developer_tools_and_options_compatibility">6. Developer Tools and Options Compatibility</h1>
@@ -3203,7 +3209,7 @@
   <li>SHOULD report the event time in nanoseconds as defined in the Android SDK
 documentation, representing the time the event happened and synchronized with
 the SystemClock.elapsedRealtimeNano() clock. Existing and new Android devices
-are <strong>very strongly encouraged</strong> to meet these requirement so they will be able to upgrade to the future
+are <strong>STRONGLY RECOMMENDED</strong> to meet these requirement so they will be able to upgrade to the future
 platform releases where this might become a REQUIRED component. The
 synchronization error SHOULD be below 100 milliseconds [<a href="http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp">Resources, 75</a>].</li>
 </ul>
@@ -3238,7 +3244,7 @@
 
 
 <p>Device implementations SHOULD include a 3-axis accelerometer. Android Handheld
-devices and Android Watch devices are strongly encouraged to include this
+devices and Android Watch devices are STRONGLY RECOMMENDED to include this
 sensor. If a device implementation does include a 3-axis accelerometer, it:</p>
 
 <ul>
@@ -3262,14 +3268,14 @@
 period of at least 3 seconds at the fastest sampling rate.</li>
   <li>SHOULD implement the TYPE_SIGNIFICANT_MOTION, TYPE_TILT_DETECTOR,
 TYPE_STEP_DETECTOR, TYPE_STEP_COUNTER composite sensors as described in the
-Android SDK document. Existing and new Android devices are <strong>very strongly encouraged</strong> to implement the TYPE_SIGNIFICANT_MOTION composite sensor. If any of these
+Android SDK document. Existing and new Android devices are <strong>STRONGLY RECOMMENDED</strong> to implement the TYPE_SIGNIFICANT_MOTION composite sensor. If any of these
 sensors are implemented, the sum of their power consumption MUST always be less
 than 4 mW and SHOULD each be below 2 mW and 0.5 mW for when the device is in a
 dynamic or static condition.</li>
   <li>If a gyroscope sensor is included, MUST implement the TYPE_GRAVITY and
 TYPE_LINEAR_ACCELERATION composite sensors and SHOULD implement the
 TYPE_GAME_ROTATION_VECTOR composite sensor. Existing and new Android devices
-are strongly encouraged to implement the TYPE_GAME_ROTATION_VECTOR sensor.</li>
+are STRONGLY RECOMMENDED to implement the TYPE_GAME_ROTATION_VECTOR sensor.</li>
   <li>SHOULD implement a TYPE_ROTATION_VECTOR composite sensor, if a gyroscope sensor
 and a magnetometer sensor is also included.</li>
 </ul>
@@ -3283,7 +3289,7 @@
 <ul>
   <li>MUST implement the TYPE_MAGNETIC_FIELD sensor and SHOULD also implement
 TYPE_MAGNETIC_FIELD_UNCALIBRATED sensor. Existing and new Android devices are
-strongly encouraged to implement the TYPE_MAGNETIC_FIELD_UNCALIBRATED sensor.</li>
+STRONGLY RECOMMENDED to implement the TYPE_MAGNETIC_FIELD_UNCALIBRATED sensor.</li>
   <li>MUST be able to report events up to a frequency of at least 10 Hz and SHOULD
 report events up to at least 50 Hz.</li>
   <li>MUST comply with the Android sensor coordinate system as detailed in the
@@ -3327,7 +3333,7 @@
 <ul>
   <li>MUST implement the TYPE_GYROSCOPE sensor and SHOULD also implement
 TYPE_GYROSCOPE_UNCALIBRATED sensor. Existing and new Android devices are
-strongly encouraged to implement the SENSOR_TYPE_GYROSCOPE_UNCALIBRATED sensor.</li>
+STRONGLY RECOMMENDED to implement the SENSOR_TYPE_GYROSCOPE_UNCALIBRATED sensor.</li>
   <li>MUST be capable of measuring orientation changes up to 1,000 degrees per second.</li>
   <li>MUST be able to report events up to a frequency of at least 50 Hz for
   Android Watch devices as such devices have a stricter power constraint and 
@@ -3347,7 +3353,7 @@
   <li>If an accelerometer sensor is included, MUST implement the TYPE_GRAVITY and
 TYPE_LINEAR_ACCELERATION composite sensors and SHOULD implement the
 TYPE_GAME_ROTATION_VECTOR composite sensor. Existing and new Android devices
-are strongly encouraged to implement the TYPE_GAME_ROTATION_VECTOR sensor.</li>
+are STRONGLY RECOMMENDED to implement the TYPE_GAME_ROTATION_VECTOR sensor.</li>
 </ul>
 
 <h3 id="7_3_5_barometer">7.3.5. Barometer</h3>
@@ -3901,7 +3907,7 @@
 implementations MUST have at least 1.5GB of non-volatile storage available for
 application private data. That is, the /data partition MUST be at least 5GB for
 Android Television devices and at least 1.5GB for other device implementations.
-Device implementations that run Android are <strong>very strongly encouraged</strong> to have at least 3GB of non-volatile storage for application private data so
+Device implementations that run Android are <strong>STRONGLY RECOMMENDED</strong> to have at least 3GB of non-volatile storage for application private data so
 they will be able to upgrade to the future platform releases.</p>
 
 <p>The Android APIs include a Download Manager that applications MAY use to
@@ -3979,12 +3985,12 @@
   <li>The port MUST be connectable to a USB host that has a standard type-A or type
 -C USB port.</li>
   <li>The port SHOULD use micro-A, micro-AB or type-C USB form factor. Existing and
-new Android devices are <strong>very strongly encouraged to meet these requirements</strong> so they will be able to upgrade to the future platform releases.</li>
+new Android devices are <strong>STRONGLY RECOMMENDED to meet these requirements</strong> so they will be able to upgrade to the future platform releases.</li>
   <li>The port SHOULD be centered in the middle of an edge. Device implementations
 SHOULD either locate the port on the bottom of the device (according to natural
 orientation) or enable software screen rotation for all apps (including home
 screen), so that the display draws correctly when the device is oriented with
-the port at bottom. Existing and new Android devices are <strong>very strongly encouraged to meet these requirements</strong> so they will be able to upgrade to future platform releases.</li>
+the port at bottom. Existing and new Android devices are <strong>STRONGLY RECOMMENDED to meet these requirements</strong> so they will be able to upgrade to future platform releases.</li>
   <li>It MUST allow a USB host connected with the Android device to access the
 contents of the shared storage volume using either USB mass storage or Media
 Transfer Protocol.</li>
@@ -3998,7 +4004,7 @@
 documentation [<a href="http://developer.android.com/reference/android/hardware/usb/UsbConstants.html#USB_CLASS_AUDIO">Resources, 98</a>].</li>
   </ul></li>
   <li>It SHOULD implement support to draw 1.5 A current during HS chirp and traffic
-as specified in the USB battery charging specification [<a href="http://www.usb.org/developers/docs/devclass_docs/USB_Battery_Charging_1.2.pdf">Resources, 99</a>]. Existing and new Android devices are <strong>very strongly encouraged to meet these requirements</strong> so they will be able to upgrade to the future platform releases.</li>
+as specified in the USB battery charging specification [<a href="http://www.usb.org/developers/docs/devclass_docs/USB_Battery_Charging_1.2.pdf">Resources, 99</a>]. Existing and new Android devices are <strong>STRONGLY RECOMMENDED to meet these requirements</strong> so they will be able to upgrade to the future platform releases.</li>
   <li>The value of iSerialNumber in USB standard device descriptor MUST be equal to
 the value of android.os.Build.SERIAL.</li>
 </ul>
@@ -4413,7 +4419,7 @@
 <p>Device implementations MUST pass all tests described in this section.</p>
 
 <p>However, note that no software test package is fully comprehensive. For this
-reason, device implementers are <strong>very strongly encouraged</strong> to make the minimum number of changes as possible to the reference and
+reason, device implementers are <strong>STRONGLY RECOMMENDED</strong> to make the minimum number of changes as possible to the reference and
 preferred implementation of Android available from the Android Open Source
 Project. This will minimize the risk of introducing bugs that create
 incompatibilities requiring rework and potential device updates.</p>
diff --git a/src/devices/devices_toc.cs b/src/devices/devices_toc.cs
index 63aaee9..35525d4 100644
--- a/src/devices/devices_toc.cs
+++ b/src/devices/devices_toc.cs
@@ -329,7 +329,7 @@
                   </div>
                   <ul>
                     <li><a href="<?cs var:toroot ?>devices/tech/security/authentication/km-features.html">Features</a></li>
-                    <li><a href="<?cs var:toroot ?>devices/tech/security/authentication/km-implementer.html">Implementer's Reference</a></li>
+                    <li><a href="<?cs var:toroot ?>devices/tech/security/authentication/km-implementer-ref.html">Implementer's Reference</a></li>
                   </ul>
                 </li>
               </ul>
diff --git a/src/devices/tech/security/authentication/gatekeeper.jd b/src/devices/tech/security/authentication/gatekeeper.jd
index 1a7fdb3..9d760bc 100644
--- a/src/devices/tech/security/authentication/gatekeeper.jd
+++ b/src/devices/tech/security/authentication/gatekeeper.jd
@@ -38,8 +38,8 @@
 send to <a href="keymaster.html">Keymaster</a>. That is, a
 Gatekeeper attestation notifies Keymaster that authentication-bound keys (for
 example, keys that apps have created) can be released for use by apps.</p>
-link
-<h2 id=architecture>Architecture </h2>
+
+<h2 id=architecture>Architecture</h2>
 
 <p>Gatekeeper involves three main components:</p>
 
@@ -66,7 +66,7 @@
 See <a href="#trusty_and_other_implementations">Trusty and other implementations</a>.
 </ul>
 
-<p>As shown in the following diagram, the LockSettingsService makes a request (via
+<p>As shown in the following diagram, the <code>LockSettingsService</code> makes a request (via
 Binder) that reaches the <code>gatekeeperd</code> daemon in the Android OS. The <code>gatekeeperd</code>
 daemon makes a request that reaches its counterpart (Gatekeeper) in the TEE.</p>
 
@@ -180,8 +180,7 @@
 the password verification succeeds, the failure counter should be cleared. This
 prevents attacks that prevent throttling by disabling the embedded MMC (eMMC)
 after issuing a <code>verify</code> call. The <code>enroll</code> function also verifies
-the user password (if provided) and so must be
-throttled in the same way.</p>
+the user password (if provided) and so must be throttled in the same way.</p>
 
 <p>If supported by the device, it is highly recommended that the failure counter
 be written to secure storage. If the device does not support
diff --git a/src/devices/tech/security/authentication/index.jd b/src/devices/tech/security/authentication/index.jd
index a47873b..86564eb 100644
--- a/src/devices/tech/security/authentication/index.jd
+++ b/src/devices/tech/security/authentication/index.jd
@@ -43,11 +43,11 @@
 state with the keystore service via an authenticated channel.</p>
 
 <ul>
-  <li><strong>The keystore service and Keymaster.</strong> Cryptographic services,
+  <li><strong>The keystore service and <a href="keymaster.html">Keymaster</a>.</strong> Cryptographic services,
    including hardware-backed cryptography for key storage,
    which might include a Trusted Execution Environment (TEE).</li>
-  <li><a href="gatekeeper.html"><strong>Gatekeeper</strong></a>. Components for PIN, pattern, and password authentication.</li>
-  <li><strong>Fingerprint.</strong> Components for fingerprint authentication.</li>
+  <li><strong><a href="gatekeeper.html">Gatekeeper</a>.</strong> Components for PIN, pattern, and password authentication.</li>
+  <li><strong><a href="fingerprint-hal.html">Fingerprint</a>.</strong> Components for fingerprint authentication.</li>
 </ul>
 
 <h2 id=architecture>Architecture</h2>