Merge changes from topic "presubmit-am-53ab77861524469e9de71f3ed0f3399c" into sc-qpr1-dev am: 1b857d20ac am: 0522bb8e22

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/15898513

Change-Id: Ic4f6585b012b3331669ff3e4cc5186c6ef17b8df
diff --git a/Android.bp b/Android.bp
index bb9db22..dce25d7 100644
--- a/Android.bp
+++ b/Android.bp
@@ -73,6 +73,7 @@
         "android.hardware.dumpstate-V1.0-java",
         "android.hardware.dumpstate-V1.1-java",
         "lottie",
+        "windowExtLib",
     ],
 
     libs: [
@@ -101,6 +102,10 @@
     ],
     static_libs: ["Settings-core"],
     uses_libs: ["org.apache.http.legacy"],
+    optional_uses_libs: [
+        "androidx.window.extensions",
+        "androidx.window.sidecar",
+    ],
     resource_dirs: [],
     optimize: {
         proguard_flags_files: ["proguard.flags"],
@@ -112,6 +117,11 @@
     aars: ["libs/contextualcards.aar"],
 }
 
+android_library_import {
+    name: "windowExtLib",
+    aars: ["libs/window_ext_lib.aar"],
+}
+
 filegroup {
     name: "Settings_proguard_flags",
     srcs: ["proguard.flags"],
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index cd6db0f..d2a9c75 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -107,8 +107,12 @@
     <uses-permission android:name="android.permission.READ_DREAM_STATE" />
     <uses-permission android:name="android.permission.READ_DREAM_SUPPRESSION" />
     <uses-permission android:name="android.permission.MANAGE_APP_HIBERNATION" />
+    <uses-permission android:name="android.permission.LAUNCH_TWO_PANE_SETTINGS_DEEP_LINK" />
+    <uses-permission android:name="android.permission.ALLOW_PLACE_IN_TWO_PANE_SETTINGS" />
 
-    <application android:label="@string/settings_label"
+    <application
+            android:name=".SettingsApplication"
+            android:label="@string/settings_label"
             android:icon="@drawable/ic_launcher_settings"
             android:theme="@style/Theme.Settings"
             android:hardwareAccelerated="true"
@@ -120,7 +124,10 @@
             android:directBootAware="true"
             android:appComponentFactory="androidx.core.app.CoreComponentFactory">
 
-        <uses-library android:name="org.apache.http.legacy" />
+        <uses-library android:name="org.apache.http.legacy"/>
+        <uses-library android:name="androidx.window.extensions" android:required="false"/>
+        <uses-library android:name="androidx.window.sidecar" android:required="false"/>
+
         <!-- Settings -->
 
         <activity android:name=".homepage.SettingsHomepageActivity"
@@ -129,7 +136,7 @@
                   android:taskAffinity="com.android.settings.root"
                   android:launchMode="singleTask"
                   android:exported="true"
-                  android:configChanges="keyboard|keyboardHidden">
+                  android:configChanges="keyboard|keyboardHidden|screenSize|screenLayout">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -167,6 +174,17 @@
             <meta-data android:name="android.app.shortcuts" android:resource="@xml/shortcuts"/>
         </activity-alias>
 
+        <!-- Alias for SettingsHomepageActivity which works for deep link page in 2-panel. -->
+        <activity-alias android:name="DeepLinkHomepageActivity"
+                android:label="@string/settings_label_launcher"
+                android:exported="true"
+                android:targetActivity=".homepage.SettingsHomepageActivity">
+            <intent-filter>
+                <action android:name="android.settings.SETTINGS_LARGE_SCREEN_DEEP_LINK" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity-alias>
+
         <receiver android:name=".SettingsInitialize"
             android:exported="true">
             <intent-filter>
@@ -1711,11 +1729,6 @@
         </activity>
 
         <activity
-            android:name=".SettingsTutorialDialogWrapperActivity"
-            android:theme="@style/Theme.AlertDialog"
-            android:exported="false"/>
-
-        <activity
             android:name="Settings$TextToSpeechSettingsActivity"
             android:exported="true"
             android:label="@string/tts_settings">
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index a9cd4c6..0b272d9 100644
--- a/color-check-baseline.xml
+++ b/color-check-baseline.xml
@@ -37,22 +37,6 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:color=&quot;@color/notification_importance_selection_bg&quot; />"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/button_border_selected.xml"
-            line="20"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="        android:color=&quot;@color/notification_importance_button_unselected&quot;/>"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -501,6 +485,22 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;fingerprint_enrollment_finish_color_outline&quot;>#669df6&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values-night/colors.xml"
+            line="51"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;confirm_device_credential_transparent_black&quot;>#60000000&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -1893,8 +1893,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_teal&quot;>#ff80cbc4&lt;/color> &lt;!-- Material Teal 200 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;SIM_color_cyan&quot;>#ff006D74&lt;/color> &lt;!-- Material Custom Cyan -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="188"
@@ -1909,8 +1909,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_blue&quot;>#ff90caf9&lt;/color> &lt;!-- Material Blue 200 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;SIM_color_blue800&quot;>#ff185ABC&lt;/color> &lt;!-- Material Blue 800 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="189"
@@ -1925,8 +1925,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_indigo&quot;>#ffc5cae9&lt;/color> &lt;!-- Material Indigo 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;SIM_color_green800&quot;>#ff137333&lt;/color> &lt;!-- Material Green 800 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="190"
@@ -1941,8 +1941,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_purple&quot;>#ffe1bee7&lt;/color> &lt;!-- Material Purple 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;SIM_color_purple800&quot;>#ff7627bb&lt;/color> &lt;!-- Material Purple 800 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="191"
@@ -1957,8 +1957,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_pink&quot;>#fff48fb1&lt;/color> &lt;!-- Material Pink 200 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;SIM_color_pink800&quot;>#ffb80672&lt;/color> &lt;!-- Material Pink 800 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="192"
@@ -1973,8 +1973,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_red&quot;>#ffef9a9a&lt;/color> &lt;!-- Material Red 200 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;SIM_color_orange&quot;>#ff995400&lt;/color> &lt;!-- Material Custom Orange -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="193"
@@ -1989,11 +1989,107 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_cyan&quot;>#ff4DD0E1&lt;/color> &lt;!-- Material Cyan 300 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="196"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_blue&quot;>#ff8AB4F8&lt;/color> &lt;!-- Material Blue 300 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="197"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_green&quot;>#ff81C995&lt;/color> &lt;!-- Material Green 300 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="198"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_purple&quot;>#ffC58AF9&lt;/color> &lt;!-- Material Purple 300 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="199"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_pink&quot;>#ffff8bcb&lt;/color> &lt;!-- Material Pink 300 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="200"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;SIM_dark_mode_color_orange&quot;>#fffcad70&lt;/color> &lt;!-- Material Orange 300 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="201"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;accessibility_feature_background&quot;>#5F6368&lt;/color> &lt;!-- Google grey 700 -->"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="199"
+            line="207"
             column="5"/>
     </issue>
 
@@ -2009,7 +2105,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="200"
+            line="208"
             column="5"/>
     </issue>
 
@@ -2025,7 +2121,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="201"
+            line="209"
             column="5"/>
     </issue>
 
@@ -2041,7 +2137,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="202"
+            line="210"
             column="5"/>
     </issue>
 
@@ -2057,7 +2153,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="204"
+            line="212"
             column="5"/>
     </issue>
 
@@ -2073,7 +2169,23 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="206"
+            line="214"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;fingerprint_enrollment_finish_color_outline&quot;>#1A73E8&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="217"
             column="5"/>
     </issue>
 
@@ -2453,6 +2565,230 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="25"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="25"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="31"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="31"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="34"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="34"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="37"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="37"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="40"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="40"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="43"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="43"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="46"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/fingerprint_enroll_finish.xml"
+            line="46"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="        android:fillColor=&quot;@color/biometric_enroll_intro_color_bar&quot;"
         errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -3573,6 +3909,326 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_three_finger.xml"
+            line="38"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_three_finger.xml"
+            line="38"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_three_finger.xml"
+            line="39"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_three_finger.xml"
+            line="39"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_three_finger.xml"
+            line="52"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_three_finger.xml"
+            line="52"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_three_finger.xml"
+            line="53"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_three_finger.xml"
+            line="53"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_three_finger.xml"
+            line="66"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_three_finger.xml"
+            line="66"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_three_finger.xml"
+            line="67"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_three_finger.xml"
+            line="67"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_two_finger.xml"
+            line="38"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_two_finger.xml"
+            line="38"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_two_finger.xml"
+            line="39"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_two_finger.xml"
+            line="39"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_two_finger.xml"
+            line="52"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0&quot; android:color=&quot;#00669DF6&quot;/>"
+        errorLine2="                                 ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_two_finger.xml"
+            line="52"
+            column="34"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable-night/illustration_accessibility_gesture_two_finger.xml"
+            line="53"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        &lt;item android:offset=&quot;0.695&quot; android:color=&quot;#FF669DF6&quot;/>"
+        errorLine2="                                     ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/illustration_accessibility_gesture_two_finger.xml"
+            line="53"
+            column="38"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    android:background=&quot;#FF80CBC4&quot; >"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -4025,7 +4681,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rAU/strings.xml"
-            line="3041"
+            line="3091"
             column="64"/>
     </issue>
 
@@ -4041,7 +4697,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rCA/strings.xml"
-            line="3041"
+            line="3091"
             column="64"/>
     </issue>
 
@@ -4057,7 +4713,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rGB/strings.xml"
-            line="3041"
+            line="3091"
             column="64"/>
     </issue>
 
@@ -4073,7 +4729,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rIN/strings.xml"
-            line="3041"
+            line="3091"
             column="64"/>
     </issue>
 
@@ -4089,7 +4745,7 @@
         errorLine2="                                                                                                                                                                         ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rXC/strings.xml"
-            line="3041"
+            line="3091"
             column="170"/>
     </issue>
 
@@ -4105,7 +4761,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/strings.xml"
-            line="7016"
+            line="7106"
             column="36"/>
     </issue>
 
@@ -4137,7 +4793,7 @@
         errorLine2="                                           ^">
         <location
             file="res/values/styles.xml"
-            line="430"
+            line="447"
             column="44"/>
     </issue>
 
@@ -4153,7 +4809,7 @@
         errorLine2="                                           ^">
         <location
             file="res/values/styles.xml"
-            line="436"
+            line="453"
             column="44"/>
     </issue>
 
@@ -4169,7 +4825,7 @@
         errorLine2="                                           ^">
         <location
             file="res/values/styles.xml"
-            line="437"
+            line="454"
             column="44"/>
     </issue>
 
@@ -4185,7 +4841,7 @@
         errorLine2="                                        ^">
         <location
             file="res/values-night/themes.xml"
-            line="35"
+            line="37"
             column="41"/>
     </issue>
 
@@ -4201,7 +4857,7 @@
         errorLine2="                                        ^">
         <location
             file="res/values-night/themes.xml"
-            line="35"
+            line="37"
             column="41"/>
     </issue>
 
@@ -4217,7 +4873,7 @@
         errorLine2="                                       ^">
         <location
             file="res/values/themes.xml"
-            line="111"
+            line="114"
             column="40"/>
     </issue>
 
@@ -4233,7 +4889,7 @@
         errorLine2="                                       ^">
         <location
             file="res/values/themes.xml"
-            line="111"
+            line="114"
             column="40"/>
     </issue>
 
@@ -4249,7 +4905,7 @@
         errorLine2="                                        ^">
         <location
             file="res/values/themes.xml"
-            line="132"
+            line="135"
             column="41"/>
     </issue>
 
@@ -4265,7 +4921,7 @@
         errorLine2="                                        ^">
         <location
             file="res/values/themes.xml"
-            line="132"
+            line="135"
             column="41"/>
     </issue>
 
@@ -4281,7 +4937,7 @@
         errorLine2="                                            ^">
         <location
             file="res/values/themes.xml"
-            line="182"
+            line="185"
             column="45"/>
     </issue>
 
@@ -4297,7 +4953,7 @@
         errorLine2="                                                ^">
         <location
             file="res/values/themes.xml"
-            line="183"
+            line="186"
             column="49"/>
     </issue>
 
@@ -4313,7 +4969,7 @@
         errorLine2="                                            ^">
         <location
             file="res/values/themes.xml"
-            line="191"
+            line="194"
             column="45"/>
     </issue>
 
@@ -4329,7 +4985,7 @@
         errorLine2="                                                ^">
         <location
             file="res/values/themes.xml"
-            line="192"
+            line="195"
             column="49"/>
     </issue>
 
@@ -4493,259 +5149,4 @@
             column="5"/>
     </issue>
 
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="25"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="31"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="34"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="37"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="40"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="43"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="46"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="25"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="31"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="34"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="37"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="40"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="43"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        android:fillColor=&quot;@color/fingerprint_enrollment_finish_color_outline&quot;/>"
-        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/fingerprint_enroll_finish.xml"
-            line="46"
-            column="9"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;fingerprint_enrollment_finish_color_outline&quot;>#669df6&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values-night/colors.xml"
-            line="51"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;fingerprint_enrollment_finish_color_outline&quot;>#669df6&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="209"
-            column="5"/>
-    </issue>
 </issues>
diff --git a/libs/window_ext_lib.aar b/libs/window_ext_lib.aar
new file mode 100644
index 0000000..301ff96
--- /dev/null
+++ b/libs/window_ext_lib.aar
Binary files differ
diff --git a/proguard.flags b/proguard.flags
index b66a786..3ed7136 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -66,3 +66,7 @@
 -keepclasseswithmembers class * extends com.android.settings.slices.SliceBackgroundWorker {
     public <init>(android.content.Context, android.net.Uri);
 }
+
+# Keep WM Jetpack classes and callbacks
+-keep class androidx.window.** { *; }
+-dontwarn androidx.window.extensions.**
diff --git a/res/color/preference_highligh_color.xml b/res/color/preference_highlight_color.xml
similarity index 100%
rename from res/color/preference_highligh_color.xml
rename to res/color/preference_highlight_color.xml
diff --git a/res/drawable-night/accessibility_button_navigation.xml b/res/drawable-night/accessibility_button_navigation.xml
new file mode 100644
index 0000000..d6fd485
--- /dev/null
+++ b/res/drawable-night/accessibility_button_navigation.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M325.2,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7v-42.2h239V231.9z"
+      android:fillColor="#3D4043"/>
+  <path
+      android:pathData="M269.7,205.2c1.5,0 2.7,1.2 2.7,2.7s-1.2,2.7 -2.7,2.7c-1.5,0 -2.7,-1.2 -2.7,-2.7S268.2,205.2 269.7,205.2zM273.8,214.7v17.6H271v-8.1h-2.7v8.1h-2.7v-17.6c-2.7,-0.2 -5.6,-0.7 -8.1,-1.4l0.7,-2.7c3.5,0.9 7.7,1.4 11.5,1.4c3.8,0 8,-0.4 11.5,-1.4l0.7,2.7C279.4,214 276.5,214.5 273.8,214.7z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M205.7,219.7m-9.4,0a9.4,9.4 0,1 1,18.8 0a9.4,9.4 0,1 1,-18.8 0"
+      android:fillColor="#808589"/>
+  <path
+      android:pathData="M132.1,219.7l16,9.2l0,-18.5z"
+      android:fillColor="#808589"/>
+  <path
+      android:pathData="M325.4,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7V0h-4.4v231.9c0,12.2 9.9,22.2 22.1,22.2h203.8c12.2,0 22.1,-9.9 22.1,-22.2V14.8c2.4,0 4.4,-2 4.4,-4.4V0h-8.9V231.9z"
+      android:fillColor="#808589"/>
+  <path
+      android:pathData="M269.7,255.3c-19.6,0 -35.6,-16 -35.6,-35.6s16,-35.6 35.6,-35.6s35.6,16 35.6,35.6S289.3,255.3 269.7,255.3zM269.7,187.1c-17.9,0 -32.5,14.6 -32.5,32.5c0,17.9 14.6,32.5 32.5,32.5s32.5,-14.6 32.5,-32.5C302.2,201.7 287.6,187.1 269.7,187.1z"
+      android:fillColor="#729CEE"/>
+</vector>
diff --git a/res/drawable-night/accessibility_button_preview_base.xml b/res/drawable-night/accessibility_button_preview_base.xml
new file mode 100644
index 0000000..a5b0bfa
--- /dev/null
+++ b/res/drawable-night/accessibility_button_preview_base.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M325.4,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7V0h-4.4v231.9c0,12.2 9.9,22.2 22.1,22.2h203.8c12.2,0 22.1,-9.9 22.1,-22.2V14.8c2.4,0 4.4,-2 4.4,-4.4V0h-8.9L325.4,231.9L325.4,231.9z"
+      android:fillColor="#808589"/>
+</vector>
diff --git a/res/drawable-night/accessibility_button_preview_large_floating_menu.xml b/res/drawable-night/accessibility_button_preview_large_floating_menu.xml
new file mode 100644
index 0000000..74ecbfc
--- /dev/null
+++ b/res/drawable-night/accessibility_button_preview_large_floating_menu.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+    <path
+        android:pathData="M325.4,198.2h-40.9c-22.1,0 -40,-18 -40,-40s18,-40 40,-40h40.9v2.6h-40.9c-20.7,0 -37.5,16.8 -37.5,37.5s16.8,37.5 37.5,37.5h40.9V198.2z"
+        android:fillColor="#808589"/>
+    <path
+        android:pathData="M284.3,128.4c-16.5,0 -29.8,13.4 -29.8,29.8c0,16.5 13.4,29.8 29.8,29.8s29.8,-13.4 29.8,-29.8C314.2,141.7 300.9,128.4 284.3,128.4zM284.3,142.7c1.7,0 3.1,1.4 3.1,3.1c0,1.7 -1.4,3.1 -3.1,3.1s-3.1,-1.4 -3.1,-3.1C281.2,144.1 282.7,142.7 284.3,142.7zM289.1,153.7V174H286v-9.4h-3.1v9.4h-3.2v-20.3c-3.1,-0.3 -6.5,-0.8 -9.4,-1.5l0.8,-3.1c4.1,1 8.9,1.5 13.3,1.5s9.2,-0.5 13.3,-1.5l0.8,3.1C295.6,152.9 292.2,153.4 289.1,153.7z"
+        android:fillColor="#D9DBDF"/>
+</vector>
diff --git a/res/drawable-night/accessibility_button_preview_small_floating_menu.xml b/res/drawable-night/accessibility_button_preview_small_floating_menu.xml
new file mode 100644
index 0000000..4226086
--- /dev/null
+++ b/res/drawable-night/accessibility_button_preview_small_floating_menu.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+    <path
+        android:pathData="M325.4,189.2h-31.7c-17.1,0 -31,-13.9 -31,-31s13.9,-31 31,-31h31.7v2h-31.7c-16,0 -29,13 -29,29s13,29 29,29h31.7V189.2z"
+        android:fillColor="#808589"/>
+    <path
+        android:pathData="M293.6,135.1c-12.8,0 -23.1,10.4 -23.1,23.1c0,12.8 10.4,23.1 23.1,23.1s23.1,-10.4 23.1,-23.1C316.7,145.4 306.4,135.1 293.6,135.1zM293.6,146.2c1.3,0 2.4,1.1 2.4,2.4s-1.1,2.4 -2.4,2.4s-2.4,-1.1 -2.4,-2.4S292.3,146.2 293.6,146.2zM297.3,154.7v15.7h-2.4v-7.3h-2.4v7.3H290v-15.7c-2.4,-0.2 -5,-0.6 -7.3,-1.2l0.6,-2.4c3.2,0.8 6.9,1.2 10.3,1.2s7.1,-0.4 10.3,-1.2l0.6,2.4C302.3,154.1 299.7,154.5 297.3,154.7z"
+        android:fillColor="#D9DBDF"/>
+</vector>
diff --git a/res/drawable-night/accessibility_button_preview_three_finger.xml b/res/drawable-night/accessibility_button_preview_three_finger.xml
new file mode 100644
index 0000000..7afb0f7
--- /dev/null
+++ b/res/drawable-night/accessibility_button_preview_three_finger.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M242.5,226.9h-73.3c-1.7,0 -3.1,1.4 -3.1,3.1s1.4,3.1 3.1,3.1h73.3c1.7,0 3.1,-1.4 3.1,-3.1S244.2,226.9 242.5,226.9z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M182.7,222.6v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-2.9,1.2 -4.9,4 -4.9,7.4c0,4.4 3.5,8 8,8c4.4,0 8,-3.5 8,-8C187.6,226.7 185.6,223.8 182.7,222.6z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M209,222.6v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-2.9,1.2 -4.9,4 -4.9,7.4c0,4.4 3.5,8 8,8c4.4,0 8,-3.5 8,-8C213.9,226.7 211.9,223.8 209,222.6z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M235.2,222.6v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-2.9,1.2 -4.9,4 -4.9,7.4c0,4.4 3.5,8 8,8c4.4,0 8,-3.5 8,-8C240,226.7 238,223.8 235.2,222.6z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M325.4,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7V0h-4.4v231.9c0,12.2 9.9,22.2 22.1,22.2h203.8c12.2,0 22.1,-9.9 22.1,-22.2V14.8c2.4,0 4.4,-2 4.4,-4.4V0h-8.9V231.9z"
+      android:fillColor="#80868B"/>
+</vector>
diff --git a/res/drawable-night/accessibility_button_preview_two_finger.xml b/res/drawable-night/accessibility_button_preview_two_finger.xml
new file mode 100644
index 0000000..05871d9
--- /dev/null
+++ b/res/drawable-night/accessibility_button_preview_two_finger.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M325.4,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7V0h-4.4v231.9c0,12.2 9.9,22.2 22.1,22.2h203.8c12.2,0 22.1,-9.9 22.1,-22.2V14.8c2.4,0 4.4,-2 4.4,-4.4V0h-8.9V231.9z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M242.4,226.9h-9.3h-5.6h-43.4h-4.7h-10.2c-1.7,0 -3.1,1.4 -3.1,3.1s1.4,3.1 3.1,3.1h10.2h3.9h45h4.8h9.3c1.7,0 3.1,-1.4 3.1,-3.1S244.1,226.9 242.4,226.9z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M194,223.5v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-1.6,0.7 -2.9,1.9 -3.8,3.4c-0.7,1.2 -1.1,2.5 -1.1,4c0,0.7 0.1,1.5 0.3,2.2c0.9,3.3 4,5.8 7.7,5.8c3.6,0 6.7,-2.5 7.7,-5.8c0.2,-0.7 0.3,-1.4 0.3,-2.2c0,-1.5 -0.4,-2.8 -1.1,-4C197,225.4 195.6,224.2 194,223.5z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M223.7,223.5v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-1.6,0.7 -2.9,1.9 -3.8,3.4c-0.7,1.2 -1.1,2.5 -1.1,4c0,0.7 0.1,1.5 0.3,2.2c0.9,3.3 4,5.8 7.7,5.8c3.6,0 6.7,-2.5 7.7,-5.8c0.2,-0.7 0.3,-1.4 0.3,-2.2c0,-1.5 -0.4,-2.8 -1.1,-4C226.6,225.4 225.3,224.2 223.7,223.5z"
+      android:fillColor="#669DF6"/>
+</vector>
diff --git a/res/drawable-night/accessibility_captions_banner.xml b/res/drawable-night/accessibility_captions_banner.xml
new file mode 100644
index 0000000..7ee30f2
--- /dev/null
+++ b/res/drawable-night/accessibility_captions_banner.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M383.9,300H28.1C12.6,300 0,287.4 0,271.9V28.1C0,12.6 12.6,0 28.1,0h355.8C399.4,0 412,12.6 412,28.1v243.8C412,287.4 399.4,300 383.9,300z"/>
+  <path
+      android:pathData="M79.2,179.6h53.6v8.5h-53.6z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M142.5,179.6h30.4v8.5h-30.4z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M79.2,195.5h79.2v8.5h-79.2z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M168.1,195.5h34.1v8.5h-34.1z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M211.9,195.5h34.1v8.5h-34.1z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M182.7,179.6h73.1v8.5h-73.1z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M265.5,179.6h26.8v8.5h-26.8z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M302.1,179.6h26.8v8.5h-26.8z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M142.7,67.9h-11.5c-1.6,0 -2.9,1.3 -2.9,2.9H67.8c-7.9,0 -14.4,6.5 -14.4,14.4v132.4c0,7.9 6.5,14.4 14.4,14.4h276.4c7.9,0 14.4,-6.5 14.4,-14.4V85.2c0,-7.9 -6.5,-14.4 -14.4,-14.4H203.1c0,-1.6 -1.3,-2.9 -2.9,-2.9h-28.8c-1.6,0 -2.9,1.3 -2.9,2.9h-23C145.5,69.2 144.3,67.9 142.7,67.9zM344.2,73.7c6.4,0 11.5,5.2 11.5,11.5v132.4c0,6.3 -5.2,11.5 -11.5,11.5H67.8c-6.4,0 -11.5,-5.2 -11.5,-11.5V85.2c0,-6.3 5.2,-11.5 11.5,-11.5H344.2z"
+      android:fillColor="#80868B"/>
+</vector>
diff --git a/res/drawable-night/accessibility_shortcut_type_hardware.xml b/res/drawable-night/accessibility_shortcut_type_hardware.xml
new file mode 100644
index 0000000..9ef3664
--- /dev/null
+++ b/res/drawable-night/accessibility_shortcut_type_hardware.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M206.1,19.1c35,0 67.9,13.6 92.6,38.4C323.4,82.1 337,115 337,150s-13.6,67.9 -38.4,92.6C273.9,267.3 241,281 206,281s-67.9,-13.6 -92.6,-38.4C88.8,217.9 75.1,185 75.1,150s13.6,-67.9 38.4,-92.6S171.1,19.1 206.1,19.1M206.1,17.1c-73.4,0 -133,59.5 -133,132.9S132.6,282.9 206,282.9s133,-59.5 133,-132.9S279.5,17.1 206.1,17.1L206.1,17.1z"
+      android:fillColor="#3C4043"/>
+  <path
+      android:pathData="M287,187.8v-1.5h2.9v-13.7c0,-1.6 -1.3,-2.9 -2.9,-2.9v-23.2c1.6,0 2.9,-1.3 2.9,-2.9V132c0,-1.6 -1.3,-2.9 -2.9,-2.9V68.4c0,-8 -6.5,-14.5 -14.5,-14.5H139.4c-8,0 -14.5,6.5 -14.5,14.5v185.3c1,0.7 1.9,1.4 2.9,2.1V68.4c0,-6.4 5.2,-11.6 11.6,-11.6h133.1c6.4,0 11.6,5.2 11.6,11.6v188.7c1,-0.7 1.9,-1.4 2.9,-2.2v-50.5c1.6,0 2.9,-1.3 2.9,-2.9v-13.7H287z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M287,204.4c1.6,0 2.9,-1.3 2.9,-2.9v-14H287v-0.9h2.9v-14c0,-1.6 -1.3,-2.9 -2.9,-2.9"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M825.7,300H469.3c-15.3,0 -27.8,-12.8 -27.8,-28.5v-243C441.5,12.8 454,0 469.3,0h356.5c15.2,0 27.7,12.8 27.7,28.5v243.2C853.5,287.2 841,300 825.7,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M728.5,187.8v-1.5h2.9v-13.7c0,-1.6 -1.3,-2.9 -2.9,-2.9v-23.2c1.6,0 2.9,-1.3 2.9,-2.9V132c0,-1.6 -1.3,-2.9 -2.9,-2.9V68.4c0,-8 -6.5,-14.5 -14.5,-14.5H580.9c-8,0 -14.5,6.5 -14.5,14.5v185.3c1,0.7 1.9,1.4 2.9,2.1V68.4c0,-6.4 5.2,-11.6 11.6,-11.6H714c6.4,0 11.6,5.2 11.6,11.6v188.7c1,-0.7 1.9,-1.4 2.9,-2.2v-50.5c1.6,0 2.9,-1.3 2.9,-2.9v-13.7H728.5z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M728.5,204.4c1.6,0 2.9,-1.3 2.9,-2.9v-14h-2.9v-0.9h2.9v-14c0,-1.6 -1.3,-2.9 -2.9,-2.9"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M648.2,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.6 38.3,57.5 38.3,92.5s-13.6,67.9 -38.4,92.6C716,267.3 683.1,281 648.1,281s-67.9,-13.6 -92.6,-38.4c-24.6,-24.7 -38.3,-57.6 -38.3,-92.6s13.6,-67.9 38.4,-92.6C580.4,32.7 613.2,19.1 648.2,19.1M648.2,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S721.6,17.1 648.2,17.1L648.2,17.1z"
+      android:fillColor="#E8EAED"/>
+</vector>
diff --git a/res/drawable-night/accessibility_shortcut_type_software.xml b/res/drawable-night/accessibility_shortcut_type_software.xml
new file mode 100644
index 0000000..8d55ae9
--- /dev/null
+++ b/res/drawable-night/accessibility_shortcut_type_software.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5V28.5C0,12.8 12.5,0 27.8,0H384.3C399.5,0 412,12.8 412,28.5V271.7C412,287.2 399.5,300 384.2,300Z"/>
+  <path
+      android:pathData="M142,225.3H275.1a14.51,14.51 0,0 0,14.5 -14.5V69a2.9,2.9 0,0 0,2.9 -2.9v-17c-1.9,-1.6 -3.8,-3.2 -5.8,-4.7V210.8a11.61,11.61 0,0 1,-11.6 11.6H142a11.61,11.61 0,0 1,-11.6 -11.6V42.7c-1,0.7 -1.9,1.4 -2.9,2.1V210.9A14.62,14.62 0,0 0,142 225.3Z"
+      android:fillColor="#80868b"/>
+  <path
+      android:pathData="M286.7,210.83a11.59,11.59 0,0 1,-11.58 11.58H142a11.59,11.59 0,0 1,-11.58 -11.58V183.26H286.7Z"
+      android:fillColor="#3c4043"/>
+  <path
+      android:pathData="M250.41,193.38a1.77,1.77 0,1 1,-1.78 1.77A1.77,1.77 0,0 1,250.41 193.38ZM253.07,199.58v11.53h-1.78v-5.32h-1.77v5.32h-1.77L247.75,199.58a30.78,30.78 0,0 1,-5.32 -0.89l0.44,-1.77a32.34,32.34 0,0 0,15.07 0l0.45,1.77A30.78,30.78 0,0 1,253.07 199.58Z"
+      android:fillColor="#fff"/>
+  <path
+      android:pathData="M208.55,202.84m-6.13,0a6.13,6.13 0,1 1,12.26 0a6.13,6.13 0,1 1,-12.26 0"
+      android:fillColor="#80868b"/>
+  <path
+      android:pathData="M250.41,202.84m-22.28,0a22.28,22.28 0,1 1,44.56 0a22.28,22.28 0,1 1,-44.56 0"
+      android:strokeWidth="2"
+      android:fillColor="#00000000"
+      android:strokeColor="#669df6"/>
+  <path
+      android:pathData="M160.45,202.84l10.43,6.02l0,-12.05l-10.43,6.03z"
+      android:fillColor="#80868b"/>
+  <path
+      android:pathData="M207.4,19.1a131.11,131.11 0,0 1,131 131,131 131,0 0,1 -262,-0.1 130.94,130.94 0,0 1,131 -130.9m0,-2A132.9,132.9 0,1 0,340.3 150,133 133,0 0,0 207.4,17.1Z"
+      android:fillColor="#3c4043"/>
+</vector>
diff --git a/res/drawable-night/accessibility_shortcut_type_software_floating.xml b/res/drawable-night/accessibility_shortcut_type_software_floating.xml
new file mode 100644
index 0000000..25d53ca
--- /dev/null
+++ b/res/drawable-night/accessibility_shortcut_type_software_floating.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5V28.5C0,12.8 12.5,0 27.8,0H384.3C399.5,0 412,12.8 412,28.5V271.7C412,287.2 399.5,300 384.2,300Z"/>
+  <path
+      android:pathData="M142,225.3H275.1a14.51,14.51 0,0 0,14.5 -14.5V69a2.9,2.9 0,0 0,2.9 -2.9v-17c-1.9,-1.6 -3.8,-3.2 -5.8,-4.7V210.8a11.61,11.61 0,0 1,-11.6 11.6H142a11.61,11.61 0,0 1,-11.6 -11.6V42.7c-1,0.7 -1.9,1.4 -2.9,2.1V210.9A14.62,14.62 0,0 0,142 225.3Z"
+      android:fillColor="#80868b"/>
+  <path
+      android:strokeWidth="1"
+      android:pathData="M286.7,144.13H266a19.63,19.63 0,1 0,0 39.26H286.7"
+      android:fillColor="#00000000"
+      android:strokeColor="#80868b"/>
+  <path
+      android:pathData="M266,148.65a15.11,15.11 0,1 0,15.1 15.11A15.11,15.11 0,0 0,266 148.65ZM266,155.93a1.59,1.59 0,0 1,0 3.17,1.59 1.59,0 1,1 0,-3.17ZM268.37,161.47v10.29h-1.58L266.79,167h-1.59v4.75h-1.58L263.62,161.47a27.23,27.23 0,0 1,-4.75 -0.79l0.4,-1.58a29.06,29.06 0,0 0,13.46 0l0.39,1.58A27.23,27.23 0,0 1,268.33 161.47Z"
+      android:fillColor="#dadce0"/>
+  <path
+      android:pathData="M207.4,19.1a131.11,131.11 0,0 1,131 131,131 131,0 0,1 -262,-0.1 130.94,130.94 0,0 1,131 -130.9m0,-2A132.9,132.9 0,1 0,340.3 150,133 133,0 0,0 207.4,17.1Z"
+      android:fillColor="#3c4043"/>
+</vector>
diff --git a/res/drawable-night/accessibility_shortcut_type_software_gesture.xml b/res/drawable-night/accessibility_shortcut_type_software_gesture.xml
new file mode 100644
index 0000000..9055865
--- /dev/null
+++ b/res/drawable-night/accessibility_shortcut_type_software_gesture.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M139.5,225.3h133.1c8,0 14.5,-6.5 14.5,-14.5V69c1.6,0 2.9,-1.3 2.9,-2.9v-17c-1.9,-1.6 -3.8,-3.2 -5.8,-4.7v166.4c0,6.4 -5.2,11.6 -11.6,11.6H139.5c-6.4,0 -11.6,-5.2 -11.6,-11.6V42.7c-1,0.7 -1.9,1.4 -2.9,2.1v166.1C125.1,218.8 131.6,225.3 139.5,225.3z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M229.9,207.9h-47.8c-1.1,0 -2,0.9 -2,2s0.9,2 2,2h47.8c1.1,0 2,-0.9 2,-2S231,207.9 229.9,207.9z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M198.4,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2s5.2,-2.3 5.2,-5.2C201.6,208.4 200.2,206.5 198.4,205.7z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M217.7,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2s5.2,-2.3 5.2,-5.2C220.9,208.4 219.6,206.5 217.7,205.7z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M206.1,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6s-13.6,67.9 -38.4,92.6c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C88.8,217.9 75.1,185 75.1,150s13.6,-67.9 38.4,-92.6C138.2,32.7 171.1,19.1 206.1,19.1M206.1,17.1c-73.4,0 -133,59.5 -133,132.9S132.6,282.9 206,282.9S339,223.4 339,150S279.5,17.1 206.1,17.1L206.1,17.1z"
+      android:fillColor="#3C4043"/>
+</vector>
diff --git a/res/drawable-night/accessibility_shortcut_type_software_gesture_talkback.xml b/res/drawable-night/accessibility_shortcut_type_software_gesture_talkback.xml
new file mode 100644
index 0000000..0b6f1e6
--- /dev/null
+++ b/res/drawable-night/accessibility_shortcut_type_software_gesture_talkback.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M138,225.3h133.1c8,0 14.5,-6.5 14.5,-14.5V69c1.6,0 2.9,-1.3 2.9,-2.9V45.7c-1.9,-1.5 -3.8,-2.9 -5.8,-4.3v169.4c0,6.4 -5.2,11.6 -11.6,11.6H138c-6.4,0 -11.6,-5.2 -11.6,-11.6V43.5c-1,0.7 -1.9,1.5 -2.9,2.2v165C123.5,218.8 130,225.3 138,225.3z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M206,283.9c-73.9,0 -133.9,-60.1 -133.9,-133.9S132.1,16.1 206,16.1c73.9,0 133.9,60.1 133.9,133.9S279.9,283.9 206,283.9zM206,18.1C133.2,18.1 74.1,77.2 74.1,150S133.2,281.9 206,281.9S337.9,222.8 337.9,150S278.8,18.1 206,18.1z"
+      android:fillColor="#3C4043"/>
+  <path
+      android:pathData="M229.9,207.9h-47.8c-1.1,0 -2,0.9 -2,2s0.9,2 2,2h47.8c1.1,0 2,-0.9 2,-2S231,207.9 229.9,207.9z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M190.9,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2c2.9,0 5.2,-2.3 5.2,-5.2C194.1,208.4 192.8,206.5 190.9,205.7z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M208,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2c2.9,0 5.2,-2.3 5.2,-5.2C211.2,208.4 209.9,206.5 208,205.7z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M225.1,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2c2.9,0 5.2,-2.3 5.2,-5.2C228.2,208.4 226.9,206.5 225.1,205.7z"
+      android:fillColor="#669DF6"/>
+</vector>
diff --git a/res/drawable-night/ic_illustration_fullscreen.xml b/res/drawable-night/ic_illustration_fullscreen.xml
new file mode 100644
index 0000000..c5f1f92
--- /dev/null
+++ b/res/drawable-night/ic_illustration_fullscreen.xml
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M-83.4,-43h-356.4c-15.3,0 -27.8,-12.8 -27.8,-28.5v-243c0,-15.7 12.5,-28.5 27.8,-28.5h356.5c15.2,0 27.7,12.8 27.7,28.5v243.2C-55.6,-55.8 -68.1,-43 -83.4,-43z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M-260.2,-323.9c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6s-13.6,67.9 -38.4,92.6c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4c-24.7,-24.8 -38.4,-57.7 -38.4,-92.7s13.6,-67.9 38.4,-92.6C-328.1,-310.3 -295.2,-323.9 -260.2,-323.9M-260.2,-325.9c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S-186.8,-325.9 -260.2,-325.9L-260.2,-325.9z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M-205.5,-235.3v-7.7c0,-1.1 -0.9,-1.9 -1.9,-1.9v-40.4c0,-5.3 -4.3,-9.6 -9.6,-9.6h-88.5c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C-206.4,-233.4 -205.5,-234.3 -205.5,-235.3zM-209.4,-100.6c0,4.2 -3.5,7.7 -7.7,7.7h-88.5c-4.2,0 -7.7,-3.5 -7.7,-7.7v-184.8c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V-100.6z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M-217.1,-224.1c2,0 3.7,1.7 3.7,3.7v54.8c0,2 -1.7,3.7 -3.7,3.7h-88.5c-2,0 -3.7,-1.7 -3.7,-3.7v-54.8c0,-2 1.7,-3.7 3.7,-3.7H-217.1M-217.1,-228.1h-88.5c-4.2,0 -7.7,3.5 -7.7,7.7v54.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7v-54.8C-209.4,-224.6 -212.8,-228.1 -217.1,-228.1L-217.1,-228.1z"
+      android:fillColor="#F9AB00"/>
+  <path
+      android:pathData="M-230.7,-217.4l11,0l0,11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M-219.7,-217.4L-235.3,-201.8"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M-292.4,-167.9l-10.9,0l0,-11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M-303.3,-167.9L-287.7,-183.5"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,-43H27.8C12.5,-43 0,-55.8 0,-71.5v-243C0,-330.2 12.5,-343 27.8,-343h356.5c15.2,0 27.7,12.8 27.7,28.5v243.2C412,-55.8 399.5,-43 384.2,-43z"/>
+  <path
+      android:pathData="M207.4,-323.9c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6S324.8,-125 300,-100.3c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C90.1,-125.1 76.4,-158 76.4,-193s13.6,-67.9 38.4,-92.6C139.5,-310.3 172.4,-323.9 207.4,-323.9M207.4,-325.9c-73.4,0 -133,59.5 -133,132.9S133.9,-60.1 207.3,-60.1s133,-59.5 133,-132.9S280.8,-325.9 207.4,-325.9L207.4,-325.9z"
+      android:fillColor="#3C4043"/>
+  <path
+      android:pathData="M262.1,-235.3v-7.7c0,-1.1 -0.9,-1.9 -1.9,-1.9v-40.4c0,-5.3 -4.3,-9.6 -9.6,-9.6H162c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C261.2,-233.4 262.1,-234.3 262.1,-235.3zM258.2,-100.6c0,4.2 -3.5,7.7 -7.7,7.7H162c-4.2,0 -7.7,-3.5 -7.7,-7.7v-184.8c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V-100.6z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M250.5,-224.1c2,0 3.7,1.7 3.7,3.7v54.8c0,2 -1.7,3.7 -3.7,3.7H162c-2,0 -3.7,-1.7 -3.7,-3.7v-54.8c0,-2 1.7,-3.7 3.7,-3.7H250.5M250.5,-228.1H162c-4.2,0 -7.7,3.5 -7.7,7.7v54.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7v-54.8C258.2,-224.6 254.8,-228.1 250.5,-228.1L250.5,-228.1z"
+      android:fillColor="#FCC934"/>
+  <path
+      android:pathData="M236.9,-217.4l11,0l0,11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M247.9,-217.4L232.3,-201.8"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M175.2,-167.9l-10.9,0l0,-11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M164.3,-167.9L179.9,-183.5"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,650.3H27.8C12.5,650.3 0,637.5 0,621.8v-243c0,-15.7 12.5,-28.5 27.8,-28.5h356.5c15.2,0 27.7,12.8 27.7,28.5V622C412,637.5 399.5,650.3 384.2,650.3z"/>
+  <path
+      android:pathData="M207.4,369.4c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6c0,35 -13.6,67.9 -38.4,92.6c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4c-24.7,-24.8 -38.4,-57.7 -38.4,-92.7s13.6,-67.9 38.4,-92.6C139.5,383 172.4,369.4 207.4,369.4M207.4,367.4c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S280.8,367.4 207.4,367.4L207.4,367.4z"
+      android:fillColor="#3C4043"/>
+  <path
+      android:pathData="M262.1,458v-7.7c0,-1.1 -0.9,-1.9 -1.9,-1.9V408c0,-5.3 -4.3,-9.6 -9.6,-9.6H162c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C261.2,459.9 262.1,459.1 262.1,458zM258.2,592.7c0,4.2 -3.5,7.7 -7.7,7.7H162c-4.2,0 -7.7,-3.5 -7.7,-7.7V408c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V592.7z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M250.5,404.3c2,0 3.7,1.7 3.7,3.7v184.8c0,2 -1.7,3.7 -3.7,3.7H162c-2,0 -3.7,-1.7 -3.7,-3.7V408c0,-2 1.7,-3.7 3.7,-3.7H250.5M250.5,400.3H162c-4.2,0 -7.7,3.5 -7.7,7.7v184.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7V408C258.2,403.7 254.8,400.3 250.5,400.3L250.5,400.3z"
+      android:fillColor="#FCC934"/>
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M207.4,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6S324.8,218 300,242.7c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C90.1,217.9 76.4,185 76.4,150S90,82.1 114.8,57.4C139.5,32.7 172.4,19.1 207.4,19.1M207.4,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S280.8,17.1 207.4,17.1L207.4,17.1z"
+      android:fillColor="#3C4043"/>
+  <path
+      android:pathData="M262.1,107.7V100c0,-1.1 -0.9,-1.9 -1.9,-1.9V57.6c0,-5.3 -4.3,-9.6 -9.6,-9.6H162c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C261.2,109.6 262.1,108.7 262.1,107.7zM258.2,242.4c0,4.2 -3.5,7.7 -7.7,7.7H162c-4.2,0 -7.7,-3.5 -7.7,-7.7V57.6c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V242.4z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M250.5,53.9c2,0 3.7,1.7 3.7,3.7v184.8c0,2 -1.7,3.7 -3.7,3.7H162c-2,0 -3.7,-1.7 -3.7,-3.7V57.6c0,-2 1.7,-3.7 3.7,-3.7H250.5M250.5,49.9H162c-4.2,0 -7.7,3.5 -7.7,7.7v184.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7V57.6C258.2,53.4 254.8,49.9 250.5,49.9L250.5,49.9z"
+      android:fillColor="#FCC934"/>
+  <path
+      android:pathData="M236.9,60.6l11,0l0,11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M247.9,60.6L232.3,76.2"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M175.2,240.1l-10.9,0l0,-11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M164.3,240.1L179.9,224.5"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M-83.4,300h-356.4c-15.3,0 -27.8,-12.8 -27.8,-28.5v-243c0,-15.7 12.5,-28.5 27.8,-28.5h356.5c15.2,0 27.7,12.8 27.7,28.5v243.2C-55.6,287.2 -68.1,300 -83.4,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M-260.2,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6s-13.6,67.9 -38.4,92.6c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4c-24.7,-24.8 -38.4,-57.7 -38.4,-92.7s13.6,-67.9 38.4,-92.6C-328.1,32.7 -295.2,19.1 -260.2,19.1M-260.2,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S-186.8,17.1 -260.2,17.1L-260.2,17.1z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M-205.5,107.7V100c0,-1.1 -0.9,-1.9 -1.9,-1.9V57.6c0,-5.3 -4.3,-9.6 -9.6,-9.6h-88.5c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C-206.4,109.6 -205.5,108.7 -205.5,107.7zM-209.4,242.4c0,4.2 -3.5,7.7 -7.7,7.7h-88.5c-4.2,0 -7.7,-3.5 -7.7,-7.7V57.6c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V242.4z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M-217.1,53.9c2,0 3.7,1.7 3.7,3.7v184.8c0,2 -1.7,3.7 -3.7,3.7h-88.5c-2,0 -3.7,-1.7 -3.7,-3.7V57.6c0,-2 1.7,-3.7 3.7,-3.7H-217.1M-217.1,49.9h-88.5c-4.2,0 -7.7,3.5 -7.7,7.7v184.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7V57.6C-209.4,53.4 -212.8,49.9 -217.1,49.9L-217.1,49.9z"
+      android:fillColor="#F9AB00"/>
+  <path
+      android:pathData="M-230.7,60.6l11,0l0,11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M-219.7,60.6L-235.3,76.2"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M-292.4,240.1l-10.9,0l0,-11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M-303.3,240.1L-287.7,224.5"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M242.2,574.2h-13.9v10.4h13.9V574.2zM245.7,560.3h-31.3c-1.9,0 -3.5,1.5 -3.5,3.4v24.4c0,1.9 1.6,3.5 3.5,3.5h31.3c1.9,0 3.5,-1.6 3.5,-3.5v-24.4C249.1,561.8 247.6,560.3 245.7,560.3zM245.7,588.2h-31.3v-24.5h31.3V588.2z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M-83.4,650.3h-356.4c-15.3,0 -27.8,-12.8 -27.8,-28.5v-243c0,-15.7 12.5,-28.5 27.8,-28.5h356.5c15.2,0 27.7,12.8 27.7,28.5V622C-55.6,637.5 -68.1,650.3 -83.4,650.3z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M-260.2,369.4c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6c0,35 -13.6,67.9 -38.4,92.6c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4c-24.7,-24.8 -38.4,-57.7 -38.4,-92.7s13.6,-67.9 38.4,-92.6C-328.1,383 -295.2,369.4 -260.2,369.4M-260.2,367.4c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S-186.8,367.4 -260.2,367.4L-260.2,367.4z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M-205.5,458v-7.7c0,-1.1 -0.9,-1.9 -1.9,-1.9V408c0,-5.3 -4.3,-9.6 -9.6,-9.6h-88.5c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C-206.4,459.9 -205.5,459.1 -205.5,458zM-209.4,592.7c0,4.2 -3.5,7.7 -7.7,7.7h-88.5c-4.2,0 -7.7,-3.5 -7.7,-7.7V408c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V592.7z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M-217.1,404.3c2,0 3.7,1.7 3.7,3.7v184.8c0,2 -1.7,3.7 -3.7,3.7h-88.5c-2,0 -3.7,-1.7 -3.7,-3.7V408c0,-2 1.7,-3.7 3.7,-3.7H-217.1M-217.1,400.3h-88.5c-4.2,0 -7.7,3.5 -7.7,7.7v184.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7V408C-209.4,403.7 -212.8,400.3 -217.1,400.3L-217.1,400.3z"
+      android:fillColor="#F9AB00"/>
+  <path
+      android:pathData="M-225.4,574.2h-13.9v10.4h13.9V574.2zM-221.9,560.3h-31.3c-1.9,0 -3.5,1.5 -3.5,3.4v24.4c0,1.9 1.6,3.5 3.5,3.5h31.3c1.9,0 3.5,-1.6 3.5,-3.5v-24.4C-218.4,561.8 -220,560.3 -221.9,560.3zM-221.9,588.2h-31.3v-24.5h31.3V588.2z"
+      android:fillColor="#5F6368"/>
+</vector>
diff --git a/res/drawable-night/ic_illustration_switch.xml b/res/drawable-night/ic_illustration_switch.xml
new file mode 100644
index 0000000..9cabced
--- /dev/null
+++ b/res/drawable-night/ic_illustration_switch.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M207.4,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6S324.8,218 300,242.7c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C90.1,217.9 76.4,185 76.4,150S90,82.1 114.8,57.4C139.5,32.7 172.4,19.1 207.4,19.1M207.4,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S280.8,17.1 207.4,17.1L207.4,17.1z"
+      android:fillColor="#3C4043"/>
+  <path
+      android:pathData="M262.1,107.7V100c0,-1.1 -0.9,-1.9 -1.9,-1.9V57.6c0,-5.3 -4.3,-9.6 -9.6,-9.6H162c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C261.2,109.6 262.1,108.7 262.1,107.7zM258.2,242.4c0,4.2 -3.5,7.7 -7.7,7.7H162c-4.2,0 -7.7,-3.5 -7.7,-7.7V57.6c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V242.4z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M250.5,53.9c2,0 3.7,1.7 3.7,3.7v184.8c0,2 -1.7,3.7 -3.7,3.7H162c-2,0 -3.7,-1.7 -3.7,-3.7V57.6c0,-2 1.7,-3.7 3.7,-3.7H250.5M250.5,49.9H162c-4.2,0 -7.7,3.5 -7.7,7.7v184.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7V57.6C258.2,53.4 254.8,49.9 250.5,49.9L250.5,49.9z"
+      android:fillColor="#FCC934"/>
+  <path
+      android:pathData="M214.2,223.8v17.5h34.9v-34.9h-17.5v3.5h14v27.9h-27.9v-14H214.2z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M228.2,206.3h-14v14h14V206.3z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M242.2,222.1v3.5h-6.3l7.9,7.9l-2.5,2.5l-7.9,-7.9v6.3h-3.5v-12.2H242.2z"
+      android:fillColor="#DADCE0"/>
+</vector>
diff --git a/res/drawable-night/ic_illustration_window.xml b/res/drawable-night/ic_illustration_window.xml
new file mode 100644
index 0000000..7984df5
--- /dev/null
+++ b/res/drawable-night/ic_illustration_window.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M207.4,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6S324.8,218 300,242.7c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C90.1,217.9 76.4,185 76.4,150S90,82.1 114.8,57.4C139.5,32.7 172.4,19.1 207.4,19.1M207.4,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S280.8,17.1 207.4,17.1L207.4,17.1z"
+      android:fillColor="#3C4043"/>
+  <path
+      android:pathData="M262.1,107.7V100c0,-1.1 -0.9,-1.9 -1.9,-1.9V57.6c0,-5.3 -4.3,-9.6 -9.6,-9.6H162c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C261.2,109.6 262.1,108.7 262.1,107.7zM258.2,242.4c0,4.2 -3.5,7.7 -7.7,7.7H162c-4.2,0 -7.7,-3.5 -7.7,-7.7V57.6c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V242.4z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M250.5,118.9c2,0 3.7,1.7 3.7,3.7v54.8c0,2 -1.7,3.7 -3.7,3.7H162c-2,0 -3.7,-1.7 -3.7,-3.7v-54.8c0,-2 1.7,-3.7 3.7,-3.7H250.5M250.5,114.9H162c-4.2,0 -7.7,3.5 -7.7,7.7v54.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7v-54.8C258.2,118.4 254.8,114.9 250.5,114.9L250.5,114.9z"
+      android:fillColor="#FCC934"/>
+  <path
+      android:pathData="M236.9,125.6l11,0l0,11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M247.9,125.6L232.3,141.2"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M175.2,175.1l-10.9,0l0,-11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M164.3,175.1L179.9,159.5"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#FCC934"
+      android:strokeLineCap="round"/>
+</vector>
diff --git a/res/drawable-night/illustration_accessibility_gesture_three_finger.xml b/res/drawable-night/illustration_accessibility_gesture_three_finger.xml
new file mode 100644
index 0000000..593c3af
--- /dev/null
+++ b/res/drawable-night/illustration_accessibility_gesture_three_finger.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M274.9,97.7v-9.5c0,-1.3 -1.1,-2.4 -2.4,-2.4V35.9c0,-6.6 -5.3,-11.9 -11.9,-11.9H151.3c-6.6,0 -11.9,5.3 -11.9,11.9v228.2c0,6.6 5.3,11.9 11.9,11.9h109.4c6.6,0 11.9,-5.3 11.9,-11.9V147.6c1.3,0 2.4,-1.1 2.4,-2.4v-23.8c0,-1.3 -1.1,-2.4 -2.4,-2.4v-19C273.9,100.1 274.9,99 274.9,97.7zM270.2,264.1c0,5.2 -4.3,9.5 -9.5,9.5H151.3c-5.2,0 -9.5,-4.3 -9.5,-9.5V35.9c0,-5.2 4.3,-9.5 9.5,-9.5h109.4c5.2,0 9.5,4.3 9.5,9.5V264.1z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M176.7,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6h13.3v-24.6C183.4,212.6 180.4,209.6 176.7,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="176.75"
+          android:endY="209.6335"
+          android:endX="176.75"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M206,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6h13.3v-24.6C212.6,212.6 209.7,209.6 206,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="206.05"
+          android:endY="209.6335"
+          android:endX="206.05"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M235.3,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6H242v-24.6C241.9,212.6 239,209.6 235.3,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="235.35"
+          android:endY="209.6335"
+          android:endX="235.35"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+</vector>
diff --git a/res/drawable-night/illustration_accessibility_gesture_two_finger.xml b/res/drawable-night/illustration_accessibility_gesture_two_finger.xml
new file mode 100644
index 0000000..c95523b
--- /dev/null
+++ b/res/drawable-night/illustration_accessibility_gesture_two_finger.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"/>
+  <path
+      android:pathData="M274.9,97.7v-9.5c0,-1.3 -1.1,-2.4 -2.4,-2.4V35.9c0,-6.6 -5.3,-11.9 -11.9,-11.9H151.3c-6.6,0 -11.9,5.3 -11.9,11.9v228.2c0,6.6 5.3,11.9 11.9,11.9h109.4c6.6,0 11.9,-5.3 11.9,-11.9V147.6c1.3,0 2.4,-1.1 2.4,-2.4v-23.8c0,-1.3 -1.1,-2.4 -2.4,-2.4v-19C273.9,100.1 274.9,99 274.9,97.7zM270.2,264.1c0,5.2 -4.3,9.5 -9.5,9.5H151.3c-5.2,0 -9.5,-4.3 -9.5,-9.5V35.9c0,-5.2 4.3,-9.5 9.5,-9.5h109.4c5.2,0 9.5,4.3 9.5,9.5V264.1z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M188.6,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6h13.3v-24.6C195.3,212.6 192.3,209.6 188.6,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="188.65"
+          android:endY="209.6335"
+          android:endX="188.65"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M223.4,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6H230v-24.6C230,212.6 227.1,209.6 223.4,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="223.4"
+          android:endY="209.6335"
+          android:endX="223.4"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+</vector>
diff --git a/res/drawable/accessibility_button_navigation.xml b/res/drawable/accessibility_button_navigation.xml
index 82e3c70..8fdb627 100644
--- a/res/drawable/accessibility_button_navigation.xml
+++ b/res/drawable/accessibility_button_navigation.xml
@@ -15,53 +15,29 @@
 -->
 
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="125dp"
-    android:height="153dp"
-    android:viewportWidth="125"
-    android:viewportHeight="153">
-  <group>
-    <clip-path
-        android:pathData="M0,0h125v153h-125z"/>
-    <path
-        android:pathData="M7.4,-62.9L117.6,-62.9A6.3,6.3 0,0 1,123.9 -56.6L123.9,145.6A6.3,6.3 0,0 1,117.6 151.9L7.4,151.9A6.3,6.3 0,0 1,1.1 145.6L1.1,-56.6A6.3,6.3 0,0 1,7.4 -62.9z"
-        android:strokeWidth="1.8"
-        android:fillColor="#DADCE0"
-        android:strokeColor="#BDC1C6"/>
-    <group>
-      <clip-path
-          android:pathData="M7.4,-62.9L116.6,-62.9A6.3,6.3 0,0 1,122.9 -56.6L122.9,145.6A6.3,6.3 0,0 1,116.6 151.9L7.4,151.9A6.3,6.3 0,0 1,1.1 145.6L1.1,-56.6A6.3,6.3 0,0 1,7.4 -62.9z"/>
-      <path
-          android:pathData="M12.4,-61L112.6,-61A5.4,5.4 0,0 1,118 -55.6L118,140.6A5.4,5.4 0,0 1,112.6 146L12.4,146A5.4,5.4 0,0 1,7 140.6L7,-55.6A5.4,5.4 0,0 1,12.4 -61z"
-          android:fillColor="#F8F9FA"/>
-      <group>
-        <clip-path
-            android:pathData="M12.4,-61L112.6,-61A5.4,5.4 0,0 1,118 -55.6L118,140.6A5.4,5.4 0,0 1,112.6 146L12.4,146A5.4,5.4 0,0 1,7 140.6L7,-55.6A5.4,5.4 0,0 1,12.4 -61z"/>
-      </group>
-    </group>
-    <path
-        android:pathData="M7,126H118V140.6C118,143.582 115.582,146 112.6,146H12.4C9.418,146 7,143.582 7,140.6V126Z"
-        android:fillColor="#000000"
-        android:fillAlpha="0.87"/>
-    <path
-        android:strokeWidth="1"
-        android:pathData="M63.5,138.688C64.713,138.688 65.697,137.708 65.697,136.5C65.697,135.292 64.713,134.312 63.5,134.312C62.286,134.312 61.303,135.292 61.303,136.5C61.303,137.708 62.286,138.688 63.5,138.688Z"
-        android:fillColor="#00000000"
-        android:fillType="evenOdd"
-        android:strokeColor="#9AA0A6"/>
-    <path
-        android:strokeWidth="1"
-        android:pathData="M33.694,133.953C33.827,133.876 33.994,133.972 33.994,134.126V138.874C33.994,139.028 33.827,139.125 33.694,139.047L29.604,136.673C29.471,136.596 29.471,136.404 29.604,136.327L33.694,133.953Z"
-        android:fillColor="#00000000"
-        android:fillType="evenOdd"
-        android:strokeColor="#9AA0A6"/>
-    <path
-        android:pathData="M96.111,131.2C96.111,131.86 95.611,132.4 95,132.4C94.389,132.4 93.889,131.86 93.889,131.2C93.889,130.54 94.389,130 95,130C95.611,130 96.111,130.54 96.111,131.2ZM95,133C96.572,133 98.272,132.82 99.722,132.4L100,133.6C98.967,133.9 97.778,134.098 96.667,134.2V142H95.556V138.4H94.444V142H93.333V134.2C92.222,134.098 91.033,133.9 90,133.6L90.278,132.4C91.728,132.82 93.428,133 95,133Z"
-        android:fillColor="#ffffff"
-        android:fillType="evenOdd"/>
-    <path
-        android:pathData="M94.5,135.5m-15.5,0a15.5,15.5 0,1 1,31 0a15.5,15.5 0,1 1,-31 0"
-        android:strokeWidth="4"
-        android:fillColor="#00000000"
-        android:strokeColor="#4285F4"/>
-  </group>
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M325.2,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7v-42.2h239V231.9z"/>
+  <path
+      android:pathData="M269.7,205.2c1.5,0 2.7,1.2 2.7,2.7s-1.2,2.7 -2.7,2.7c-1.5,0 -2.7,-1.2 -2.7,-2.7S268.2,205.2 269.7,205.2zM273.8,214.7v17.6H271v-8.1h-2.7v8.1h-2.7v-17.6c-2.7,-0.2 -5.6,-0.7 -8.1,-1.4l0.7,-2.7c3.5,0.9 7.7,1.4 11.5,1.4c3.8,0 8,-0.4 11.5,-1.4l0.7,2.7C279.4,214 276.5,214.5 273.8,214.7z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M205.7,219.7m-9.4,0a9.4,9.4 0,1 1,18.8 0a9.4,9.4 0,1 1,-18.8 0"
+      android:fillColor="#BDC0C4"/>
+  <path
+      android:pathData="M132.1,219.7l16,9.2l0,-18.5z"
+      android:fillColor="#BDC0C4"/>
+  <path
+      android:pathData="M325.4,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7V0h-4.4v231.9c0,12.2 9.9,22.2 22.1,22.2h203.8c12.2,0 22.1,-9.9 22.1,-22.2V14.8c2.4,0 4.4,-2 4.4,-4.4V0h-8.9V231.9z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M269.7,255.3c-19.6,0 -35.6,-16 -35.6,-35.6s16,-35.6 35.6,-35.6s35.6,16 35.6,35.6S289.3,255.3 269.7,255.3zM269.7,187.1c-17.9,0 -32.5,14.6 -32.5,32.5c0,17.9 14.6,32.5 32.5,32.5s32.5,-14.6 32.5,-32.5C302.2,201.7 287.6,187.1 269.7,187.1z"
+      android:fillColor="#3773DF"/>
 </vector>
diff --git a/res/drawable/accessibility_button_preview_base.xml b/res/drawable/accessibility_button_preview_base.xml
index 9e3ec59..b75b1a8 100644
--- a/res/drawable/accessibility_button_preview_base.xml
+++ b/res/drawable/accessibility_button_preview_base.xml
@@ -15,28 +15,14 @@
 -->
 
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="125dp"
-    android:height="153dp"
-    android:viewportWidth="125"
-    android:viewportHeight="153">
-  <group>
-    <clip-path
-        android:pathData="M0,0h125v153h-125z"/>
-    <path
-        android:pathData="M7.4,-62.9L117.6,-62.9A6.3,6.3 0,0 1,123.9 -56.6L123.9,145.6A6.3,6.3 0,0 1,117.6 151.9L7.4,151.9A6.3,6.3 0,0 1,1.1 145.6L1.1,-56.6A6.3,6.3 0,0 1,7.4 -62.9z"
-        android:strokeWidth="1.8"
-        android:fillColor="#DADCE0"
-        android:strokeColor="#BDC1C6"/>
-    <group>
-      <clip-path
-          android:pathData="M7.4,-62.9L116.6,-62.9A6.3,6.3 0,0 1,122.9 -56.6L122.9,145.6A6.3,6.3 0,0 1,116.6 151.9L7.4,151.9A6.3,6.3 0,0 1,1.1 145.6L1.1,-56.6A6.3,6.3 0,0 1,7.4 -62.9z"/>
-      <path
-          android:pathData="M12.4,-61L112.6,-61A5.4,5.4 0,0 1,118 -55.6L118,140.6A5.4,5.4 0,0 1,112.6 146L12.4,146A5.4,5.4 0,0 1,7 140.6L7,-55.6A5.4,5.4 0,0 1,12.4 -61z"
-          android:fillColor="#F8F9FA"/>
-      <group>
-        <clip-path
-            android:pathData="M12.4,-61L112.6,-61A5.4,5.4 0,0 1,118 -55.6L118,140.6A5.4,5.4 0,0 1,112.6 146L12.4,146A5.4,5.4 0,0 1,7 140.6L7,-55.6A5.4,5.4 0,0 1,12.4 -61z"/>
-      </group>
-    </group>
-  </group>
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M325.4,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7V0h-4.4v231.9c0,12.2 9.9,22.2 22.1,22.2h203.8c12.2,0 22.1,-9.9 22.1,-22.2V14.8c2.4,0 4.4,-2 4.4,-4.4V0h-8.9L325.4,231.9L325.4,231.9z"
+      android:fillColor="#DADCE0"/>
 </vector>
diff --git a/res/drawable/accessibility_button_preview_large_floating_menu.xml b/res/drawable/accessibility_button_preview_large_floating_menu.xml
index e003dc7..794f3ca 100644
--- a/res/drawable/accessibility_button_preview_large_floating_menu.xml
+++ b/res/drawable/accessibility_button_preview_large_floating_menu.xml
@@ -15,27 +15,14 @@
 -->
 
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="125dp"
-    android:height="153dp"
-    android:viewportWidth="125"
-    android:viewportHeight="153">
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
     <path
-        android:pathData="M0,0h125v153h-125z"
-        android:fillColor="#00000000"/>
-    <group>
-        <clip-path
-            android:pathData="M89,95h29v34h-29z"/>
-        <path
-            android:strokeWidth="1"
-            android:pathData="M105,97.5L131,97.5A14.5,14.5 0,0 1,145.5 112L145.5,112A14.5,14.5 0,0 1,131 126.5L105,126.5A14.5,14.5 0,0 1,90.5 112L90.5,112A14.5,14.5 0,0 1,105 97.5z"
-            android:fillColor="#ffffff"
-            android:strokeColor="#DADCE0"/>
-        <path
-            android:pathData="M105.4,112m-11.2,0a11.2,11.2 0,1 1,22.4 0a11.2,11.2 0,1 1,-22.4 0"
-            android:fillColor="#80868B"/>
-        <path
-            android:pathData="M106.467,107.733C106.467,108.32 105.987,108.8 105.4,108.8C104.814,108.8 104.334,108.32 104.334,107.733C104.334,107.147 104.814,106.667 105.4,106.667C105.987,106.667 106.467,107.147 106.467,107.733ZM105.4,109.333C106.91,109.333 108.542,109.173 109.934,108.8L110.2,109.867C109.208,110.133 108.067,110.309 107,110.4V117.333H105.934V114.133H104.867V117.333H103.8V110.4C102.734,110.309 101.592,110.133 100.6,109.867L100.867,108.8C102.259,109.173 103.891,109.333 105.4,109.333Z"
-            android:fillColor="#ffffff"
-            android:fillType="evenOdd"/>
-    </group>
-</vector>
\ No newline at end of file
+        android:pathData="M325.4,198.2h-40.9c-22.1,0 -40,-18 -40,-40s18,-40 40,-40h40.9v2.6h-40.9c-20.7,0 -37.5,16.8 -37.5,37.5s16.8,37.5 37.5,37.5h40.9V198.2z"
+        android:fillColor="#DADCE0"/>
+    <path
+        android:pathData="M284.3,128.4c-16.5,0 -29.8,13.4 -29.8,29.8c0,16.5 13.4,29.8 29.8,29.8s29.8,-13.4 29.8,-29.8C314.2,141.7 300.9,128.4 284.3,128.4zM284.3,142.7c1.7,0 3.1,1.4 3.1,3.1c0,1.7 -1.4,3.1 -3.1,3.1s-3.1,-1.4 -3.1,-3.1C281.2,144.1 282.7,142.7 284.3,142.7zM289.1,153.7V174H286v-9.4h-3.1v9.4h-3.2v-20.3c-3.1,-0.3 -6.5,-0.8 -9.4,-1.5l0.8,-3.1c4.1,1 8.9,1.5 13.3,1.5s9.2,-0.5 13.3,-1.5l0.8,3.1C295.6,152.9 292.2,153.4 289.1,153.7z"
+        android:fillColor="#606368"/>
+</vector>
diff --git a/res/drawable/accessibility_button_preview_small_floating_menu.xml b/res/drawable/accessibility_button_preview_small_floating_menu.xml
index 3ff8e4b..670a516 100644
--- a/res/drawable/accessibility_button_preview_small_floating_menu.xml
+++ b/res/drawable/accessibility_button_preview_small_floating_menu.xml
@@ -15,27 +15,14 @@
 -->
 
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="125dp"
-    android:height="153dp"
-    android:viewportWidth="125"
-    android:viewportHeight="153">
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
     <path
-        android:pathData="M0,0h125v153h-125z"
-        android:fillColor="#00000000"/>
-    <group>
-        <clip-path
-            android:pathData="M89,106h29v22h-29z"/>
-        <path
-            android:strokeWidth="1"
-            android:pathData="M111,107.5L137,107.5A9.5,9.5 0,0 1,146.5 117L146.5,117A9.5,9.5 0,0 1,137 126.5L111,126.5A9.5,9.5 0,0 1,101.5 117L101.5,117A9.5,9.5 0,0 1,111 107.5z"
-            android:fillColor="#ffffff"
-            android:strokeColor="#DADCE0"/>
-        <path
-            android:pathData="M111.168,116.968m-7.168,0a7.168,7.168 0,1 1,14.336 0a7.168,7.168 0,1 1,-14.336 0"
-            android:fillColor="#80868B"/>
-        <path
-            android:pathData="M111.851,114.237C111.851,114.612 111.543,114.92 111.168,114.92C110.792,114.92 110.485,114.612 110.485,114.237C110.485,113.861 110.792,113.554 111.168,113.554C111.543,113.554 111.851,113.861 111.851,114.237ZM111.168,115.261C112.134,115.261 113.178,115.158 114.069,114.92L114.24,115.602C113.605,115.773 112.875,115.886 112.192,115.944V120.381H111.509V118.333H110.827V120.381H110.144V115.944C109.461,115.886 108.731,115.773 108.096,115.602L108.267,114.92C109.157,115.158 110.202,115.261 111.168,115.261Z"
-            android:fillColor="#ffffff"
-            android:fillType="evenOdd"/>
-    </group>
-</vector>
\ No newline at end of file
+        android:pathData="M325.4,189.2h-31.7c-17.1,0 -31,-13.9 -31,-31s13.9,-31 31,-31h31.7v2h-31.7c-16,0 -29,13 -29,29s13,29 29,29h31.7V189.2z"
+        android:fillColor="#DADCE0"/>
+    <path
+        android:pathData="M293.6,135.1c-12.8,0 -23.1,10.4 -23.1,23.1c0,12.8 10.4,23.1 23.1,23.1s23.1,-10.4 23.1,-23.1C316.7,145.4 306.4,135.1 293.6,135.1zM293.6,146.2c1.3,0 2.4,1.1 2.4,2.4s-1.1,2.4 -2.4,2.4s-2.4,-1.1 -2.4,-2.4S292.3,146.2 293.6,146.2zM297.3,154.7v15.7h-2.4v-7.3h-2.4v7.3H290v-15.7c-2.4,-0.2 -5,-0.6 -7.3,-1.2l0.6,-2.4c3.2,0.8 6.9,1.2 10.3,1.2s7.1,-0.4 10.3,-1.2l0.6,2.4C302.3,154.1 299.7,154.5 297.3,154.7z"
+        android:fillColor="#606368"/>
+</vector>
diff --git a/res/drawable/accessibility_button_preview_three_finger.xml b/res/drawable/accessibility_button_preview_three_finger.xml
new file mode 100644
index 0000000..d18ce60
--- /dev/null
+++ b/res/drawable/accessibility_button_preview_three_finger.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M242.5,226.9h-73.3c-1.7,0 -3.1,1.4 -3.1,3.1s1.4,3.1 3.1,3.1h73.3c1.7,0 3.1,-1.4 3.1,-3.1S244.2,226.9 242.5,226.9z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M182.7,222.6v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-2.9,1.2 -4.9,4 -4.9,7.4c0,4.4 3.5,8 8,8c4.4,0 8,-3.5 8,-8C187.6,226.7 185.6,223.8 182.7,222.6z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M209,222.6v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-2.9,1.2 -4.9,4 -4.9,7.4c0,4.4 3.5,8 8,8c4.4,0 8,-3.5 8,-8C213.9,226.7 211.9,223.8 209,222.6z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M235.2,222.6v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-2.9,1.2 -4.9,4 -4.9,7.4c0,4.4 3.5,8 8,8c4.4,0 8,-3.5 8,-8C240,226.7 238,223.8 235.2,222.6z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M325.4,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7V0h-4.4v231.9c0,12.2 9.9,22.2 22.1,22.2h203.8c12.2,0 22.1,-9.9 22.1,-22.2V14.8c2.4,0 4.4,-2 4.4,-4.4V0h-8.9V231.9z"
+      android:fillColor="#DADCE0"/>
+</vector>
diff --git a/res/drawable/accessibility_button_preview_two_finger.xml b/res/drawable/accessibility_button_preview_two_finger.xml
new file mode 100644
index 0000000..bec95af
--- /dev/null
+++ b/res/drawable/accessibility_button_preview_two_finger.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M325.4,231.9c0,9.8 -7.9,17.7 -17.7,17.7H103.9c-9.8,0 -17.7,-7.9 -17.7,-17.7V0h-4.4v231.9c0,12.2 9.9,22.2 22.1,22.2h203.8c12.2,0 22.1,-9.9 22.1,-22.2V14.8c2.4,0 4.4,-2 4.4,-4.4V0h-8.9V231.9z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M242.4,226.9h-9.3h-5.6h-43.4h-4.7h-10.2c-1.7,0 -3.1,1.4 -3.1,3.1s1.4,3.1 3.1,3.1h10.2h3.9h45h4.8h9.3c1.7,0 3.1,-1.4 3.1,-3.1S244.1,226.9 242.4,226.9z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M194,223.5v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-1.6,0.7 -2.9,1.9 -3.8,3.4c-0.7,1.2 -1.1,2.5 -1.1,4c0,0.7 0.1,1.5 0.3,2.2c0.9,3.3 4,5.8 7.7,5.8c3.6,0 6.7,-2.5 7.7,-5.8c0.2,-0.7 0.3,-1.4 0.3,-2.2c0,-1.5 -0.4,-2.8 -1.1,-4C197,225.4 195.6,224.2 194,223.5z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M223.7,223.5v-17.5h7.5l-10.6,-18.7l-10.6,18.7h7.5v17.5c-1.6,0.7 -2.9,1.9 -3.8,3.4c-0.7,1.2 -1.1,2.5 -1.1,4c0,0.7 0.1,1.5 0.3,2.2c0.9,3.3 4,5.8 7.7,5.8c3.6,0 6.7,-2.5 7.7,-5.8c0.2,-0.7 0.3,-1.4 0.3,-2.2c0,-1.5 -0.4,-2.8 -1.1,-4C226.6,225.4 225.3,224.2 223.7,223.5z"
+      android:fillColor="#1A73E8"/>
+</vector>
diff --git a/res/drawable/accessibility_captions.png b/res/drawable/accessibility_captions.png
deleted file mode 100644
index 718f4ef..0000000
--- a/res/drawable/accessibility_captions.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/accessibility_captions_banner.xml b/res/drawable/accessibility_captions_banner.xml
new file mode 100644
index 0000000..6597ffb
--- /dev/null
+++ b/res/drawable/accessibility_captions_banner.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M383.9,300H28.1C12.6,300 0,287.4 0,271.9V28.1C0,12.6 12.6,0 28.1,0h355.8C399.4,0 412,12.6 412,28.1v243.8C412,287.4 399.4,300 383.9,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M79.2,179.6h53.6v8.5h-53.6z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M142.5,179.6h30.4v8.5h-30.4z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M79.2,195.5h79.2v8.5h-79.2z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M168.1,195.5h34.1v8.5h-34.1z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M211.9,195.5h34.1v8.5h-34.1z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M182.7,179.6h73.1v8.5h-73.1z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M265.5,179.6h26.8v8.5h-26.8z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M302.1,179.6h26.8v8.5h-26.8z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M142.7,67.9h-11.5c-1.6,0 -2.9,1.3 -2.9,2.9H67.8c-7.9,0 -14.4,6.5 -14.4,14.4v132.4c0,7.9 6.5,14.4 14.4,14.4h276.4c7.9,0 14.4,-6.5 14.4,-14.4V85.2c0,-7.9 -6.5,-14.4 -14.4,-14.4H203.1c0,-1.6 -1.3,-2.9 -2.9,-2.9h-28.8c-1.6,0 -2.9,1.3 -2.9,2.9h-23C145.5,69.2 144.3,67.9 142.7,67.9zM344.2,73.7c6.4,0 11.5,5.2 11.5,11.5v132.4c0,6.3 -5.2,11.5 -11.5,11.5H67.8c-6.4,0 -11.5,-5.2 -11.5,-11.5V85.2c0,-6.3 5.2,-11.5 11.5,-11.5H344.2z"
+      android:fillColor="#DADCE0"/>
+</vector>
diff --git a/res/drawable/accessibility_shortcut_type_hardware.png b/res/drawable/accessibility_shortcut_type_hardware.png
deleted file mode 100644
index 664ceb3..0000000
--- a/res/drawable/accessibility_shortcut_type_hardware.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/accessibility_shortcut_type_hardware.xml b/res/drawable/accessibility_shortcut_type_hardware.xml
new file mode 100644
index 0000000..b6b227b
--- /dev/null
+++ b/res/drawable/accessibility_shortcut_type_hardware.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M287,187.8v-1.5h2.9v-13.7c0,-1.6 -1.3,-2.9 -2.9,-2.9v-23.2c1.6,0 2.9,-1.3 2.9,-2.9V132c0,-1.6 -1.3,-2.9 -2.9,-2.9V68.4c0,-8 -6.5,-14.5 -14.5,-14.5H139.4c-8,0 -14.5,6.5 -14.5,14.5v185.3c1,0.7 1.9,1.4 2.9,2.1V68.4c0,-6.4 5.2,-11.6 11.6,-11.6h133.1c6.4,0 11.6,5.2 11.6,11.6v188.7c1,-0.7 1.9,-1.4 2.9,-2.2v-50.5c1.6,0 2.9,-1.3 2.9,-2.9v-13.7L287,187.8L287,187.8z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M287,204.4c1.6,0 2.9,-1.3 2.9,-2.9v-14H287v-0.9h2.9v-14c0,-1.6 -1.3,-2.9 -2.9,-2.9"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M206.7,19.1c35,0 67.9,13.6 92.6,38.4C324,82.1 337.6,115 337.6,150s-13.6,67.9 -38.4,92.6c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C89.4,217.9 75.7,185 75.7,150s13.6,-67.9 38.4,-92.6C138.9,32.7 171.7,19.1 206.7,19.1M206.7,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S280.1,17.1 206.7,17.1L206.7,17.1z"
+      android:fillColor="#E8EAED"/>
+</vector>
diff --git a/res/drawable/accessibility_shortcut_type_software.png b/res/drawable/accessibility_shortcut_type_software.png
deleted file mode 100644
index 0212548..0000000
--- a/res/drawable/accessibility_shortcut_type_software.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/accessibility_shortcut_type_software.xml b/res/drawable/accessibility_shortcut_type_software.xml
new file mode 100644
index 0000000..d0573aa
--- /dev/null
+++ b/res/drawable/accessibility_shortcut_type_software.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5V28.5C0,12.8 12.5,0 27.8,0H384.3C399.5,0 412,12.8 412,28.5V271.7C412,287.2 399.5,300 384.2,300Z"
+      android:fillColor="#fff"/>
+  <path
+      android:pathData="M142,225.3H275.1a14.51,14.51 0,0 0,14.5 -14.5V69a2.9,2.9 0,0 0,2.9 -2.9v-17c-1.9,-1.6 -3.8,-3.2 -5.8,-4.7V210.8a11.61,11.61 0,0 1,-11.6 11.6H142a11.61,11.61 0,0 1,-11.6 -11.6V42.7c-1,0.7 -1.9,1.4 -2.9,2.1V210.9A14.62,14.62 0,0 0,142 225.3Z"
+      android:fillColor="#dadce0"/>
+  <path
+      android:pathData="M207.4,19.1a131.11,131.11 0,0 1,131 131,131 131,0 0,1 -262,-0.1 130.94,130.94 0,0 1,131 -130.9m0,-2A132.9,132.9 0,1 0,340.3 150,133 133,0 0,0 207.4,17.1Z"
+      android:fillColor="#e8eaed"/>
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M286.7,210.83a11.59,11.59 0,0 1,-11.58 11.58H142a11.59,11.59 0,0 1,-11.58 -11.58V183.26H286.7Z"/>
+  <path
+      android:pathData="M250.41,193.38a1.77,1.77 0,1 1,-1.78 1.77A1.77,1.77 0,0 1,250.41 193.38ZM253.07,199.58v11.53h-1.78v-5.32h-1.77v5.32h-1.77L247.75,199.58a30.78,30.78 0,0 1,-5.32 -0.89l0.44,-1.77a32.34,32.34 0,0 0,15.07 0l0.45,1.77A30.78,30.78 0,0 1,253.07 199.58Z"
+      android:fillColor="#fff"/>
+  <path
+      android:pathData="M208.55,202.84m-6.13,0a6.13,6.13 0,1 1,12.26 0a6.13,6.13 0,1 1,-12.26 0"
+      android:fillColor="#bdc1c6"/>
+  <path
+      android:pathData="M250.41,202.84m-22.28,0a22.28,22.28 0,1 1,44.56 0a22.28,22.28 0,1 1,-44.56 0"
+      android:strokeWidth="2"
+      android:fillColor="#00000000"
+      android:strokeColor="#1a73e8"/>
+  <path
+      android:pathData="M160.45,202.84l10.43,6.02l0,-12.05l-10.43,6.03z"
+      android:fillColor="#bdc1c6"/>
+</vector>
diff --git a/res/drawable/accessibility_shortcut_type_software_floating.xml b/res/drawable/accessibility_shortcut_type_software_floating.xml
index 9582015..88ce42d 100644
--- a/res/drawable/accessibility_shortcut_type_software_floating.xml
+++ b/res/drawable/accessibility_shortcut_type_software_floating.xml
@@ -15,54 +15,25 @@
 -->
 
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="180dp"
-    android:height="180dp"
-    android:viewportWidth="180"
-    android:viewportHeight="180">
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
   <path
-      android:pathData="M90,90m-89,0a89,89 0,1 1,178 0a89,89 0,1 1,-178 0"
-      android:strokeWidth="2"
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5V28.5C0,12.8 12.5,0 27.8,0H384.3C399.5,0 412,12.8 412,28.5V271.7C412,287.2 399.5,300 384.2,300Z"
+      android:fillColor="#fff"/>
+  <path
+      android:pathData="M142,225.3H275.1a14.51,14.51 0,0 0,14.5 -14.5V69a2.9,2.9 0,0 0,2.9 -2.9v-17c-1.9,-1.6 -3.8,-3.2 -5.8,-4.7V210.8a11.61,11.61 0,0 1,-11.6 11.6H142a11.61,11.61 0,0 1,-11.6 -11.6V42.7c-1,0.7 -1.9,1.4 -2.9,2.1V210.9A14.62,14.62 0,0 0,142 225.3Z"
+      android:fillColor="#dadce0"/>
+  <path
+      android:strokeWidth="1"
+      android:pathData="M286.7,144.13H266a19.63,19.63 0,1 0,0 39.26H286.7"
       android:fillColor="#00000000"
-      android:strokeColor="#ECEEEF"/>
-  <group>
-    <clip-path
-        android:pathData="M90,90m-87,0a87,87 0,1 1,174 0a87,87 0,1 1,-174 0"/>
-    <path
-        android:pathData="M35.4,-70.9L144.6,-70.9A6.3,6.3 0,0 1,150.9 -64.6L150.9,137.6A6.3,6.3 0,0 1,144.6 143.9L35.4,143.9A6.3,6.3 0,0 1,29.1 137.6L29.1,-64.6A6.3,6.3 0,0 1,35.4 -70.9z"
-        android:strokeWidth="1.8"
-        android:fillColor="#F2F3F4"
-        android:strokeColor="#DADCE0"/>
-    <group>
-      <clip-path
-          android:pathData="M35.4,-70.9L144.6,-70.9A6.3,6.3 0,0 1,150.9 -64.6L150.9,137.6A6.3,6.3 0,0 1,144.6 143.9L35.4,143.9A6.3,6.3 0,0 1,29.1 137.6L29.1,-64.6A6.3,6.3 0,0 1,35.4 -70.9z"/>
-      <path
-          android:pathData="M40.4,-69L140.6,-69A5.4,5.4 0,0 1,146 -63.6L146,132.6A5.4,5.4 0,0 1,140.6 138L40.4,138A5.4,5.4 0,0 1,35 132.6L35,-63.6A5.4,5.4 0,0 1,40.4 -69z"
-          android:fillColor="#ffffff"/>
-      <group>
-        <clip-path
-            android:pathData="M40.4,-69L140.6,-69A5.4,5.4 0,0 1,146 -63.6L146,132.6A5.4,5.4 0,0 1,140.6 138L40.4,138A5.4,5.4 0,0 1,35 132.6L35,-63.6A5.4,5.4 0,0 1,40.4 -69z"/>
-        <path
-            android:strokeWidth="1"
-            android:pathData="M132,90.5L158,90.5A14.5,14.5 0,0 1,172.5 105L172.5,105A14.5,14.5 0,0 1,158 119.5L132,119.5A14.5,14.5 0,0 1,117.5 105L117.5,105A14.5,14.5 0,0 1,132 90.5z"
-            android:fillColor="#ffffff"
-            android:strokeColor="#DADCE0"/>
-        <path
-            android:pathData="M132.4,105m-11.2,0a11.2,11.2 0,1 1,22.4 0a11.2,11.2 0,1 1,-22.4 0"
-            android:fillColor="#80868B"/>
-        <path
-            android:pathData="M133.467,100.733C133.467,101.32 132.987,101.8 132.4,101.8C131.813,101.8 131.333,101.32 131.333,100.733C131.333,100.147 131.813,99.666 132.4,99.666C132.987,99.666 133.467,100.147 133.467,100.733ZM132.4,102.333C133.909,102.333 135.541,102.173 136.933,101.8L137.2,102.867C136.208,103.133 135.067,103.309 134,103.4V110.333H132.933V107.133H131.867V110.333H130.8V103.4C129.733,103.309 128.592,103.133 127.6,102.867L127.867,101.8C129.259,102.173 130.891,102.333 132.4,102.333Z"
-            android:fillColor="#ffffff"
-            android:fillType="evenOdd"/>
-        <path
-            android:pathData="M121.719,120.653C121.719,121.29 121.198,121.81 120.562,121.81C119.927,121.81 119.406,121.29 119.406,120.653C119.406,120.017 119.927,119.497 120.562,119.497C121.198,119.497 121.719,120.017 121.719,120.653ZM120.562,122.533C122.38,122.533 124.346,122.316 126.023,121.81L126.344,123.255C125.149,123.617 123.774,123.855 122.49,123.978V133.374H121.205V129.038H119.92V133.374H118.635V123.978C117.351,123.855 115.976,123.617 114.781,123.255L115.102,121.81C116.779,122.316 118.745,122.533 120.562,122.533Z"
-            android:fillColor="#ffffff"
-            android:fillType="evenOdd"/>
-        <group>
-          <clip-path
-              android:pathData="M121.719,120.653C121.719,121.29 121.198,121.81 120.562,121.81C119.927,121.81 119.406,121.29 119.406,120.653C119.406,120.017 119.927,119.497 120.562,119.497C121.198,119.497 121.719,120.017 121.719,120.653ZM120.562,122.533C122.38,122.533 124.346,122.316 126.023,121.81L126.344,123.255C125.149,123.617 123.774,123.855 122.49,123.978V133.374H121.205V129.038H119.92V133.374H118.635V123.978C117.351,123.855 115.976,123.617 114.781,123.255L115.102,121.81C116.779,122.316 118.745,122.533 120.562,122.533Z"
-              android:fillType="evenOdd"/>
-        </group>
-      </group>
-    </group>
-  </group>
+      android:strokeColor="#dadce0"/>
+  <path
+      android:pathData="M266,148.65a15.11,15.11 0,1 0,15.1 15.11A15.11,15.11 0,0 0,266 148.65ZM266,155.93a1.59,1.59 0,0 1,0 3.17,1.59 1.59,0 1,1 0,-3.17ZM268.37,161.47v10.29h-1.58L266.79,167h-1.59v4.75h-1.58L263.62,161.47a27.23,27.23 0,0 1,-4.75 -0.79l0.4,-1.58a29.06,29.06 0,0 0,13.46 0l0.39,1.58A27.23,27.23 0,0 1,268.33 161.47Z"
+      android:fillColor="#5f6368"/>
+  <path
+      android:pathData="M207.4,19.1a131.11,131.11 0,0 1,131 131,131 131,0 0,1 -262,-0.1 130.94,130.94 0,0 1,131 -130.9m0,-2A132.9,132.9 0,1 0,340.3 150,133 133,0 0,0 207.4,17.1Z"
+      android:fillColor="#e8eaed"/>
 </vector>
diff --git a/res/drawable/accessibility_shortcut_type_software_gesture.png b/res/drawable/accessibility_shortcut_type_software_gesture.png
deleted file mode 100644
index 0a2921a..0000000
--- a/res/drawable/accessibility_shortcut_type_software_gesture.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/accessibility_shortcut_type_software_gesture.xml b/res/drawable/accessibility_shortcut_type_software_gesture.xml
new file mode 100644
index 0000000..514dd51
--- /dev/null
+++ b/res/drawable/accessibility_shortcut_type_software_gesture.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:fillColor="#FF000000"
+      android:pathData="M842.3,299.9H485.9c-15.3,0 -27.8,-12.8 -27.8,-28.5v-243c0,-15.7 12.5,-28.5 27.8,-28.5h356.5c15.2,0 27.7,12.8 27.7,28.5v243.2C870.1,287.1 857.6,299.9 842.3,299.9z"/>
+  <path
+      android:pathData="M597.6,225.2h133.1c8,0 14.5,-6.5 14.5,-14.5V68.9c1.6,0 2.9,-1.3 2.9,-2.9V49c-1.9,-1.6 -3.8,-3.2 -5.8,-4.7v166.4c0,6.4 -5.2,11.6 -11.6,11.6H597.6c-6.4,0 -11.6,-5.2 -11.6,-11.6V42.6c-1,0.7 -1.9,1.4 -2.9,2.1v166.1C583.2,218.7 589.7,225.2 597.6,225.2z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M688,207.8h-47.8c-1.1,0 -2,0.9 -2,2s0.9,2 2,2H688c1.1,0 2,-0.9 2,-2S689.1,207.8 688,207.8z"
+      android:fillColor="#80868B"/>
+  <path
+      android:pathData="M656.5,205.6v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2c2.9,0 5.2,-2.3 5.2,-5.2C659.7,208.3 658.3,206.4 656.5,205.6z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M675.8,205.6v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2c2.9,0 5.2,-2.3 5.2,-5.2C679,208.3 677.7,206.4 675.8,205.6z"
+      android:fillColor="#669DF6"/>
+  <path
+      android:pathData="M664.2,19c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6s-13.6,67.9 -38.4,92.6c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4c-24.7,-24.8 -38.4,-57.7 -38.4,-92.7s13.6,-67.9 38.4,-92.6C596.3,32.6 629.2,19 664.2,19M664.2,17c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S737.6,17 664.2,17L664.2,17z"
+      android:fillColor="#3C4043"/>
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M139.4,225.3h133.1c8,0 14.5,-6.5 14.5,-14.5V69c1.6,0 2.9,-1.3 2.9,-2.9v-17c-1.9,-1.6 -3.8,-3.2 -5.8,-4.7v166.4c0,6.4 -5.2,11.6 -11.6,11.6H139.4c-6.4,0 -11.6,-5.2 -11.6,-11.6V42.7c-1,0.7 -1.9,1.4 -2.9,2.1v166.1C125,218.8 131.5,225.3 139.4,225.3z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M229.9,207.9h-47.8c-1.1,0 -2,0.9 -2,2s0.9,2 2,2h47.8c1.1,0 2,-0.9 2,-2S231,207.9 229.9,207.9z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M198.4,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2s5.2,-2.3 5.2,-5.2C201.5,208.4 200.1,206.5 198.4,205.7z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M217.6,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2s5.2,-2.3 5.2,-5.2C220.9,208.4 219.5,206.5 217.6,205.7z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M206.1,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6s-13.6,67.9 -38.4,92.6c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4S75.1,185 75.1,150s13.6,-67.9 38.4,-92.6C138.2,32.7 171.1,19.1 206.1,19.1M206.1,17.1c-73.4,0 -133,59.5 -133,132.9S132.6,282.9 206,282.9S339,223.4 339,150S279.5,17.1 206.1,17.1L206.1,17.1z"
+      android:fillColor="#E8EAED"/>
+</vector>
diff --git a/res/drawable/accessibility_shortcut_type_software_gesture_talkback.png b/res/drawable/accessibility_shortcut_type_software_gesture_talkback.png
deleted file mode 100644
index 85fec85..0000000
--- a/res/drawable/accessibility_shortcut_type_software_gesture_talkback.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/accessibility_shortcut_type_software_gesture_talkback.xml b/res/drawable/accessibility_shortcut_type_software_gesture_talkback.xml
new file mode 100644
index 0000000..9388e66
--- /dev/null
+++ b/res/drawable/accessibility_shortcut_type_software_gesture_talkback.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M138,225.3h133.1c8,0 14.5,-6.5 14.5,-14.5V69c1.6,0 2.9,-1.3 2.9,-2.9V45.7c-1.9,-1.5 -3.8,-2.9 -5.8,-4.3v169.4c0,6.4 -5.2,11.6 -11.6,11.6H138c-6.4,0 -11.6,-5.2 -11.6,-11.6V43.5c-1,0.7 -1.9,1.5 -2.9,2.2v165C123.5,218.8 130,225.3 138,225.3z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M206,283.9c-73.9,0 -133.9,-60.1 -133.9,-133.9S132.1,16.1 206,16.1c73.9,0 133.9,60.1 133.9,133.9S279.9,283.9 206,283.9zM206,18.1C133.2,18.1 74.1,77.2 74.1,150S133.2,281.9 206,281.9S337.9,222.8 337.9,150S278.8,18.1 206,18.1z"
+      android:fillColor="#E8EAED"/>
+  <path
+      android:pathData="M229.9,207.9h-47.8c-1.1,0 -2,0.9 -2,2s0.9,2 2,2h47.8c1.1,0 2,-0.9 2,-2S231,207.9 229.9,207.9z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M190.9,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2c2.9,0 5.2,-2.3 5.2,-5.2C194.1,208.4 192.8,206.5 190.9,205.7z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M208,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2c2.9,0 5.2,-2.3 5.2,-5.2C211.2,208.4 209.9,206.5 208,205.7z"
+      android:fillColor="#1A73E8"/>
+  <path
+      android:pathData="M225.1,205.7v-11.4h4.9l-6.9,-12.2l-6.9,12.2h4.9v11.4c-1.9,0.8 -3.2,2.6 -3.2,4.8c0,2.9 2.3,5.2 5.2,5.2c2.9,0 5.2,-2.3 5.2,-5.2C228.2,208.4 226.9,206.5 225.1,205.7z"
+      android:fillColor="#1A73E8"/>
+</vector>
diff --git a/res/drawable/accessibility_shortcut_type_triple_tap.png b/res/drawable/accessibility_shortcut_type_triple_tap.png
deleted file mode 100644
index 6a08d29..0000000
--- a/res/drawable/accessibility_shortcut_type_triple_tap.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_illustration_fullscreen.xml b/res/drawable/ic_illustration_fullscreen.xml
index fbb62bf..2aca693 100644
--- a/res/drawable/ic_illustration_fullscreen.xml
+++ b/res/drawable/ic_illustration_fullscreen.xml
@@ -14,26 +14,48 @@
      limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="77dp"
-    android:height="134dp"
-    android:viewportWidth="77"
-    android:viewportHeight="134">
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
   <path
-      android:pathData="M69.6,1.1H7.4C3.921,1.1 1.1,3.921 1.1,7.4V126.6C1.1,130.079 3.921,132.9 7.4,132.9H69.6C73.079,132.9 75.9,130.079 75.9,126.6V7.4C75.9,3.921 73.079,1.1 69.6,1.1Z"
-      android:strokeWidth="1.8"
-      android:fillColor="#F2F3F4"
-      android:strokeColor="#DADCE0"/>
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
   <path
-      android:pathData="M66.642,5H10.358C7.399,5 5,7.418 5,10.4V123.6C5,126.582 7.399,129 10.358,129H66.642C69.601,129 72,126.582 72,123.6V10.4C72,7.418 69.601,5 66.642,5Z"
-      android:fillColor="#ffffff"/>
+      android:pathData="M207.4,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6S324.8,218 300,242.7c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C90.1,217.9 76.4,185 76.4,150S90,82.1 114.8,57.4C139.5,32.7 172.4,19.1 207.4,19.1M207.4,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S280.8,17.1 207.4,17.1L207.4,17.1z"
+      android:fillColor="#E8EAED"/>
   <path
-      android:pathData="M66,10H11C10.448,10 10,10.448 10,11V123C10,123.552 10.448,124 11,124H66C66.552,124 67,123.552 67,123V11C67,10.448 66.552,10 66,10ZM11,5C7.686,5 5,7.686 5,11V123C5,126.314 7.686,129 11,129H66C69.314,129 72,126.314 72,123V11C72,7.686 69.314,5 66,5H11Z"
-      android:fillColor="#F29900"
-      android:fillType="evenOdd"/>
+      android:pathData="M262.1,107.7V100c0,-1.1 -0.9,-1.9 -1.9,-1.9V57.6c0,-5.3 -4.3,-9.6 -9.6,-9.6H162c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C261.2,109.6 262.1,108.7 262.1,107.7zM258.2,242.4c0,4.2 -3.5,7.7 -7.7,7.7H162c-4.2,0 -7.7,-3.5 -7.7,-7.7V57.6c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V242.4z"
+      android:fillColor="#DADCE0"/>
   <path
-      android:pathData="M49.077,15V19.314H54.612L48,25.958L51.037,29L57.692,22.334V27.921H62V15H49.077Z"
-      android:fillColor="#F29900"/>
+      android:pathData="M250.5,53.9c2,0 3.7,1.7 3.7,3.7v184.8c0,2 -1.7,3.7 -3.7,3.7H162c-2,0 -3.7,-1.7 -3.7,-3.7V57.6c0,-2 1.7,-3.7 3.7,-3.7H250.5M250.5,49.9H162c-4.2,0 -7.7,3.5 -7.7,7.7v184.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7V57.6C258.2,53.4 254.8,49.9 250.5,49.9L250.5,49.9z"
+      android:fillColor="#F9AB00"/>
   <path
-      android:pathData="M25.963,105L19.308,111.655V106.077H15V119H27.923V114.692H22.366L29,108.037L25.963,105Z"
-      android:fillColor="#F29900"/>
+      android:pathData="M236.9,60.6l11,0l0,11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M247.9,60.6L232.3,76.2"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M175.2,240.1l-10.9,0l0,-11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M164.3,240.1L179.9,224.5"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
 </vector>
diff --git a/res/drawable/ic_illustration_switch.xml b/res/drawable/ic_illustration_switch.xml
index 9d3990b..bfe533c 100644
--- a/res/drawable/ic_illustration_switch.xml
+++ b/res/drawable/ic_illustration_switch.xml
@@ -14,33 +14,29 @@
      limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="77dp"
-    android:height="134dp"
-    android:viewportWidth="77"
-    android:viewportHeight="134">
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
   <path
-      android:pathData="M69.6,1.1H7.4C3.921,1.1 1.1,3.921 1.1,7.4V126.6C1.1,130.079 3.921,132.9 7.4,132.9H69.6C73.079,132.9 75.9,130.079 75.9,126.6V7.4C75.9,3.921 73.079,1.1 69.6,1.1Z"
-      android:strokeWidth="1.8"
-      android:fillColor="#F2F3F4"
-      android:strokeColor="#DADCE0"/>
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
   <path
-      android:pathData="M66.642,5H10.358C7.399,5 5,7.418 5,10.4V123.6C5,126.582 7.399,129 10.358,129H66.642C69.601,129 72,126.582 72,123.6V10.4C72,7.418 69.601,5 66.642,5Z"
-      android:fillColor="#ffffff"/>
+      android:pathData="M207.4,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6S324.8,218 300,242.7c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C90.1,217.9 76.4,185 76.4,150S90,82.1 114.8,57.4C139.5,32.7 172.4,19.1 207.4,19.1M207.4,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S280.8,17.1 207.4,17.1L207.4,17.1z"
+      android:fillColor="#E8EAED"/>
   <path
-      android:pathData="M63,94H39V118H63V94Z"
-      android:fillColor="#000000"
-      android:fillAlpha="0.7"/>
+      android:pathData="M262.1,107.7V100c0,-1.1 -0.9,-1.9 -1.9,-1.9V57.6c0,-5.3 -4.3,-9.6 -9.6,-9.6H162c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9V127c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C261.2,109.6 262.1,108.7 262.1,107.7zM258.2,242.4c0,4.2 -3.5,7.7 -7.7,7.7H162c-4.2,0 -7.7,-3.5 -7.7,-7.7V57.6c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V242.4z"
+      android:fillColor="#DADCE0"/>
   <path
-      android:pathData="M43,106V114H59V98H51V99.6H57.4V112.4H44.6V106H43Z"
-      android:fillColor="#ffffff"/>
+      android:pathData="M250.5,53.9c2,0 3.7,1.7 3.7,3.7v184.8c0,2 -1.7,3.7 -3.7,3.7H162c-2,0 -3.7,-1.7 -3.7,-3.7V57.6c0,-2 1.7,-3.7 3.7,-3.7L250.5,53.9M250.5,49.9H162c-4.2,0 -7.7,3.5 -7.7,7.7v184.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7V57.6C258.2,53.4 254.8,49.9 250.5,49.9L250.5,49.9z"
+      android:fillColor="#F9AB00"/>
   <path
-      android:pathData="M49.4,98H43V104.4H49.4V98Z"
-      android:fillColor="#ffffff"/>
+      android:pathData="M214.2,223.8v17.5h34.9v-34.9h-17.5v3.5h14v27.9h-27.9v-14H214.2z"
+      android:fillColor="#5F6368"/>
   <path
-      android:pathData="M55.8,105.2V106.8H52.928L56.56,110.432L55.432,111.56L51.8,107.928V110.8H50.2V105.2H55.8Z"
-      android:fillColor="#ffffff"/>
+      android:pathData="M228.2,206.3h-14v14h14V206.3z"
+      android:fillColor="#5F6368"/>
   <path
-      android:pathData="M66,10H11C10.448,10 10,10.448 10,11V123C10,123.552 10.448,124 11,124H66C66.552,124 67,123.552 67,123V11C67,10.448 66.552,10 66,10ZM11,5C7.686,5 5,7.686 5,11V123C5,126.314 7.686,129 11,129H66C69.314,129 72,126.314 72,123V11C72,7.686 69.314,5 66,5H11Z"
-      android:fillColor="#F29900"
-      android:fillType="evenOdd"/>
+      android:pathData="M242.2,222.1v3.5h-6.3l7.9,7.9l-2.5,2.5l-7.9,-7.9v6.3h-3.5v-12.2H242.2z"
+      android:fillColor="#5F6368"/>
 </vector>
diff --git a/res/drawable/ic_illustration_window.xml b/res/drawable/ic_illustration_window.xml
index 1b87d7d..22513f4 100644
--- a/res/drawable/ic_illustration_window.xml
+++ b/res/drawable/ic_illustration_window.xml
@@ -14,28 +14,48 @@
      limitations under the License.
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="77dp"
-    android:height="134dp"
-    android:viewportWidth="77"
-    android:viewportHeight="134">
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
   <path
-      android:pathData="M69.6,1.1H7.4C3.921,1.1 1.1,3.921 1.1,7.4V126.6C1.1,130.079 3.921,132.9 7.4,132.9H69.6C73.079,132.9 75.9,130.079 75.9,126.6V7.4C75.9,3.921 73.079,1.1 69.6,1.1Z"
-      android:strokeWidth="1.8"
-      android:fillColor="#F2F3F4"
-      android:strokeColor="#DADCE0"/>
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
   <path
-      android:pathData="M66.642,5H10.358C7.399,5 5,7.418 5,10.4V123.6C5,126.582 7.399,129 10.358,129H66.642C69.601,129 72,126.582 72,123.6V10.4C72,7.418 69.601,5 66.642,5Z"
-      android:fillColor="#ffffff"/>
+      android:pathData="M207.4,19.1c35,0 67.9,13.6 92.6,38.4c24.7,24.7 38.4,57.6 38.4,92.6S324.8,218 300,242.7c-24.7,24.7 -57.6,38.4 -92.6,38.4s-67.9,-13.6 -92.6,-38.4C90.1,217.9 76.4,185 76.4,150S90,82.1 114.8,57.4C139.5,32.7 172.4,19.1 207.4,19.1M207.4,17.1c-73.4,0 -133,59.5 -133,132.9s59.5,132.9 132.9,132.9s133,-59.5 133,-132.9S280.8,17.1 207.4,17.1L207.4,17.1z"
+      android:fillColor="#E8EAED"/>
   <path
-      android:pathData="M63,48H14C12.895,48 12,48.895 12,50V85C12,86.105 12.895,87 14,87H63C64.105,87 65,86.105 65,85V50C65,48.895 64.105,48 63,48Z"
-      android:strokeLineJoin="bevel"
-      android:strokeWidth="5"
+      android:pathData="M262.1,107.7V100c0,-1.1 -0.9,-1.9 -1.9,-1.9V57.6c0,-5.3 -4.3,-9.6 -9.6,-9.6H162c-5.3,0 -9.6,4.3 -9.6,9.6v184.8c0,5.3 4.3,9.6 9.6,9.6h88.5c5.3,0 9.6,-4.3 9.6,-9.6v-94.3c1.1,0 1.9,-0.9 1.9,-1.9v-19.2c0,-1.1 -0.9,-1.9 -1.9,-1.9v-15.4C261.2,109.6 262.1,108.7 262.1,107.7zM258.2,242.4c0,4.2 -3.5,7.7 -7.7,7.7H162c-4.2,0 -7.7,-3.5 -7.7,-7.7V57.6c0,-4.2 3.5,-7.7 7.7,-7.7h88.5c4.2,0 7.7,3.5 7.7,7.7V242.4z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M250.5,118.9c2,0 3.7,1.7 3.7,3.7v54.8c0,2 -1.7,3.7 -3.7,3.7H162c-2,0 -3.7,-1.7 -3.7,-3.7v-54.8c0,-2 1.7,-3.7 3.7,-3.7H250.5M250.5,114.9H162c-4.2,0 -7.7,3.5 -7.7,7.7v54.8c0,4.2 3.5,7.7 7.7,7.7h88.5c4.2,0 7.7,-3.5 7.7,-7.7v-54.8C258.2,118.4 254.8,114.9 250.5,114.9L250.5,114.9z"
+      android:fillColor="#F9AB00"/>
+  <path
+      android:pathData="M236.9,125.6l11,0l0,11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
       android:fillColor="#00000000"
-      android:strokeColor="#F29900"/>
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
   <path
-      android:pathData="M46.077,54V58.314H51.612L45,64.958L48.037,68L54.692,61.334V66.921H59V54H46.077Z"
-      android:fillColor="#F29900"/>
+      android:pathData="M247.9,125.6L232.3,141.2"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
   <path
-      android:pathData="M28.963,67L22.308,73.655V68.077H18V81H30.923V76.692H25.366L32,70.037L28.963,67Z"
-      android:fillColor="#F29900"/>
+      android:pathData="M175.2,175.1l-10.9,0l0,-11"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
+  <path
+      android:pathData="M164.3,175.1L179.9,159.5"
+      android:strokeLineJoin="round"
+      android:strokeWidth="4"
+      android:fillColor="#00000000"
+      android:strokeColor="#F9AB00"
+      android:strokeLineCap="round"/>
 </vector>
diff --git a/res/drawable/ic_settings_emergency.xml b/res/drawable/ic_settings_emergency.xml
index 25d4272..d331e3e 100644
--- a/res/drawable/ic_settings_emergency.xml
+++ b/res/drawable/ic_settings_emergency.xml
@@ -19,6 +19,6 @@
         android:viewportWidth="24.0"
         android:viewportHeight="24.0">
     <path
-        android:pathData="M9.321,2V7.359L4.68,4.68L2,9.321L6.641,12L2,14.679L4.68,19.32L9.321,16.641V22H14.68V16.641L19.321,19.32L22,14.679L17.359,12L22,9.321L19.321,4.68L14.68,7.359V2H9.321Z"
+        android:pathData="M20.79,9.23l-2,-3.46l-4.79,2.77l0,-5.54l-4,0l0,5.54l-4.79,-2.77l-2,3.46l4.79,2.77l-4.79,2.77l2,3.46l4.79,-2.77l0,5.54l4,0l0,-5.54l4.79,2.77l2,-3.46l-4.79,-2.77z"
         android:fillColor="?android:attr/colorPrimary"/>
 </vector>
diff --git a/res/drawable/illustration_accessibility_gesture_three_finger.xml b/res/drawable/illustration_accessibility_gesture_three_finger.xml
new file mode 100644
index 0000000..c14d744
--- /dev/null
+++ b/res/drawable/illustration_accessibility_gesture_three_finger.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M274.9,97.7v-9.5c0,-1.3 -1.1,-2.4 -2.4,-2.4V35.9c0,-6.6 -5.3,-11.9 -11.9,-11.9H151.3c-6.6,0 -11.9,5.3 -11.9,11.9v228.2c0,6.6 5.3,11.9 11.9,11.9h109.4c6.6,0 11.9,-5.3 11.9,-11.9V147.6c1.3,0 2.4,-1.1 2.4,-2.4v-23.8c0,-1.3 -1.1,-2.4 -2.4,-2.4v-19C273.9,100.1 274.9,99 274.9,97.7zM270.2,264.1c0,5.2 -4.3,9.5 -9.5,9.5H151.3c-5.2,0 -9.5,-4.3 -9.5,-9.5V35.9c0,-5.2 4.3,-9.5 9.5,-9.5h109.4c5.2,0 9.5,4.3 9.5,9.5V264.1z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M176.7,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6h13.3v-24.6C183.4,212.6 180.4,209.6 176.7,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="176.7163"
+          android:endY="209.6335"
+          android:endX="176.7163"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M206,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6h13.3v-24.6C212.6,212.6 209.7,209.6 206,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="206"
+          android:endY="209.6335"
+          android:endX="206"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M235.3,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6h13.3v-24.6C241.9,212.6 239,209.6 235.3,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="235.2837"
+          android:endY="209.6335"
+          android:endX="235.2837"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+</vector>
diff --git a/res/drawable/illustration_accessibility_gesture_two_finger.xml b/res/drawable/illustration_accessibility_gesture_two_finger.xml
new file mode 100644
index 0000000..3ef4fd1
--- /dev/null
+++ b/res/drawable/illustration_accessibility_gesture_two_finger.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:aapt="http://schemas.android.com/aapt"
+    android:width="412dp"
+    android:height="300dp"
+    android:viewportWidth="412"
+    android:viewportHeight="300">
+  <path
+      android:pathData="M384.2,300H27.8C12.5,300 0,287.2 0,271.5v-243C0,12.8 12.5,0 27.8,0h356.5C399.5,0 412,12.8 412,28.5v243.2C412,287.2 399.5,300 384.2,300z"
+      android:fillColor="#FFFFFF"/>
+  <path
+      android:pathData="M274.9,97.7v-9.5c0,-1.3 -1.1,-2.4 -2.4,-2.4V35.9c0,-6.6 -5.3,-11.9 -11.9,-11.9H151.3c-6.6,0 -11.9,5.3 -11.9,11.9v228.2c0,6.6 5.3,11.9 11.9,11.9h109.4c6.6,0 11.9,-5.3 11.9,-11.9V147.6c1.3,0 2.4,-1.1 2.4,-2.4v-23.8c0,-1.3 -1.1,-2.4 -2.4,-2.4v-19C273.9,100.1 274.9,99 274.9,97.7zM270.2,264.1c0,5.2 -4.3,9.5 -9.5,9.5H151.3c-5.2,0 -9.5,-4.3 -9.5,-9.5V35.9c0,-5.2 4.3,-9.5 9.5,-9.5h109.4c5.2,0 9.5,4.3 9.5,9.5V264.1z"
+      android:fillColor="#DADCE0"/>
+  <path
+      android:pathData="M188.6,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6h13.3v-24.6C195.3,212.6 192.3,209.6 188.6,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="188.65"
+          android:endY="209.6335"
+          android:endX="188.65"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+  <path
+      android:pathData="M223.4,209.6c-3.7,0 -6.6,3 -6.6,6.6v24.6H230v-24.6C230,212.6 227.1,209.6 223.4,209.6z">
+    <aapt:attr name="android:fillColor">
+      <gradient
+          android:startY="240.8954"
+          android:startX="223.4"
+          android:endY="209.6335"
+          android:endX="223.4"
+          android:type="linear">
+        <item android:offset="0" android:color="#00669DF6"/>
+        <item android:offset="0.695" android:color="#FF669DF6"/>
+      </gradient>
+    </aapt:attr>
+  </path>
+</vector>
diff --git a/res/layout/accessibility_button_preview.xml b/res/layout/accessibility_button_preview.xml
deleted file mode 100644
index 07cb0ff..0000000
--- a/res/layout/accessibility_button_preview.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2021 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.
--->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:clipToPadding="false"
-    android:importantForAccessibility="noHideDescendants">
-
-    <ImageView
-        android:id="@+id/preview_image"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/accessibility_button_preview_height"
-        android:layout_gravity="center"
-        android:scaleType="fitCenter"
-        android:focusable="false"
-        android:clickable="false"
-        android:adjustViewBounds="true"/>
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/accessibility_captions_preview.xml b/res/layout/accessibility_captions_preview.xml
deleted file mode 100644
index 1818e64..0000000
--- a/res/layout/accessibility_captions_preview.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 2020 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.
--->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <ImageView
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/captioning_preview_height"
-        android:contentDescription="@null"
-        android:scaleType="fitCenter"
-        android:src="@drawable/accessibility_captions" />
-
-</FrameLayout>
diff --git a/res/layout/accessibility_edit_shortcut_component.xml b/res/layout/accessibility_edit_shortcut_component.xml
index 0d3324f..d54fff6 100644
--- a/res/layout/accessibility_edit_shortcut_component.xml
+++ b/res/layout/accessibility_edit_shortcut_component.xml
@@ -53,11 +53,9 @@
 
     </LinearLayout>
 
-    <ImageView
-        android:id="@+id/image"
-        android:layout_width="@dimen/accessibility_imageview_size"
-        android:layout_height="@dimen/accessibility_imageview_size"
-        android:layout_marginStart="44dp"
-        android:scaleType="fitCenter" />
+    <include layout="@layout/accessibility_lottie_animation_view"
+             android:layout_width="match_parent"
+             android:layout_height="wrap_content"
+             android:layout_marginStart="44dp"/>
 
 </LinearLayout>
diff --git a/res/layout/accessibility_lottie_animation_view.xml b/res/layout/accessibility_lottie_animation_view.xml
new file mode 100644
index 0000000..f4638be
--- /dev/null
+++ b/res/layout/accessibility_lottie_animation_view.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright (C) 2021 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
+  -->
+
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/illustration_frame"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <ImageView
+        android:id="@+id/image_background"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:maxHeight="@dimen/accessibility_imageview_size"
+        android:src="@drawable/protection_background"
+        android:adjustViewBounds="true"/>
+
+    <com.airbnb.lottie.LottieAnimationView
+        android:id="@+id/image"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:maxHeight="@dimen/accessibility_imageview_size"
+        android:adjustViewBounds="true"/>
+
+</FrameLayout>
diff --git a/res/layout/dialog_single_radio_choice_list_item.xml b/res/layout/dialog_single_radio_choice_list_item.xml
index 49ef352..106a8a5 100644
--- a/res/layout/dialog_single_radio_choice_list_item.xml
+++ b/res/layout/dialog_single_radio_choice_list_item.xml
@@ -55,7 +55,7 @@
 
     <ImageView
         android:id="@+id/image"
-        android:layout_width="@dimen/accessibility_imageview_size"
+        android:layout_width="match_parent"
         android:layout_height="@dimen/accessibility_imageview_size"
         android:layout_marginTop="16dp"
         android:scaleType="fitStart"
diff --git a/res/layout/face_enroll_introduction.xml b/res/layout/face_enroll_introduction.xml
index c1c9ac6..5e7a6a1 100644
--- a/res/layout/face_enroll_introduction.xml
+++ b/res/layout/face_enroll_introduction.xml
@@ -108,6 +108,29 @@
             </LinearLayout>
 
             <LinearLayout
+                android:id="@+id/info_row_less_secure"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:visibility="gone">
+
+                <ImageView
+                    android:id="@+id/icon_less_secure"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/ic_info_outline_24dp"/>
+                <Space
+                    android:layout_width="16dp"
+                    android:layout_height="wrap_content"/>
+                <TextView
+                    android:id="@+id/info_message_less_secure"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    style="@style/BiometricEnrollIntroMessage"
+                    android:text="@string/security_settings_face_enroll_introduction_info_less_secure" />
+            </LinearLayout>
+
+            <LinearLayout
                 android:id="@+id/info_row_require_eyes"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
diff --git a/res/layout/panel_layout.xml b/res/layout/panel_layout.xml
index 9e15f15..4258c20 100644
--- a/res/layout/panel_layout.xml
+++ b/res/layout/panel_layout.xml
@@ -18,8 +18,9 @@
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/panel_container"
-    android:layout_width="match_parent"
+    android:layout_width="@dimen/settings_panel_width"
     android:layout_height="wrap_content"
+    android:layout_gravity="center_horizontal"
     android:background="@drawable/settings_panel_rounded_top_corner_background" >
 
     <LinearLayout
diff --git a/res/layout/settings_summary_preference.xml b/res/layout/settings_summary_preference.xml
index c4b6c1c..61f27ca 100644
--- a/res/layout/settings_summary_preference.xml
+++ b/res/layout/settings_summary_preference.xml
@@ -30,7 +30,7 @@
         android:layout_marginBottom="5dp"
         android:fontFamily="@*android:string/config_headlineFontFamily"
         android:paddingTop="0dp"
-        android:textColor="?android:attr/colorAccent"
+        android:textColor="?android:attr/textColorPrimary"
         android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Display1"
         />
 
@@ -45,9 +45,9 @@
     <ProgressBar
         android:id="@+id/color_bar"
         style="?android:attr/progressBarStyleHorizontal"
+        android:scaleY="1"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:progressDrawable="@drawable/color_bar_progress"/>
+        android:layout_height="wrap_content"/>
 
     <LinearLayout
         android:id="@+id/label_bar"
diff --git a/res/layout/tutorial_dialog_launch_by_gesture_navigation_settings.xml b/res/layout/tutorial_dialog_launch_by_gesture_navigation_settings.xml
index 524f7c9..b494e93 100644
--- a/res/layout/tutorial_dialog_launch_by_gesture_navigation_settings.xml
+++ b/res/layout/tutorial_dialog_launch_by_gesture_navigation_settings.xml
@@ -29,11 +29,15 @@
         android:orientation="vertical"
         android:paddingTop="24dp">
 
-        <TextureView
-            android:id="@+id/gesture_tutorial_video"
-            android:layout_width="200dp"
-            android:layout_height="200dp"
-            android:layout_gravity="center_horizontal"/>
+        <ImageView
+            android:id="@+id/image"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxHeight="@dimen/accessibility_imageview_size"
+            android:layout_gravity="center_horizontal"
+            android:adjustViewBounds="true"
+            android:paddingLeft="24dp"
+            android:paddingRight="24dp" />
 
         <LinearLayout
             android:layout_width="match_parent"
diff --git a/res/layout/tutorial_dialog_launch_service_by_gesture_navigation.xml b/res/layout/tutorial_dialog_launch_service_by_gesture_navigation.xml
index 7c4971f..2557737 100644
--- a/res/layout/tutorial_dialog_launch_service_by_gesture_navigation.xml
+++ b/res/layout/tutorial_dialog_launch_service_by_gesture_navigation.xml
@@ -29,11 +29,15 @@
         android:orientation="vertical"
         android:paddingTop="24dp">
 
-        <TextureView
-            android:id="@+id/gesture_tutorial_video"
-            android:layout_width="200dp"
-            android:layout_height="200dp"
-            android:layout_gravity="center_horizontal"/>
+        <ImageView
+            android:id="@+id/image"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:maxHeight="@dimen/accessibility_imageview_size"
+            android:layout_gravity="center_horizontal"
+            android:adjustViewBounds="true"
+            android:paddingLeft="24dp"
+            android:paddingRight="24dp" />
 
         <LinearLayout
             android:layout_width="match_parent"
diff --git a/res/layout/udfps_enroll_find_sensor_layout.xml b/res/layout/udfps_enroll_find_sensor_layout.xml
index 867da19..1b3e0ee 100644
--- a/res/layout/udfps_enroll_find_sensor_layout.xml
+++ b/res/layout/udfps_enroll_find_sensor_layout.xml
@@ -26,7 +26,7 @@
         android:id="@+id/illustration_lottie"
         android:layout_width="match_parent"
         android:layout_height="400dp"
-        android:scaleType="fitCenter"
+        android:scaleType="centerInside"
         app:lottie_imageAssetsFolder="images"
         app:lottie_autoPlay="true"
         app:lottie_loop="true"
diff --git a/res/raw/accessibility_shortcut_type_triple_tap.json b/res/raw/accessibility_shortcut_type_triple_tap.json
new file mode 100644
index 0000000..870e671
--- /dev/null
+++ b/res/raw/accessibility_shortcut_type_triple_tap.json
@@ -0,0 +1,1959 @@
+{
+  "v": "5.6.5",
+  "fr": 60,
+  "ip": 0,
+  "op": 180,
+  "w": 412,
+  "h": 300,
+  "nm": "Triple_Tap_Screen",
+  "ddd": 0,
+  "assets": [
+    {
+      "id": "comp_0",
+      "layers": [
+        {
+          "ddd": 0,
+          "ind": 1,
+          "ty": 4,
+          "nm": ".white",
+          "cl": "white",
+          "hd": true,
+          "sr": 1,
+          "ks": {
+            "o": {
+              "a": 0,
+              "k": 100,
+              "ix": 11
+            },
+            "r": {
+              "a": 0,
+              "k": 0,
+              "ix": 10
+            },
+            "p": {
+              "a": 0,
+              "k": [
+                206,
+                150,
+                0
+              ],
+              "ix": 2
+            },
+            "a": {
+              "a": 0,
+              "k": [
+                0,
+                0,
+                0
+              ],
+              "ix": 1
+            },
+            "s": {
+              "a": 0,
+              "k": [
+                100,
+                100,
+                100
+              ],
+              "ix": 6
+            }
+          },
+          "ao": 0,
+          "shapes": [
+            {
+              "ty": "gr",
+              "it": [
+                {
+                  "ind": 0,
+                  "ty": "sh",
+                  "ix": 1,
+                  "ks": {
+                    "a": 0,
+                    "k": {
+                      "i": [
+                        [
+                          15.4,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          15.4
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          -15.4,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          -15.4
+                        ],
+                        [
+                          0,
+                          0
+                        ]
+                      ],
+                      "o": [
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          -15.4,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          -15.4
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          15.4,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          15.4
+                        ]
+                      ],
+                      "v": [
+                        [
+                          178,
+                          150
+                        ],
+                        [
+                          -178,
+                          150
+                        ],
+                        [
+                          -206,
+                          122
+                        ],
+                        [
+                          -206,
+                          -122
+                        ],
+                        [
+                          -178,
+                          -150
+                        ],
+                        [
+                          178,
+                          -150
+                        ],
+                        [
+                          206,
+                          -122
+                        ],
+                        [
+                          206,
+                          122
+                        ]
+                      ],
+                      "c": true
+                    },
+                    "ix": 2
+                  },
+                  "nm": "Path 1",
+                  "mn": "ADBE Vector Shape - Group",
+                  "hd": false
+                },
+                {
+                  "ty": "fl",
+                  "c": {
+                    "a": 0,
+                    "k": [
+                      1,
+                      1,
+                      1,
+                      1
+                    ],
+                    "ix": 4
+                  },
+                  "o": {
+                    "a": 0,
+                    "k": 100,
+                    "ix": 5
+                  },
+                  "r": 1,
+                  "bm": 0,
+                  "nm": "Fill 1",
+                  "mn": "ADBE Vector Graphic - Fill",
+                  "hd": false
+                },
+                {
+                  "ty": "tr",
+                  "p": {
+                    "a": 0,
+                    "k": [
+                      0,
+                      0
+                    ],
+                    "ix": 2
+                  },
+                  "a": {
+                    "a": 0,
+                    "k": [
+                      0,
+                      0
+                    ],
+                    "ix": 1
+                  },
+                  "s": {
+                    "a": 0,
+                    "k": [
+                      100,
+                      100
+                    ],
+                    "ix": 3
+                  },
+                  "r": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 6
+                  },
+                  "o": {
+                    "a": 0,
+                    "k": 100,
+                    "ix": 7
+                  },
+                  "sk": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 4
+                  },
+                  "sa": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 5
+                  },
+                  "nm": "Transform"
+                }
+              ],
+              "nm": "Group 1",
+              "np": 2,
+              "cix": 2,
+              "bm": 0,
+              "ix": 1,
+              "mn": "ADBE Vector Group",
+              "hd": false
+            }
+          ],
+          "ip": 0,
+          "op": 1800,
+          "st": 0,
+          "bm": 0
+        }
+      ]
+    }
+  ],
+  "layers": [
+    {
+      "ddd": 0,
+      "ind": 1,
+      "ty": 4,
+      "nm": ".grey200",
+      "cl": "grey200",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 100,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            206,
+            150,
+            0
+          ],
+          "ix": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            1.35,
+            0,
+            0
+          ],
+          "ix": 1
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -73.4
+                    ],
+                    [
+                      -73.4,
+                      0
+                    ],
+                    [
+                      0,
+                      73.4
+                    ],
+                    [
+                      73.4,
+                      0
+                    ]
+                  ],
+                  "o": [
+                    [
+                      -73.4,
+                      0
+                    ],
+                    [
+                      0,
+                      73.4
+                    ],
+                    [
+                      73.4,
+                      0
+                    ],
+                    [
+                      0,
+                      -73.4
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      1.4,
+                      -132.9
+                    ],
+                    [
+                      -131.6,
+                      0
+                    ],
+                    [
+                      1.3,
+                      132.9
+                    ],
+                    [
+                      134.3,
+                      0
+                    ],
+                    [
+                      1.4,
+                      -132.9
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ind": 1,
+              "ty": "sh",
+              "ix": 2,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -24.7,
+                      -24.8
+                    ],
+                    [
+                      0,
+                      -35
+                    ],
+                    [
+                      24.8,
+                      -24.7
+                    ],
+                    [
+                      35,
+                      0
+                    ],
+                    [
+                      24.7,
+                      24.8
+                    ],
+                    [
+                      0,
+                      35
+                    ],
+                    [
+                      -24.8,
+                      24.7
+                    ],
+                    [
+                      -35,
+                      0
+                    ]
+                  ],
+                  "o": [
+                    [
+                      35,
+                      0
+                    ],
+                    [
+                      24.7,
+                      24.7
+                    ],
+                    [
+                      0,
+                      35
+                    ],
+                    [
+                      -24.7,
+                      24.7
+                    ],
+                    [
+                      -35,
+                      0
+                    ],
+                    [
+                      -24.7,
+                      -24.8
+                    ],
+                    [
+                      0,
+                      -35
+                    ],
+                    [
+                      24.7,
+                      -24.7
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      1.4,
+                      -130.9
+                    ],
+                    [
+                      94,
+                      -92.5
+                    ],
+                    [
+                      132.4,
+                      0.1
+                    ],
+                    [
+                      94,
+                      92.7
+                    ],
+                    [
+                      1.4,
+                      131.1
+                    ],
+                    [
+                      -91.2,
+                      92.7
+                    ],
+                    [
+                      -129.6,
+                      0
+                    ],
+                    [
+                      -91.2,
+                      -92.6
+                    ],
+                    [
+                      1.4,
+                      -130.9
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 2",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.909803926945,
+                  0.917647063732,
+                  0.929411768913,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 0,
+      "op": 300,
+      "st": 0,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 2,
+      "ty": 4,
+      "nm": ".grey300",
+      "cl": "grey300",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 100,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            205,
+            150,
+            0
+          ],
+          "ix": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ty": "gr",
+              "it": [
+                {
+                  "ind": 0,
+                  "ty": "sh",
+                  "ix": 1,
+                  "ks": {
+                    "a": 0,
+                    "k": {
+                      "i": [
+                        [
+                          -7.9,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          8
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          1.6
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          2,
+                          1.5
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          6.4,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          6.4
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          1,
+                          -0.7
+                        ],
+                        [
+                          0,
+                          0
+                        ]
+                      ],
+                      "o": [
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          8,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          1.6,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          -1.9,
+                          -1.6
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          6.4
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          -6.4,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          -1,
+                          0.7
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0.1,
+                          7.9
+                        ]
+                      ],
+                      "v": [
+                        [
+                          -64,
+                          75.3
+                        ],
+                        [
+                          69.1,
+                          75.3
+                        ],
+                        [
+                          83.6,
+                          60.8
+                        ],
+                        [
+                          83.6,
+                          -81
+                        ],
+                        [
+                          86.5,
+                          -83.9
+                        ],
+                        [
+                          86.5,
+                          -100.9
+                        ],
+                        [
+                          80.7,
+                          -105.6
+                        ],
+                        [
+                          80.7,
+                          60.8
+                        ],
+                        [
+                          69.1,
+                          72.4
+                        ],
+                        [
+                          -64,
+                          72.4
+                        ],
+                        [
+                          -75.6,
+                          60.8
+                        ],
+                        [
+                          -75.6,
+                          -107.3
+                        ],
+                        [
+                          -78.5,
+                          -105.2
+                        ],
+                        [
+                          -78.5,
+                          60.9
+                        ]
+                      ],
+                      "c": true
+                    },
+                    "ix": 2
+                  },
+                  "nm": "Path 1",
+                  "mn": "ADBE Vector Shape - Group",
+                  "hd": false
+                },
+                {
+                  "ty": "fl",
+                  "c": {
+                    "a": 0,
+                    "k": [
+                      0.854901969433,
+                      0.86274510622,
+                      0.878431379795,
+                      1
+                    ],
+                    "ix": 4
+                  },
+                  "o": {
+                    "a": 0,
+                    "k": 100,
+                    "ix": 5
+                  },
+                  "r": 1,
+                  "bm": 0,
+                  "nm": "Fill 1",
+                  "mn": "ADBE Vector Graphic - Fill",
+                  "hd": false
+                },
+                {
+                  "ty": "tr",
+                  "p": {
+                    "a": 0,
+                    "k": [
+                      0,
+                      0
+                    ],
+                    "ix": 2
+                  },
+                  "a": {
+                    "a": 0,
+                    "k": [
+                      0,
+                      0
+                    ],
+                    "ix": 1
+                  },
+                  "s": {
+                    "a": 0,
+                    "k": [
+                      100,
+                      100
+                    ],
+                    "ix": 3
+                  },
+                  "r": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 6
+                  },
+                  "o": {
+                    "a": 0,
+                    "k": 100,
+                    "ix": 7
+                  },
+                  "sk": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 4
+                  },
+                  "sa": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 5
+                  },
+                  "nm": "Transform"
+                }
+              ],
+              "nm": "Group 1",
+              "np": 2,
+              "cix": 2,
+              "bm": 0,
+              "ix": 1,
+              "mn": "ADBE Vector Group",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 1",
+          "np": 1,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 0,
+      "op": 300,
+      "st": 0,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 3,
+      "ty": 4,
+      "nm": "cursor 5",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 36,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 39.582,
+              "s": [
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 44.953,
+              "s": [
+                100
+              ]
+            },
+            {
+              "t": 55.697265625,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            207.641,
+            154.48,
+            0
+          ],
+          "ix": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -180.5,
+            -165.5,
+            0
+          ],
+          "ix": 1
+        },
+        "s": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0,
+                  0,
+                  0
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.45,
+                  0.45,
+                  0.45
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 37.791,
+              "s": [
+                27.252,
+                27.252,
+                100
+              ]
+            },
+            {
+              "t": 59,
+              "s": [
+                56.661,
+                56.661,
+                100
+              ]
+            }
+          ],
+          "ix": 6
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  63.109,
+                  63.109
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  1,
+                  0.182245725744,
+                  0.894323072246,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 1,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  1,
+                  0.522196631338,
+                  0.9762855081,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 50,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -180.5,
+                  -165.5
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 36,
+      "op": 59,
+      "st": -1,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 4,
+      "ty": 4,
+      "nm": "cursor 4",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 22,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 25.58,
+              "s": [
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 30.953,
+              "s": [
+                100
+              ]
+            },
+            {
+              "t": 41.697265625,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            207.641,
+            154.48,
+            0
+          ],
+          "ix": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -180.5,
+            -165.5,
+            0
+          ],
+          "ix": 1
+        },
+        "s": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0,
+                  0,
+                  0
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.45,
+                  0.45,
+                  0.45
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 23.789,
+              "s": [
+                27.252,
+                27.252,
+                100
+              ]
+            },
+            {
+              "t": 45,
+              "s": [
+                56.661,
+                56.661,
+                100
+              ]
+            }
+          ],
+          "ix": 6
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  63.109,
+                  63.109
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  1,
+                  0.182245725744,
+                  0.894323072246,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 1,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  1,
+                  0.522196631338,
+                  0.9762855081,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 50,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -180.5,
+                  -165.5
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 22,
+      "op": 45,
+      "st": -3,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 5,
+      "ty": 4,
+      "nm": "cursor",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 8,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 11.582,
+              "s": [
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 16.953,
+              "s": [
+                100
+              ]
+            },
+            {
+              "t": 27.697265625,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            207.641,
+            154.48,
+            0
+          ],
+          "ix": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -180.5,
+            -165.5,
+            0
+          ],
+          "ix": 1
+        },
+        "s": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0,
+                  0,
+                  0
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.45,
+                  0.45,
+                  0.45
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 9.791,
+              "s": [
+                27.252,
+                27.252,
+                100
+              ]
+            },
+            {
+              "t": 31,
+              "s": [
+                56.661,
+                56.661,
+                100
+              ]
+            }
+          ],
+          "ix": 6
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  63.109,
+                  63.109
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  1,
+                  0.182245725744,
+                  0.894323072246,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 1,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  1,
+                  0.522196631338,
+                  0.9762855081,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 50,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -180.5,
+                  -165.5
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 8,
+      "op": 31,
+      "st": -5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 6,
+      "ty": 0,
+      "nm": "BG_White",
+      "refId": "comp_0",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 100,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            206,
+            150,
+            0
+          ],
+          "ix": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            206,
+            150,
+            0
+          ],
+          "ix": 1
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6
+        }
+      },
+      "ao": 0,
+      "w": 412,
+      "h": 300,
+      "ip": 0,
+      "op": 1800,
+      "st": 0,
+      "bm": 0
+    }
+  ],
+  "markers": []
+}
\ No newline at end of file
diff --git a/res/raw/illustration_accessibility_gesture_three_finger.mp4 b/res/raw/illustration_accessibility_gesture_three_finger.mp4
deleted file mode 100644
index d48371b..0000000
--- a/res/raw/illustration_accessibility_gesture_three_finger.mp4
+++ /dev/null
Binary files differ
diff --git a/res/raw/illustration_accessibility_gesture_two_finger.mp4 b/res/raw/illustration_accessibility_gesture_two_finger.mp4
deleted file mode 100644
index 7607abc..0000000
--- a/res/raw/illustration_accessibility_gesture_two_finger.mp4
+++ /dev/null
Binary files differ
diff --git a/res/raw/udfps_edu_a11y_lottie.json b/res/raw/udfps_edu_a11y_lottie.json
new file mode 100644
index 0000000..b1ffc9e
--- /dev/null
+++ b/res/raw/udfps_edu_a11y_lottie.json
@@ -0,0 +1,8243 @@
+{
+  "v": "5.7.6",
+  "fr": 60,
+  "ip": 0,
+  "op": 601,
+  "w": 1650,
+  "h": 2900,
+  "nm": "UDFPS_EDU_LOTTIE_A11y_052422",
+  "ddd": 0,
+  "assets": [
+    {
+      "id": "comp_0",
+      "layers": [
+        {
+          "ddd": 0,
+          "ind": 1,
+          "ty": 4,
+          "nm": "Fill 12",
+          "sr": 1,
+          "ks": {
+            "o": {
+              "a": 0,
+              "k": 100,
+              "ix": 11
+            },
+            "r": {
+              "a": 0,
+              "k": 0,
+              "ix": 10
+            },
+            "p": {
+              "a": 0,
+              "k": [
+                53.488,
+                54.901,
+                0
+              ],
+              "ix": 2,
+              "l": 2
+            },
+            "a": {
+              "a": 0,
+              "k": [
+                0,
+                0,
+                0
+              ],
+              "ix": 1,
+              "l": 2
+            },
+            "s": {
+              "a": 0,
+              "k": [
+                100,
+                100,
+                100
+              ],
+              "ix": 6,
+              "l": 2
+            }
+          },
+          "ao": 0,
+          "shapes": [
+            {
+              "ty": "gr",
+              "it": [
+                {
+                  "ind": 0,
+                  "ty": "sh",
+                  "ix": 1,
+                  "ks": {
+                    "a": 0,
+                    "k": {
+                      "i": [
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ]
+                      ],
+                      "o": [
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ],
+                        [
+                          0,
+                          0
+                        ]
+                      ],
+                      "v": [
+                        [
+                          -16.824,
+                          -0.768
+                        ],
+                        [
+                          -4.154,
+                          11.903
+                        ],
+                        [
+                          16.824,
+                          -9.075
+                        ],
+                        [
+                          13.995,
+                          -11.903
+                        ],
+                        [
+                          -4.154,
+                          6.247
+                        ],
+                        [
+                          -13.996,
+                          -3.596
+                        ]
+                      ],
+                      "c": true
+                    },
+                    "ix": 2
+                  },
+                  "nm": "Path 1",
+                  "mn": "ADBE Vector Shape - Group",
+                  "hd": false
+                },
+                {
+                  "ty": "fl",
+                  "c": {
+                    "a": 0,
+                    "k": [
+                      0.4,
+                      0.61568627451,
+                      0.988235294118,
+                      1
+                    ],
+                    "ix": 4
+                  },
+                  "o": {
+                    "a": 0,
+                    "k": 100,
+                    "ix": 5
+                  },
+                  "r": 1,
+                  "bm": 0,
+                  "nm": "Fill 1",
+                  "mn": "ADBE Vector Graphic - Fill",
+                  "hd": false
+                },
+                {
+                  "ty": "tr",
+                  "p": {
+                    "a": 0,
+                    "k": [
+                      0,
+                      0
+                    ],
+                    "ix": 2
+                  },
+                  "a": {
+                    "a": 0,
+                    "k": [
+                      0,
+                      0
+                    ],
+                    "ix": 1
+                  },
+                  "s": {
+                    "a": 0,
+                    "k": [
+                      200,
+                      200
+                    ],
+                    "ix": 3
+                  },
+                  "r": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 6
+                  },
+                  "o": {
+                    "a": 0,
+                    "k": 100,
+                    "ix": 7
+                  },
+                  "sk": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 4
+                  },
+                  "sa": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 5
+                  },
+                  "nm": "Transform"
+                }
+              ],
+              "nm": "Fill 12",
+              "np": 2,
+              "cix": 2,
+              "bm": 0,
+              "ix": 1,
+              "mn": "ADBE Vector Group",
+              "hd": false
+            }
+          ],
+          "ip": 0,
+          "op": 2100,
+          "st": 0,
+          "bm": 0
+        },
+        {
+          "ddd": 0,
+          "ind": 2,
+          "ty": 4,
+          "nm": "Path",
+          "sr": 1,
+          "ks": {
+            "o": {
+              "a": 0,
+              "k": 100,
+              "ix": 11
+            },
+            "r": {
+              "a": 0,
+              "k": 0,
+              "ix": 10
+            },
+            "p": {
+              "a": 0,
+              "k": [
+                54,
+                54,
+                0
+              ],
+              "ix": 2,
+              "l": 2
+            },
+            "a": {
+              "a": 0,
+              "k": [
+                0,
+                0,
+                0
+              ],
+              "ix": 1,
+              "l": 2
+            },
+            "s": {
+              "a": 0,
+              "k": [
+                100,
+                100,
+                100
+              ],
+              "ix": 6,
+              "l": 2
+            }
+          },
+          "ao": 0,
+          "shapes": [
+            {
+              "ty": "gr",
+              "it": [
+                {
+                  "ind": 0,
+                  "ty": "sh",
+                  "ix": 1,
+                  "ks": {
+                    "a": 0,
+                    "k": {
+                      "i": [
+                        [
+                          0,
+                          12.703
+                        ],
+                        [
+                          12.703,
+                          0
+                        ],
+                        [
+                          0,
+                          -12.703
+                        ],
+                        [
+                          -12.703,
+                          0
+                        ]
+                      ],
+                      "o": [
+                        [
+                          0,
+                          -12.703
+                        ],
+                        [
+                          -12.703,
+                          0
+                        ],
+                        [
+                          0,
+                          12.703
+                        ],
+                        [
+                          12.703,
+                          0
+                        ]
+                      ],
+                      "v": [
+                        [
+                          23.037,
+                          0
+                        ],
+                        [
+                          0,
+                          -23.038
+                        ],
+                        [
+                          -23.037,
+                          0
+                        ],
+                        [
+                          0,
+                          23.038
+                        ]
+                      ],
+                      "c": true
+                    },
+                    "ix": 2
+                  },
+                  "nm": "Path 1",
+                  "mn": "ADBE Vector Shape - Group",
+                  "hd": false
+                },
+                {
+                  "ty": "fl",
+                  "c": {
+                    "a": 0,
+                    "k": [
+                      0.1254902035,
+                      0.129411771894,
+                      0.141176477075,
+                      1
+                    ],
+                    "ix": 4
+                  },
+                  "o": {
+                    "a": 0,
+                    "k": 100,
+                    "ix": 5
+                  },
+                  "r": 1,
+                  "bm": 0,
+                  "nm": "Fill 1",
+                  "mn": "ADBE Vector Graphic - Fill",
+                  "hd": false
+                },
+                {
+                  "ty": "tr",
+                  "p": {
+                    "a": 0,
+                    "k": [
+                      0,
+                      0
+                    ],
+                    "ix": 2
+                  },
+                  "a": {
+                    "a": 0,
+                    "k": [
+                      0,
+                      0
+                    ],
+                    "ix": 1
+                  },
+                  "s": {
+                    "a": 0,
+                    "k": [
+                      200,
+                      200
+                    ],
+                    "ix": 3
+                  },
+                  "r": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 6
+                  },
+                  "o": {
+                    "a": 0,
+                    "k": 100,
+                    "ix": 7
+                  },
+                  "sk": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 4
+                  },
+                  "sa": {
+                    "a": 0,
+                    "k": 0,
+                    "ix": 5
+                  },
+                  "nm": "Transform"
+                }
+              ],
+              "nm": "Path",
+              "np": 2,
+              "cix": 2,
+              "bm": 0,
+              "ix": 1,
+              "mn": "ADBE Vector Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.717647058824,
+                  0.949019607843,
+                  0.623529411765,
+                  1
+                ],
+                "ix": 3,
+                "x": "var $bm_rt;\n$bm_rt = thisComp.layer('Fill 12').content('Fill 12').content('Fill 1').color;"
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 15,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            }
+          ],
+          "ip": 0,
+          "op": 2100,
+          "st": 0,
+          "bm": 0
+        }
+      ]
+    }
+  ],
+  "layers": [
+    {
+      "ddd": 0,
+      "ind": 1,
+      "ty": 3,
+      "nm": "Null 58",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 0,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            1334.91,
+            1644.843,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            232,
+            232,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "ip": 327.5,
+      "op": 2802.5,
+      "st": 402.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 2,
+      "ty": 4,
+      "nm": "PHONE_OUTLINE 2",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 571,
+              "s": [
+                0
+              ]
+            },
+            {
+              "t": 593.5,
+              "s": [
+                100
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            837,
+            1430,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            929.1,
+            929.1,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      5.243,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      5.244
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -5.243,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -5.244
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      5.244
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -5.243,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -5.244
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      5.243,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      63.454,
+                      114.112
+                    ],
+                    [
+                      53.945,
+                      123.622
+                    ],
+                    [
+                      -55.413,
+                      123.622
+                    ],
+                    [
+                      -64.922,
+                      114.112
+                    ],
+                    [
+                      -64.922,
+                      -114.112
+                    ],
+                    [
+                      -55.413,
+                      -123.622
+                    ],
+                    [
+                      53.945,
+                      -123.622
+                    ],
+                    [
+                      63.454,
+                      -114.112
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ind": 1,
+              "ty": "sh",
+              "ix": 2,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      1.313
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      1.313,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      6.554,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -6.555
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -6.554,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      6.555
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      1.313
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      1.313,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -1.313
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -6.555
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -6.554,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      6.555
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      6.554,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      1.313,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -1.313
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      1.313,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      68.209,
+                      -52.302
+                    ],
+                    [
+                      68.209,
+                      -61.811
+                    ],
+                    [
+                      65.832,
+                      -64.188
+                    ],
+                    [
+                      65.832,
+                      -114.112
+                    ],
+                    [
+                      53.945,
+                      -126
+                    ],
+                    [
+                      -55.413,
+                      -126
+                    ],
+                    [
+                      -67.3,
+                      -114.112
+                    ],
+                    [
+                      -67.3,
+                      114.112
+                    ],
+                    [
+                      -55.413,
+                      126
+                    ],
+                    [
+                      53.945,
+                      126
+                    ],
+                    [
+                      65.832,
+                      114.112
+                    ],
+                    [
+                      65.832,
+                      -2.378
+                    ],
+                    [
+                      68.209,
+                      -4.755
+                    ],
+                    [
+                      68.209,
+                      -28.528
+                    ],
+                    [
+                      65.832,
+                      -30.906
+                    ],
+                    [
+                      65.832,
+                      -49.924
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 2",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.368627458811,
+                  0.368627458811,
+                  0.368627458811,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 467.5,
+      "op": 2942.5,
+      "st": 542.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 3,
+      "ty": 0,
+      "nm": "â–½ checkmark",
+      "parent": 1,
+      "refId": "comp_0",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.78
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 472,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 478,
+              "s": [
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.52
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 548,
+              "s": [
+                100
+              ]
+            },
+            {
+              "t": 555,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            0.507,
+            0.564,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            54.507,
+            54.564,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0,
+                  0,
+                  0.667
+                ],
+                "y": [
+                  1.015,
+                  1.015,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.363,
+                  0.363,
+                  0.333
+                ],
+                "y": [
+                  0.038,
+                  0.038,
+                  0
+                ]
+              },
+              "t": 473,
+              "s": [
+                0,
+                0,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.474,
+                  0.474,
+                  0.667
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.651,
+                  0.651,
+                  0.333
+                ],
+                "y": [
+                  0.331,
+                  0.331,
+                  0
+                ]
+              },
+              "t": 493,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 513,
+              "s": [
+                100,
+                100,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 545,
+              "s": [
+                100,
+                100,
+                100
+              ]
+            },
+            {
+              "t": 555,
+              "s": [
+                0,
+                0,
+                100
+              ]
+            }
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "w": 108,
+      "h": 108,
+      "ip": 327.5,
+      "op": 2427.5,
+      "st": 327.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 4,
+      "ty": 3,
+      "nm": "Null 57 - COLOR CONTROLLER",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 0,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            837,
+            774,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "ef": [
+        {
+          "ty": 5,
+          "nm": "BLUE400",
+          "np": 3,
+          "mn": "ADBE Color Control",
+          "ix": 1,
+          "en": 1,
+          "ef": [
+            {
+              "ty": 2,
+              "nm": "Color",
+              "mn": "ADBE Color Control-0001",
+              "ix": 1,
+              "v": {
+                "a": 0,
+                "k": [
+                  0.40000000596,
+                  0.615686297417,
+                  0.988235294819,
+                  1
+                ],
+                "ix": 1
+              }
+            }
+          ]
+        }
+      ],
+      "ip": -20,
+      "op": 2455,
+      "st": 55,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 5,
+      "ty": 3,
+      "nm": "MAIN_MOVEMENT",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 0,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            837,
+            2098,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.07,
+                  0.07,
+                  0.07
+                ],
+                "y": [
+                  0.985,
+                  0.985,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0.015,
+                  0.015,
+                  0
+                ]
+              },
+              "t": 90,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 100.035,
+              "s": [
+                95,
+                95,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 130.133,
+              "s": [
+                95,
+                95,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1.025
+                ]
+              },
+              "o": {
+                "x": [
+                  0.439,
+                  0.439,
+                  0.439
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 135,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.07,
+                  0.07,
+                  0.07
+                ],
+                "y": [
+                  0.701,
+                  0.701,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0.299,
+                  0.299,
+                  0
+                ]
+              },
+              "t": 145,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  0.833,
+                  0.833,
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0.167,
+                  0.167,
+                  0.167
+                ]
+              },
+              "t": 152.5,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.6,
+                  0.6,
+                  0.6
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0.167,
+                  0.167,
+                  -0.833
+                ]
+              },
+              "t": 157.5,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.07,
+                  0.07,
+                  0.07
+                ],
+                "y": [
+                  0.97,
+                  0.97,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0.03,
+                  0.03,
+                  0
+                ]
+              },
+              "t": 165.246,
+              "s": [
+                100,
+                100,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 175.281,
+              "s": [
+                95,
+                95,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 205.377,
+              "s": [
+                95,
+                95,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  0.833,
+                  0.833,
+                  0.175
+                ]
+              },
+              "o": {
+                "x": [
+                  0.341,
+                  0.341,
+                  0.341
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 210.391,
+              "s": [
+                100,
+                100,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.07,
+                  0.07,
+                  0.07
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 220,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  0.833,
+                  0.833,
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0.167,
+                  0.167,
+                  0.167
+                ]
+              },
+              "t": 227.5,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.621,
+                  0.621,
+                  0.621
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0,
+                  0,
+                  0.102
+                ]
+              },
+              "t": 232.5,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.07,
+                  0.07,
+                  0.07
+                ],
+                "y": [
+                  0.984,
+                  0.984,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0.016,
+                  0.016,
+                  0
+                ]
+              },
+              "t": 240,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.07,
+                  0.07,
+                  0.07
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 250.527,
+              "s": [
+                95,
+                95,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.316,
+                  0.316,
+                  0.316
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 285,
+              "s": [
+                95,
+                95,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.577,
+                  0.577,
+                  0.577
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.253,
+                  0.253,
+                  0.253
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 295,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  0.925
+                ]
+              },
+              "o": {
+                "x": [
+                  0.299,
+                  0.299,
+                  0.299
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 302.5,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.627,
+                  0.627,
+                  0.627
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0,
+                  0,
+                  0.262
+                ]
+              },
+              "t": 307.5,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.07,
+                  0.07,
+                  0.07
+                ],
+                "y": [
+                  0.984,
+                  0.984,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0.016,
+                  0.016,
+                  0
+                ]
+              },
+              "t": 365,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.64,
+                  0.64,
+                  0.64
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 375.771,
+              "s": [
+                95,
+                95,
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833,
+                  0.833,
+                  0.833
+                ],
+                "y": [
+                  1,
+                  1,
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167,
+                  0.167,
+                  0.167
+                ],
+                "y": [
+                  0,
+                  0,
+                  0
+                ]
+              },
+              "t": 508.369,
+              "s": [
+                95,
+                95,
+                100
+              ]
+            },
+            {
+              "t": 515,
+              "s": [
+                105,
+                105,
+                100
+              ]
+            }
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "ip": -70,
+      "op": 2517.5,
+      "st": 117.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 6,
+      "ty": 4,
+      "nm": "ic_lock_24px",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 100,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            -15.442,
+            -1294.944,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      2.2,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      5.52,
+                      0
+                    ],
+                    [
+                      0,
+                      -5.52
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -2.2
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -2.2,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      2.2
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -5.52
+                    ],
+                    [
+                      -5.52,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -2.2,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      2.2
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      2.2,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -2.2
+                    ]
+                  ],
+                  "v": [
+                    [
+                      12,
+                      -7
+                    ],
+                    [
+                      10,
+                      -7
+                    ],
+                    [
+                      10,
+                      -11
+                    ],
+                    [
+                      0,
+                      -21
+                    ],
+                    [
+                      -10,
+                      -11
+                    ],
+                    [
+                      -10,
+                      -7
+                    ],
+                    [
+                      -12,
+                      -7
+                    ],
+                    [
+                      -16,
+                      -3
+                    ],
+                    [
+                      -16,
+                      17
+                    ],
+                    [
+                      -12,
+                      21
+                    ],
+                    [
+                      12,
+                      21
+                    ],
+                    [
+                      16,
+                      17
+                    ],
+                    [
+                      16,
+                      -3
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ind": 1,
+              "ty": "sh",
+              "ix": 2,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -3.32,
+                      0
+                    ],
+                    [
+                      0,
+                      -3.32
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      -3.32
+                    ],
+                    [
+                      3.32,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      -6,
+                      -11
+                    ],
+                    [
+                      0,
+                      -17
+                    ],
+                    [
+                      6,
+                      -11
+                    ],
+                    [
+                      6,
+                      -7
+                    ],
+                    [
+                      -6,
+                      -7
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 2",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ind": 2,
+              "ty": "sh",
+              "ix": 3,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      -12,
+                      -3
+                    ],
+                    [
+                      -12,
+                      17
+                    ],
+                    [
+                      12,
+                      17
+                    ],
+                    [
+                      12,
+                      -3
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 3",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ind": 3,
+              "ty": "sh",
+              "ix": 4,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      -2.2,
+                      0
+                    ],
+                    [
+                      0,
+                      2.2
+                    ],
+                    [
+                      2.2,
+                      0
+                    ],
+                    [
+                      0,
+                      -2.2
+                    ]
+                  ],
+                  "o": [
+                    [
+                      2.2,
+                      0
+                    ],
+                    [
+                      0,
+                      -2.2
+                    ],
+                    [
+                      -2.2,
+                      0
+                    ],
+                    [
+                      0,
+                      2.2
+                    ]
+                  ],
+                  "v": [
+                    [
+                      0,
+                      11
+                    ],
+                    [
+                      4,
+                      7
+                    ],
+                    [
+                      0,
+                      3
+                    ],
+                    [
+                      -4,
+                      7
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 4",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "mm",
+              "mm": 5,
+              "nm": "Merge Paths 1",
+              "mn": "ADBE Vector Filter - Merge",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.717647058824,
+                  0.949019607843,
+                  0.623529411765,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  600.243,
+                  600.243
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "ic_lock_24px",
+          "np": 6,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": -20,
+      "op": 2455,
+      "st": 55,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 7,
+      "ty": 4,
+      "nm": "GREY_FINGER",
+      "parent": 5,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 100,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            3.5,
+            -3,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            28,
+            34,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            527,
+            527,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      3.703,
+                      0
+                    ],
+                    [
+                      2.328,
+                      1.76
+                    ]
+                  ],
+                  "o": [
+                    [
+                      -2.42,
+                      2.09
+                    ],
+                    [
+                      -3.355,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      9.038,
+                      -1.687
+                    ],
+                    [
+                      -0.348,
+                      1.687
+                    ],
+                    [
+                      -9.038,
+                      -1.118
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.305882352941,
+                  0.309803921569,
+                  0.321568627451,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  27.933,
+                  54.313
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 1",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -7.847,
+                      0
+                    ],
+                    [
+                      0,
+                      -7.095
+                    ]
+                  ],
+                  "o": [
+                    [
+                      -1.027,
+                      -2.676
+                    ],
+                    [
+                      0,
+                      -7.095
+                    ],
+                    [
+                      7.847,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      -12.723,
+                      9.167
+                    ],
+                    [
+                      -13.75,
+                      3.667
+                    ],
+                    [
+                      0,
+                      -9.167
+                    ],
+                    [
+                      13.75,
+                      3.667
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.305882352941,
+                  0.309803921569,
+                  0.321568627451,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  27.584,
+                  35.833
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 2",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 2,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      2.75,
+                      0
+                    ],
+                    [
+                      0.403,
+                      2.384
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      2.2,
+                      0
+                    ],
+                    [
+                      -5.445,
+                      -1.54
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      2.733
+                    ],
+                    [
+                      -2.42,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -0.367,
+                      -2.181
+                    ],
+                    [
+                      -7.92,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      11.376,
+                      -1.824
+                    ],
+                    [
+                      11.376,
+                      -1.293
+                    ],
+                    [
+                      6.408,
+                      3.676
+                    ],
+                    [
+                      1.512,
+                      -0.468
+                    ],
+                    [
+                      0.999,
+                      -3.548
+                    ],
+                    [
+                      -3.456,
+                      -7.324
+                    ],
+                    [
+                      -2.667,
+                      7.324
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.305882352941,
+                  0.309803921569,
+                  0.321568627451,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  29.958,
+                  41.324
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 3",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 3,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -6.875,
+                      0
+                    ],
+                    [
+                      -2.769,
+                      -4.327
+                    ]
+                  ],
+                  "o": [
+                    [
+                      2.768,
+                      -4.327
+                    ],
+                    [
+                      6.876,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      -15.583,
+                      3.667
+                    ],
+                    [
+                      -0.001,
+                      -3.667
+                    ],
+                    [
+                      15.583,
+                      3.667
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.305882352941,
+                  0.309803921569,
+                  0.321568627451,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  27.583,
+                  23.001
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 4",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 4,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -3.666,
+                      0
+                    ],
+                    [
+                      -2.97,
+                      -1.485
+                    ]
+                  ],
+                  "o": [
+                    [
+                      2.97,
+                      -1.485
+                    ],
+                    [
+                      3.667,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      -10.083,
+                      1.164
+                    ],
+                    [
+                      -0.001,
+                      -1.164
+                    ],
+                    [
+                      10.083,
+                      1.164
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.305882352941,
+                  0.309803921569,
+                  0.321568627451,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  27.583,
+                  13.164
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 5",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 5,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "tm",
+          "s": {
+            "a": 1,
+            "k": [
+              {
+                "i": {
+                  "x": [
+                    0
+                  ],
+                  "y": [
+                    1
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.4
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 90,
+                "s": [
+                  100
+                ]
+              },
+              {
+                "i": {
+                  "x": [
+                    0.833
+                  ],
+                  "y": [
+                    1
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 110.035,
+                "s": [
+                  0
+                ]
+              },
+              {
+                "t": 150.197,
+                "s": [
+                  0
+                ],
+                "h": 1
+              },
+              {
+                "t": 152.705,
+                "s": [
+                  100
+                ],
+                "h": 1
+              },
+              {
+                "i": {
+                  "x": [
+                    0
+                  ],
+                  "y": [
+                    1
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.4
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 165.246,
+                "s": [
+                  100
+                ]
+              },
+              {
+                "i": {
+                  "x": [
+                    0.833
+                  ],
+                  "y": [
+                    -14.687
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 185.281,
+                "s": [
+                  0
+                ]
+              },
+              {
+                "t": 225.441,
+                "s": [
+                  0
+                ],
+                "h": 1
+              },
+              {
+                "t": 227.949,
+                "s": [
+                  100
+                ],
+                "h": 1
+              },
+              {
+                "i": {
+                  "x": [
+                    0
+                  ],
+                  "y": [
+                    1
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.4
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 240.494,
+                "s": [
+                  100
+                ]
+              },
+              {
+                "i": {
+                  "x": [
+                    0.833
+                  ],
+                  "y": [
+                    -14.701
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 260,
+                "s": [
+                  0
+                ]
+              },
+              {
+                "t": 300.689,
+                "s": [
+                  0
+                ],
+                "h": 1
+              },
+              {
+                "t": 303.193,
+                "s": [
+                  100
+                ],
+                "h": 1
+              },
+              {
+                "i": {
+                  "x": [
+                    0
+                  ],
+                  "y": [
+                    1
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.4
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 365.74,
+                "s": [
+                  100
+                ]
+              },
+              {
+                "i": {
+                  "x": [
+                    0.833
+                  ],
+                  "y": [
+                    -15.359
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 385,
+                "s": [
+                  0
+                ]
+              },
+              {
+                "t": 518.434,
+                "s": [
+                  0
+                ],
+                "h": 1
+              },
+              {
+                "t": 520.943359375,
+                "s": [
+                  100
+                ],
+                "h": 1
+              }
+            ],
+            "ix": 1
+          },
+          "e": {
+            "a": 1,
+            "k": [
+              {
+                "i": {
+                  "x": [
+                    0.07
+                  ],
+                  "y": [
+                    0.941
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0.059
+                  ]
+                },
+                "t": 130.133,
+                "s": [
+                  100
+                ]
+              },
+              {
+                "i": {
+                  "x": [
+                    0.833
+                  ],
+                  "y": [
+                    1
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 140.146,
+                "s": [
+                  0
+                ]
+              },
+              {
+                "t": 150.197,
+                "s": [
+                  0
+                ],
+                "h": 1
+              },
+              {
+                "t": 152.705,
+                "s": [
+                  100
+                ],
+                "h": 1
+              },
+              {
+                "i": {
+                  "x": [
+                    0
+                  ],
+                  "y": [
+                    1
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.4
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 205.377,
+                "s": [
+                  100
+                ]
+              },
+              {
+                "i": {
+                  "x": [
+                    0.833
+                  ],
+                  "y": [
+                    -12.439
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 215,
+                "s": [
+                  0
+                ]
+              },
+              {
+                "t": 225.441,
+                "s": [
+                  0
+                ],
+                "h": 1
+              },
+              {
+                "t": 227.949,
+                "s": [
+                  100
+                ],
+                "h": 1
+              },
+              {
+                "i": {
+                  "x": [
+                    0.07
+                  ],
+                  "y": [
+                    0.941
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0.059
+                  ]
+                },
+                "t": 280.623,
+                "s": [
+                  100
+                ]
+              },
+              {
+                "i": {
+                  "x": [
+                    0.833
+                  ],
+                  "y": [
+                    -12.342
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 290.641,
+                "s": [
+                  0
+                ]
+              },
+              {
+                "t": 300.689,
+                "s": [
+                  0
+                ],
+                "h": 1
+              },
+              {
+                "t": 303.193,
+                "s": [
+                  100
+                ],
+                "h": 1
+              },
+              {
+                "i": {
+                  "x": [
+                    0.07
+                  ],
+                  "y": [
+                    0.97
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0.03
+                  ]
+                },
+                "t": 508.369,
+                "s": [
+                  100
+                ]
+              },
+              {
+                "i": {
+                  "x": [
+                    0.833
+                  ],
+                  "y": [
+                    -10.133
+                  ]
+                },
+                "o": {
+                  "x": [
+                    0.64
+                  ],
+                  "y": [
+                    0
+                  ]
+                },
+                "t": 513.385,
+                "s": [
+                  0
+                ]
+              },
+              {
+                "t": 518.434,
+                "s": [
+                  0
+                ],
+                "h": 1
+              },
+              {
+                "t": 520.943359375,
+                "s": [
+                  100
+                ],
+                "h": 1
+              }
+            ],
+            "ix": 2
+          },
+          "o": {
+            "a": 0,
+            "k": 0,
+            "ix": 3
+          },
+          "m": 1,
+          "ix": 6,
+          "nm": "Trim Paths 1",
+          "mn": "ADBE Vector Filter - Trim",
+          "hd": false
+        }
+      ],
+      "ip": -20,
+      "op": 4855,
+      "st": 55,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 8,
+      "ty": 4,
+      "nm": "BLUE_FINGER",
+      "parent": 5,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 100,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            3.5,
+            -3,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            28,
+            34,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            527,
+            527,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      3.703,
+                      0
+                    ],
+                    [
+                      2.328,
+                      1.76
+                    ]
+                  ],
+                  "o": [
+                    [
+                      -2.42,
+                      2.09
+                    ],
+                    [
+                      -3.355,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      9.038,
+                      -1.687
+                    ],
+                    [
+                      -0.348,
+                      1.687
+                    ],
+                    [
+                      -9.038,
+                      -1.118
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.4,
+                  0.61568627451,
+                  0.964705882353,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  27.933,
+                  54.313
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 1",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -7.847,
+                      0
+                    ],
+                    [
+                      0,
+                      -7.095
+                    ]
+                  ],
+                  "o": [
+                    [
+                      -1.027,
+                      -2.676
+                    ],
+                    [
+                      0,
+                      -7.095
+                    ],
+                    [
+                      7.847,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      -12.723,
+                      9.167
+                    ],
+                    [
+                      -13.75,
+                      3.667
+                    ],
+                    [
+                      0,
+                      -9.167
+                    ],
+                    [
+                      13.75,
+                      3.667
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.4,
+                  0.61568627451,
+                  0.964705882353,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  27.584,
+                  35.833
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 2",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 2,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      2.75,
+                      0
+                    ],
+                    [
+                      0.403,
+                      2.384
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      2.2,
+                      0
+                    ],
+                    [
+                      -5.445,
+                      -1.54
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      2.733
+                    ],
+                    [
+                      -2.42,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -0.367,
+                      -2.181
+                    ],
+                    [
+                      -7.92,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      11.376,
+                      -1.824
+                    ],
+                    [
+                      11.376,
+                      -1.293
+                    ],
+                    [
+                      6.408,
+                      3.676
+                    ],
+                    [
+                      1.512,
+                      -0.468
+                    ],
+                    [
+                      0.999,
+                      -3.548
+                    ],
+                    [
+                      -3.456,
+                      -7.324
+                    ],
+                    [
+                      -2.667,
+                      7.324
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.4,
+                  0.61568627451,
+                  0.964705882353,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  29.958,
+                  41.324
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 3",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 3,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -6.875,
+                      0
+                    ],
+                    [
+                      -2.769,
+                      -4.327
+                    ]
+                  ],
+                  "o": [
+                    [
+                      2.768,
+                      -4.327
+                    ],
+                    [
+                      6.876,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      -15.583,
+                      3.667
+                    ],
+                    [
+                      -0.001,
+                      -3.667
+                    ],
+                    [
+                      15.583,
+                      3.667
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.4,
+                  0.61568627451,
+                  0.964705882353,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  27.583,
+                  23.001
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 4",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 4,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -3.666,
+                      0
+                    ],
+                    [
+                      -2.97,
+                      -1.485
+                    ]
+                  ],
+                  "o": [
+                    [
+                      2.97,
+                      -1.485
+                    ],
+                    [
+                      3.667,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      -10.083,
+                      1.164
+                    ],
+                    [
+                      -0.001,
+                      -1.164
+                    ],
+                    [
+                      10.083,
+                      1.164
+                    ]
+                  ],
+                  "c": false
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.4,
+                  0.61568627451,
+                  0.964705882353,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 3,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 10,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  27.583,
+                  13.164
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 5",
+          "np": 2,
+          "cix": 2,
+          "bm": 0,
+          "ix": 5,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": -20,
+      "op": 4855,
+      "st": 55,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 9,
+      "ty": 4,
+      "nm": "BG_Circle_Green",
+      "parent": 5,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 87.5,
+              "s": [
+                33
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 112.5,
+              "s": [
+                12
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 127.5,
+              "s": [
+                12
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 152.5,
+              "s": [
+                33
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 157.5,
+              "s": [
+                33
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 182.5,
+              "s": [
+                12
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 197.5,
+              "s": [
+                12
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 222.5,
+              "s": [
+                33
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 230,
+              "s": [
+                33
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 255,
+              "s": [
+                12
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 280,
+              "s": [
+                12
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 295,
+              "s": [
+                33
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 367.5,
+              "s": [
+                33
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 382.5,
+              "s": [
+                12
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 507.5,
+              "s": [
+                12
+              ]
+            },
+            {
+              "t": 517.5,
+              "s": [
+                33
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            2.91,
+            -13.59,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -13.09,
+            1270.41,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  440,
+                  440
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.964705942191,
+                  0.996078491211,
+                  0.87450986376,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "lc": 1,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.682352941176,
+                  0.796078431373,
+                  0.980392156863,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -13.09,
+                  1270.41
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": -70,
+      "op": 2585,
+      "st": 117.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 10,
+      "ty": 4,
+      "nm": "BG_Circle",
+      "parent": 5,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 0,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            2.91,
+            -13.59,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -13.09,
+            1270.41,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  430,
+                  430
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.964705942191,
+                  0.996078491211,
+                  0.87450986376,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "lc": 1,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.066666666667,
+                  0.086274509804,
+                  0.117647066303,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -13.09,
+                  1270.41
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": -70,
+      "op": 2585,
+      "st": 117.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 11,
+      "ty": 3,
+      "nm": "Null 59 DIALOGUE",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 0,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            840.657,
+            2087.485,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            125,
+            125,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "ip": -20,
+      "op": 2455,
+      "st": 55,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 12,
+      "ty": 4,
+      "nm": "PHONE_OUTLINE",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 60,
+              "s": [
+                100
+              ]
+            },
+            {
+              "t": 72,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            837,
+            1430,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            929.094,
+            929.094,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      5.243,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      5.244
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -5.243,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -5.244
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      5.244
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -5.243,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -5.244
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      5.243,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      63.454,
+                      114.112
+                    ],
+                    [
+                      53.945,
+                      123.622
+                    ],
+                    [
+                      -55.413,
+                      123.622
+                    ],
+                    [
+                      -64.922,
+                      114.112
+                    ],
+                    [
+                      -64.922,
+                      -114.112
+                    ],
+                    [
+                      -55.413,
+                      -123.622
+                    ],
+                    [
+                      53.945,
+                      -123.622
+                    ],
+                    [
+                      63.454,
+                      -114.112
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ind": 1,
+              "ty": "sh",
+              "ix": 2,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      1.313
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      1.313,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      6.554,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -6.555
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -6.554,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      6.555
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      1.313
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      1.313,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -1.313
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -6.555
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      -6.554,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      6.555
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      6.554,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      1.313,
+                      0
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      0,
+                      -1.313
+                    ],
+                    [
+                      0,
+                      0
+                    ],
+                    [
+                      1.313,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      68.209,
+                      -52.302
+                    ],
+                    [
+                      68.209,
+                      -61.811
+                    ],
+                    [
+                      65.832,
+                      -64.188
+                    ],
+                    [
+                      65.832,
+                      -114.112
+                    ],
+                    [
+                      53.945,
+                      -126
+                    ],
+                    [
+                      -55.413,
+                      -126
+                    ],
+                    [
+                      -67.3,
+                      -114.112
+                    ],
+                    [
+                      -67.3,
+                      114.112
+                    ],
+                    [
+                      -55.413,
+                      126
+                    ],
+                    [
+                      53.945,
+                      126
+                    ],
+                    [
+                      65.832,
+                      114.112
+                    ],
+                    [
+                      65.832,
+                      -2.378
+                    ],
+                    [
+                      68.209,
+                      -4.755
+                    ],
+                    [
+                      68.209,
+                      -28.528
+                    ],
+                    [
+                      65.832,
+                      -30.906
+                    ],
+                    [
+                      65.832,
+                      -49.924
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 2",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.368627458811,
+                  0.368627458811,
+                  0.368627458811,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": -20,
+      "op": 79,
+      "st": 55,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 13,
+      "ty": 4,
+      "nm": "CONFIRMATION_",
+      "parent": 11,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.4
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 472.812,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.4
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 485,
+              "s": [
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 540,
+              "s": [
+                100
+              ]
+            },
+            {
+              "t": 565,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            -0.747,
+            -3.075,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -13.09,
+            1270.41,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  1075,
+                  1075
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.400000029919,
+                  0.61568627451,
+                  0.988235353956,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 49,
+                "ix": 5,
+                "x": "var $bm_rt;\n$bm_rt = thisComp.layer('OuterRing - WIDTH CONTROLLER').content('Ellipse 1').content('Stroke 1').strokeWidth;"
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -13.09,
+                  1270.41
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 255,
+      "op": 2570,
+      "st": 102.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 14,
+      "ty": 4,
+      "nm": "MATTE_BOTTOM",
+      "parent": 11,
+      "td": 1,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 100,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            14.543,
+            -11.886,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            593.879,
+            1034.5,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            135.338,
+            132.074,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "ind": 0,
+              "ty": "sh",
+              "ix": 1,
+              "ks": {
+                "a": 0,
+                "k": {
+                  "i": [
+                    [
+                      0,
+                      -220.914
+                    ],
+                    [
+                      220.914,
+                      0
+                    ],
+                    [
+                      0,
+                      220.914
+                    ],
+                    [
+                      -220.914,
+                      0
+                    ]
+                  ],
+                  "o": [
+                    [
+                      0,
+                      220.914
+                    ],
+                    [
+                      -220.914,
+                      0
+                    ],
+                    [
+                      0,
+                      -220.914
+                    ],
+                    [
+                      220.914,
+                      0
+                    ]
+                  ],
+                  "v": [
+                    [
+                      400,
+                      0
+                    ],
+                    [
+                      0,
+                      400
+                    ],
+                    [
+                      -400,
+                      0
+                    ],
+                    [
+                      0,
+                      -400
+                    ]
+                  ],
+                  "c": true
+                },
+                "ix": 2
+              },
+              "nm": "Path 1",
+              "mn": "ADBE Vector Shape - Group",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.600934436275,
+                  1,
+                  0.659657257678,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 103,
+                "ix": 5
+              },
+              "lc": 1,
+              "lj": 2,
+              "bm": 0,
+              "d": [
+                {
+                  "n": "d",
+                  "nm": "dash",
+                  "v": {
+                    "a": 0,
+                    "k": 15,
+                    "ix": 1
+                  }
+                },
+                {
+                  "n": "g",
+                  "nm": "gap",
+                  "v": {
+                    "a": 0,
+                    "k": 2,
+                    "ix": 2
+                  }
+                },
+                {
+                  "n": "d",
+                  "nm": "dash2",
+                  "v": {
+                    "a": 0,
+                    "k": 15,
+                    "ix": 3
+                  }
+                },
+                {
+                  "n": "g",
+                  "nm": "gap2",
+                  "v": {
+                    "a": 0,
+                    "k": 2,
+                    "ix": 4
+                  }
+                },
+                {
+                  "n": "d",
+                  "nm": "dash3",
+                  "v": {
+                    "a": 0,
+                    "k": 15,
+                    "ix": 5
+                  }
+                },
+                {
+                  "n": "g",
+                  "nm": "gap3",
+                  "v": {
+                    "a": 0,
+                    "k": 2,
+                    "ix": 6
+                  }
+                },
+                {
+                  "n": "o",
+                  "nm": "offset",
+                  "v": {
+                    "a": 0,
+                    "k": 8,
+                    "ix": 7
+                  }
+                }
+              ],
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  584.5,
+                  1034.5
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Group 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        },
+        {
+          "ty": "tm",
+          "s": {
+            "a": 0,
+            "k": 0,
+            "ix": 1
+          },
+          "e": {
+            "a": 0,
+            "k": 100,
+            "ix": 2
+          },
+          "o": {
+            "a": 0,
+            "k": 0,
+            "ix": 3
+          },
+          "m": 1,
+          "ix": 2,
+          "nm": "Trim Paths 1",
+          "mn": "ADBE Vector Filter - Trim",
+          "hd": false
+        },
+        {
+          "ty": "tm",
+          "s": {
+            "a": 0,
+            "k": 0,
+            "ix": 1
+          },
+          "e": {
+            "a": 0,
+            "k": 100,
+            "ix": 2
+          },
+          "o": {
+            "a": 0,
+            "k": 0,
+            "ix": 3
+          },
+          "m": 1,
+          "ix": 3,
+          "nm": "Trim Paths 2",
+          "mn": "ADBE Vector Filter - Trim",
+          "hd": false
+        }
+      ],
+      "ip": -87.5,
+      "op": 2520,
+      "st": -160,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 15,
+      "ty": 4,
+      "nm": "OuterRing - WIDTH CONTROLLER",
+      "parent": 11,
+      "tt": 1,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  0.833
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0.167
+                ]
+              },
+              "t": 547.5,
+              "s": [
+                100
+              ]
+            },
+            {
+              "t": 555,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.29
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 392.5,
+              "s": [
+                0
+              ]
+            },
+            {
+              "t": 617.5,
+              "s": [
+                535
+              ]
+            }
+          ],
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            -0.747,
+            -3.075,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -13.09,
+            1270.41,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  1075,
+                  1075
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "tm",
+              "s": {
+                "a": 0,
+                "k": 0,
+                "ix": 1
+              },
+              "e": {
+                "a": 1,
+                "k": [
+                  {
+                    "i": {
+                      "x": [
+                        0.5
+                      ],
+                      "y": [
+                        1
+                      ]
+                    },
+                    "o": {
+                      "x": [
+                        0.88
+                      ],
+                      "y": [
+                        0
+                      ]
+                    },
+                    "t": 92.535,
+                    "s": [
+                      0
+                    ]
+                  },
+                  {
+                    "i": {
+                      "x": [
+                        0.833
+                      ],
+                      "y": [
+                        0.833
+                      ]
+                    },
+                    "o": {
+                      "x": [
+                        0.167
+                      ],
+                      "y": [
+                        0.167
+                      ]
+                    },
+                    "t": 141.172,
+                    "s": [
+                      25
+                    ]
+                  },
+                  {
+                    "i": {
+                      "x": [
+                        0.5
+                      ],
+                      "y": [
+                        1
+                      ]
+                    },
+                    "o": {
+                      "x": [
+                        0.88
+                      ],
+                      "y": [
+                        0
+                      ]
+                    },
+                    "t": 168.826,
+                    "s": [
+                      25
+                    ]
+                  },
+                  {
+                    "i": {
+                      "x": [
+                        0.833
+                      ],
+                      "y": [
+                        0.833
+                      ]
+                    },
+                    "o": {
+                      "x": [
+                        0.167
+                      ],
+                      "y": [
+                        0.167
+                      ]
+                    },
+                    "t": 215,
+                    "s": [
+                      50
+                    ]
+                  },
+                  {
+                    "i": {
+                      "x": [
+                        0.5
+                      ],
+                      "y": [
+                        1
+                      ]
+                    },
+                    "o": {
+                      "x": [
+                        0.88
+                      ],
+                      "y": [
+                        0
+                      ]
+                    },
+                    "t": 242.439,
+                    "s": [
+                      50
+                    ]
+                  },
+                  {
+                    "i": {
+                      "x": [
+                        0.833
+                      ],
+                      "y": [
+                        0.833
+                      ]
+                    },
+                    "o": {
+                      "x": [
+                        0.167
+                      ],
+                      "y": [
+                        0.167
+                      ]
+                    },
+                    "t": 290.633,
+                    "s": [
+                      75
+                    ]
+                  },
+                  {
+                    "i": {
+                      "x": [
+                        0.5
+                      ],
+                      "y": [
+                        1
+                      ]
+                    },
+                    "o": {
+                      "x": [
+                        0.88
+                      ],
+                      "y": [
+                        0
+                      ]
+                    },
+                    "t": 335.787,
+                    "s": [
+                      75
+                    ]
+                  },
+                  {
+                    "t": 508.98046875,
+                    "s": [
+                      100
+                    ]
+                  }
+                ],
+                "ix": 2
+              },
+              "o": {
+                "a": 0,
+                "k": 0,
+                "ix": 3
+              },
+              "m": 1,
+              "ix": 2,
+              "nm": "Trim Paths 1",
+              "mn": "ADBE Vector Filter - Trim",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.4,
+                  0.61568627451,
+                  0.964705882353,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 65,
+                "ix": 5
+              },
+              "lc": 2,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -13.09,
+                  1270.41
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 4,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": -70,
+      "op": 2585,
+      "st": 117.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 16,
+      "ty": 4,
+      "nm": "OuterRing",
+      "parent": 11,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0.5
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.88
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 73,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 79,
+              "s": [
+                100
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 550,
+              "s": [
+                100
+              ]
+            },
+            {
+              "t": 582.5,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            -0.747,
+            -3.075,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -13.09,
+            1270.41,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            100,
+            100,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  1075,
+                  1075
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.231372563979,
+                  0.294117647059,
+                  0.400000029919,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 65,
+                "ix": 5,
+                "x": "var $bm_rt;\n$bm_rt = thisComp.layer('OuterRing - WIDTH CONTROLLER').content('Ellipse 1').content('Stroke 1').strokeWidth;"
+              },
+              "lc": 1,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -13.09,
+                  1270.41
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": -70,
+      "op": 486,
+      "st": 117.5,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 17,
+      "ty": 4,
+      "nm": "ILLUMINATION",
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 1,
+          "k": [
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.78
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 87.5,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 97.5,
+              "s": [
+                93
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.33
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 130,
+              "s": [
+                93
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 140,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.78
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 165,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 175,
+              "s": [
+                93
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.33
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 205,
+              "s": [
+                93
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 215,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.78
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 242.5,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 252.5,
+              "s": [
+                93
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.33
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 287.5,
+              "s": [
+                93
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 297.5,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.78
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 367.5,
+              "s": [
+                0
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0.833
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.167
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 377.5,
+              "s": [
+                93
+              ]
+            },
+            {
+              "i": {
+                "x": [
+                  0
+                ],
+                "y": [
+                  1
+                ]
+              },
+              "o": {
+                "x": [
+                  0.33
+                ],
+                "y": [
+                  0
+                ]
+              },
+              "t": 485,
+              "s": [
+                93
+              ]
+            },
+            {
+              "t": 495,
+              "s": [
+                0
+              ]
+            }
+          ],
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            839.765,
+            2085.09,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            -13.09,
+            1270.41,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            95,
+            95,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "ef": [
+        {
+          "ty": 29,
+          "nm": "Gaussian Blur",
+          "np": 5,
+          "mn": "ADBE Gaussian Blur 2",
+          "ix": 1,
+          "en": 1,
+          "ef": [
+            {
+              "ty": 0,
+              "nm": "Blurriness",
+              "mn": "ADBE Gaussian Blur 2-0001",
+              "ix": 1,
+              "v": {
+                "a": 0,
+                "k": 49.5,
+                "ix": 1
+              }
+            },
+            {
+              "ty": 7,
+              "nm": "Blur Dimensions",
+              "mn": "ADBE Gaussian Blur 2-0002",
+              "ix": 2,
+              "v": {
+                "a": 0,
+                "k": 1,
+                "ix": 2
+              }
+            },
+            {
+              "ty": 7,
+              "nm": "Repeat Edge Pixels",
+              "mn": "ADBE Gaussian Blur 2-0003",
+              "ix": 3,
+              "v": {
+                "a": 0,
+                "k": 0,
+                "ix": 3
+              }
+            }
+          ]
+        }
+      ],
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  430,
+                  430
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.682352941176,
+                  0.796078431373,
+                  0.980392156863,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "lc": 1,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "gf",
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 10
+              },
+              "r": 1,
+              "bm": 0,
+              "g": {
+                "p": 3,
+                "k": {
+                  "a": 0,
+                  "k": [
+                    0,
+                    1,
+                    1,
+                    1,
+                    0.5,
+                    0.805,
+                    0.805,
+                    0.805,
+                    1,
+                    0.61,
+                    0.61,
+                    0.61
+                  ],
+                  "ix": 9
+                }
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 5
+              },
+              "e": {
+                "a": 0,
+                "k": [
+                  300.822,
+                  0
+                ],
+                "ix": 6
+              },
+              "t": 2,
+              "h": {
+                "a": 0,
+                "k": 0,
+                "ix": 7
+              },
+              "a": {
+                "a": 0,
+                "k": 0,
+                "ix": 8
+              },
+              "nm": "Gradient Fill 1",
+              "mn": "ADBE Vector Graphic - G-Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  -13.09,
+                  1270.41
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  100,
+                  100
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 72.5,
+      "op": 2572.5,
+      "st": 105,
+      "bm": 0
+    },
+    {
+      "ddd": 0,
+      "ind": 18,
+      "ty": 4,
+      "nm": "Finger_Circle",
+      "parent": 5,
+      "sr": 1,
+      "ks": {
+        "o": {
+          "a": 0,
+          "k": 100,
+          "ix": 11
+        },
+        "r": {
+          "a": 0,
+          "k": 0,
+          "ix": 10
+        },
+        "p": {
+          "a": 0,
+          "k": [
+            -11.429,
+            -617.143,
+            0
+          ],
+          "ix": 2,
+          "l": 2
+        },
+        "a": {
+          "a": 0,
+          "k": [
+            0,
+            0,
+            0
+          ],
+          "ix": 1,
+          "l": 2
+        },
+        "s": {
+          "a": 0,
+          "k": [
+            95.238,
+            95.238,
+            100
+          ],
+          "ix": 6,
+          "l": 2
+        }
+      },
+      "ao": 0,
+      "shapes": [
+        {
+          "ty": "gr",
+          "it": [
+            {
+              "d": 1,
+              "ty": "el",
+              "s": {
+                "a": 0,
+                "k": [
+                  452.344,
+                  452.344
+                ],
+                "ix": 2
+              },
+              "p": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 3
+              },
+              "nm": "Ellipse Path 1",
+              "mn": "ADBE Vector Shape - Ellipse",
+              "hd": false
+            },
+            {
+              "ty": "st",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.590962009804,
+                  0.746925982307,
+                  1,
+                  1
+                ],
+                "ix": 3
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 4
+              },
+              "w": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "lc": 1,
+              "lj": 1,
+              "ml": 4,
+              "bm": 0,
+              "nm": "Stroke 1",
+              "mn": "ADBE Vector Graphic - Stroke",
+              "hd": false
+            },
+            {
+              "ty": "fl",
+              "c": {
+                "a": 0,
+                "k": [
+                  0.712009803922,
+                  0.817606129366,
+                  1,
+                  1
+                ],
+                "ix": 4
+              },
+              "o": {
+                "a": 0,
+                "k": 71,
+                "ix": 5
+              },
+              "r": 1,
+              "bm": 0,
+              "nm": "Fill 1",
+              "mn": "ADBE Vector Graphic - Fill",
+              "hd": false
+            },
+            {
+              "ty": "tr",
+              "p": {
+                "a": 0,
+                "k": [
+                  13.871,
+                  635.457
+                ],
+                "ix": 2
+              },
+              "a": {
+                "a": 0,
+                "k": [
+                  0,
+                  0
+                ],
+                "ix": 1
+              },
+              "s": {
+                "a": 0,
+                "k": [
+                  102.789,
+                  102.789
+                ],
+                "ix": 3
+              },
+              "r": {
+                "a": 0,
+                "k": 0,
+                "ix": 6
+              },
+              "o": {
+                "a": 0,
+                "k": 100,
+                "ix": 7
+              },
+              "sk": {
+                "a": 0,
+                "k": 0,
+                "ix": 4
+              },
+              "sa": {
+                "a": 0,
+                "k": 0,
+                "ix": 5
+              },
+              "nm": "Transform"
+            }
+          ],
+          "nm": "Ellipse 1",
+          "np": 3,
+          "cix": 2,
+          "bm": 0,
+          "ix": 1,
+          "mn": "ADBE Vector Group",
+          "hd": false
+        }
+      ],
+      "ip": 0,
+      "op": 2400,
+      "st": 0,
+      "bm": 0
+    }
+  ],
+  "markers": [
+    {
+      "tm": 0,
+      "cm": "0",
+      "dr": 0
+    },
+    {
+      "tm": 292.5,
+      "cm": "2",
+      "dr": 0
+    },
+    {
+      "tm": 600,
+      "cm": "3",
+      "dr": 0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 241471c..45c28dd 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -66,4 +66,6 @@
     <!-- Padding for screen pinning -->
     <dimen name="screen_pinning_padding_start">40dp</dimen>
     <dimen name="screen_pinning_padding_end">40dp</dimen>
+
+    <dimen name="settings_panel_width">560dp</dimen>
 </resources>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 97c6a54..0fe13fe 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1536,17 +1536,6 @@
         <item>@string/enhanced_4g_lte_mode_summary_4g_calling</item>
     </string-array>
 
-    <!-- An allowlist which packages won't show summary in battery usage screen.
-         [CHAR LIMIT=NONE] -->
-    <string-array name="allowlist_hide_summary_in_battery_usage" translatable="false">
-    </string-array>
-
-    <!-- An allowlist which packages won't show entry in battery usage screen.
-        [CHAR LIMIT=NONE] -->
-    <string-array name="allowlist_hide_entry_in_battery_usage" translatable="false">
-        <item>"com.google.android.gms.persistent"</item>
-    </string-array>
-
     <!-- Array of titles palette list for accessibility. -->
     <string-array name="setting_palette_data" translatable="false" >
         <item>@string/color_red</item>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 573d906..579ac35 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -72,6 +72,8 @@
         <attr name="unavailableSliceSubtitle" format="string" />
         <!-- Whether or not the preference is for work profile, by default it's false. -->
         <attr name="forWork" format="boolean" />
+        <!-- Identifier for highlighting the menu preference on 2-pane -->
+        <attr name="highlightableMenuKey" format="string" />
     </declare-styleable>
 
     <declare-styleable name="PreferenceScreen">
diff --git a/res/values/config.xml b/res/values/config.xml
index 9ed7536..5411264 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -269,6 +269,9 @@
     <!-- ComponentName to launch a vendor-specific enrollment activity if available -->
     <string name="config_face_enroll" translatable="false"></string>
 
+    <!-- Whether to show the "less secure" info section on the face enroll intro screen -->
+    <bool name="config_face_intro_show_less_secure">false</bool>
+
     <!-- Whether to show the "require eyes" info section on the face enroll intro screen -->
     <bool name="config_face_intro_show_require_eyes">true</bool>
 
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 7a75883..2cd944a 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -426,6 +426,7 @@
     <!-- Settings panel related dimensions -->
     <dimen name="settings_panel_corner_radius">28dp</dimen>
     <dimen name="settings_panel_title_margin">24dp</dimen>
+    <dimen name="settings_panel_width">@dimen/match_parent</dimen>
 
     <!-- Text padding for EmptyTextSettings -->
     <dimen name="empty_text_padding">24dp</dimen>
diff --git a/res/values/menu_keys.xml b/res/values/menu_keys.xml
new file mode 100755
index 0000000..e69664a
--- /dev/null
+++ b/res/values/menu_keys.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <string name="menu_key_network" translatable="false">top_level_network</string>
+    <string name="menu_key_connected_devices" translatable="false">top_level_connected_devices</string>
+    <string name="menu_key_apps" translatable="false">top_level_apps</string>
+    <string name="menu_key_notifications" translatable="false">top_level_notifications</string>
+    <string name="menu_key_battery" translatable="false">top_level_battery</string>
+    <string name="menu_key_storage" translatable="false">top_level_storage</string>
+    <string name="menu_key_sound" translatable="false">top_level_sound</string>
+    <string name="menu_key_display" translatable="false">top_level_display</string>
+    <string name="menu_key_wallpaper" translatable="false">top_level_wallpaper</string>
+    <string name="menu_key_accessibility" translatable="false">top_level_accessibility</string>
+    <string name="menu_key_security" translatable="false">top_level_security</string>
+    <string name="menu_key_privacy" translatable="false">top_level_privacy</string>
+    <string name="menu_key_location" translatable="false">top_level_location</string>
+    <string name="menu_key_emergency" translatable="false">top_level_emergency</string>
+    <string name="menu_key_accounts" translatable="false">top_level_accounts</string>
+    <string name="menu_key_system" translatable="false">top_level_system</string>
+    <string name="menu_key_about_device" translatable="false">top_level_about_device</string>
+    <string name="menu_key_support" translatable="false">top_level_support</string>
+
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3a7de39..4bb7446 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -793,6 +793,8 @@
     <string name="security_settings_face_enroll_introduction_info_looking"></string>
     <!-- Message on the face enrollment introduction page that provides information about what could cause the phone to unlock when asking for parental consent. [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_enroll_introduction_info_consent_looking"></string>
+    <!-- Message on the face enrollment introduction page that provides information about the relative security of face for unlocking the phone. [CHAR LIMIT=NONE] -->
+    <string name="security_settings_face_enroll_introduction_info_less_secure"></string>
     <!-- Message on the face enrollment introduction page that provides information about how to require eyes to be open for Face Unlock. [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_enroll_introduction_info_gaze"></string>
     <!-- Message on the face enrollment introduction page that provides information about how to require eyes to be open for Face Unlock when asking for parental consent. [CHAR LIMIT=NONE] -->
@@ -5202,7 +5204,7 @@
     <string name="allow_bind_app_widget_activity_allow_bind_title">Create widget and allow access?</string>
 
     <!-- Message in dialog that pops up when an app requests permission to bind a widget [CHAR LIMIT=NONE] -->
-    <string name="allow_bind_app_widget_activity_allow_bind">After you create the widget, <xliff:g id="widget_host_name">%1$s</xliff:g> can access all data it displays.</string>
+    <string name="allow_bind_app_widget_activity_allow_bind">After you create the widget, the application can access everything displayed.\n\nApplication: <xliff:g id="widget_host_name">%1$s</xliff:g>\nWidget: <xliff:g id="widget_label">%2$s</xliff:g>\n</string>
 
     <!-- Text for checkbox that pops up when an app requests permission to bind a widget [CHAR LIMIT=NONE] -->
     <string name="allow_bind_app_widget_activity_always_allow_bind">Always allow <xliff:g id="widget_host_name">%1$s</xliff:g> to create widgets and access their data</string>
@@ -5270,8 +5272,18 @@
     <string name="select_to_speak_summary">Tap items on your screen to hear them read aloud</string>
     <!-- Title for the accessibility preference screen to enable video captioning. [CHAR LIMIT=35] -->
     <string name="accessibility_captioning_title">Caption preferences</string>
+    <!-- Title for accessibility captioning footer. [CHAR LIMIT=60] -->
+    <string name="accessibility_captioning_about_title">About caption preferences</string>
+    <!-- Accessibility captioning footer link content description [CHAR LIMIT=NONE] -->
+    <string name="accessibility_captioning_footer_learn_more_content_description">Learn more about caption preferences</string>
     <!-- Title for the accessibility preference screen to enable screen magnification. [CHAR LIMIT=35] -->
     <string name="accessibility_screen_magnification_title">Magnification</string>
+    <!-- Title for accessibility shortcut preference for magnification. [CHAR LIMIT=60] -->
+    <string name="accessibility_screen_magnification_shortcut_title">Magnification shortcut</string>
+    <!-- Title for screen magnification footer. [CHAR LIMIT=60] -->
+    <string name="accessibility_screen_magnification_about_title">About magnification</string>
+    <!-- Screen magnification footer link content description [CHAR LIMIT=NONE] -->
+    <string name="accessibility_screen_magnification_footer_learn_more_content_description">Learn more about magnification</string>
     <!-- Title for the accessibility preference screen to edit magnification area. [CHAR LIMIT=35] -->
     <string name="accessibility_magnification_mode_title">Magnification type</string>
     <!-- Message for the accessibility preference screen to edit magnification area dialog. [CHAR LIMIT=none] -->
@@ -5422,14 +5434,20 @@
     <string name="accessibility_button_title">Accessibility button</string>
     <!-- Title for the accessibility button & gesture page. [CHAR LIMIT=35] -->
     <string name="accessibility_button_gesture_title">Accessibility button &amp; gesture</string>
+    <!-- Title for the accessibility button footer. [CHAR LIMIT=35] -->
+    <string name="accessibility_button_about_title">About accessibility button</string>
+    <!-- Title for the accessibility button & gesture footer. [CHAR LIMIT=55] -->
+    <string name="accessibility_button_gesture_about_title">About accessibility button &amp; gesture</string>
+    <!-- Accessibility button & gestures footer link content description [CHAR LIMIT=NONE] -->
+    <string name="accessibility_button_gesture_footer_learn_more_content_description">Learn more about accessibility button &amp; gesture</string>
     <!-- Intro for the accessibility button page. [CHAR LIMIT=100] -->
     <string name="accessibility_button_intro">Using the accessibility button. The gesture isn\u2019t available with 3-button navigation.</string>
     <!-- Summary text for the accessibility button preference. [CHAR LIMIT=50] -->
     <string name="accessibility_button_summary">Quickly access accessibility features</string>
     <!-- Description for the accessibility button in gesture navigation. Explain how this page works. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_button_gesture_description">Quickly access accessibility features from any screen.\n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button.\n\nTo use the accessibility button in the navigation bar instead, switch to 2-button navigation or 3-button navigation.</string>
+    <string name="accessibility_button_gesture_description">Quickly access accessibility features from any screen.\n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button or gesture.</string>
     <!-- Description for the accessibility button page. Explain how this page works. [CHAR LIMIT=NONE] -->
-    <string name="accessibility_button_description">Quickly access accessibility features from any screen. \n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button.</string>
+    <string name="accessibility_button_description">Quickly access accessibility features from any screen.\n\nTo get started, go to accessibility settings and select a feature. Tap on the shortcut and select the accessibility button.</string>
     <!-- Title for the button or gesture of the accessibility button. [CHAR LIMIT=35] -->
     <string name="accessibility_button_or_gesture_title">Use button or gesture</string>
     <!-- Title for the location of the accessibility button. [CHAR LIMIT=35] -->
@@ -5483,6 +5501,10 @@
     <string name="accessibility_timeout_2mins">2 minutes</string>
     <!-- Title for accessibility settings timeout item. [CHAR LIMIT=43] -->
     <string name="accessibility_setting_item_control_timeout_title">Time to take action (Accessibility timeout)</string>
+    <!-- Title for accessibility timeout footer. [CHAR LIMIT=65] -->
+    <string name="accessibility_control_timeout_about_title">About time to take action (Accessibility timeout)</string>
+    <!-- Accessibility timeout footer link content description [CHAR LIMIT=NONE] -->
+    <string name="accessibility_control_timeout_footer_learn_more_content_description">Learn more about time to take action (Accessibility timeout)</string>
     <!-- Title for accessibility preference to accessibility timeout. [CHAR LIMIT=35] -->
     <string name="accessibility_control_timeout_preference_title">Time to take action</string>
     <!-- Descriptive text for accessibility preference to accessibility control timeout. [CHAR LIMIT=NONE] -->
@@ -5494,6 +5516,8 @@
     <string name="accessibility_display_inversion_preference_title">Color inversion</string>
     <!-- Used in the accessibility service settings to control turning display color inversion on/off entirely. [CHAR LIMIT=NONE] -->
     <string name="accessibility_display_inversion_switch_title">Use color inversion</string>
+    <!-- Title for accessibility shortcut preference for color inversion. [CHAR LIMIT=60] -->
+    <string name="accessibility_display_inversion_shortcut_title">Color inversion shortcut</string>
     <!-- Subtitle for the accessibility preference to configure display color inversion. [CHAR LIMIT=NONE] -->
     <string name="accessibility_display_inversion_preference_subtitle">
         <![CDATA[Color inversion turns light screens dark.<br/><br/>
@@ -5507,6 +5531,10 @@
     </string>
     <!-- Title for accessibility preference for configuring feature that performs click action soon after mouse/trackpad pointer stops moving. [CHAR LIMIT=NONE] -->
     <string name="accessibility_autoclick_preference_title">Autoclick (dwell timing)</string>
+    <!-- Title for accessibility dwell timing footer. [CHAR LIMIT=NONE] -->
+    <string name="accessibility_autoclick_about_title">About autoclick (dwell timing)</string>
+    <!-- Accessibility dwell timing footer link content description [CHAR LIMIT=NONE] -->
+    <string name="accessibility_autoclick_footer_learn_more_content_description">Learn more about autoclick (dwell timing)</string>
     <!-- Footer text to explain what autoclick does -->
     <string name="accessibility_autoclick_description">Autoclick works with a connected mouse. You can set the mouse cursor to click automatically when the cursor stops moving for a certain amount of time.</string>
     <!-- Option heading to leave the auto click requirement for accessibility users at its default level. [CHAR LIMIT=50] -->
@@ -5545,6 +5573,16 @@
     <string name="accessibility_service_primary_open_title">Open <xliff:g id="accessibility_app_name" example="TalkBack">%1$s</xliff:g></string>
     <!-- Used in the Color correction settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
     <string name="accessibility_daltonizer_primary_switch_title">Use color correction</string>
+    <!-- Title for accessibility shortcut preference for color correction. [CHAR LIMIT=60] -->
+    <string name="accessibility_daltonizer_shortcut_title">Color correction shortcut</string>
+    <!-- Title for Color correction footer. [CHAR LIMIT=35] -->
+    <string name="accessibility_daltonizer_about_title">About color correction</string>
+    <!-- Color inversion footer link content description [CHAR LIMIT=NONE] -->
+    <string name="accessibility_daltonizer_footer_learn_more_content_description">Learn more about color correction</string>
+    <!-- Title for Color inversion footer. [CHAR LIMIT=35] -->
+    <string name="accessibility_color_inversion_about_title">About color inversion</string>
+    <!-- Color correction footer link content description [CHAR LIMIT=NONE] -->
+    <string name="accessibility_color_inversion_footer_learn_more_content_description">Learn more about color inversion</string>
     <!-- Title for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
     <string name="accessibility_caption_primary_switch_title">Show captions</string>
     <!-- Summary for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
@@ -5624,6 +5662,10 @@
     <string name="reduce_bright_colors_preference_title">Extra dim</string>
     <!-- Title for the activation switch of the Reduce Brightness feature. [CHAR LIMIT=NONE] -->
     <string name="reduce_bright_colors_switch_title">Make screen extra dim</string>
+    <!-- Title for accessibility shortcut preference for Reduce Brightness. [CHAR LIMIT=60] -->
+    <string name="reduce_bright_colors_shortcut_title">Extra dim shortcut</string>
+    <!-- Title for Reduce Brightness feature footer. [CHAR LIMIT=35] -->
+    <string name="reduce_bright_colors_about_title">About extra dim</string>
     <!-- Summary for the accessibility preference to configure Reduce Brightness feature. [CHAR LIMIT=NONE] -->
     <string name="reduce_bright_colors_preference_summary" product="default">Dim screen beyond your phone\u2019s minimum brightness</string>
     <!-- Summary for the accessibility preference to configure Reduce Brightness feature. [CHAR LIMIT=NONE] -->
@@ -6119,7 +6161,7 @@
     <!-- Activity title for battery usage history details [CHAR LIMIT=60] -->
     <string name="history_details_title">History details</string>
     <!-- Preference title for advanced battery usage [CHAR LIMIT=40] -->
-    <string name="advanced_battery_preference_title">Battery Usage</string>
+    <string name="advanced_battery_preference_title">Battery usage</string>
     <!-- Preference summary for advanced battery usage, for past 24 hours [CHAR LIMIT=40] -->
     <string name="advanced_battery_preference_summary_with_hours">View usage for past 24 hours</string>
     <!-- Preference summary for advanced battery usage, from last full charge [CHAR LIMIT=40] -->
@@ -8454,6 +8496,9 @@
     <!-- Sound: Title for the other sounds option and associated settings page. [CHAR LIMIT=30] -->
     <string name="other_sound_settings">Other sounds</string>
 
+    <!-- Sound: Title for the option enabling spatializer effect. [CHAR LIMIT=30] -->
+    <string name="spatial_audio_title">Spatial audio</string>
+
     <!-- Sound: Other sounds: Title for the option enabling touch sounds for dial pad tones. [CHAR LIMIT=30] -->
     <string name="dial_pad_tones_title">Dial pad tones</string>
 
@@ -11779,6 +11824,8 @@
     <string name="one_handed_title">One-handed mode</string>
     <!-- Preference Switch for enabling one handed [CHAR LIMIT=60] -->
     <string name="one_handed_mode_enabled">Use one-handed mode</string>
+    <!-- Title for accessibility shortcut preference for enabling one handed. [CHAR LIMIT=60] -->
+    <string name="one_handed_mode_shortcut_title">One-handed mode shortcut</string>
     <!-- Search keywords for "One-Handed" settings [CHAR_LIMIT=NONE] -->
     <string name="keywords_one_handed">reachability</string>
     <!-- Category title for one handed swipe down [CHAR_LIMIT=60] -->
diff --git a/res/xml/accessibility_button_settings.xml b/res/xml/accessibility_button_settings.xml
index 02b1c7d..86dd087 100644
--- a/res/xml/accessibility_button_settings.xml
+++ b/res/xml/accessibility_button_settings.xml
@@ -16,13 +16,10 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:title="@string/accessibility_button_title">
+    xmlns:settings="http://schemas.android.com/apk/res-auto">
 
-    <com.android.settingslib.widget.LayoutPreference
-        android:key="caption_preview"
-        android:title="@string/summary_placeholder"
-        android:layout="@layout/accessibility_button_preview"
+    <com.android.settingslib.widget.IllustrationPreference
+        android:key="accessibility_button_preview"
         android:selectable="false"
         settings:searchable="false"
         android:persistent="false"
@@ -38,6 +35,15 @@
         settings:controller="com.android.settings.accessibility.AccessibilityButtonLocationPreferenceController"/>
 
     <ListPreference
+        android:entries="@array/accessibility_button_gesture_selector_titles"
+        android:entryValues="@array/accessibility_button_gesture_selector_values"
+        android:key="accessibility_button_or_gesture"
+        android:title="@string/accessibility_button_or_gesture_title"
+        android:summary="%s"
+        android:persistent="false"
+        settings:controller="com.android.settings.accessibility.AccessibilityButtonGesturePreferenceController"/>
+
+    <ListPreference
         android:entries="@array/accessibility_button_size_selector_titles"
         android:entryValues="@array/accessibility_button_size_selector_values"
         android:key="accessibility_button_size"
@@ -61,7 +67,6 @@
 
     <com.android.settings.accessibility.AccessibilityFooterPreference
         android:key="accessibility_button_footer"
-        android:title="@string/accessibility_button_description"
         android:persistent="false"
         android:selectable="false"
         settings:searchable="false"
diff --git a/res/xml/accessibility_shortcuts_settings.xml b/res/xml/accessibility_shortcuts_settings.xml
index 465f96d..2863335 100644
--- a/res/xml/accessibility_shortcuts_settings.xml
+++ b/res/xml/accessibility_shortcuts_settings.xml
@@ -25,8 +25,8 @@
         android:fragment="com.android.settings.accessibility.AccessibilityButtonFragment"
         android:key="accessibility_button_preference"
         android:persistent="false"
-        android:title="@string/accessibility_button_title"
-        android:summary="@string/accessibility_button_summary"/>
+        android:summary="@string/accessibility_button_summary"
+        settings:controller="com.android.settings.accessibility.AccessibilityButtonPreferenceController"/>
 
     <SwitchPreference
         android:key="accessibility_shortcut_preference"
diff --git a/res/xml/captioning_settings.xml b/res/xml/captioning_settings.xml
index b397146..f5059e5 100644
--- a/res/xml/captioning_settings.xml
+++ b/res/xml/captioning_settings.xml
@@ -21,12 +21,11 @@
     android:persistent="false"
     android:title="@string/accessibility_captioning_title">
 
-    <com.android.settingslib.widget.LayoutPreference
+    <com.android.settingslib.widget.IllustrationPreference
         android:key="captions_preview"
-        android:layout="@layout/accessibility_captions_preview"
         android:persistent="false"
         android:selectable="false"
-        android:title="@string/summary_placeholder"
+        settings:lottie_rawRes="@drawable/accessibility_captions_banner"
         settings:searchable="false" />
 
     <com.android.settings.widget.SettingsMainSwitchPreference
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index 56632a5..e30f139 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -154,6 +154,13 @@
         android:ringtoneType="alarm"
         android:order="-60"/>
 
+    <!-- Spatial audio -->
+    <SwitchPreference
+        android:key="spatial_audio"
+        android:title="@string/spatial_audio_title"
+        android:order="-55"
+        settings:controller="com.android.settings.notification.SpatialAudioPreferenceController"/>
+
     <!-- Dial pad tones -->
     <SwitchPreference
         android:key="dial_pad_tones"
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
index 1b949e9..e2cb173 100644
--- a/res/xml/top_level_settings.xml
+++ b/res/xml/top_level_settings.xml
@@ -27,6 +27,7 @@
         android:order="-150"
         android:title="@string/network_dashboard_title"
         android:summary="@string/summary_placeholder"
+        settings:highlightableMenuKey="@string/menu_key_network"
         settings:controller="com.android.settings.network.TopLevelNetworkEntryPreferenceController"/>
 
     <Preference
@@ -36,6 +37,7 @@
         android:order="-140"
         android:title="@string/connected_devices_dashboard_title"
         android:summary="@string/connected_devices_dashboard_default_summary"
+        settings:highlightableMenuKey="@string/menu_key_connected_devices"
         settings:controller="com.android.settings.connecteddevice.TopLevelConnectedDevicesPreferenceController"/>
 
     <Preference
@@ -44,15 +46,17 @@
         android:key="top_level_apps"
         android:order="-130"
         android:title="@string/apps_dashboard_title"
-        android:summary="@string/app_and_notification_dashboard_summary"/>
+        android:summary="@string/app_and_notification_dashboard_summary"
+        settings:highlightableMenuKey="@string/menu_key_apps"/>
 
     <Preference
         android:fragment="com.android.settings.notification.ConfigureNotificationSettings"
         android:icon="@drawable/ic_notifications"
-        android:key="top_level_notification"
+        android:key="top_level_notifications"
         android:order="-120"
         android:title="@string/configure_notification_settings"
-        android:summary="@string/notification_dashboard_summary"/>
+        android:summary="@string/notification_dashboard_summary"
+        settings:highlightableMenuKey="@string/menu_key_notifications"/>
 
     <Preference
         android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"
@@ -61,6 +65,7 @@
         android:order="-110"
         android:title="@string/power_usage_summary_title"
         android:summary="@string/summary_placeholder"
+        settings:highlightableMenuKey="@string/menu_key_battery"
         settings:controller="com.android.settings.fuelgauge.TopLevelBatteryPreferenceController"/>
 
     <Preference
@@ -70,6 +75,7 @@
         android:order="-100"
         android:title="@string/storage_settings"
         android:summary="@string/summary_placeholder"
+        settings:highlightableMenuKey="@string/menu_key_storage"
         settings:controller="com.android.settings.deviceinfo.TopLevelStoragePreferenceController"/>
 
     <Preference
@@ -78,7 +84,8 @@
         android:key="top_level_sound"
         android:order="-90"
         android:title="@string/sound_settings"
-        android:summary="@string/sound_dashboard_summary"/>
+        android:summary="@string/sound_dashboard_summary"
+        settings:highlightableMenuKey="@string/menu_key_sound"/>
 
     <Preference
         android:fragment="com.android.settings.DisplaySettings"
@@ -87,6 +94,7 @@
         android:order="-80"
         android:title="@string/display_settings"
         android:summary="@string/display_dashboard_summary"
+        settings:highlightableMenuKey="@string/menu_key_display"
         settings:controller="com.android.settings.display.TopLevelDisplayPreferenceController"/>
 
     <com.android.settingslib.RestrictedTopLevelPreference
@@ -95,6 +103,7 @@
         android:order="-70"
         android:title="@string/wallpaper_settings_title"
         android:summary="@string/wallpaper_dashboard_summary"
+        settings:highlightableMenuKey="@string/menu_key_wallpaper"
         settings:controller="com.android.settings.display.TopLevelWallpaperPreferenceController"/>
 
     <Preference
@@ -104,6 +113,7 @@
         android:order="-60"
         android:title="@string/accessibility_settings"
         android:summary="@string/accessibility_settings_summary"
+        settings:highlightableMenuKey="@string/menu_key_accessibility"
         settings:controller="com.android.settings.accessibility.TopLevelAccessibilityPreferenceController"/>
 
     <Preference
@@ -113,6 +123,7 @@
         android:order="-50"
         android:title="@string/security_settings_title"
         android:summary="@string/security_dashboard_summary"
+        settings:highlightableMenuKey="@string/menu_key_security"
         settings:controller="com.android.settings.security.TopLevelSecurityEntryPreferenceController"/>
 
     <Preference
@@ -121,7 +132,8 @@
         android:key="top_level_privacy"
         android:order="-40"
         android:title="@string/privacy_dashboard_title"
-        android:summary="@string/privacy_dashboard_summary"/>
+        android:summary="@string/privacy_dashboard_summary"
+        settings:highlightableMenuKey="@string/menu_key_privacy"/>
 
     <Preference
         android:fragment="com.android.settings.location.LocationSettings"
@@ -130,6 +142,7 @@
         android:order="-30"
         android:title="@string/location_settings_title"
         android:summary="@string/location_settings_loading_app_permission_stats"
+        settings:highlightableMenuKey="@string/menu_key_location"
         settings:controller="com.android.settings.location.TopLevelLocationPreferenceController"/>
 
     <Preference
@@ -138,7 +151,8 @@
         android:summary="@string/emergency_dashboard_summary"
         android:icon="@drawable/ic_settings_emergency"
         android:order="-20"
-        android:fragment="com.android.settings.emergency.EmergencyDashboardFragment"/>
+        android:fragment="com.android.settings.emergency.EmergencyDashboardFragment"
+        settings:highlightableMenuKey="@string/menu_key_emergency"/>
 
     <Preference
         android:fragment="com.android.settings.accounts.AccountDashboardFragment"
@@ -147,6 +161,7 @@
         android:order="-10"
         android:title="@string/account_dashboard_title"
         android:summary="@string/summary_placeholder"
+        settings:highlightableMenuKey="@string/menu_key_accounts"
         settings:controller="com.android.settings.accounts.TopLevelAccountEntryPreferenceController"/>
 
     <Preference
@@ -155,7 +170,8 @@
         android:key="top_level_system"
         android:order="10"
         android:title="@string/header_category_system"
-        android:summary="@string/system_dashboard_summary"/>
+        android:summary="@string/system_dashboard_summary"
+        settings:highlightableMenuKey="@string/menu_key_system"/>
 
     <Preference
         android:fragment="com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment"
@@ -164,6 +180,7 @@
         android:order="20"
         android:title="@string/about_settings"
         android:summary="@string/summary_placeholder"
+        settings:highlightableMenuKey="@string/menu_key_about_device"
         settings:controller="com.android.settings.deviceinfo.aboutphone.TopLevelAboutDevicePreferenceController"/>
 
     <Preference
@@ -172,6 +189,7 @@
         android:order="100"
         android:title="@string/page_tab_title_support"
         android:summary="@string/support_summary"
+        settings:highlightableMenuKey="@string/menu_key_support"
         settings:controller="com.android.settings.support.SupportPreferenceController"/>
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/AllowBindAppWidgetActivity.java b/src/com/android/settings/AllowBindAppWidgetActivity.java
index e7f7a6a..0272c83 100644
--- a/src/com/android/settings/AllowBindAppWidgetActivity.java
+++ b/src/com/android/settings/AllowBindAppWidgetActivity.java
@@ -19,6 +19,7 @@
 import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 
 import android.appwidget.AppWidgetManager;
+import android.appwidget.AppWidgetProviderInfo;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -122,9 +123,12 @@
                 return;
             }
         }
+        mAppWidgetManager = AppWidgetManager.getInstance(this);
+        final String widgetLabel = getWidgetLabel();
         AlertController.AlertParams ap = mAlertParams;
         ap.mTitle = getString(R.string.allow_bind_app_widget_activity_allow_bind_title);
-        ap.mMessage = getString(R.string.allow_bind_app_widget_activity_allow_bind, label);
+        ap.mMessage = getString(R.string.allow_bind_app_widget_activity_allow_bind, label,
+                widgetLabel);
         ap.mPositiveButtonText = getString(R.string.create);
         ap.mNegativeButtonText = getString(android.R.string.cancel);
         ap.mPositiveButtonListener = this;
@@ -133,18 +137,30 @@
                 (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         ap.mView = inflater.inflate(com.android.internal.R.layout.always_use_checkbox, null);
         mAlwaysUse = (CheckBox) ap.mView.findViewById(com.android.internal.R.id.alwaysUse);
-        mAlwaysUse.setText(getString(R.string.allow_bind_app_widget_activity_always_allow_bind, label));
+        mAlwaysUse.setText(
+                getString(R.string.allow_bind_app_widget_activity_always_allow_bind, label));
 
         mAlwaysUse.setPadding(mAlwaysUse.getPaddingLeft(),
                 mAlwaysUse.getPaddingTop(),
                 mAlwaysUse.getPaddingRight(),
                 (int) (mAlwaysUse.getPaddingBottom() +
-                        getResources().getDimension(R.dimen.bind_app_widget_dialog_checkbox_bottom_padding)));
+                        getResources().getDimension(
+                                R.dimen.bind_app_widget_dialog_checkbox_bottom_padding)));
 
-        mAppWidgetManager = AppWidgetManager.getInstance(this);
         mAlwaysUse.setChecked(mAppWidgetManager.hasBindAppWidgetPermission(mCallingPackage,
                 mProfile.getIdentifier()));
 
         setupAlert();
     }
+
+    private String getWidgetLabel() {
+        String label = "";
+        for (AppWidgetProviderInfo providerInfo : mAppWidgetManager.getInstalledProviders()) {
+            if (providerInfo.provider.equals(mComponentName)) {
+                label = providerInfo.loadLabel(getPackageManager());
+                break;
+            }
+        }
+        return label;
+    }
 }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index f3cdd6c..dc5d68f 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -58,6 +58,8 @@
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.core.gateway.SettingsGateway;
 import com.android.settings.dashboard.DashboardFeatureProvider;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
+import com.android.settings.homepage.SettingsHomepageActivity;
 import com.android.settings.homepage.TopLevelSettings;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.wfd.WifiDisplaySettings;
@@ -231,6 +233,12 @@
     protected void onCreate(Bundle savedState) {
         super.onCreate(savedState);
         Log.d(LOG_TAG, "Starting onCreate");
+
+        if (launchHomepageForTwonPaneDeepLink()) {
+            finish();
+            return;
+        }
+
         long startTime = System.currentTimeMillis();
 
         final FeatureFactory factory = FeatureFactory.getFactory(this);
@@ -248,17 +256,11 @@
         // Getting Intent properties can only be done after the super.onCreate(...)
         final String initialFragmentName = getInitialFragmentName(intent);
 
-        // This is a "Sub Settings" when:
-        // - this is a real SubSettings
-        // - or :settings:show_fragment_as_subsetting is passed to the Intent
-        final boolean isSubSettings = this instanceof SubSettings ||
-                intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);
-
         // If this is a sub settings, then apply the SubSettings Theme for the ActionBar content
         // insets.
         // If this is in setup flow, don't apply theme. Because light theme needs to be applied
         // in SettingsBaseActivity#onCreate().
-        if (isSubSettings && !WizardManagerHelper.isAnySetupWizard(getIntent())) {
+        if (isSubSettings(intent) && !WizardManagerHelper.isAnySetupWizard(getIntent())) {
             setTheme(R.style.Theme_SubSettings);
         }
 
@@ -347,6 +349,47 @@
         }
     }
 
+    private boolean isSubSettings(Intent intent) {
+        return this instanceof SubSettings ||
+            intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);
+    }
+
+    /** Returns true if the Activity is started by a deep link intent for large screen devices. */
+    private boolean launchHomepageForTwonPaneDeepLink() {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) {
+            return false;
+        }
+
+        final Intent intent = getIntent();
+        // Only starts trampoline for deep links. Should return false for all the cases that
+        // Settings app starts SettingsActivity or SubSetting by itself.
+        if (intent.getAction() == null) {
+            // Other apps should send deep link intent which matches intent filter of the Activity.
+            return false;
+        }
+
+        if (isSubSettings(intent)) {
+            return false;
+        }
+
+        if (intent.getBooleanExtra(SettingsHomepageActivity.EXTRA_IS_FROM_SETTINGS_HOMEPAGE,
+                /* defaultValue */ false)) {
+            return false;
+        }
+
+        // It's a deep link intent, SettingsHomepageActivity will set SplitPairRule and start it.
+        final Intent trampolineIntent =
+                new Intent(android.provider.Settings.ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK);
+        trampolineIntent.replaceExtras(intent);
+        trampolineIntent.putExtra(
+                android.provider.Settings.EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI,
+                intent.toUri(Intent.URI_INTENT_SCHEME));
+        trampolineIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+        startActivity(trampolineIntent);
+
+        return true;
+    }
+
     /** Returns the initial fragment name that the activity will launch. */
     @VisibleForTesting
     public String getInitialFragmentName(Intent intent) {
diff --git a/src/com/android/settings/SettingsApplication.java b/src/com/android/settings/SettingsApplication.java
new file mode 100644
index 0000000..7aa5af8
--- /dev/null
+++ b/src/com/android/settings/SettingsApplication.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2021 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.settings;
+
+import android.app.Application;
+
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+
+/** Settings application which sets up activity embedding rules for the large screen device. */
+public class SettingsApplication extends Application {
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        final ActivityEmbeddingRulesController controller =
+                new ActivityEmbeddingRulesController(this);
+        controller.initRules();
+    }
+}
diff --git a/src/com/android/settings/SettingsTutorialDialogWrapperActivity.java b/src/com/android/settings/SettingsTutorialDialogWrapperActivity.java
deleted file mode 100644
index 50b966f..0000000
--- a/src/com/android/settings/SettingsTutorialDialogWrapperActivity.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2019 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.settings;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import com.android.settings.accessibility.AccessibilityGestureNavigationTutorial;
-import com.android.settings.R;
-
-/**
- * This activity is to create the tutorial dialog in gesture navigation settings since we couldn't
- * use the dialog utils because SystemNavigationGestureSettings extends RadioButtonPickerFragment,
- * not SettingsPreferenceFragment.
- */
-public class SettingsTutorialDialogWrapperActivity extends Activity {
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        showDialog();
-    }
-
-    private void showDialog() {
-        AccessibilityGestureNavigationTutorial
-                .showGestureNavigationSettingsTutorialDialog(this, dialog -> finish());
-    }
-}
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index e79852b..72bfa11 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1013,7 +1013,8 @@
         Drawable safeIcon = icon;
 
         if ((icon != null) && !(icon instanceof VectorDrawable)) {
-            safeIcon = getSafeDrawable(icon, 500, 500);
+            safeIcon = getSafeDrawable(icon,
+                    /* MAX_DRAWABLE_SIZE */ 600, /* MAX_DRAWABLE_SIZE */ 600);
         }
 
         return safeIcon;
diff --git a/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java
index de90374..55b8019 100644
--- a/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceController.java
@@ -33,21 +33,26 @@
     }
 
     @Override
-    protected String getLabelName() {
-        return mContext.getString(R.string.accessibility_button_title);
+    protected String getLearnMoreContentDescription() {
+        return mContext.getString(
+            R.string.accessibility_button_gesture_footer_learn_more_content_description);
+    }
+
+    @Override
+    protected String getIntroductionTitle() {
+        return mContext.getString(R.string.accessibility_button_about_title);
     }
 
     @Override
     public void displayPreference(PreferenceScreen screen) {
         // Need to update footerPreference's data before super.displayPreference(), then it will use
         // data to update related property of footerPreference.
-        if (AccessibilityUtil.isGestureNavigateEnabled(mContext)) {
-            final AccessibilityFooterPreference footerPreference =
-                    screen.findPreference(getPreferenceKey());
-            footerPreference.setTitle(
-                    mContext.getString(R.string.accessibility_button_gesture_description));
-        }
-
+        final int titleResource = AccessibilityUtil.isGestureNavigateEnabled(mContext)
+                ? R.string.accessibility_button_gesture_description
+                : R.string.accessibility_button_description;
+        final AccessibilityFooterPreference footerPreference =
+                screen.findPreference(getPreferenceKey());
+        footerPreference.setTitle(titleResource);
         super.displayPreference(screen);
     }
 }
diff --git a/src/com/android/settings/accessibility/AccessibilityButtonFragment.java b/src/com/android/settings/accessibility/AccessibilityButtonFragment.java
index 4e067d8..2df11a9 100644
--- a/src/com/android/settings/accessibility/AccessibilityButtonFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityButtonFragment.java
@@ -17,6 +17,7 @@
 package com.android.settings.accessibility;
 
 import android.app.settings.SettingsEnums;
+import android.os.Bundle;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -30,6 +31,14 @@
     private static final String TAG = "AccessibilityButtonFragment";
 
     @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        final int titleResource = AccessibilityUtil.isGestureNavigateEnabled(getPrefContext())
+                ? R.string.accessibility_button_gesture_title : R.string.accessibility_button_title;
+        getActivity().setTitle(titleResource);
+    }
+
+    @Override
     protected int getPreferenceScreenResId() {
         return R.xml.accessibility_button_settings;
     }
diff --git a/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceController.java b/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceController.java
new file mode 100644
index 0000000..e6b49d0
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceController.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2021 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.settings.accessibility;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import com.google.common.primitives.Ints;
+
+import java.util.Optional;
+
+/** Preference controller that controls the button or gesture in accessibility button page. */
+public class AccessibilityButtonGesturePreferenceController extends BasePreferenceController
+        implements Preference.OnPreferenceChangeListener {
+
+    private Optional<Integer> mDefaultGesture = Optional.empty();
+
+    public AccessibilityButtonGesturePreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AccessibilityUtil.isGestureNavigateEnabled(mContext)
+                ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+    }
+
+    @Override
+    public boolean onPreferenceChange(Preference preference, Object newValue) {
+        final ListPreference listPreference = (ListPreference) preference;
+        final Integer value = Ints.tryParse((String) newValue);
+        if (value != null) {
+            Settings.Secure.putInt(mContext.getContentResolver(),
+                    Settings.Secure.ACCESSIBILITY_BUTTON_MODE, value);
+            updateState(listPreference);
+        }
+        return true;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        super.updateState(preference);
+        final ListPreference listPreference = (ListPreference) preference;
+
+        listPreference.setValue(getCurrentAccessibilityButtonMode());
+    }
+
+    private String getCurrentAccessibilityButtonMode() {
+        final int mode = Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_BUTTON_MODE, getDefaultGestureValue());
+        return String.valueOf(mode);
+    }
+
+    private int getDefaultGestureValue() {
+        if (!mDefaultGesture.isPresent()) {
+            final String[] valuesList = mContext.getResources().getStringArray(
+                    R.array.accessibility_button_gesture_selector_values);
+            mDefaultGesture = Optional.of(Integer.parseInt(valuesList[0]));
+        }
+        return mDefaultGesture.get();
+    }
+}
diff --git a/src/com/android/settings/accessibility/AccessibilityButtonLocationPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityButtonLocationPreferenceController.java
index ed7cb27..167e08f 100644
--- a/src/com/android/settings/accessibility/AccessibilityButtonLocationPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityButtonLocationPreferenceController.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.provider.Settings;
-import android.util.ArrayMap;
 
 import androidx.preference.ListPreference;
 import androidx.preference.Preference;
@@ -28,16 +27,16 @@
 
 import com.google.common.primitives.Ints;
 
+import java.util.Optional;
+
 /** Preference controller that controls the preferred location in accessibility button page. */
 public class AccessibilityButtonLocationPreferenceController extends BasePreferenceController
         implements Preference.OnPreferenceChangeListener {
 
-    private final ArrayMap<String, String> mValueTitleMap = new ArrayMap<>();
-    private int mDefaultLocation;
+    private Optional<Integer> mDefaultLocation = Optional.empty();
 
     public AccessibilityButtonLocationPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
-        initValueTitleMap();
     }
 
     @Override
@@ -68,22 +67,16 @@
 
     private String getCurrentAccessibilityButtonMode() {
         final int mode = Settings.Secure.getInt(mContext.getContentResolver(),
-                Settings.Secure.ACCESSIBILITY_BUTTON_MODE, mDefaultLocation);
+                Settings.Secure.ACCESSIBILITY_BUTTON_MODE, getDefaultLocationValue());
         return String.valueOf(mode);
     }
 
-    private void initValueTitleMap() {
-        if (mValueTitleMap.size() == 0) {
-            final String[] values = mContext.getResources().getStringArray(
+    private int getDefaultLocationValue() {
+        if (!mDefaultLocation.isPresent()) {
+            final String[] valuesList = mContext.getResources().getStringArray(
                     R.array.accessibility_button_location_selector_values);
-            final String[] titles = mContext.getResources().getStringArray(
-                    R.array.accessibility_button_location_selector_titles);
-            final int mapSize = values.length;
-
-            mDefaultLocation = Integer.parseInt(values[0]);
-            for (int i = 0; i < mapSize; i++) {
-                mValueTitleMap.put(values[i], titles[i]);
-            }
+            mDefaultLocation = Optional.of(Integer.parseInt(valuesList[0]));
         }
+        return mDefaultLocation.get();
     }
 }
diff --git a/src/com/android/settings/accessibility/AccessibilityButtonPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityButtonPreferenceController.java
new file mode 100644
index 0000000..f076472
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilityButtonPreferenceController.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2021 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.settings.accessibility;
+
+import android.content.Context;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+/**
+ * Preference controller for accessibility button preference.
+ */
+public class AccessibilityButtonPreferenceController extends BasePreferenceController {
+
+    public AccessibilityButtonPreferenceController(Context context, String key) {
+        super(context, key);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        final int titleResource = AccessibilityUtil.isGestureNavigateEnabled(mContext)
+                ? R.string.accessibility_button_gesture_title : R.string.accessibility_button_title;
+        final Preference preference = screen.findPreference(getPreferenceKey());
+        preference.setTitle(titleResource);
+
+    }
+}
diff --git a/src/com/android/settings/accessibility/AccessibilityButtonPreviewPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityButtonPreviewPreferenceController.java
index 69a7a46..c9f3c43 100644
--- a/src/com/android/settings/accessibility/AccessibilityButtonPreviewPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityButtonPreviewPreferenceController.java
@@ -23,7 +23,7 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.provider.Settings;
-import android.widget.ImageView;
+import android.view.accessibility.AccessibilityManager;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.PreferenceScreen;
@@ -33,7 +33,7 @@
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnPause;
 import com.android.settingslib.core.lifecycle.events.OnResume;
-import com.android.settingslib.widget.LayoutPreference;
+import com.android.settingslib.widget.IllustrationPreference;
 
 /** Preference controller that controls the preview effect in accessibility button page. */
 public class AccessibilityButtonPreviewPreferenceController extends BasePreferenceController
@@ -46,10 +46,12 @@
     private final ContentResolver mContentResolver;
     @VisibleForTesting
     final ContentObserver mContentObserver;
-    private FloatingMenuLayerDrawable mFloatingMenuPreviewDrawable;
-
+    private AccessibilityLayerDrawable mAccessibilityPreviewDrawable;
     @VisibleForTesting
-    ImageView mPreview;
+    IllustrationPreference mIllustrationPreference;
+
+    private AccessibilityManager.TouchExplorationStateChangeListener
+            mTouchExplorationStateChangeListener;
 
     public AccessibilityButtonPreviewPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
@@ -60,6 +62,9 @@
                 updatePreviewPreference();
             }
         };
+        mTouchExplorationStateChangeListener = isTouchExplorationEnabled -> {
+            updatePreviewPreference();
+        };
     }
 
     @Override
@@ -70,14 +75,16 @@
     @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
-        final LayoutPreference preference = screen.findPreference(getPreferenceKey());
-        mPreview = preference.findViewById(R.id.preview_image);
+        mIllustrationPreference = screen.findPreference(getPreferenceKey());
 
         updatePreviewPreference();
     }
 
     @Override
     public void onResume() {
+        final AccessibilityManager am = mContext.getSystemService(AccessibilityManager.class);
+        am.addTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener);
+
         mContentResolver.registerContentObserver(
                 Settings.Secure.getUriFor(Settings.Secure.ACCESSIBILITY_BUTTON_MODE),
                 /* notifyForDescendants= */ false, mContentObserver);
@@ -91,6 +98,9 @@
 
     @Override
     public void onPause() {
+        final AccessibilityManager am = mContext.getSystemService(AccessibilityManager.class);
+        am.removeTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener);
+
         mContentResolver.unregisterContentObserver(mContentObserver);
     }
 
@@ -103,24 +113,29 @@
             final int floatingMenuIconId = (size == SMALL_SIZE)
                     ? R.drawable.accessibility_button_preview_small_floating_menu
                     : R.drawable.accessibility_button_preview_large_floating_menu;
-
-            mPreview.setImageDrawable(getFloatingMenuPreviewDrawable(floatingMenuIconId, opacity));
-            // Only change opacity(alpha) would not invoke redraw view, need to invalidate manually.
-            mPreview.invalidate();
+            mIllustrationPreference.setImageDrawable(
+                    getAccessibilityPreviewDrawable(floatingMenuIconId, opacity));
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(mContext)) {
+            mIllustrationPreference.setImageDrawable(mContext.getDrawable(
+                    AccessibilityUtil.isTouchExploreEnabled(mContext)
+                            ? R.drawable.accessibility_button_preview_three_finger
+                            : R.drawable.accessibility_button_preview_two_finger));
         } else {
-            mPreview.setImageDrawable(
+            mIllustrationPreference.setImageDrawable(
                     mContext.getDrawable(R.drawable.accessibility_button_navigation));
         }
     }
 
-    private Drawable getFloatingMenuPreviewDrawable(int resId, int opacity) {
-        if (mFloatingMenuPreviewDrawable == null) {
-            mFloatingMenuPreviewDrawable = FloatingMenuLayerDrawable.createLayerDrawable(
+    private Drawable getAccessibilityPreviewDrawable(int resId, int opacity) {
+        if (mAccessibilityPreviewDrawable == null) {
+            mAccessibilityPreviewDrawable = AccessibilityLayerDrawable.createLayerDrawable(
                     mContext, resId, opacity);
         } else {
-            mFloatingMenuPreviewDrawable.updateLayerDrawable(mContext, resId, opacity);
+            mAccessibilityPreviewDrawable.updateLayerDrawable(mContext, resId, opacity);
+            // Only change alpha (opacity) value did not change drawable id. It needs to force to
+            // redraw.
+            mAccessibilityPreviewDrawable.invalidateSelf();
         }
-
-        return mFloatingMenuPreviewDrawable;
+        return mAccessibilityPreviewDrawable;
     }
 }
diff --git a/src/com/android/settings/accessibility/AccessibilityControlTimeoutFooterPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityControlTimeoutFooterPreferenceController.java
index 0e65ac5..498b767 100644
--- a/src/com/android/settings/accessibility/AccessibilityControlTimeoutFooterPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityControlTimeoutFooterPreferenceController.java
@@ -31,8 +31,14 @@
     }
 
     @Override
-    protected String getLabelName() {
-        return mContext.getString(R.string.accessibility_setting_item_control_timeout_title);
+    protected String getLearnMoreContentDescription() {
+        return mContext.getString(
+            R.string.accessibility_control_timeout_footer_learn_more_content_description);
+    }
+
+    @Override
+    protected String getIntroductionTitle() {
+        return mContext.getString(R.string.accessibility_control_timeout_about_title);
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragment.java
index 1e2a2b4..c7a9b10 100644
--- a/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragment.java
@@ -69,7 +69,7 @@
 
     @Override
     public int getMetricsCategory() {
-        return SettingsEnums.ACCESSIBILITY;
+        return SettingsEnums.ACCESSIBILITY_TIMEOUT;
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/AccessibilityDialogUtils.java b/src/com/android/settings/accessibility/AccessibilityDialogUtils.java
index ffe5d6d..b353805 100644
--- a/src/com/android/settings/accessibility/AccessibilityDialogUtils.java
+++ b/src/com/android/settings/accessibility/AccessibilityDialogUtils.java
@@ -31,6 +31,7 @@
 import android.text.TextUtils;
 import android.text.method.LinkMovementMethod;
 import android.text.style.ImageSpan;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.AbsListView;
@@ -44,9 +45,11 @@
 import android.widget.TextView;
 
 import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.RawRes;
 import androidx.appcompat.app.AlertDialog;
 import androidx.core.content.ContextCompat;
 
@@ -54,6 +57,9 @@
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.utils.AnnotationSpan;
 
+import com.airbnb.lottie.LottieAnimationView;
+import com.airbnb.lottie.LottieDrawable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.List;
@@ -63,6 +69,7 @@
  * Utility class for creating the edit dialog.
  */
 public class AccessibilityDialogUtils {
+    private static final String TAG = "AccessibilityDialogUtils";
 
     /** Denotes the dialog emuns for show dialog. */
     @Retention(RetentionPolicy.SOURCE)
@@ -315,9 +322,22 @@
     }
 
     private static void setupShortcutWidget(View view, CharSequence titleText,
-            CharSequence summaryText, int imageResId) {
+            CharSequence summaryText, @DrawableRes int imageResId) {
+        setupShortcutWidgetWithTitleAndSummary(view, titleText, summaryText);
+        setupShortcutWidgetWithImageResource(view, imageResId);
+    }
+
+    private static void setupShortcutWidgetWithImageRawResource(View view, CharSequence titleText,
+            CharSequence summaryText, @RawRes int imageRawResId) {
+        setupShortcutWidgetWithTitleAndSummary(view, titleText, summaryText);
+        setupShortcutWidgetWithImageRawResource(view, imageRawResId);
+    }
+
+    private static void setupShortcutWidgetWithTitleAndSummary(View view, CharSequence titleText,
+            CharSequence summaryText) {
         final CheckBox checkBox = view.findViewById(R.id.checkbox);
         checkBox.setText(titleText);
+
         final TextView summary = view.findViewById(R.id.summary);
         if (TextUtils.isEmpty(summaryText)) {
             summary.setVisibility(View.GONE);
@@ -326,8 +346,23 @@
             summary.setMovementMethod(LinkMovementMethod.getInstance());
             summary.setFocusable(false);
         }
-        final ImageView image = view.findViewById(R.id.image);
-        image.setImageResource(imageResId);
+    }
+
+    private static void setupShortcutWidgetWithImageResource(View view,
+            @DrawableRes int imageResId) {
+        final ImageView imageView = view.findViewById(R.id.image);
+        imageView.setImageResource(imageResId);
+    }
+
+    private static void setupShortcutWidgetWithImageRawResource(View view,
+            @RawRes int imageRawResId) {
+        final LottieAnimationView lottieView = view.findViewById(R.id.image);
+        lottieView.setFailureListener(
+                result -> Log.w(TAG, "Invalid image raw resource id: " + imageRawResId,
+                        result));
+        lottieView.setAnimation(imageRawResId);
+        lottieView.setRepeatCount(LottieDrawable.INFINITE);
+        lottieView.playAnimation();
     }
 
     private static void initSoftwareShortcutForSUW(Context context, View view) {
@@ -344,12 +379,11 @@
 
     private static void initSoftwareShortcut(Context context, View view) {
         final View dialogView = view.findViewById(R.id.software_shortcut);
-        final CharSequence title = context.getText(
-                R.string.accessibility_shortcut_edit_dialog_title_software);
         final TextView summary = dialogView.findViewById(R.id.summary);
         final int lineHeight = summary.getLineHeight();
 
-        setupShortcutWidget(dialogView, title,
+        setupShortcutWidget(dialogView,
+                retrieveTitle(context),
                 retrieveSoftwareShortcutSummary(context, lineHeight),
                 retrieveSoftwareShortcutImageResId(context));
     }
@@ -362,7 +396,6 @@
                 R.string.accessibility_shortcut_edit_dialog_summary_hardware);
         setupShortcutWidget(dialogView, title, summary,
                 R.drawable.accessibility_shortcut_type_hardware);
-        // TODO(b/142531156): Use vector drawable instead of temporal png file to avoid distorted.
     }
 
     private static void initMagnifyShortcut(Context context, View view) {
@@ -375,9 +408,8 @@
         final Object[] arguments = {3};
         summary = MessageFormat.format(summary, arguments);
 
-        setupShortcutWidget(dialogView, title, summary,
-                R.drawable.accessibility_shortcut_type_triple_tap);
-        // TODO(b/142531156): Use vector drawable instead of temporal png file to avoid distorted.
+        setupShortcutWidgetWithImageRawResource(dialogView, title, summary,
+                R.raw.accessibility_shortcut_type_triple_tap);
     }
 
     private static void initAdvancedWidget(View view) {
@@ -398,20 +430,49 @@
         return sb;
     }
 
+    private static CharSequence retrieveTitle(Context context) {
+        int resId;
+        if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+            resId = R.string.accessibility_shortcut_edit_dialog_title_software;
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+            resId = R.string.accessibility_shortcut_edit_dialog_title_software_by_gesture;
+        } else {
+            resId = R.string.accessibility_shortcut_edit_dialog_title_software;
+        }
+        return context.getText(resId);
+    }
+
     private static CharSequence retrieveSoftwareShortcutSummary(Context context, int lineHeight) {
         final SpannableStringBuilder sb = new SpannableStringBuilder();
-        if (!AccessibilityUtil.isFloatingMenuEnabled(context)) {
+        if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+            sb.append(getCustomizeAccessibilityButtonLink(context));
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+            final int resId = AccessibilityUtil.isTouchExploreEnabled(context)
+                    ? R.string.accessibility_shortcut_edit_dialog_summary_software_gesture_talkback
+                    : R.string.accessibility_shortcut_edit_dialog_summary_software_gesture;
+            sb.append(context.getText(resId));
+            sb.append("\n\n");
+            sb.append(getCustomizeAccessibilityButtonLink(context));
+        } else {
             sb.append(getSummaryStringWithIcon(context, lineHeight));
             sb.append("\n\n");
+            sb.append(getCustomizeAccessibilityButtonLink(context));
         }
-        sb.append(getCustomizeAccessibilityButtonLink(context));
         return sb;
     }
 
     private static int retrieveSoftwareShortcutImageResId(Context context) {
-        return AccessibilityUtil.isFloatingMenuEnabled(context)
-                ? R.drawable.accessibility_shortcut_type_software_floating
-                : R.drawable.accessibility_shortcut_type_software;
+        int resId;
+        if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+            resId = R.drawable.accessibility_shortcut_type_software_floating;
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+            resId = AccessibilityUtil.isTouchExploreEnabled(context)
+                    ? R.drawable.accessibility_shortcut_type_software_gesture_talkback
+                    : R.drawable.accessibility_shortcut_type_software_gesture;
+        } else {
+            resId = R.drawable.accessibility_shortcut_type_software;
+        }
+        return resId;
     }
 
     private static CharSequence getCustomizeAccessibilityButtonLink(Context context) {
@@ -422,7 +483,6 @@
                 .launch();
         final AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo(
                 AnnotationSpan.LinkInfo.DEFAULT_ANNOTATION, linkListener);
-
         return AnnotationSpan.linkify(context.getText(
                 R.string.accessibility_shortcut_edit_dialog_summary_software_floating), linkInfo);
     }
diff --git a/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java
index e3422e4..c22b11e 100644
--- a/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityFooterPreferenceController.java
@@ -21,14 +21,18 @@
 
 import androidx.preference.PreferenceScreen;
 
-import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settingslib.HelpUtils;
 
 /**
- * Base class for accessibility preference footer.
+ * Preference controller that controls the help link and customizes the preference title in {@link
+ * AccessibilityFooterPreference}.
  */
-public abstract class AccessibilityFooterPreferenceController extends BasePreferenceController {
+public class AccessibilityFooterPreferenceController extends BasePreferenceController {
+
+    private int mHelpResource;
+    private String mLearnMoreContentDescription;
+    private String mIntroductionTitle;
 
     public AccessibilityFooterPreferenceController(Context context, String key) {
         super(context, key);
@@ -49,36 +53,74 @@
     }
 
     /**
-     * Override this if showing a help item in the footer bar, by returning the resource id.
+     * Setups a help item in the {@link AccessibilityFooterPreference} with specific content
+     * description.
+     */
+    public void setupHelpLink(int helpResource, String learnMoreContentDescription) {
+        mHelpResource = helpResource;
+        mLearnMoreContentDescription = learnMoreContentDescription;
+    }
+
+    /**
+     * Overrides this if showing a help item in the {@link AccessibilityFooterPreference}, by
+     * returning the resource id.
      *
      * @return the resource id for the help url
      */
     protected int getHelpResource() {
-        return 0;
+        return mHelpResource;
     }
 
-    /** Returns the accessibility feature name. */
-    protected abstract String getLabelName();
+    /**
+     * Overrides this if showing a help item in the {@link AccessibilityFooterPreference} with
+     * specific content description.
+     *
+     * @return the content description for the help url
+     */
+    protected String getLearnMoreContentDescription() {
+        return mLearnMoreContentDescription;
+    }
+
+    /**
+     * Sets the announcement the specific features introduction in the {@link
+     * AccessibilityFooterPreference}.
+     */
+    public void setIntroductionTitle(String introductionTitle) {
+        mIntroductionTitle = introductionTitle;
+    }
+
+    /**
+     * Overrides this if announcement the specific features introduction in the {@link
+     * AccessibilityFooterPreference}.
+     *
+     * @return the extended content description for specific features introduction
+     */
+    protected String getIntroductionTitle() {
+        return mIntroductionTitle;
+    }
 
     private void updateFooterPreferences(AccessibilityFooterPreference footerPreference) {
         final StringBuffer sb = new StringBuffer();
-        sb.append(mContext.getString(
-                R.string.accessibility_introduction_title, getLabelName()))
-                .append("\n\n")
-                .append(footerPreference.getTitle());
+        sb.append(getIntroductionTitle()).append("\n\n").append(footerPreference.getTitle());
         footerPreference.setContentDescription(sb);
 
+        final Intent helpIntent;
         if (getHelpResource() != 0) {
+            // Returns may be null if content is wrong or empty.
+            helpIntent = HelpUtils.getHelpIntent(mContext, mContext.getString(getHelpResource()),
+                    mContext.getClass().getName());
+        } else {
+            helpIntent = null;
+        }
+
+        if (helpIntent != null) {
             footerPreference.setLearnMoreAction(view -> {
-                final Intent helpIntent = HelpUtils.getHelpIntent(
-                        mContext, mContext.getString(getHelpResource()),
-                        mContext.getClass().getName());
                 view.startActivityForResult(helpIntent, 0);
             });
-
-            final String learnMoreContentDescription = mContext.getString(
-                    R.string.footer_learn_more_content_description, getLabelName());
-            footerPreference.setLearnMoreContentDescription(learnMoreContentDescription);
+            footerPreference.setLearnMoreContentDescription(getLearnMoreContentDescription());
+            footerPreference.setLinkEnabled(true);
+        } else {
+            footerPreference.setLinkEnabled(false);
         }
     }
 }
diff --git a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
index f8cdcb3..0ca16cb 100644
--- a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
+++ b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
@@ -27,13 +27,15 @@
 import android.graphics.drawable.Drawable;
 import android.text.Spannable;
 import android.text.SpannableString;
+import android.text.SpannableStringBuilder;
 import android.text.style.ImageSpan;
+import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
-import android.view.TextureView;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.Window;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextSwitcher;
@@ -41,8 +43,10 @@
 
 import androidx.annotation.AnimRes;
 import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
 import androidx.annotation.IntDef;
 import androidx.annotation.NonNull;
+import androidx.annotation.RawRes;
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.AlertDialog;
 import androidx.core.content.ContextCompat;
@@ -53,6 +57,9 @@
 
 import com.android.settings.R;
 
+import com.airbnb.lottie.LottieAnimationView;
+import com.airbnb.lottie.LottieDrawable;
+
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
@@ -63,17 +70,19 @@
  * accessibility services.
  */
 public final class AccessibilityGestureNavigationTutorial {
+    private static final String TAG = "AccessibilityGestureNavigationTutorial";
+
     /** IntDef enum for dialog type. */
     @Retention(RetentionPolicy.SOURCE)
     @IntDef({
             DialogType.LAUNCH_SERVICE_BY_ACCESSIBILITY_BUTTON,
-            DialogType.LAUNCH_SERVICE_BY_GESTURE_NAVIGATION,
+            DialogType.LAUNCH_SERVICE_BY_ACCESSIBILITY_GESTURE,
             DialogType.GESTURE_NAVIGATION_SETTINGS,
     })
 
     private @interface DialogType {
         int LAUNCH_SERVICE_BY_ACCESSIBILITY_BUTTON = 0;
-        int LAUNCH_SERVICE_BY_GESTURE_NAVIGATION = 1;
+        int LAUNCH_SERVICE_BY_ACCESSIBILITY_GESTURE = 1;
         int GESTURE_NAVIGATION_SETTINGS = 2;
     }
 
@@ -82,13 +91,17 @@
     private static final DialogInterface.OnClickListener mOnClickListener =
             (DialogInterface dialog, int which) -> dialog.dismiss();
 
-    public static void showGestureNavigationSettingsTutorialDialog(Context context,
-            DialogInterface.OnDismissListener dismissListener) {
+    /**
+     * Displays a dialog that guides users to use accessibility features with accessibility
+     * gestures under system gesture navigation mode.
+     */
+    public static void showGestureNavigationTutorialDialog(Context context,
+            DialogInterface.OnDismissListener onDismissListener) {
         final AlertDialog alertDialog = new AlertDialog.Builder(context)
                 .setView(createTutorialDialogContentView(context,
                         DialogType.GESTURE_NAVIGATION_SETTINGS))
                 .setNegativeButton(R.string.accessibility_tutorial_dialog_button, mOnClickListener)
-                .setOnDismissListener(dismissListener)
+                .setOnDismissListener(onDismissListener)
                 .create();
 
         alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
@@ -107,8 +120,8 @@
         return alertDialog;
     }
 
-    static AlertDialog showGestureNavigationTutorialDialog(Context context) {
-        return createDialog(context, DialogType.LAUNCH_SERVICE_BY_GESTURE_NAVIGATION);
+    static AlertDialog showAccessibilityGestureTutorialDialog(Context context) {
+        return createDialog(context, DialogType.LAUNCH_SERVICE_BY_ACCESSIBILITY_GESTURE);
     }
 
     static AlertDialog createAccessibilityTutorialDialog(Context context, int shortcutTypes) {
@@ -119,7 +132,7 @@
     }
 
     /**
-     * Get a content View for a dialog to confirm that they want to enable a service.
+     * Gets a content View for a dialog to confirm that they want to enable a service.
      *
      * @param context    A valid context
      * @param dialogType The type of tutorial dialog
@@ -136,42 +149,36 @@
                 content = inflater.inflate(
                         R.layout.tutorial_dialog_launch_service_by_accessibility_button, null);
                 break;
-            case DialogType.LAUNCH_SERVICE_BY_GESTURE_NAVIGATION:
+            case DialogType.LAUNCH_SERVICE_BY_ACCESSIBILITY_GESTURE:
                 content = inflater.inflate(
                         R.layout.tutorial_dialog_launch_service_by_gesture_navigation, null);
-                final TextureView gestureTutorialVideo = content.findViewById(
-                        R.id.gesture_tutorial_video);
-                final TextView gestureTutorialMessage = content.findViewById(
-                        R.id.gesture_tutorial_message);
-                VideoPlayer.create(context, AccessibilityUtil.isTouchExploreEnabled(context)
-                                ? R.raw.illustration_accessibility_gesture_three_finger
-                                : R.raw.illustration_accessibility_gesture_two_finger,
-                        gestureTutorialVideo);
-                gestureTutorialMessage.setText(AccessibilityUtil.isTouchExploreEnabled(context)
-                        ? R.string.accessibility_tutorial_dialog_message_gesture_talkback
-                        : R.string.accessibility_tutorial_dialog_message_gesture);
+                setupGestureNavigationTextWithImage(context, content);
                 break;
             case DialogType.GESTURE_NAVIGATION_SETTINGS:
                 content = inflater.inflate(
                         R.layout.tutorial_dialog_launch_by_gesture_navigation_settings, null);
-                final TextureView gestureSettingsTutorialVideo = content.findViewById(
-                        R.id.gesture_tutorial_video);
-                final TextView gestureSettingsTutorialMessage = content.findViewById(
-                        R.id.gesture_tutorial_message);
-                VideoPlayer.create(context, AccessibilityUtil.isTouchExploreEnabled(context)
-                                ? R.raw.illustration_accessibility_gesture_three_finger
-                                : R.raw.illustration_accessibility_gesture_two_finger,
-                        gestureSettingsTutorialVideo);
-                final int stringResId = AccessibilityUtil.isTouchExploreEnabled(context)
-                        ? R.string.accessibility_tutorial_dialog_message_gesture_settings_talkback
-                        : R.string.accessibility_tutorial_dialog_message_gesture_settings;
-                gestureSettingsTutorialMessage.setText(stringResId);
+                setupGestureNavigationTextWithImage(context, content);
                 break;
         }
 
         return content;
     }
 
+    private static void setupGestureNavigationTextWithImage(Context context, View view) {
+        final boolean isTouchExploreEnabled = AccessibilityUtil.isTouchExploreEnabled(context);
+
+        final ImageView imageView = view.findViewById(R.id.image);
+        final int gestureSettingsImageResId =
+                isTouchExploreEnabled ? R.drawable.illustration_accessibility_gesture_three_finger
+                        : R.drawable.illustration_accessibility_gesture_two_finger;
+        imageView.setImageResource(gestureSettingsImageResId);
+
+        final TextView textView = view.findViewById(R.id.gesture_tutorial_message);
+        textView.setText(isTouchExploreEnabled
+                ? R.string.accessibility_tutorial_dialog_message_gesture_settings_talkback
+                : R.string.accessibility_tutorial_dialog_message_gesture_settings);
+    }
+
     private static AlertDialog createDialog(Context context, int dialogType) {
         final AlertDialog alertDialog = new AlertDialog.Builder(context)
                 .setView(createTutorialDialogContentView(context, dialogType))
@@ -238,7 +245,7 @@
         @NonNull
         @Override
         public Object instantiateItem(@NonNull ViewGroup container, int position) {
-            final View itemView = mTutorialPages.get(position).getImageView();
+            final View itemView = mTutorialPages.get(position).getIllustrationView();
             container.addView(itemView);
             return itemView;
         }
@@ -256,7 +263,7 @@
         @Override
         public void destroyItem(@NonNull ViewGroup container, int position,
                 @NonNull Object object) {
-            final View itemView = mTutorialPages.get(position).getImageView();
+            final View itemView = mTutorialPages.get(position).getIllustrationView();
             container.removeView(itemView);
         }
     }
@@ -269,6 +276,34 @@
         return imageView;
     }
 
+    private static View createIllustrationView(Context context, @DrawableRes int imageRes) {
+        final View illustrationFrame = inflateAndInitIllustrationFrame(context);
+        final LottieAnimationView lottieView = illustrationFrame.findViewById(R.id.image);
+        lottieView.setImageResource(imageRes);
+
+        return illustrationFrame;
+    }
+
+    private static View createIllustrationViewWithImageRawResource(Context context,
+            @RawRes int imageRawRes) {
+        final View illustrationFrame = inflateAndInitIllustrationFrame(context);
+        final LottieAnimationView lottieView = illustrationFrame.findViewById(R.id.image);
+        lottieView.setFailureListener(
+                result -> Log.w(TAG, "Invalid image raw resource id: " + imageRawRes,
+                        result));
+        lottieView.setAnimation(imageRawRes);
+        lottieView.setRepeatCount(LottieDrawable.INFINITE);
+        lottieView.playAnimation();
+
+        return illustrationFrame;
+    }
+
+    private static View inflateAndInitIllustrationFrame(Context context) {
+        final LayoutInflater inflater = context.getSystemService(LayoutInflater.class);
+
+        return inflater.inflate(R.layout.accessibility_lottie_animation_view, /* root= */ null);
+    }
+
     private static View createShortcutNavigationContentView(Context context, int shortcutTypes) {
         final LayoutInflater inflater = context.getSystemService(LayoutInflater.class);
         final View contentView = inflater.inflate(
@@ -323,9 +358,8 @@
     }
 
     private static TutorialPage createSoftwareTutorialPage(@NonNull Context context) {
-        final CharSequence title = context.getText(
-                R.string.accessibility_tutorial_dialog_title_button);
-        final ImageView image = createSoftwareImage(context);
+        final CharSequence title = getSoftwareTitle(context);
+        final View image = createSoftwareImage(context);
         final CharSequence instruction = getSoftwareInstruction(context);
         final ImageView indicatorIcon =
                 createImageView(context, R.drawable.ic_accessibility_page_indicator);
@@ -337,8 +371,8 @@
     private static TutorialPage createHardwareTutorialPage(@NonNull Context context) {
         final CharSequence title =
                 context.getText(R.string.accessibility_tutorial_dialog_title_volume);
-        final ImageView image =
-                createImageView(context, R.drawable.accessibility_shortcut_type_hardware);
+        final View image =
+                createIllustrationView(context, R.drawable.accessibility_shortcut_type_hardware);
         final ImageView indicatorIcon =
                 createImageView(context, R.drawable.ic_accessibility_page_indicator);
         final CharSequence instruction =
@@ -351,8 +385,9 @@
     private static TutorialPage createTripleTapTutorialPage(@NonNull Context context) {
         final CharSequence title =
                 context.getText(R.string.accessibility_tutorial_dialog_title_triple);
-        final ImageView image =
-                createImageView(context, R.drawable.accessibility_shortcut_type_triple_tap);
+        final View image =
+                createIllustrationViewWithImageRawResource(context,
+                        R.raw.accessibility_shortcut_type_triple_tap);
         final CharSequence instruction =
                 context.getText(R.string.accessibility_tutorial_dialog_message_triple);
         final ImageView indicatorIcon =
@@ -381,19 +416,47 @@
         return tutorialPages;
     }
 
-    private static ImageView createSoftwareImage(Context context) {
-        final int resId = AccessibilityUtil.isFloatingMenuEnabled(context)
-                ? R.drawable.accessibility_shortcut_type_software_floating
-                : R.drawable.accessibility_shortcut_type_software;
+    private static View createSoftwareImage(Context context) {
+        int resId;
+        if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+            resId = R.drawable.accessibility_shortcut_type_software_floating;
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+            resId = AccessibilityUtil.isTouchExploreEnabled(context)
+                    ? R.drawable.accessibility_shortcut_type_software_gesture_talkback
+                    : R.drawable.accessibility_shortcut_type_software_gesture;
+        } else {
+            resId = R.drawable.accessibility_shortcut_type_software;
+        }
+        return createIllustrationView(context, resId);
+    }
 
-        return createImageView(context, resId);
+    private static CharSequence getSoftwareTitle(Context context) {
+        int resId;
+        if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+            resId = R.string.accessibility_tutorial_dialog_title_button;
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+            resId = R.string.accessibility_tutorial_dialog_title_gesture;
+        } else {
+            resId = R.string.accessibility_tutorial_dialog_title_button;
+        }
+        return context.getText(resId);
     }
 
     private static CharSequence getSoftwareInstruction(Context context) {
-        return AccessibilityUtil.isFloatingMenuEnabled(context)
-                ? context.getText(R.string.accessibility_tutorial_dialog_message_floating_button)
-                : getSoftwareInstructionWithIcon(context,
-                        context.getText(R.string.accessibility_tutorial_dialog_message_button));
+        final SpannableStringBuilder sb = new SpannableStringBuilder();
+        if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+            final int resId = R.string.accessibility_tutorial_dialog_message_floating_button;
+            sb.append(context.getText(resId));
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+            final int resId = AccessibilityUtil.isTouchExploreEnabled(context)
+                    ? R.string.accessibility_tutorial_dialog_message_gesture_talkback
+                    : R.string.accessibility_tutorial_dialog_message_gesture;
+            sb.append(context.getText(resId));
+        } else {
+            final int resId = R.string.accessibility_tutorial_dialog_message_button;
+            sb.append(getSoftwareInstructionWithIcon(context, context.getText(resId)));
+        }
+        return sb;
     }
 
     private static CharSequence getSoftwareInstructionWithIcon(Context context, CharSequence text) {
@@ -416,24 +479,26 @@
 
     private static class TutorialPage {
         private final CharSequence mTitle;
-        private final ImageView mImageView;
+        private final View mIllustrationView;
         private final ImageView mIndicatorIcon;
         private final CharSequence mInstruction;
 
-        TutorialPage(CharSequence title, ImageView imageView, ImageView indicatorIcon,
+        TutorialPage(CharSequence title, View illustrationView, ImageView indicatorIcon,
                 CharSequence instruction) {
             this.mTitle = title;
-            this.mImageView = imageView;
+            this.mIllustrationView = illustrationView;
             this.mIndicatorIcon = indicatorIcon;
             this.mInstruction = instruction;
+
+            setupIllustrationChildViewsGravity();
         }
 
         public CharSequence getTitle() {
             return mTitle;
         }
 
-        public ImageView getImageView() {
-            return mImageView;
+        public View getIllustrationView() {
+            return mIllustrationView;
         }
 
         public ImageView getIndicatorIcon() {
@@ -443,6 +508,23 @@
         public CharSequence getInstruction() {
             return mInstruction;
         }
+
+        private void setupIllustrationChildViewsGravity() {
+            final View backgroundView = mIllustrationView.findViewById(R.id.image_background);
+            initViewGravity(backgroundView);
+
+            final View lottieView = mIllustrationView.findViewById(R.id.image);
+            initViewGravity(lottieView);
+        }
+
+        private void initViewGravity(@NonNull View view) {
+            final FrameLayout.LayoutParams layoutParams =
+                    new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT,
+                            FrameLayout.LayoutParams.WRAP_CONTENT);
+            layoutParams.gravity = Gravity.CENTER;
+
+            view.setLayoutParams(layoutParams);
+        }
     }
 
     private static class TutorialPageChangeListener implements ViewPager.OnPageChangeListener {
diff --git a/src/com/android/settings/accessibility/FloatingMenuLayerDrawable.java b/src/com/android/settings/accessibility/AccessibilityLayerDrawable.java
similarity index 76%
rename from src/com/android/settings/accessibility/FloatingMenuLayerDrawable.java
rename to src/com/android/settings/accessibility/AccessibilityLayerDrawable.java
index bfce114..b04a969 100644
--- a/src/com/android/settings/accessibility/FloatingMenuLayerDrawable.java
+++ b/src/com/android/settings/accessibility/AccessibilityLayerDrawable.java
@@ -27,10 +27,10 @@
 
 import java.util.Objects;
 
-/** LayerDrawable that contains device icon as background and floating menu icon as foreground. */
-public class FloatingMenuLayerDrawable extends LayerDrawable {
+/** LayerDrawable that contains device icon as background and given icon as foreground. */
+public class AccessibilityLayerDrawable extends LayerDrawable {
 
-    private FloatingMenuLayerDrawableState mState;
+    private AccessibilityLayerDrawableState mState;
 
     /**
      * Creates a new layer drawable with the list of specified layers.
@@ -38,23 +38,23 @@
      * @param layers a list of drawables to use as layers in this new drawable,
      *               must be non-null
      */
-    private FloatingMenuLayerDrawable(@NonNull Drawable[] layers) {
+    private AccessibilityLayerDrawable(@NonNull Drawable[] layers) {
         super(layers);
     }
 
     /**
-     * Create the {@link LayerDrawable} that contains device icon as background and floating menu
-     * icon with given {@code opacity} value as foreground.
+     * Create the {@link LayerDrawable} that contains device icon as background and given menu icon
+     * with given {@code opacity} value as foreground.
      *
      * @param context the valid context used to get the icon
-     * @param resId the resource ID of the floating menu icon
+     * @param resId the resource ID of the given icon
      * @param opacity the opacity to apply to the given icon
-     * @return the drawable that combines the device icon and the floating menu icon
+     * @return the drawable that combines the device icon and the given icon
      */
-    public static FloatingMenuLayerDrawable createLayerDrawable(Context context, int resId,
+    public static AccessibilityLayerDrawable createLayerDrawable(Context context, int resId,
             int opacity) {
         final Drawable bg = context.getDrawable(R.drawable.accessibility_button_preview_base);
-        final FloatingMenuLayerDrawable basicDrawable = new FloatingMenuLayerDrawable(
+        final AccessibilityLayerDrawable basicDrawable = new AccessibilityLayerDrawable(
                 new Drawable[]{bg, null});
 
         basicDrawable.updateLayerDrawable(context, resId, opacity);
@@ -66,7 +66,7 @@
      * value at index 1 layer.
      *
      * @param context the valid context used to get the icon
-     * @param resId the resource ID of the floating menu icon
+     * @param resId the resource ID of the given icon
      * @param opacity the opacity to apply to the given icon
      */
     public void updateLayerDrawable(Context context, int resId, int opacity) {
@@ -83,18 +83,18 @@
 
     /** Stores the constant state and data to the given drawable. */
     private void setConstantState(Context context, int resId, int opacity) {
-        mState = new FloatingMenuLayerDrawableState(context, resId, opacity);
+        mState = new AccessibilityLayerDrawableState(context, resId, opacity);
     }
 
-    /** {@link ConstantState} to store the data of {@link FloatingMenuLayerDrawable}. */
+    /** {@link ConstantState} to store the data of {@link AccessibilityLayerDrawable}. */
     @VisibleForTesting
-    static class FloatingMenuLayerDrawableState extends ConstantState {
+    static class AccessibilityLayerDrawableState extends ConstantState {
 
         private final Context mContext;
         private final int mResId;
         private final int mOpacity;
 
-        FloatingMenuLayerDrawableState(Context context, int resId, int opacity) {
+        AccessibilityLayerDrawableState(Context context, int resId, int opacity) {
             mContext = context;
             mResId = resId;
             mOpacity = opacity;
@@ -119,7 +119,7 @@
             if (o == null || getClass() != o.getClass()) {
                 return false;
             }
-            final FloatingMenuLayerDrawableState that = (FloatingMenuLayerDrawableState) o;
+            final AccessibilityLayerDrawableState that = (AccessibilityLayerDrawableState) o;
             return mResId == that.mResId
                     && mOpacity == that.mOpacity
                     && Objects.equals(mContext, that.mContext);
diff --git a/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java b/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java
new file mode 100644
index 0000000..a9d7c05
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2021 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.settings.accessibility;
+
+import android.content.ComponentName;
+
+import androidx.annotation.Nullable;
+
+/**
+ * Provider for Accessibility metrics related features.
+ */
+public interface AccessibilityMetricsFeatureProvider {
+
+    /**
+     * Returns {@link android.app.settings.SettingsEnums} value according to the {@code
+     * componentName}.
+     *
+     * @param componentName the component name of the downloaded service or activity
+     * @return value in {@link android.app.settings.SettingsEnums}
+     */
+    int getDownloadedFeatureMetricsCategory(@Nullable ComponentName componentName);
+}
diff --git a/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java b/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java
new file mode 100644
index 0000000..0f85f38
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2021 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.settings.accessibility;
+
+import android.app.settings.SettingsEnums;
+import android.content.ComponentName;
+
+/**
+ * Provider implementation for Accessibility metrics related features.
+ */
+public class AccessibilityMetricsFeatureProviderImpl implements
+        AccessibilityMetricsFeatureProvider {
+
+    @Override
+    public int getDownloadedFeatureMetricsCategory(ComponentName componentName) {
+        return SettingsEnums.ACCESSIBILITY_SERVICE;
+    }
+}
diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
index 127c7c6..22f037b 100644
--- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
@@ -115,8 +115,7 @@
         mShortcutPreference.setKey(getShortcutPreferenceKey());
         mShortcutPreference.setOnClickCallback(this);
 
-        final CharSequence title = getString(R.string.accessibility_shortcut_title, getLabelName());
-        mShortcutPreference.setTitle(title);
+        updateShortcutTitle(mShortcutPreference);
         getPreferenceScreen().addPreference(mShortcutPreference);
 
         mTouchExplorationStateChangeListener = isTouchExplorationEnabled -> {
@@ -182,6 +181,11 @@
         }
     }
 
+    protected void updateShortcutTitle(ShortcutPreference shortcutPreference) {
+        final CharSequence title = getString(R.string.accessibility_shortcut_title, getLabelName());
+        shortcutPreference.setTitle(title);
+    }
+
     @Override
     public int getDialogMetricsCategory(int dialogId) {
         switch (dialogId) {
diff --git a/src/com/android/settings/accessibility/BalanceSeekBar.java b/src/com/android/settings/accessibility/BalanceSeekBar.java
index 8a88d6c..19301ae 100644
--- a/src/com/android/settings/accessibility/BalanceSeekBar.java
+++ b/src/com/android/settings/accessibility/BalanceSeekBar.java
@@ -17,6 +17,7 @@
 package com.android.settings.accessibility;
 
 import static android.view.HapticFeedbackConstants.CLOCK_TICK;
+
 import static com.android.settings.Utils.isNightMode;
 
 import android.content.Context;
@@ -154,7 +155,7 @@
         // Draw a vertical line at 50% that represents centred balance
         int seekBarCenter = (canvas.getHeight() - getPaddingBottom()) / 2;
         canvas.save();
-        canvas.translate((canvas.getWidth() - mCenterMarkerRect.right) / 2,
+        canvas.translate((canvas.getWidth() - mCenterMarkerRect.right - getPaddingEnd()) / 2,
                 seekBarCenter - (mCenterMarkerRect.bottom / 2));
         canvas.drawRect(mCenterMarkerRect, mCenterMarkerPaint);
         canvas.restore();
diff --git a/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java b/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java
index 4e50b89..495d395 100644
--- a/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java
+++ b/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java
@@ -30,12 +30,18 @@
     }
 
     @Override
-    protected String getLabelName() {
-        return mContext.getString(R.string.accessibility_captioning_title);
+    protected String getLearnMoreContentDescription() {
+        return mContext.getString(
+            R.string.accessibility_captioning_footer_learn_more_content_description);
     }
 
     @Override
-    protected int getHelpResource()  {
+    protected String getIntroductionTitle() {
+        return mContext.getString(R.string.accessibility_captioning_about_title);
+    }
+
+    @Override
+    protected int getHelpResource() {
         return R.string.help_url_caption;
     }
 }
diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
index 98090ac..3b15830 100644
--- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
@@ -41,6 +41,7 @@
 import androidx.preference.Preference;
 
 import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -52,6 +53,19 @@
     protected static final String KEY_LAUNCH_PREFERENCE = "launch_preference";
 
     @Override
+    public int getMetricsCategory() {
+        // Retrieve from getArguments() directly because this function will be executed from
+        // onAttach(), but variable mComponentName only available after onProcessArguments()
+        // which comes from onCreateView().
+        final ComponentName componentName = getArguments().getParcelable(
+                AccessibilitySettings.EXTRA_COMPONENT_NAME);
+
+        return FeatureFactory.getFactory(getActivity().getApplicationContext())
+                .getAccessibilityMetricsFeatureProvider()
+                .getDownloadedFeatureMetricsCategory(componentName);
+    }
+
+    @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         final View view = super.onCreateView(inflater, container, savedInstanceState);
@@ -60,7 +74,7 @@
         initLaunchPreference();
         removePreference(KEY_USE_SERVICE_PREFERENCE);
         return view;
-    };
+    }
 
     @Override
     protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
@@ -70,7 +84,6 @@
     @Override
     protected void onProcessArguments(Bundle arguments) {
         super.onProcessArguments(arguments);
-
         mComponentName = arguments.getParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME);
         final ActivityInfo info = getAccessibilityShortcutInfo().getActivityInfo();
         mPackageName = info.loadLabel(getPackageManager()).toString();
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index 9349071..bd63406 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -54,8 +54,8 @@
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.R;
 import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ConfirmDeviceCredentialActivity;
-import com.android.settings.widget.SettingsMainSwitchPreference;
 import com.android.settingslib.accessibility.AccessibilityUtils;
 
 import java.util.List;
@@ -85,7 +85,15 @@
 
     @Override
     public int getMetricsCategory() {
-        return SettingsEnums.ACCESSIBILITY_SERVICE;
+        // Retrieve from getArguments() directly because this function will be executed from
+        // onAttach(), but variable mComponentName only available after onProcessArguments()
+        // which comes from onCreateView().
+        final ComponentName componentName = getArguments().getParcelable(
+                AccessibilitySettings.EXTRA_COMPONENT_NAME);
+
+        return FeatureFactory.getFactory(getActivity().getApplicationContext())
+                .getAccessibilityMetricsFeatureProvider()
+                .getDownloadedFeatureMetricsCategory(componentName);
     }
 
     @Override
@@ -222,15 +230,6 @@
     }
 
     @Override
-    protected void updateToggleServiceTitle(SettingsMainSwitchPreference switchPreference) {
-        final AccessibilityServiceInfo info = getAccessibilityServiceInfo();
-        final String switchBarText = (info == null) ? "" :
-                getString(R.string.accessibility_service_primary_switch_title,
-                        info.getResolveInfo().loadLabel(getPackageManager()));
-        switchPreference.setTitle(switchBarText);
-    }
-
-    @Override
     protected void updateSwitchBarToggleSwitch() {
         final boolean checked = isAccessibilityServiceEnabled();
         if (mToggleServiceSwitchPreference.isChecked() == checked) {
diff --git a/src/com/android/settings/accessibility/ToggleAutoclickFooterPreferenceController.java b/src/com/android/settings/accessibility/ToggleAutoclickFooterPreferenceController.java
index 053fa9d..962ffec 100644
--- a/src/com/android/settings/accessibility/ToggleAutoclickFooterPreferenceController.java
+++ b/src/com/android/settings/accessibility/ToggleAutoclickFooterPreferenceController.java
@@ -31,8 +31,14 @@
     }
 
     @Override
-    protected String getLabelName() {
-        return mContext.getString(R.string.accessibility_autoclick_preference_title);
+    protected String getLearnMoreContentDescription() {
+        return mContext.getString(
+            R.string.accessibility_autoclick_footer_learn_more_content_description);
+    }
+
+    @Override
+    protected String getIntroductionTitle() {
+        return mContext.getString(R.string.accessibility_autoclick_about_title);
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
index b41bafd..419514f 100644
--- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
@@ -38,8 +38,7 @@
 import java.util.List;
 
 /** Settings page for color inversion. */
-public class ToggleColorInversionPreferenceFragment extends
-        ToggleFeaturePreferenceFragment {
+public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePreferenceFragment {
 
     private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED;
     private final Handler mHandler = new Handler();
@@ -73,6 +72,11 @@
     }
 
     @Override
+    protected void updateShortcutTitle(ShortcutPreference shortcutPreference) {
+        shortcutPreference.setTitle(R.string.accessibility_display_inversion_shortcut_title);
+    }
+
+    @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         mComponentName = COLOR_INVERSION_COMPONENT_NAME;
@@ -90,7 +94,20 @@
                 updateSwitchBarToggleSwitch();
             }
         };
-        return super.onCreateView(inflater, container, savedInstanceState);
+
+        final View view = super.onCreateView(inflater, container, savedInstanceState);
+        updateFooterPreference();
+        return view;
+    }
+
+    private void updateFooterPreference() {
+        final String title = getPrefContext().getString(
+                R.string.accessibility_color_inversion_about_title);
+        final String learnMoreContentDescription = getPrefContext().getString(
+                R.string.accessibility_color_inversion_footer_learn_more_content_description);
+        mFooterPreferenceController.setIntroductionTitle(title);
+        mFooterPreferenceController.setupHelpLink(getHelpResource(), learnMoreContentDescription);
+        mFooterPreferenceController.displayPreference(getPreferenceScreen());
     }
 
     @Override
diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
index 4bcf478..c9449d24 100644
--- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
@@ -92,12 +92,20 @@
                 updateSwitchBarToggleSwitch();
             }
         };
-        return super.onCreateView(inflater, container, savedInstanceState);
+
+        final View view = super.onCreateView(inflater, container, savedInstanceState);
+        updateFooterPreference();
+        return view;
     }
 
-    @Override
-    public void onViewCreated(View view, Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
+    private void updateFooterPreference() {
+        final String title = getPrefContext()
+                .getString(R.string.accessibility_daltonizer_about_title);
+        final String learnMoreContentDescription = getPrefContext()
+                .getString(R.string.accessibility_daltonizer_footer_learn_more_content_description);
+        mFooterPreferenceController.setIntroductionTitle(title);
+        mFooterPreferenceController.setupHelpLink(getHelpResource(), learnMoreContentDescription);
+        mFooterPreferenceController.displayPreference(getPreferenceScreen());
     }
 
     /** Customizes the order by preference key. */
@@ -168,6 +176,11 @@
     }
 
     @Override
+    protected void updateShortcutTitle(ShortcutPreference shortcutPreference) {
+        shortcutPreference.setTitle(R.string.accessibility_daltonizer_shortcut_title);
+    }
+
+    @Override
     int getUserShortcutTypes() {
         return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(),
                 mComponentName);
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 510f8d3..245f362 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -57,7 +57,6 @@
 import com.android.settings.utils.LocaleUtils;
 import com.android.settings.widget.SettingsMainSwitchBar;
 import com.android.settings.widget.SettingsMainSwitchPreference;
-import com.android.settingslib.HelpUtils;
 import com.android.settingslib.accessibility.AccessibilityUtils;
 import com.android.settingslib.widget.IllustrationPreference;
 import com.android.settingslib.widget.OnMainSwitchChangeListener;
@@ -78,6 +77,7 @@
     protected SettingsMainSwitchPreference mToggleServiceSwitchPreference;
     protected ShortcutPreference mShortcutPreference;
     protected Preference mSettingsPreference;
+    protected AccessibilityFooterPreferenceController mFooterPreferenceController;
     protected String mPreferenceKey;
 
     protected CharSequence mSettingsTitle;
@@ -284,7 +284,14 @@
     abstract int getUserShortcutTypes();
 
     protected void updateToggleServiceTitle(SettingsMainSwitchPreference switchPreference) {
-        switchPreference.setTitle(R.string.accessibility_service_primary_switch_title);
+        final CharSequence title =
+            getString(R.string.accessibility_service_primary_switch_title, mPackageName);
+        switchPreference.setTitle(title);
+    }
+
+    protected void updateShortcutTitle(ShortcutPreference shortcutPreference) {
+        final CharSequence title = getString(R.string.accessibility_shortcut_title, mPackageName);
+        shortcutPreference.setTitle(title);
     }
 
     protected abstract void onPreferenceToggled(String preferenceKey, boolean enabled);
@@ -434,8 +441,7 @@
         mShortcutPreference.setKey(getShortcutPreferenceKey());
         mShortcutPreference.setOnClickCallback(this);
 
-        final CharSequence title = getString(R.string.accessibility_shortcut_title, mPackageName);
-        mShortcutPreference.setTitle(title);
+        updateShortcutTitle(mShortcutPreference);
 
         final PreferenceCategory generalCategory = findPreference(KEY_GENERAL_CATEGORY);
         generalCategory.addPreference(mShortcutPreference);
@@ -463,33 +469,19 @@
         final PreferenceScreen screen = getPreferenceScreen();
         final CharSequence htmlDescription = Html.fromHtml(mHtmlDescription.toString(),
                 Html.FROM_HTML_MODE_COMPACT, mImageGetter, /* tagHandler= */ null);
-        final String iconContentDescription =
-                getString(R.string.accessibility_introduction_title, mPackageName);
 
         final AccessibilityFooterPreference htmlFooterPreference =
                 new AccessibilityFooterPreference(screen.getContext());
         htmlFooterPreference.setKey(KEY_HTML_DESCRIPTION_PREFERENCE);
         htmlFooterPreference.setSummary(htmlDescription);
-        htmlFooterPreference.setContentDescription(
-                generateFooterContentDescription(htmlDescription));
-
-        // Only framework tools support help link
-        if (getHelpResource() != 0) {
-            htmlFooterPreference.setLearnMoreAction(view -> {
-                final Intent helpIntent = HelpUtils.getHelpIntent(
-                        getContext(), getContext().getString(getHelpResource()),
-                        getContext().getClass().getName());
-                view.startActivityForResult(helpIntent, 0);
-            });
-
-            final String learnMoreContentDescription = getPrefContext().getString(
-                    R.string.footer_learn_more_content_description, mPackageName);
-            htmlFooterPreference.setLearnMoreContentDescription(learnMoreContentDescription);
-            htmlFooterPreference.setLinkEnabled(true);
-        } else {
-            htmlFooterPreference.setLinkEnabled(false);
-        }
         screen.addPreference(htmlFooterPreference);
+
+        // TODO(b/171272809): Migrate to DashboardFragment.
+        final String title = getString(R.string.accessibility_introduction_title, mPackageName);
+        mFooterPreferenceController = new AccessibilityFooterPreferenceController(
+            screen.getContext(), htmlFooterPreference.getKey());
+        mFooterPreferenceController.setIntroductionTitle(title);
+        mFooterPreferenceController.displayPreference(screen);
     }
 
     private void initFooterPreference() {
@@ -512,41 +504,22 @@
      *
      * @param screen The preference screen to add the footer preference
      * @param summary The summary of the preference summary.
-     * @param iconContentDescription The content description of icon in the footer.
+     * @param introductionTitle The title of introduction in the footer.
      */
     @VisibleForTesting
     void createFooterPreference(PreferenceScreen screen, CharSequence summary,
-            String iconContentDescription) {
+            String introductionTitle) {
         final AccessibilityFooterPreference footerPreference =
                 new AccessibilityFooterPreference(screen.getContext());
         footerPreference.setSummary(summary);
-        footerPreference.setContentDescription(
-                generateFooterContentDescription(summary));
-
-        // Only framework tools support help link
-        if (getHelpResource() != 0) {
-            footerPreference.setLearnMoreAction(view -> {
-                final Intent helpIntent = HelpUtils.getHelpIntent(
-                        getContext(), getContext().getString(getHelpResource()),
-                        getContext().getClass().getName());
-                view.startActivityForResult(helpIntent, 0);
-            });
-
-            final String learnMoreContentDescription = getPrefContext().getString(
-                    R.string.footer_learn_more_content_description, mPackageName);
-            footerPreference.setLearnMoreContentDescription(learnMoreContentDescription);
-        }
         screen.addPreference(footerPreference);
+
+        mFooterPreferenceController = new AccessibilityFooterPreferenceController(
+            screen.getContext(), footerPreference.getKey());
+        mFooterPreferenceController.setIntroductionTitle(introductionTitle);
+        mFooterPreferenceController.displayPreference(screen);
     }
 
-    private CharSequence generateFooterContentDescription(CharSequence footerContent) {
-        final StringBuffer sb = new StringBuffer();
-        sb.append(getPrefContext().getString(
-                R.string.accessibility_introduction_title, mPackageName))
-                .append("\n\n")
-                .append(footerContent);
-        return sb;
-    }
     @VisibleForTesting
     void setupEditShortcutDialog(Dialog dialog) {
         final View dialogSoftwareView = dialog.findViewById(R.id.software_shortcut);
@@ -611,6 +584,18 @@
         return value;
     }
 
+    private static CharSequence getSoftwareShortcutTypeSummary(Context context) {
+        int resId;
+        if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+            resId = R.string.accessibility_shortcut_edit_summary_software;
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+            resId = R.string.accessibility_shortcut_edit_summary_software_gesture;
+        } else {
+            resId = R.string.accessibility_shortcut_edit_summary_software;
+        }
+        return context.getText(resId);
+    }
+
     protected CharSequence getShortcutTypeSummary(Context context) {
         if (!mShortcutPreference.isSettingsEditable()) {
             return context.getText(R.string.accessibility_shortcut_edit_dialog_title_hardware);
@@ -624,11 +609,8 @@
                 mComponentName.flattenToString(), UserShortcutType.SOFTWARE);
 
         final List<CharSequence> list = new ArrayList<>();
-        final CharSequence softwareTitle = context.getText(
-                R.string.accessibility_shortcut_edit_summary_software);
-
         if (hasShortcutType(shortcutTypes, UserShortcutType.SOFTWARE)) {
-            list.add(softwareTitle);
+            list.add(getSoftwareShortcutTypeSummary(context));
         }
         if (hasShortcutType(shortcutTypes, UserShortcutType.HARDWARE)) {
             final CharSequence hardwareTitle = context.getText(
@@ -638,7 +620,7 @@
 
         // Show software shortcut if first time to use.
         if (list.isEmpty()) {
-            list.add(softwareTitle);
+            list.add(getSoftwareShortcutTypeSummary(context));
         }
 
         return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
diff --git a/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java
index e60751e..81bd45a 100644
--- a/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java
@@ -86,6 +86,7 @@
         // Parent sets the title when creating the view, so set it after calling super
         mToggleServiceSwitchPreference.setTitle(R.string.reduce_bright_colors_switch_title);
         updateGeneralCategoryOrder();
+        updateFooterPreference();
         return view;
     }
 
@@ -101,6 +102,12 @@
         generalCategory.addPreference(persist);
     }
 
+    private void updateFooterPreference() {
+        final String title = getPrefContext().getString(R.string.reduce_bright_colors_about_title);
+        mFooterPreferenceController.setIntroductionTitle(title);
+        mFooterPreferenceController.displayPreference(getPreferenceScreen());
+    }
+
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
@@ -135,7 +142,6 @@
         return R.xml.reduce_bright_colors_settings;
     }
 
-
     @Override
     protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
         AccessibilityStatsLogUtils.logAccessibilityServiceEnabled(mComponentName, enabled);
@@ -155,6 +161,11 @@
     }
 
     @Override
+    protected void updateShortcutTitle(ShortcutPreference shortcutPreference) {
+        shortcutPreference.setTitle(R.string.reduce_bright_colors_shortcut_title);
+    }
+
+    @Override
     int getUserShortcutTypes() {
         return AccessibilityUtil.getUserShortcutTypesFromSettings(getPrefContext(),
                 mComponentName);
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 9266f72..c152174 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -95,7 +95,20 @@
             removeDialog(DialogEnums.EDIT_SHORTCUT);
             mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));
         };
-        return super.onCreateView(inflater, container, savedInstanceState);
+
+        final View view = super.onCreateView(inflater, container, savedInstanceState);
+        updateFooterPreference();
+        return view;
+    }
+
+    private void updateFooterPreference() {
+        final String title = getPrefContext().getString(
+                R.string.accessibility_screen_magnification_about_title);
+        final String learnMoreContentDescription = getPrefContext().getString(
+                R.string.accessibility_screen_magnification_footer_learn_more_content_description);
+        mFooterPreferenceController.setIntroductionTitle(title);
+        mFooterPreferenceController.setupHelpLink(getHelpResource(), learnMoreContentDescription);
+        mFooterPreferenceController.displayPreference(getPreferenceScreen());
     }
 
     @Override
@@ -128,7 +141,7 @@
         switch (dialogId) {
             case DialogEnums.GESTURE_NAVIGATION_TUTORIAL:
                 return AccessibilityGestureNavigationTutorial
-                        .showGestureNavigationTutorialDialog(getPrefContext());
+                        .showAccessibilityGestureTutorialDialog(getPrefContext());
             case DialogEnums.MAGNIFICATION_EDIT_SHORTCUT:
                 final CharSequence dialogTitle = getPrefContext().getString(
                         R.string.accessibility_shortcut_title, mPackageName);
@@ -252,6 +265,18 @@
         return (value & type) == type;
     }
 
+    private static CharSequence getSoftwareShortcutTypeSummary(Context context) {
+        int resId;
+        if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+            resId = R.string.accessibility_shortcut_edit_summary_software;
+        } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+            resId = R.string.accessibility_shortcut_edit_summary_software_gesture;
+        } else {
+            resId = R.string.accessibility_shortcut_edit_summary_software;
+        }
+        return context.getText(resId);
+    }
+
     @Override
     protected CharSequence getShortcutTypeSummary(Context context) {
         if (!mShortcutPreference.isChecked()) {
@@ -262,18 +287,14 @@
                 MAGNIFICATION_CONTROLLER_NAME, UserShortcutType.SOFTWARE);
 
         final List<CharSequence> list = new ArrayList<>();
-        final CharSequence softwareTitle = context.getText(
-                R.string.accessibility_shortcut_edit_summary_software);
-
         if (hasShortcutType(shortcutTypes, UserShortcutType.SOFTWARE)) {
-            list.add(softwareTitle);
+            list.add(getSoftwareShortcutTypeSummary(context));
         }
         if (hasShortcutType(shortcutTypes, UserShortcutType.HARDWARE)) {
             final CharSequence hardwareTitle = context.getText(
                     R.string.accessibility_shortcut_hardware_keyword);
             list.add(hardwareTitle);
         }
-
         if (hasShortcutType(shortcutTypes, UserShortcutType.TRIPLETAP)) {
             final CharSequence tripleTapTitle = context.getText(
                     R.string.accessibility_shortcut_triple_tap_keyword);
@@ -282,7 +303,7 @@
 
         // Show software shortcut if first time to use.
         if (list.isEmpty()) {
-            list.add(softwareTitle);
+            list.add(getSoftwareShortcutTypeSummary(context));
         }
 
         return CaseMap.toTitle().wholeString().noLowercase().apply(Locale.getDefault(), /* iter= */
@@ -397,6 +418,11 @@
     }
 
     @Override
+    protected void updateShortcutTitle(ShortcutPreference shortcutPreference) {
+        shortcutPreference.setTitle(R.string.accessibility_screen_magnification_shortcut_title);
+    }
+
+    @Override
     protected void updateShortcutPreference() {
         final int shortcutTypes = PreferredShortcuts.retrieveUserShortcutType(getPrefContext(),
                 MAGNIFICATION_CONTROLLER_NAME, UserShortcutType.SOFTWARE);
diff --git a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java
index 4334cd0..9ca1f19 100644
--- a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java
@@ -33,7 +33,7 @@
 
     @Override
     public int getMetricsCategory() {
-        return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SCREEN_READER;
+        return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SELECT_TO_SPEAK;
     }
 
     @Override
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
new file mode 100644
index 0000000..3967bd7
--- /dev/null
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2021 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.settings.activityembedding;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.util.LayoutDirection;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.window.embedding.ActivityFilter;
+import androidx.window.embedding.SplitController;
+import androidx.window.embedding.SplitPairFilter;
+import androidx.window.embedding.SplitPairRule;
+import androidx.window.embedding.SplitPlaceholderRule;
+
+import com.android.settings.Settings;
+import com.android.settings.SubSettings;
+import com.android.settings.Utils;
+import com.android.settings.homepage.SettingsHomepageActivity;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/** A class to initialize split rules for activity embedding. */
+public class ActivityEmbeddingRulesController {
+
+    private static final String TAG = "ActivityEmbeddingCtrl ";
+    private final Context mContext;
+    private final SplitController mSplitController;
+
+    public ActivityEmbeddingRulesController(Context context) {
+        mContext = context;
+        mSplitController = SplitController.getInstance();
+    }
+
+    /**
+     * Set up embedding rules to place activities to the right pane.
+     */
+    public void initRules() {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(mContext)) {
+            Log.d(TAG, "Not support this feature now");
+            return;
+        }
+
+        mSplitController.clearRegisteredRules();
+
+        // Set a placeholder for home page.
+        registerHomepagePlaceholderRule();
+        // Set subsettings rule.
+        registerTwoPanePairRule(mContext,
+                getComponentName(Settings.class),
+                getComponentName(SubSettings.class),
+                true /* finishPrimaryWithSecondary */,
+                true /* finishSecondaryWithPrimary */);
+    }
+
+    /** Register a SplitPairRule for 2-pane. */
+    public static void registerTwoPanePairRule(Context context,
+            ComponentName primary, ComponentName secondary,
+            boolean finishPrimaryWithSecondary, boolean finishSecondaryWithPrimary) {
+        final Set<SplitPairFilter> filters = new HashSet<>();
+        filters.add(new SplitPairFilter(primary, secondary,
+                null /* secondaryActivityIntentAction */));
+
+        SplitController.getInstance().registerRule(new SplitPairRule(filters,
+                finishPrimaryWithSecondary,
+                finishSecondaryWithPrimary, true /* clearTop */,
+                ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(context),
+                ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(context),
+                ActivityEmbeddingUtils.SPLIT_RATIO,
+                LayoutDirection.LOCALE));
+    }
+
+    private void registerHomepagePlaceholderRule() {
+        final Set<ActivityFilter> activityFilters = new HashSet<>();
+        activityFilters.add(new ActivityFilter(getComponentName(SettingsHomepageActivity.class),
+                null /* intentAction */));
+        activityFilters.add(new ActivityFilter(getComponentName(Settings.class),
+                null /* intentAction */));
+        activityFilters.add(new ActivityFilter(new ComponentName(Utils.SETTINGS_PACKAGE_NAME,
+                SettingsHomepageActivity.ALIAS_DEEP_LINK), null /* intentAction */));
+        final Intent intent = new Intent();
+        intent.setComponent(getComponentName(Settings.NetworkDashboardActivity.class));
+        final SplitPlaceholderRule placeholderRule = new SplitPlaceholderRule(
+                activityFilters,
+                intent,
+                ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(mContext),
+                ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(mContext),
+                ActivityEmbeddingUtils.SPLIT_RATIO,
+                LayoutDirection.LOCALE);
+
+        mSplitController.registerRule(placeholderRule);
+    }
+
+    @NonNull
+    private ComponentName getComponentName(Class<? extends Activity> activityClass) {
+        return new ComponentName(mContext.getPackageName(), activityClass.getName());
+    }
+}
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
new file mode 100644
index 0000000..ab999ed
--- /dev/null
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2021 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.settings.activityembedding;
+
+import android.content.Context;
+import android.util.DisplayMetrics;
+import android.util.FeatureFlagUtils;
+import android.util.Log;
+import android.util.TypedValue;
+
+import androidx.window.embedding.SplitController;
+
+/** An util class collecting all common methods for the embedding activity features. */
+public class ActivityEmbeddingUtils {
+    public static final float SPLIT_RATIO = 0.5f;
+    // The smallest value of current width of the window when the split should be used.
+    private static final float MIN_CURRENT_SCREEN_SPLIT_WIDTH_DP = 720f;
+    // The smallest value of the smallest-width (sw) of the window in any rotation when
+    // the split should be used.
+    private static final float MIN_SMALLEST_SCREEN_SPLIT_WIDTH_DP = 600f;
+    private static final String TAG = "ActivityEmbeddingUtils";
+
+    /** Get the smallest pixel value of width of the window when the split should be used. */
+    public static int getMinCurrentScreenSplitWidthPx(Context context) {
+        final DisplayMetrics dm = context.getResources().getDisplayMetrics();
+        return (int) TypedValue.applyDimension(
+                TypedValue.COMPLEX_UNIT_DIP, MIN_CURRENT_SCREEN_SPLIT_WIDTH_DP, dm);
+    }
+
+    /**
+     * Get the smallest pixel value of the smallest-width (sw) of the window in any rotation when
+     * the split should be used.
+     */
+    public static int getMinSmallestScreenSplitWidthPx(Context context) {
+        final DisplayMetrics dm = context.getResources().getDisplayMetrics();
+        return (int) TypedValue.applyDimension(
+                TypedValue.COMPLEX_UNIT_DIP, MIN_SMALLEST_SCREEN_SPLIT_WIDTH_DP, dm);
+    }
+
+    /** Whether to support embedding activity feature. */
+    public static boolean isEmbeddingActivityEnabled(Context context) {
+        final boolean isFlagEnabled = FeatureFlagUtils.isEnabled(context,
+                FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN);
+        final boolean isSplitSupported = SplitController.getInstance().isSplitSupported();
+
+        Log.d(TAG, "isFlagEnabled = " + isFlagEnabled);
+        Log.d(TAG, "isSplitSupported = " + isSplitSupported);
+
+        return isFlagEnabled && isSplitSupported;
+    }
+}
diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
index 09bf86a..1b270d6 100644
--- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
@@ -226,7 +226,8 @@
                 uninstallDaIntent.putExtra(DeviceAdminAdd.EXTRA_DEVICE_ADMIN_PACKAGE_NAME,
                         packageName);
                 mMetricsFeatureProvider.action(mActivity,
-                        SettingsEnums.ACTION_SETTINGS_UNINSTALL_DEVICE_ADMIN);
+                        SettingsEnums.ACTION_SETTINGS_UNINSTALL_DEVICE_ADMIN,
+                        getPackageNameForMetric());
                 mFragment.startActivityForResult(uninstallDaIntent, mRequestRemoveDeviceAdmin);
                 return;
             }
@@ -253,7 +254,8 @@
                             mActivity,
                             mAppEntry.info.enabled
                                     ? SettingsEnums.ACTION_SETTINGS_DISABLE_APP
-                                    : SettingsEnums.ACTION_SETTINGS_ENABLE_APP);
+                                    : SettingsEnums.ACTION_SETTINGS_ENABLE_APP,
+                                    getPackageNameForMetric());
                     AsyncTask.execute(new DisableChangerRunnable(mPm, mAppEntry.info.packageName,
                             PackageManager.COMPONENT_ENABLED_STATE_DEFAULT));
                 }
@@ -270,7 +272,9 @@
         @Override
         public void onClick(View v) {
              mMetricsFeatureProvider.action(
-                     mActivity, SettingsEnums.ACTION_APP_INFO_FORCE_STOP);
+                     mActivity,
+                     SettingsEnums.ACTION_APP_INFO_FORCE_STOP,
+                     getPackageNameForMetric());
             // force stop
             if (mPm.isPackageStateProtected(mAppEntry.info.packageName, mUserId)) {
                 RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mActivity,
@@ -757,6 +761,14 @@
                 || AppUtils.isMainlineModule(mPm, mAppEntry.info.packageName));
     }
 
+    private String getPackageNameForMetric() {
+        final String packageName =
+                mAppEntry != null && mAppEntry.info != null
+                        ? mAppEntry.info.packageName
+                        : null;
+        return packageName != null ? packageName : "";
+    }
+
     /**
      * Changes the status of disable/enable for a package
      */
diff --git a/src/com/android/settings/backup/SettingsBackupHelper.java b/src/com/android/settings/backup/SettingsBackupHelper.java
index 6437b78..a682df8 100644
--- a/src/com/android/settings/backup/SettingsBackupHelper.java
+++ b/src/com/android/settings/backup/SettingsBackupHelper.java
@@ -22,6 +22,7 @@
 import android.app.backup.BackupHelper;
 import android.os.ParcelFileDescriptor;
 
+import com.android.settings.fuelgauge.BatteryBackupHelper;
 import com.android.settings.shortcut.CreateShortcutPreferenceController;
 
 import java.io.FileInputStream;
@@ -37,6 +38,7 @@
     public void onCreate() {
         super.onCreate();
         addHelper("no-op", new NoOpHelper());
+        addHelper(BatteryBackupHelper.TAG, new BatteryBackupHelper(this));
     }
 
     @Override
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index ae21177..707dea9 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -112,6 +112,14 @@
         howMessage.setText(getHowMessage());
         inControlMessage.setText(getInControlMessage());
 
+        // Set up and show the "less secure" info section if necessary.
+        if (getResources().getBoolean(R.bool.config_face_intro_show_less_secure)) {
+            final LinearLayout infoRowLessSecure = findViewById(R.id.info_row_less_secure);
+            final ImageView iconLessSecure = findViewById(R.id.icon_less_secure);
+            infoRowLessSecure.setVisibility(View.VISIBLE);
+            iconLessSecure.getBackground().setColorFilter(getIconColorFilter());
+        }
+
         // Set up and show the "require eyes" info section if necessary.
         if (getResources().getBoolean(R.bool.config_face_intro_show_require_eyes)) {
             final LinearLayout infoRowRequireEyes = findViewById(R.id.info_row_require_eyes);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index 748a1dc..c2bcee3 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -18,6 +18,7 @@
 
 import android.animation.Animator;
 import android.animation.ObjectAnimator;
+import android.annotation.IntDef;
 import android.annotation.Nullable;
 import android.app.Dialog;
 import android.app.settings.SettingsEnums;
@@ -46,7 +47,6 @@
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
-import androidx.annotation.IntDef;
 import androidx.appcompat.app.AlertDialog;
 
 import com.android.settings.R;
@@ -158,7 +158,7 @@
 
         mIsSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
         if (mCanAssumeUdfps) {
-            updateTitleAndDescriptionForUdfps();
+            updateTitleAndDescription();
         } else {
             setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title);
         }
@@ -567,6 +567,7 @@
 
     private final Animator.AnimatorListener mProgressAnimationListener =
             new Animator.AnimatorListener() {
+
                 @Override
                 public void onAnimationStart(Animator animation) { }
 
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
index cabe5bf..e4de7f1 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
@@ -22,9 +22,11 @@
 import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
 import android.os.Bundle;
 import android.view.View;
+import android.view.accessibility.AccessibilityManager;
 
 import androidx.annotation.Nullable;
 
+import com.airbnb.lottie.LottieAnimationView;
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.biometrics.BiometricEnrollBase;
@@ -80,6 +82,13 @@
                     .setTheme(R.style.SudGlifButton_Primary)
                     .build()
             );
+
+            LottieAnimationView lottieAnimationView = findViewById(R.id.illustration_lottie);
+            AccessibilityManager am = getSystemService(AccessibilityManager.class);
+            if (am.isEnabled()) {
+                lottieAnimationView.setAnimation(R.raw.udfps_edu_a11y_lottie);
+            }
+
         } else {
             setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
             setDescriptionText(R.string.security_settings_fingerprint_enroll_find_sensor_message);
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
index fa92951..0fc8670 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
@@ -31,12 +31,18 @@
  */
 public class FingerprintErrorDialog extends BiometricErrorDialog {
     public static void showErrorDialog(BiometricEnrollBase host, int errMsgId) {
+        if (host.isFinishing()) {
+            return;
+        }
+
+        final FragmentManager fragmentManager = host.getSupportFragmentManager();
+        if (fragmentManager.isDestroyed()) {
+            return;
+        }
+
         final CharSequence errMsg = host.getText(getErrorMessage(errMsgId));
         final FingerprintErrorDialog dialog = newInstance(errMsg, errMsgId);
-        final FragmentManager fragmentManager = host.getSupportFragmentManager();
-        if (!fragmentManager.isDestroyed()) {
-            dialog.show(fragmentManager, FingerprintErrorDialog.class.getName());
-        }
+        dialog.show(fragmentManager, FingerprintErrorDialog.class.getName());
     }
 
     private static int getErrorMessage(int errMsgId) {
diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
index f6115fc..48e5176 100644
--- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java
+++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
@@ -158,8 +158,7 @@
             switch (newState) {
                 case RecyclerView.SCROLL_STATE_DRAGGING:
                     final Configuration.Builder builder =
-                            new Configuration.Builder(CUJ_SETTINGS_PAGE_SCROLL)
-                                    .setView(recyclerView)
+                            Configuration.Builder.withView(CUJ_SETTINGS_PAGE_SCROLL, recyclerView)
                                     .setTag(mClassName);
                     mMonitor.begin(builder);
                     break;
diff --git a/src/com/android/settings/core/PreferenceXmlParserUtils.java b/src/com/android/settings/core/PreferenceXmlParserUtils.java
index 240426d..a1a8d67 100644
--- a/src/com/android/settings/core/PreferenceXmlParserUtils.java
+++ b/src/com/android/settings/core/PreferenceXmlParserUtils.java
@@ -73,7 +73,8 @@
             MetadataFlag.FLAG_NEED_PREF_ICON,
             MetadataFlag.FLAG_NEED_SEARCHABLE,
             MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE,
-            MetadataFlag.FLAG_FOR_WORK})
+            MetadataFlag.FLAG_FOR_WORK,
+            MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY})
     @Retention(RetentionPolicy.SOURCE)
     public @interface MetadataFlag {
 
@@ -89,6 +90,7 @@
         int FLAG_NEED_PREF_APPEND = 1 << 10;
         int FLAG_UNAVAILABLE_SLICE_SUBTITLE = 1 << 11;
         int FLAG_FOR_WORK = 1 << 12;
+        int FLAG_NEED_HIGHLIGHTABLE_MENU_KEY = 1 << 13;
     }
 
     public static final String METADATA_PREF_TYPE = "type";
@@ -102,6 +104,7 @@
     public static final String METADATA_APPEND = "staticPreferenceLocation";
     public static final String METADATA_UNAVAILABLE_SLICE_SUBTITLE = "unavailable_slice_subtitle";
     public static final String METADATA_FOR_WORK = "for_work";
+    public static final String METADATA_HIGHLIGHTABLE_MENU_KEY = "highlightable_menu_key";
 
     private static final String ENTRIES_SEPARATOR = "|";
 
@@ -250,6 +253,10 @@
                 preferenceMetadata.putBoolean(METADATA_FOR_WORK,
                         isForWork(preferenceAttributes));
             }
+            if (hasFlag(flags, MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY)) {
+                preferenceMetadata.putString(METADATA_HIGHLIGHTABLE_MENU_KEY,
+                        getHighlightableMenuKey(preferenceAttributes));
+            }
             metadata.add(preferenceMetadata);
 
             preferenceAttributes.recycle();
@@ -314,6 +321,10 @@
         return styledAttributes.getString(R.styleable.Preference_controller);
     }
 
+    private static String getHighlightableMenuKey(TypedArray styledAttributes) {
+        return styledAttributes.getString(R.styleable.Preference_highlightableMenuKey);
+    }
+
     private static int getIcon(TypedArray styledAttributes) {
         return styledAttributes.getResourceId(com.android.internal.R.styleable.Icon_icon, 0);
     }
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index a03a4f9..4581f6c 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -422,19 +422,19 @@
         mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
 
         if (tile.userHandle == null || tile.isPrimaryProfileOnly()) {
-            activity.startActivityForResult(intent, 0);
+            activity.startActivity(intent);
         } else if (tile.userHandle.size() == 1) {
-            activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0));
+            activity.startActivityAsUser(intent, tile.userHandle.get(0));
         } else {
             final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER);
             if (userHandle != null && tile.userHandle.contains(userHandle)) {
-                activity.startActivityForResultAsUser(intent, 0, userHandle);
+                activity.startActivityAsUser(intent, userHandle);
                 return;
             }
 
             final List<UserHandle> resolvableUsers = getResolvableUsers(intent, tile);
             if (resolvableUsers.size() == 1) {
-                activity.startActivityForResultAsUser(intent, 0, resolvableUsers.get(0));
+                activity.startActivityAsUser(intent, resolvableUsers.get(0));
                 return;
             }
 
diff --git a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java
index 98736e3..7cc0a3e 100644
--- a/src/com/android/settings/deviceinfo/StorageCategoryFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageCategoryFragment.java
@@ -286,6 +286,7 @@
             metricsFeatureProvider.logClickedPreference(preference, getMetricsCategory());
             metricsFeatureProvider.action(context, SettingsEnums.STORAGE_FREE_UP_SPACE_NOW);
             final Intent intent = new Intent(StorageManager.ACTION_MANAGE_STORAGE);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             context.startActivityAsUser(intent, new UserHandle(mUserId));
             return true;
         }
diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
index 6dbc3aa..4903948 100644
--- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
+++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java
@@ -486,6 +486,7 @@
             metricsFeatureProvider.logClickedPreference(preference, getMetricsCategory());
             metricsFeatureProvider.action(context, SettingsEnums.STORAGE_FREE_UP_SPACE_NOW);
             final Intent intent = new Intent(StorageManager.ACTION_MANAGE_STORAGE);
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             context.startActivityAsUser(intent, new UserHandle(mUserId));
             return true;
         }
diff --git a/src/com/android/settings/emergency/MoreSettingsPreferenceController.java b/src/com/android/settings/emergency/MoreSettingsPreferenceController.java
index cbb95a6..d945b21 100644
--- a/src/com/android/settings/emergency/MoreSettingsPreferenceController.java
+++ b/src/com/android/settings/emergency/MoreSettingsPreferenceController.java
@@ -115,7 +115,7 @@
                 .logClickedPreference(mPreference, getMetricsCategory());
         final Intent intent = new Intent(mIntent)
                 .addCategory(Intent.CATEGORY_LAUNCHER)
-                .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
         Bundle bundle = new Bundle();
         bundle.putString(EXTRA_KEY_ATTRIBUTION, mContext.getPackageName());
         mContext.startActivity(intent, bundle);
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 3319e1b..c067094 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -19,6 +19,7 @@
 import android.annotation.UserIdInt;
 import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.backup.BackupManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
@@ -113,7 +114,12 @@
     @VisibleForTesting
     RadioButtonPreference mUnrestrictedPreference;
     @VisibleForTesting
-    boolean enableTriState = true;
+    boolean mEnableTriState = true;
+    @VisibleForTesting
+    @BatteryOptimizeUtils.OptimizationMode
+    int mOptimizationMode = BatteryOptimizeUtils.MODE_UNKNOWN;
+    @VisibleForTesting
+    BackupManager mBackupManager;
 
     private AppButtonsPreferenceController mAppButtonsPreferenceController;
     private BackgroundActivityPreferenceController mBackgroundActivityPreferenceController;
@@ -245,7 +251,7 @@
         super.onCreate(icicle);
 
         final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
-        if (enableTriState) {
+        if (mEnableTriState) {
             onCreateForTriState(packageName);
         } else {
             mForegroundPreference = findPreference(KEY_PREF_FOREGROUND);
@@ -263,7 +269,7 @@
         super.onResume();
 
         initHeader();
-        if (enableTriState) {
+        if (mEnableTriState) {
             initPreferenceForTriState(getContext());
             final String packageName = mBatteryOptimizeUtils.getPackageName();
             FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
@@ -276,6 +282,22 @@
         }
     }
 
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        notifyBackupManager();
+    }
+
+    @VisibleForTesting
+    void notifyBackupManager() {
+        if (mEnableTriState
+                && mOptimizationMode != mBatteryOptimizeUtils.getAppOptimizationMode()) {
+            final BackupManager backupManager = mBackupManager != null
+                    ? mBackupManager : new BackupManager(getContext());
+            backupManager.dataChanged();
+        }
+    }
+
     @VisibleForTesting
     void initHeader() {
         final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
@@ -303,7 +325,7 @@
             controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info));
         }
 
-        if (enableTriState) {
+        if (mEnableTriState) {
             final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
             final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
             final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null);
@@ -339,18 +361,20 @@
         final String stateString;
         final String footerString;
 
-        if (!mBatteryOptimizeUtils.isValidPackageName()) {
-            //Present optimized only string when the package name is invalid.
+        if (!mBatteryOptimizeUtils.isValidPackageName()
+                || mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
+            // Present optimized only string when the package name is invalid or
+            // it's in allow list not idle app.
             stateString = context.getString(R.string.manager_battery_usage_optimized_only);
             footerString = context.getString(
                     R.string.manager_battery_usage_footer_limited, stateString);
         } else if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
-            //Present unrestricted only string when the package is system or default active app.
+            // Present unrestricted only string when the package is system or default active app.
             stateString = context.getString(R.string.manager_battery_usage_unrestricted_only);
             footerString = context.getString(
                     R.string.manager_battery_usage_footer_limited, stateString);
         } else {
-            //Present default string to normal app.
+            // Present default string to normal app.
             footerString = context.getString(R.string.manager_battery_usage_footer);
         }
         mFooterPreference.setTitle(footerString);
@@ -374,7 +398,7 @@
 
     @Override
     protected int getPreferenceScreenResId() {
-        return enableTriState ? R.xml.power_usage_detail : R.xml.power_usage_detail_legacy;
+        return mEnableTriState ? R.xml.power_usage_detail : R.xml.power_usage_detail_legacy;
     }
 
     @Override
@@ -388,7 +412,7 @@
                 (SettingsActivity) getActivity(), this, getSettingsLifecycle(), packageName,
                 mState, REQUEST_UNINSTALL, REQUEST_REMOVE_DEVICE_ADMIN);
         controllers.add(mAppButtonsPreferenceController);
-        if (enableTriState) {
+        if (mEnableTriState) {
             controllers.add(new UnrestrictedPreferenceController(context, uid, packageName));
             controllers.add(new OptimizedPreferenceController(context, uid, packageName));
             controllers.add(new RestrictedPreferenceController(context, uid, packageName));
@@ -467,6 +491,7 @@
 
         mBatteryOptimizeUtils = new BatteryOptimizeUtils(
                 getContext(), getArguments().getInt(EXTRA_UID), packageName);
+        mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
     }
 
     private CharSequence getAppActiveTime(
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
index 29872ac..bf464a8 100644
--- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
@@ -47,6 +47,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.core.InstrumentedPreferenceFragment;
 import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -440,8 +441,10 @@
     }
 
     private boolean shouldShowSummary(BatteryEntry entry) {
-        final CharSequence[] allowlistPackages = mContext.getResources()
-                .getTextArray(R.array.allowlist_hide_summary_in_battery_usage);
+        final CharSequence[] allowlistPackages =
+                FeatureFactory.getFactory(mContext)
+                        .getPowerUsageFeatureProvider(mContext)
+                        .getHideApplicationSummary(mContext);
         final String target = entry.getDefaultPackageName();
 
         for (CharSequence packageName : allowlistPackages) {
diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
new file mode 100644
index 0000000..24080fe
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -0,0 +1,318 @@
+/*
+ * Copyright (C) 2021 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.settings.fuelgauge;
+
+import android.app.AppGlobals;
+import android.app.AppOpsManager;
+import android.app.backup.BackupDataInputStream;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.BackupHelper;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
+import android.content.pm.UserInfo;
+import android.os.Build;
+import android.os.IDeviceIdleController;
+import android.os.RemoteException;
+import android.os.ParcelFileDescriptor;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.Log;
+
+import androidx.annotation.VisibleForTesting;
+
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/** An implementation to backup and restore battery configurations. */
+public final class BatteryBackupHelper implements BackupHelper {
+    /** An inditifier for {@link BackupHelper}. */
+    public static final String TAG = "BatteryBackupHelper";
+    private static final String DEVICE_IDLE_SERVICE = "deviceidle";
+    private static final boolean DEBUG = Build.TYPE.equals("userdebug");
+
+    // Only the owner can see all apps.
+    private static final int RETRIEVE_FLAG_ADMIN =
+            PackageManager.MATCH_ANY_USER |
+            PackageManager.MATCH_DISABLED_COMPONENTS |
+            PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+    private static final int RETRIEVE_FLAG =
+            PackageManager.MATCH_DISABLED_COMPONENTS |
+            PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+
+    static final String DELIMITER = ",";
+    static final String DELIMITER_MODE = ":";
+    static final String KEY_FULL_POWER_LIST = "full_power_list";
+    static final String KEY_OPTIMIZATION_LIST = "optimization_mode_list";
+
+    @VisibleForTesting
+    PowerAllowlistBackend mPowerAllowlistBackend;
+    @VisibleForTesting
+    IDeviceIdleController mIDeviceIdleController;
+    @VisibleForTesting
+    IPackageManager mIPackageManager;
+    @VisibleForTesting
+    BatteryOptimizeUtils mBatteryOptimizeUtils;
+
+    private final Context mContext;
+
+    public BatteryBackupHelper(Context context) {
+        mContext = context.getApplicationContext();
+    }
+
+    @Override
+    public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
+            ParcelFileDescriptor newState) {
+        if (!isOwner() || data == null) {
+            Log.w(TAG, "ignore performBackup() for non-owner or empty data");
+            return;
+        }
+        final List<String> allowlistedApps = backupFullPowerList(data);
+        if (allowlistedApps != null) {
+            backupOptimizationMode(data, allowlistedApps);
+        }
+    }
+
+    @Override
+    public void restoreEntity(BackupDataInputStream data) {
+        if (!isOwner() || data == null || data.size() == 0) {
+            Log.w(TAG, "ignore restoreEntity() for non-owner or empty data");
+            return;
+        }
+        if (KEY_OPTIMIZATION_LIST.equals(data.getKey())) {
+            final int dataSize = data.size();
+            final byte[] dataBytes = new byte[dataSize];
+            try {
+                data.read(dataBytes, 0 /*offset*/, dataSize);
+            } catch (IOException e) {
+                Log.e(TAG, "failed to load BackupDataInputStream", e);
+                return;
+            }
+            restoreOptimizationMode(dataBytes);
+        }
+    }
+
+    @Override
+    public void writeNewStateDescription(ParcelFileDescriptor newState) {
+    }
+
+    private List<String> backupFullPowerList(BackupDataOutput data) {
+        final long timestamp = System.currentTimeMillis();
+        String[] allowlistedApps;
+        try {
+            allowlistedApps = getIDeviceIdleController().getFullPowerWhitelist();
+        } catch (RemoteException e) {
+            Log.e(TAG, "backupFullPowerList() failed", e);
+            return null;
+        }
+        // Ignores unexpected emptty result case.
+        if (allowlistedApps == null || allowlistedApps.length == 0) {
+            Log.w(TAG, "no data found in the getFullPowerList()");
+            return new ArrayList<>();
+        }
+
+        final String allowedApps = String.join(DELIMITER, allowlistedApps);
+        writeBackupData(data, KEY_FULL_POWER_LIST, allowedApps);
+        Log.d(TAG, String.format("backup getFullPowerList() size=%d in %d/ms",
+                allowlistedApps.length, (System.currentTimeMillis() - timestamp)));
+        return Arrays.asList(allowlistedApps);
+    }
+
+    @VisibleForTesting
+    void backupOptimizationMode(BackupDataOutput data, List<String> allowlistedApps) {
+        final long timestamp = System.currentTimeMillis();
+        final List<ApplicationInfo> applications = getInstalledApplications();
+        if (applications == null || applications.isEmpty()) {
+            Log.w(TAG, "no data found in the getInstalledApplications()");
+            return;
+        }
+        int backupCount = 0;
+        final StringBuilder builder = new StringBuilder();
+        final AppOpsManager appOps = mContext.getSystemService(AppOpsManager.class);
+        // Converts application into the AppUsageState.
+        for (ApplicationInfo info : applications) {
+            final int mode = appOps.checkOpNoThrow(
+                    AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, info.uid, info.packageName);
+            @BatteryOptimizeUtils.OptimizationMode
+            final int optimizationMode = BatteryOptimizeUtils.getAppOptimizationMode(
+                    mode, allowlistedApps.contains(info.packageName));
+            // Ignores default optimized/unknown state or system/default apps.
+            if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
+                    || optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN
+                    || isSystemOrDefaultApp(info.packageName)) {
+                continue;
+            }
+            final String packageOptimizeMode =
+                    info.packageName + DELIMITER_MODE + optimizationMode;
+            builder.append(packageOptimizeMode + DELIMITER);
+            debugLog(packageOptimizeMode);
+            backupCount++;
+        }
+
+        writeBackupData(data, KEY_OPTIMIZATION_LIST, builder.toString());
+        Log.d(TAG, String.format("backup getInstalledApplications():%d count=%d in %d/ms",
+                applications.size(), backupCount, (System.currentTimeMillis() - timestamp)));
+    }
+
+    @VisibleForTesting
+    void restoreOptimizationMode(byte[] dataBytes) {
+        final long timestamp = System.currentTimeMillis();
+        final String dataContent = new String(dataBytes, StandardCharsets.UTF_8);
+        if (dataContent == null || dataContent.isEmpty()) {
+            Log.w(TAG, "no data found in the restoreOptimizationMode()");
+            return;
+        }
+        final String[] appConfigurations = dataContent.split(BatteryBackupHelper.DELIMITER);
+        if (appConfigurations == null || appConfigurations.length == 0) {
+            Log.w(TAG, "no data found from the split() processing");
+            return;
+        }
+        int restoreCount = 0;
+        for (int index = 0; index < appConfigurations.length; index++) {
+            final String[] results = appConfigurations[index]
+                    .split(BatteryBackupHelper.DELIMITER_MODE);
+            // Example format: com.android.systemui:2 we should have length=2
+            if (results == null || results.length != 2) {
+                Log.w(TAG, "invalid raw data found:" + appConfigurations[index]);
+                continue;
+            }
+            final String packageName = results[0];
+            // Ignores system/default apps.
+            if (isSystemOrDefaultApp(packageName)) {
+                Log.w(TAG, "ignore from isSystemOrDefaultApp():" + packageName);
+                continue;
+            }
+            @BatteryOptimizeUtils.OptimizationMode
+            int optimizationMode = BatteryOptimizeUtils.MODE_UNKNOWN;
+            try {
+                optimizationMode = Integer.parseInt(results[1]);
+            } catch (NumberFormatException e) {
+                Log.e(TAG, "failed to parse the optimization mode: "
+                        + appConfigurations[index], e);
+                continue;
+            }
+            restoreOptimizationMode(packageName, optimizationMode);
+            restoreCount++;
+        }
+        Log.d(TAG, String.format("restoreOptimizationMode() count=%d in %d/ms",
+                restoreCount, (System.currentTimeMillis() - timestamp)));
+    }
+
+    private void restoreOptimizationMode(
+            String packageName, @BatteryOptimizeUtils.OptimizationMode int mode) {
+        final int uid = BatteryUtils.getInstance(mContext).getPackageUid(packageName);
+        if (uid == BatteryUtils.UID_NULL) {
+            return;
+        }
+        final BatteryOptimizeUtils batteryOptimizeUtils =
+                mBatteryOptimizeUtils != null
+                        ? mBatteryOptimizeUtils /*testing only*/
+                        : new BatteryOptimizeUtils(mContext, uid, packageName);
+        batteryOptimizeUtils.setAppOptimizationMode(mode);
+        Log.d(TAG, String.format("restore:%s mode=%d", packageName, mode));
+    }
+
+    // Provides an opportunity to inject mock IDeviceIdleController for testing.
+    private IDeviceIdleController getIDeviceIdleController() {
+        if (mIDeviceIdleController != null) {
+            return mIDeviceIdleController;
+        }
+        mIDeviceIdleController = IDeviceIdleController.Stub.asInterface(
+                ServiceManager.getService(DEVICE_IDLE_SERVICE));
+        return mIDeviceIdleController;
+    }
+
+    private IPackageManager getIPackageManager() {
+        if (mIPackageManager != null) {
+            return mIPackageManager;
+        }
+        mIPackageManager = AppGlobals.getPackageManager();
+        return mIPackageManager;
+    }
+
+    private PowerAllowlistBackend getPowerAllowlistBackend() {
+        if (mPowerAllowlistBackend != null) {
+            return mPowerAllowlistBackend;
+        }
+        mPowerAllowlistBackend = PowerAllowlistBackend.getInstance(mContext);
+        return mPowerAllowlistBackend;
+    }
+
+    private boolean isSystemOrDefaultApp(String packageName) {
+        final PowerAllowlistBackend powerAllowlistBackend = getPowerAllowlistBackend();
+        return powerAllowlistBackend.isSysAllowlisted(packageName)
+                || powerAllowlistBackend.isDefaultActiveApp(packageName)
+                // Optimize mode only for app which is in the allow list not idle app.
+                || powerAllowlistBackend.isAllowlistedExceptIdle(packageName);
+    }
+
+    private List<ApplicationInfo> getInstalledApplications() {
+        final List<ApplicationInfo> applications = new ArrayList<>();
+        final UserManager um = mContext.getSystemService(UserManager.class);
+        for (UserInfo userInfo : um.getProfiles(UserHandle.myUserId())) {
+            try {
+                @SuppressWarnings("unchecked")
+                final ParceledListSlice<ApplicationInfo> infoList =
+                        getIPackageManager().getInstalledApplications(
+                                userInfo.isAdmin() ? RETRIEVE_FLAG_ADMIN : RETRIEVE_FLAG,
+                                userInfo.id);
+                if (infoList != null) {
+                    applications.addAll(infoList.getList());
+                }
+            } catch (Exception e) {
+                Log.e(TAG, "getInstalledApplications() is failed", e);
+                return null;
+            }
+        }
+        // Removes the application which is disabled by the system.
+        for (int index = applications.size() - 1; index >= 0; index--) {
+            final ApplicationInfo info = applications.get(index);
+            if (info.enabledSetting != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
+                    && !info.enabled) {
+                applications.remove(index);
+            }
+        }
+        return applications;
+    }
+
+    private void debugLog(String debugContent) {
+        if (DEBUG) Log.d(TAG, debugContent);
+    }
+
+    private static void writeBackupData(
+            BackupDataOutput data, String dataKey, String dataContent) {
+        final byte[] dataContentBytes = dataContent.getBytes();
+        try {
+            data.writeEntityHeader(dataKey, dataContentBytes.length);
+            data.writeEntityData(dataContentBytes, dataContentBytes.length);
+        } catch (IOException e) {
+            Log.e(TAG, "writeBackupData() is failed for " + dataKey, e);
+        }
+    }
+
+    private static boolean isOwner() {
+        return UserHandle.myUserId() == UserHandle.USER_OWNER;
+    }
+}
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index f075c7b..8541179 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -121,12 +121,16 @@
         mFragment = fragment;
         mPreferenceKey = preferenceKey;
         mIs24HourFormat = DateFormat.is24HourFormat(context);
-        mNotAllowShowSummaryPackages = context.getResources()
-            .getTextArray(R.array.allowlist_hide_summary_in_battery_usage);
-        mNotAllowShowEntryPackages = context.getResources()
-            .getTextArray(R.array.allowlist_hide_entry_in_battery_usage);
         mMetricsFeatureProvider =
             FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
+        mNotAllowShowEntryPackages =
+            FeatureFactory.getFactory(context)
+                .getPowerUsageFeatureProvider(context)
+                .getHideApplicationEntries(context);
+        mNotAllowShowSummaryPackages =
+            FeatureFactory.getFactory(context)
+                .getPowerUsageFeatureProvider(context)
+                .getHideApplicationSummary(context);
         if (lifecycle != null) {
             lifecycle.addObserver(this);
         }
diff --git a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
index 3ad768a..e524e98 100644
--- a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
@@ -40,7 +40,8 @@
     // Caches app label and icon to improve loading performance.
     static final Map<String, BatteryEntry.NameAndIcon> sResourceCache = new HashMap<>();
     // Whether a specific item is valid to launch restriction page?
-    static final Map<String, Boolean> sValidForRestriction = new HashMap<>();
+    @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+    public static final Map<String, Boolean> sValidForRestriction = new HashMap<>();
 
     /** A comparator for {@link BatteryDiffEntry} based on consumed percentage. */
     public static final Comparator<BatteryDiffEntry> COMPARATOR =
@@ -112,7 +113,9 @@
     /** Gets the app icon {@link Drawable} for this entry. */
     public Drawable getAppIcon() {
         loadLabelAndIcon();
-        return mAppIcon;
+        return mAppIcon != null && mAppIcon.getConstantState() != null
+                ? mAppIcon.getConstantState().newDrawable()
+                : null;
     }
 
     /** Gets the app icon id for this entry. */
@@ -339,15 +342,16 @@
         return builder.toString();
     }
 
-    static void clearCache() {
+    /** Clears app icon and label cache data. */
+    public static void clearCache() {
         sResourceCache.clear();
         sValidForRestriction.clear();
     }
 
     private Drawable getBadgeIconForUser(Drawable icon) {
         final int userId = UserHandle.getUserId((int) mBatteryHistEntry.mUid);
-        final UserHandle userHandle = new UserHandle(userId);
-        return mUserManager.getBadgedIconForUser(icon, userHandle);
+        return userId == UserHandle.USER_OWNER ? icon :
+            mUserManager.getBadgedIconForUser(icon, new UserHandle(userId));
     }
 
     private static boolean isSystemUid(int uid) {
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index 92151c0..4433da2 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -25,6 +25,7 @@
 import android.os.BatteryUsageStats;
 import android.os.SystemClock;
 import android.text.format.Formatter;
+import android.util.Log;
 import android.util.SparseIntArray;
 
 import androidx.annotation.NonNull;
@@ -42,6 +43,7 @@
 import com.android.settingslib.utils.StringUtil;
 
 public class BatteryInfo {
+    private static final String TAG = "BatteryInfo";
 
     public CharSequence chargeLabel;
     public CharSequence remainingLabel;
@@ -155,8 +157,13 @@
                 if (batteryUsageStats != null) {
                     stats = batteryUsageStats;
                 } else {
-                    stats = context.getSystemService(BatteryStatsManager.class)
-                            .getBatteryUsageStats();
+                    try {
+                        stats = context.getSystemService(BatteryStatsManager.class)
+                                .getBatteryUsageStats();
+                    } catch (RuntimeException e) {
+                        Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e);
+                        return null;
+                    }
                 }
                 return getBatteryInfo(context, stats, shortString);
             }
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 4a56040..11528a6 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.fuelgauge;
 
+import android.annotation.IntDef;
 import android.app.AppOpsManager;
 import android.content.Context;
 import android.util.Log;
@@ -24,6 +25,9 @@
 
 import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /** A utility class for application usage operation. */
 public class BatteryOptimizeUtils {
     private static final String TAG = "BatteryOptimizeUtils";
@@ -32,21 +36,26 @@
     @VisibleForTesting AppOpsManager mAppOpsManager;
     @VisibleForTesting BatteryUtils mBatteryUtils;
     @VisibleForTesting PowerAllowlistBackend mPowerAllowListBackend;
+    @VisibleForTesting int mMode;
+    @VisibleForTesting boolean mAllowListed;
+
     private final String mPackageName;
     private final int mUid;
 
-    private int mMode;
-    private boolean mAllowListed;
+    // Optimization modes.
+    static final int MODE_UNKNOWN = 0;
+    static final int MODE_RESTRICTED = 1;
+    static final int MODE_UNRESTRICTED = 2;
+    static final int MODE_OPTIMIZED = 3;
 
-    /**
-     * Usage type of application.
-     */
-    public enum AppUsageState {
-        UNKNOWN,
-        RESTRICTED,
-        UNRESTRICTED,
-        OPTIMIZED,
-    }
+    @IntDef(prefix = {"MODE_"}, value = {
+        MODE_UNKNOWN,
+        MODE_RESTRICTED,
+        MODE_UNRESTRICTED,
+        MODE_OPTIMIZED,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    static @interface OptimizationMode {}
 
     public BatteryOptimizeUtils(Context context, int uid, String packageName) {
         mUid = uid;
@@ -59,36 +68,48 @@
         mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName);
     }
 
-    public AppUsageState getAppUsageState() {
-        refreshState();
-        if (!mAllowListed && mMode == AppOpsManager.MODE_IGNORED) {
-            return AppUsageState.RESTRICTED;
-        } else if (mAllowListed && mMode == AppOpsManager.MODE_ALLOWED) {
-            return AppUsageState.UNRESTRICTED;
-        } else if (!mAllowListed && mMode == AppOpsManager.MODE_ALLOWED) {
-            return AppUsageState.OPTIMIZED;
+    /** Gets the {@link OptimizationMode} based on mode and allowed list. */
+    @OptimizationMode
+    public static int getAppOptimizationMode(int mode, boolean isAllowListed) {
+        if (!isAllowListed && mode == AppOpsManager.MODE_IGNORED) {
+            return MODE_RESTRICTED;
+        } else if (isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
+            return MODE_UNRESTRICTED;
+        } else if (!isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
+            return MODE_OPTIMIZED;
         } else {
-            Log.d(TAG, "get unknown app usage state.");
-            return AppUsageState.UNKNOWN;
+            return MODE_UNKNOWN;
         }
     }
 
-    public void setAppUsageState(AppUsageState state) {
-        switch (state) {
-            case RESTRICTED:
+    /** Gets the {@link OptimizationMode} for associated app. */
+    @OptimizationMode
+    public int getAppOptimizationMode() {
+        refreshState();
+        return getAppOptimizationMode(mMode, mAllowListed);
+    }
+
+    /** Sets the {@link OptimizationMode} for associated app. */
+    public void setAppOptimizationMode(@OptimizationMode int mode) {
+        if (getAppOptimizationMode(mMode, mAllowListed) == mode) {
+            Log.w(TAG, "set the same optimization mode for: " + mPackageName);
+            return;
+        }
+        switch (mode) {
+            case MODE_RESTRICTED:
                 mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED);
                 mPowerAllowListBackend.removeApp(mPackageName);
                 break;
-            case UNRESTRICTED:
+            case MODE_UNRESTRICTED:
                 mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
                 mPowerAllowListBackend.addApp(mPackageName);
                 break;
-            case OPTIMIZED:
+            case MODE_OPTIMIZED:
                 mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
                 mPowerAllowListBackend.removeApp(mPackageName);
                 break;
             default:
-                Log.d(TAG, "set unknown app usage state.");
+                Log.d(TAG, "set unknown app optimization mode.");
         }
     }
 
@@ -109,6 +130,13 @@
                 || mPowerAllowListBackend.isDefaultActiveApp(mPackageName);
     }
 
+    /**
+     * Return {@code true} if this package is in allow list except idle app.
+     */
+    public boolean isAllowlistedExceptIdleApp() {
+        return mPowerAllowListBackend.isAllowlistedExceptIdle(mPackageName);
+    }
+
     String getPackageName() {
         return mPackageName == null ? UNKNOWN_PACKAGE : mPackageName;
     }
diff --git a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java b/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
index d35ef82..0acc54e 100644
--- a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
+++ b/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
@@ -20,6 +20,7 @@
 import android.os.BatteryStatsManager;
 import android.os.BatteryUsageStats;
 import android.os.BatteryUsageStatsQuery;
+import android.util.Log;
 
 import com.android.settingslib.utils.AsyncLoaderCompat;
 
@@ -27,6 +28,7 @@
  * Loader to get new {@link BatteryUsageStats} in the background
  */
 public class BatteryUsageStatsLoader extends AsyncLoaderCompat<BatteryUsageStats> {
+    private static final String TAG = "BatteryUsageStatsLoader";
     private final BatteryStatsManager mBatteryStatsManager;
     private final boolean mIncludeBatteryHistory;
 
@@ -42,7 +44,12 @@
         if (mIncludeBatteryHistory) {
             builder.includeBatteryHistory();
         }
-        return mBatteryStatsManager.getBatteryUsageStats(builder.build());
+        try {
+            return mBatteryStatsManager.getBatteryUsageStats(builder.build());
+        } catch (RuntimeException e) {
+            Log.e(TAG, "loadInBackground() for getBatteryUsageStats()", e);
+            return null;
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index d521ed1..f8f01b9 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -368,8 +368,14 @@
     public BatteryInfo getBatteryInfo(final String tag) {
         final BatteryStatsManager systemService = mContext.getSystemService(
                 BatteryStatsManager.class);
-        final BatteryUsageStats batteryUsageStats = systemService.getBatteryUsageStats(
-                new BatteryUsageStatsQuery.Builder().includeBatteryHistory().build());
+        BatteryUsageStats batteryUsageStats;
+        try {
+            batteryUsageStats = systemService.getBatteryUsageStats(
+                    new BatteryUsageStatsQuery.Builder().includeBatteryHistory().build());
+        } catch (RuntimeException e) {
+            Log.e(TAG, "getBatteryInfo() from getBatteryUsageStats()", e);
+            return null;
+        }
 
         final long startTime = System.currentTimeMillis();
 
diff --git a/src/com/android/settings/fuelgauge/ConvertUtils.java b/src/com/android/settings/fuelgauge/ConvertUtils.java
index a5a58ad..4794d42 100644
--- a/src/com/android/settings/fuelgauge/ConvertUtils.java
+++ b/src/com/android/settings/fuelgauge/ConvertUtils.java
@@ -302,10 +302,10 @@
     private static void purgeLowPercentageAndFakeData(
             final Context context,
             final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
-        final List<CharSequence> backgroundUsageTimeHideList =
+        final Set<CharSequence> backgroundUsageTimeHideList =
                 FeatureFactory.getFactory(context)
                         .getPowerUsageFeatureProvider(context)
-                        .getHideBackgroundUsageTimeList(context);
+                        .getHideBackgroundUsageTimeSet(context);
         for (List<BatteryDiffEntry> entries : indexedUsageMap.values()) {
             final Iterator<BatteryDiffEntry> iterator = entries.iterator();
             while (iterator.hasNext()) {
diff --git a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
index b2da356..ef23397 100644
--- a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.fuelgauge;
 
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.OPTIMIZED;
-
 import android.content.Context;
 import android.util.Log;
 
@@ -59,7 +57,12 @@
             Log.d(TAG, "is system or default app, disable pref");
             ((RadioButtonPreference) preference).setChecked(false);
             preference.setEnabled(false);
-        } else if (mBatteryOptimizeUtils.getAppUsageState() == OPTIMIZED) {
+        } else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
+            Log.d(TAG, "in allow list not idle app, optimized states only");
+            preference.setEnabled(true);
+            ((RadioButtonPreference) preference).setChecked(true);
+        } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+                == BatteryOptimizeUtils.MODE_OPTIMIZED) {
             Log.d(TAG, "is optimized states");
             ((RadioButtonPreference) preference).setChecked(true);
         } else {
@@ -78,7 +81,7 @@
             return false;
         }
 
-        mBatteryOptimizeUtils.setAppUsageState(OPTIMIZED);
+        mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_OPTIMIZED);
         Log.d(TAG, "Set optimized");
         return true;
     }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
index 7c69618..afbb71f 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
@@ -19,8 +19,11 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.database.ContentObserver;
+import android.net.Uri;
 import android.os.BatteryManager;
 import android.os.Bundle;
+import android.os.Handler;
 import android.provider.SearchIndexableResource;
 import android.util.Log;
 
@@ -31,6 +34,7 @@
 
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.fuelgauge.BatteryBroadcastReceiver;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -63,6 +67,17 @@
     private BatteryChartPreferenceController mBatteryChartPreferenceController;
     private BatteryAppListPreferenceController mBatteryAppListPreferenceController;
 
+    private final ContentObserver mBatteryObserver =
+            new ContentObserver(new Handler()) {
+            @Override
+            public void onChange(boolean selfChange) {
+                Log.d(TAG, "onBatteryContentChange: " + selfChange);
+                mIsChartDataLoaded = false;
+                restartBatteryStatsLoader(
+                        BatteryBroadcastReceiver.BatteryUpdateType.MANUAL);
+            }
+    };
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -104,6 +119,20 @@
         super.onPause();
         // Resets the flag to reload usage data in onResume() callback.
         mIsChartDataLoaded = false;
+        final Uri uri = mPowerUsageFeatureProvider.getBatteryHistoryUri();
+        if (uri != null) {
+            getContext().getContentResolver().unregisterContentObserver(mBatteryObserver);
+        }
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        final Uri uri = mPowerUsageFeatureProvider.getBatteryHistoryUri();
+        if (uri != null) {
+            getContext().getContentResolver().registerContentObserver(
+                    uri, /*notifyForDescendants*/ true, mBatteryObserver);
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index bab8811..a8e0317 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -18,13 +18,14 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.net.Uri;
 import android.util.SparseIntArray;
 
 import com.android.internal.os.BatterySipper;
 import com.android.settingslib.fuelgauge.Estimate;
 
-import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 /**
  * Feature Provider used in power usage
@@ -149,7 +150,22 @@
     Map<Long, Map<String, BatteryHistEntry>> getBatteryHistory(Context context);
 
     /**
-     * Returns {@link List} for hidding applications background usage time.
+     * Returns {@link Uri} to monitor battery history data is update.
      */
-    List<CharSequence> getHideBackgroundUsageTimeList(Context context);
+    Uri getBatteryHistoryUri();
+
+    /**
+     * Returns {@link Set} for hidding applications background usage time.
+     */
+    Set<CharSequence> getHideBackgroundUsageTimeSet(Context context);
+
+    /**
+     * Returns package names for hidding application in the usage screen.
+     */
+    CharSequence[] getHideApplicationEntries(Context context);
+
+    /**
+     * Returns package names for hidding summary in the usage screen.
+     */
+    CharSequence[] getHideApplicationSummary(Context context);
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 208a478..e2c7800 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.net.Uri;
 import android.os.Process;
 import android.util.SparseIntArray;
 
@@ -26,9 +27,9 @@
 import com.android.internal.util.ArrayUtils;
 import com.android.settingslib.fuelgauge.Estimate;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider {
 
@@ -176,7 +177,22 @@
     }
 
     @Override
-    public List<CharSequence> getHideBackgroundUsageTimeList(Context context) {
-        return new ArrayList<>();
+    public Uri getBatteryHistoryUri() {
+        return null;
+    }
+
+    @Override
+    public Set<CharSequence> getHideBackgroundUsageTimeSet(Context context) {
+        return new HashSet<>();
+    }
+
+    @Override
+    public CharSequence[] getHideApplicationEntries(Context context) {
+        return new CharSequence[0];
+    }
+
+    @Override
+    public CharSequence[] getHideApplicationSummary(Context context) {
+        return new CharSequence[0];
     }
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 19a8011..638aaa5 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -25,6 +25,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.provider.Settings.Global;
+import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.loader.app.LoaderManager;
@@ -103,6 +104,10 @@
 
                 @Override
                 public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) {
+                    if (batteryInfo == null) {
+                        Log.w(TAG, "mBatteryInfoLoaderCallbacks: batteryInfo = null");
+                        return;
+                    }
                     mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
                     mBatteryHeaderPreferenceController.updateHeaderByBatteryTips(
                             mBatteryTipPreferenceController.getCurrentBatteryTip(), batteryInfo);
@@ -126,6 +131,10 @@
                 @Override
                 public void onLoadFinished(Loader<List<BatteryTip>> loader,
                         List<BatteryTip> data) {
+                    if (mBatteryInfo == null) {
+                        Log.w(TAG, "mBatteryTipsCallbacks: batteryInfo = null");
+                        return;
+                    }
                     mBatteryTipPreferenceController.updateBatteryTips(data);
                     mBatteryHeaderPreferenceController.updateHeaderByBatteryTips(
                             mBatteryTipPreferenceController.getCurrentBatteryTip(), mBatteryInfo);
diff --git a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
index 7caad60..ee46090 100644
--- a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
+++ b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
@@ -19,6 +19,7 @@
 import android.Manifest;
 import android.content.DialogInterface;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageItemInfo;
 import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Bundle;
@@ -41,6 +42,8 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        getWindow().addSystemFlags(android.view.WindowManager.LayoutParams
+                .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
 
         mPowerWhitelistManager = getSystemService(PowerWhitelistManager.class);
 
@@ -85,8 +88,11 @@
         }
 
         final AlertController.AlertParams p = mAlertParams;
+        final CharSequence appLabel = ai.loadSafeLabel(getPackageManager(),
+                PackageItemInfo.DEFAULT_MAX_LABEL_SIZE_PX, PackageItemInfo.SAFE_LABEL_FLAG_TRIM
+                        | PackageItemInfo.SAFE_LABEL_FLAG_FIRST_LINE);
         p.mTitle = getText(R.string.high_power_prompt_title);
-        p.mMessage = getString(R.string.high_power_prompt_body, ai.loadLabel(getPackageManager()));
+        p.mMessage = getString(R.string.high_power_prompt_body, appLabel);
         p.mPositiveButtonText = getText(R.string.allow);
         p.mNegativeButtonText = getText(R.string.deny);
         p.mPositiveButtonListener = this;
@@ -95,13 +101,6 @@
     }
 
     @Override
-    protected void onStart() {
-        super.onStart();
-        getWindow().addSystemFlags(android.view.WindowManager.LayoutParams
-                .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
-    }
-
-    @Override
     public void onClick(DialogInterface dialog, int which) {
         switch (which) {
             case BUTTON_POSITIVE:
diff --git a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
index b52af57..230b1fc 100644
--- a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
@@ -17,8 +17,6 @@
 
 package com.android.settings.fuelgauge;
 
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.RESTRICTED;
-
 import android.content.Context;
 import android.util.Log;
 
@@ -57,7 +55,11 @@
             Log.d(TAG, "is system or default app, disable pref");
             ((RadioButtonPreference) preference).setChecked(false);
             preference.setEnabled(false);
-        } else if (mBatteryOptimizeUtils.getAppUsageState() == RESTRICTED) {
+        } else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
+            Log.d(TAG, "in allow list not idle app, disable perf");
+            preference.setEnabled(false);
+        } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+                == BatteryOptimizeUtils.MODE_RESTRICTED) {
             Log.d(TAG, "is restricted states");
             ((RadioButtonPreference) preference).setChecked(true);
         } else {
@@ -81,7 +83,7 @@
             return false;
         }
 
-        mBatteryOptimizeUtils.setAppUsageState(RESTRICTED);
+        mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_RESTRICTED);
         Log.d(TAG, "Set restricted");
         return true;
     }
diff --git a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
index 36141c5..f8ee651 100644
--- a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.fuelgauge;
 
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.UNRESTRICTED;
-
 import android.content.Context;
 import android.util.Log;
 
@@ -55,7 +53,11 @@
         if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
             Log.d(TAG, "is system or default app, unrestricted states only");
             ((RadioButtonPreference) preference).setChecked(true);
-        } else if (mBatteryOptimizeUtils.getAppUsageState() == UNRESTRICTED) {
+        } else if (mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()) {
+            Log.d(TAG, "in allow list not idle app, disable perf");
+            preference.setEnabled(false);
+        } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+                == BatteryOptimizeUtils.MODE_UNRESTRICTED) {
             Log.d(TAG, "is unrestricted states");
             ((RadioButtonPreference) preference).setChecked(true);
         } else {
@@ -79,7 +81,7 @@
             return false;
         }
 
-        mBatteryOptimizeUtils.setAppUsageState(UNRESTRICTED);
+        mBatteryOptimizeUtils.setAppOptimizationMode(BatteryOptimizeUtils.MODE_UNRESTRICTED);
         Log.d(TAG, "Set unrestricted");
         return true;
     }
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
index 7d11ba5..b6806e8 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 import android.os.BatteryUsageStats;
+import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
 
@@ -67,16 +68,17 @@
         final BatteryInfo batteryInfo = mBatteryUtils.getBatteryInfo(TAG);
         final Context context = getContext();
 
+        tips.add(new EarlyWarningDetector(policy, context).detect());
+        if (batteryInfo == null) {
+            Log.w(TAG, "loadInBackground() batteryInfo = null");
+            return tips;
+        }
+
         tips.add(new LowBatteryDetector(context, policy, batteryInfo).detect());
         tips.add(new HighUsageDetector(context, policy, mBatteryUsageStats, batteryInfo).detect());
         tips.add(new SmartBatteryDetector(
                 context, policy, batteryInfo, context.getContentResolver()).detect());
-        tips.add(new EarlyWarningDetector(policy, context).detect());
         tips.add(new BatteryDefenderDetector(batteryInfo).detect());
-        // Disable this feature now since it introduces false positive cases. We will try to improve
-        // it in the future.
-        // tips.add(new RestrictAppDetector(context, policy).detect());
-
         Collections.sort(tips);
         return tips;
     }
diff --git a/src/com/android/settings/gestures/OneHandedSettings.java b/src/com/android/settings/gestures/OneHandedSettings.java
index 51c6b66..1310789 100644
--- a/src/com/android/settings/gestures/OneHandedSettings.java
+++ b/src/com/android/settings/gestures/OneHandedSettings.java
@@ -26,6 +26,7 @@
 import com.android.internal.accessibility.AccessibilityShortcutController;
 import com.android.settings.R;
 import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment;
+import com.android.settings.accessibility.ShortcutPreference;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.widget.IllustrationPreference;
 
@@ -77,6 +78,11 @@
     }
 
     @Override
+    protected void updateShortcutTitle(ShortcutPreference shortcutPreference) {
+        shortcutPreference.setTitle(R.string.one_handed_mode_shortcut_title);
+    }
+
+    @Override
     protected boolean showGeneralCategory() {
         return true;
     }
diff --git a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
index 4e783c9..1a116da 100644
--- a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
+++ b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
@@ -17,6 +17,7 @@
 package com.android.settings.gestures;
 
 import static android.os.UserHandle.USER_CURRENT;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON_OVERLAY;
 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON_OVERLAY;
 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL_OVERLAY;
@@ -27,14 +28,19 @@
 import android.content.SharedPreferences;
 import android.content.om.IOverlayManager;
 import android.content.om.OverlayInfo;
+import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.provider.Settings;
+import android.text.TextUtils;
+import android.view.accessibility.AccessibilityManager;
 
+import androidx.annotation.Nullable;
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.accessibility.AccessibilityGestureNavigationTutorial;
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.search.BaseSearchIndexProvider;
@@ -53,8 +59,6 @@
 public class SystemNavigationGestureSettings extends RadioButtonPickerFragment implements
         HelpResourceProvider {
 
-    private static final String TAG = "SystemNavigationGesture";
-
     @VisibleForTesting
     static final String KEY_SYSTEM_NAV_3BUTTONS = "system_nav_3buttons";
     @VisibleForTesting
@@ -65,11 +69,34 @@
     public static final String PREF_KEY_SUGGESTION_COMPLETE =
             "pref_system_navigation_suggestion_complete";
 
+    private static final String KEY_SHOW_A11Y_TUTORIAL_DIALOG = "show_a11y_tutorial_dialog_bool";
+
+    private boolean mA11yTutorialDialogShown = false;
+
     private IOverlayManager mOverlayManager;
 
     private IllustrationPreference mVideoPreference;
 
     @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (savedInstanceState != null) {
+            mA11yTutorialDialogShown =
+                    savedInstanceState.getBoolean(KEY_SHOW_A11Y_TUTORIAL_DIALOG, false);
+            if (mA11yTutorialDialogShown) {
+                AccessibilityGestureNavigationTutorial.showGestureNavigationTutorialDialog(
+                        getContext(), dialog -> mA11yTutorialDialogShown = false);
+            }
+        }
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        outState.putBoolean(KEY_SHOW_A11Y_TUTORIAL_DIALOG, mA11yTutorialDialogShown);
+        super.onSaveInstanceState(outState);
+    }
+
+    @Override
     public void onAttach(Context context) {
         super.onAttach(context);
 
@@ -173,7 +200,7 @@
     protected boolean setDefaultKey(String key) {
         setCurrentSystemNavigationMode(mOverlayManager, key);
         setIllustrationVideo(mVideoPreference, key);
-
+        setGestureNavigationTutorialDialog(key);
         return true;
     }
 
@@ -246,6 +273,36 @@
         }
     }
 
+    private void setGestureNavigationTutorialDialog(String systemNavKey) {
+        if (TextUtils.equals(KEY_SYSTEM_NAV_GESTURAL, systemNavKey)
+                && !isAccessibilityFloatingMenuEnabled()
+                && (isAnyServiceSupportAccessibilityButton() || isNavBarMagnificationEnabled())) {
+            mA11yTutorialDialogShown = true;
+            AccessibilityGestureNavigationTutorial.showGestureNavigationTutorialDialog(getContext(),
+                    dialog -> mA11yTutorialDialogShown = false);
+        } else {
+            mA11yTutorialDialogShown = false;
+        }
+    }
+
+    private boolean isAnyServiceSupportAccessibilityButton() {
+        final AccessibilityManager ams = getContext().getSystemService(AccessibilityManager.class);
+        final List<String> targets = ams.getAccessibilityShortcutTargets(
+                AccessibilityManager.ACCESSIBILITY_BUTTON);
+        return !targets.isEmpty();
+    }
+
+    private boolean isNavBarMagnificationEnabled() {
+        return Settings.Secure.getInt(getContext().getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED, 0) == 1;
+    }
+
+    private boolean isAccessibilityFloatingMenuEnabled() {
+        return Settings.Secure.getInt(getContext().getContentResolver(),
+                Settings.Secure.ACCESSIBILITY_BUTTON_MODE, /* def= */ -1)
+                == ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.system_navigation_gesture_settings) {
 
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 1d7b5dc..d6a8a92 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -18,8 +18,13 @@
 
 import android.animation.LayoutTransition;
 import android.app.ActivityManager;
+import android.app.PendingIntent;
 import android.app.settings.SettingsEnums;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.PackageManager;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.view.View;
@@ -31,21 +36,34 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
+import androidx.window.embedding.SplitController;
 
 import com.android.settings.R;
+import com.android.settings.Settings;
+import com.android.settings.Utils;
 import com.android.settings.accounts.AvatarViewMixin;
 import com.android.settings.core.CategoryMixin;
 import com.android.settings.core.FeatureFlags;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
 import com.android.settings.homepage.contextualcards.ContextualCardsFragment;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
 
+import java.net.URISyntaxException;
+
 /** Settings homepage activity */
 public class SettingsHomepageActivity extends FragmentActivity implements
         CategoryMixin.CategoryHandler {
 
     private static final String TAG = "SettingsHomepageActivity";
 
+    // Put true value to the intent when startActivity for a deep link intent from this Activity.
+    public static final String EXTRA_IS_FROM_SETTINGS_HOMEPAGE = "is_from_settings_homepage";
+
+    // An alias class name of SettingsHomepageActivity.
+    public static final String ALIAS_DEEP_LINK = "com.android.settings.DeepLinkHomepageActivity";
+
     private static final long HOMEPAGE_LOADING_TIMEOUT_MS = 300;
 
     private View mHomepageView;
@@ -105,6 +123,20 @@
         showFragment(new TopLevelSettings(), R.id.main_content);
         ((FrameLayout) findViewById(R.id.main_content))
                 .getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
+
+        // Launch the intent from deep link for large screen devices.
+        launchDeepLinkIntentToRight();
+    }
+
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+
+        // When it's large screen 2-pane and Settings app is in background. Receiving a Intent
+        // in this Activity will not finish nor onCreate. setIntent here for this case.
+        setIntent(intent);
+        // Launch the intent from deep link for large screen devices.
+        launchDeepLinkIntentToRight();
     }
 
     private void showSuggestionFragment() {
@@ -141,6 +173,66 @@
         fragmentTransaction.commit();
     }
 
+    private void launchDeepLinkIntentToRight() {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) {
+            return;
+        }
+
+        final Intent intent = getIntent();
+        if (intent == null || !TextUtils.equals(intent.getAction(),
+                android.provider.Settings.ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK)) {
+            return;
+        }
+
+        final String intentUriString = intent.getStringExtra(
+                android.provider.Settings.EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI);
+        if (TextUtils.isEmpty(intentUriString)) {
+            Log.e(TAG, "No EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_URI to deep link");
+            finish();
+            return;
+        }
+
+        final Intent targetIntent;
+        try {
+            targetIntent = Intent.parseUri(intentUriString, Intent.URI_INTENT_SCHEME);
+        } catch (URISyntaxException e) {
+            Log.e(TAG, "Failed to parse deep link intent: " + e);
+            finish();
+            return;
+        }
+
+        final ComponentName targetComponentName = targetIntent.resolveActivity(getPackageManager());
+        if (targetComponentName == null) {
+            Log.e(TAG, "No valid target for the deep link intent: " + targetIntent);
+            finish();
+            return;
+        }
+
+        // To prevent launchDeepLinkIntentToRight again for configuration change.
+        intent.setAction(null);
+
+        targetIntent.setFlags(targetIntent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);
+        targetIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+        // Sender of intent may want to send intent extra data to the destination of targetIntent.
+        targetIntent.replaceExtras(intent);
+
+        targetIntent.putExtra(EXTRA_IS_FROM_SETTINGS_HOMEPAGE, true);
+
+        // Set 2-pane pair rule for the deep link page.
+        ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
+                new ComponentName(Utils.SETTINGS_PACKAGE_NAME, ALIAS_DEEP_LINK),
+                targetComponentName,
+                true /* finishPrimaryWithSecondary */,
+                true /* finishSecondaryWithPrimary */);
+        ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
+                new ComponentName(Settings.class.getPackageName(), Settings.class.getName()),
+                targetComponentName,
+                true /* finishPrimaryWithSecondary */,
+                true /* finishSecondaryWithPrimary */);
+        startActivity(targetIntent);
+    }
+
     private void initHomepageContainer() {
         final View view = findViewById(R.id.homepage_container);
         // Prevent inner RecyclerView gets focus and invokes scrolling.
diff --git a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
index 97de4a7..a8a30b4 100644
--- a/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationAccessPreferenceController.java
@@ -29,7 +29,7 @@
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
-import com.android.settingslib.location.RecentLocationAccesses;
+import com.android.settingslib.applications.RecentAppOpsAccess;
 import com.android.settingslib.utils.StringUtil;
 import com.android.settingslib.widget.AppPreference;
 
@@ -42,7 +42,7 @@
 public class RecentLocationAccessPreferenceController extends LocationBasePreferenceController {
     public static final int MAX_APPS = 3;
     @VisibleForTesting
-    RecentLocationAccesses mRecentLocationApps;
+    RecentAppOpsAccess mRecentLocationApps;
     private PreferenceCategory mCategoryRecentLocationRequests;
     private int mType = ProfileSelectFragment.ProfileType.ALL;
 
@@ -71,12 +71,12 @@
     }
 
     public RecentLocationAccessPreferenceController(Context context, String key) {
-        this(context, key, new RecentLocationAccesses(context));
+        this(context, key, RecentAppOpsAccess.createForLocation(context));
     }
 
     @VisibleForTesting
     public RecentLocationAccessPreferenceController(Context context, String key,
-            RecentLocationAccesses recentLocationApps) {
+            RecentAppOpsAccess recentLocationApps) {
         super(context, key);
         mRecentLocationApps = recentLocationApps;
     }
@@ -86,9 +86,9 @@
         super.displayPreference(screen);
         mCategoryRecentLocationRequests = screen.findPreference(getPreferenceKey());
         final Context prefContext = mCategoryRecentLocationRequests.getContext();
-        final List<RecentLocationAccesses.Access> recentLocationAccesses = new ArrayList<>();
+        final List<RecentAppOpsAccess.Access> recentLocationAccesses = new ArrayList<>();
         final UserManager userManager = UserManager.get(mContext);
-        for (RecentLocationAccesses.Access access : mRecentLocationApps.getAppListSorted(
+        for (RecentAppOpsAccess.Access access : mRecentLocationApps.getAppListSorted(
                 /* showSystemApps= */ false)) {
             if (isRequestMatchesProfileType(userManager, access, mType)) {
                 recentLocationAccesses.add(access);
@@ -100,7 +100,7 @@
 
         if (recentLocationAccesses.size() > 0) {
             // Add preferences to container in original order (already sorted by recency).
-            for (RecentLocationAccesses.Access access : recentLocationAccesses) {
+            for (RecentAppOpsAccess.Access access : recentLocationAccesses) {
                 mCategoryRecentLocationRequests.addPreference(
                         createAppPreference(prefContext, access, mFragment));
             }
@@ -132,7 +132,7 @@
      * Create a {@link AppPreference}
      */
     public static AppPreference createAppPreference(Context prefContext,
-            RecentLocationAccesses.Access access, DashboardFragment fragment) {
+            RecentAppOpsAccess.Access access, DashboardFragment fragment) {
         final AppPreference pref = new AppPreference(prefContext);
         pref.setIcon(access.icon);
         pref.setTitle(access.label);
@@ -145,11 +145,11 @@
     }
 
     /**
-     * Return if the {@link RecentLocationAccesses.Access} matches current UI
-     * {@ProfileSelectFragment.ProfileType}
+     * Return if the {@link RecentAppOpsAccess.Access} matches current UI
+     * {@link ProfileSelectFragment.ProfileType}
      */
     public static boolean isRequestMatchesProfileType(UserManager userManager,
-            RecentLocationAccesses.Access access, @ProfileSelectFragment.ProfileType int type) {
+            RecentAppOpsAccess.Access access, @ProfileSelectFragment.ProfileType int type) {
 
         final boolean isWorkProfile = userManager.isManagedProfile(
                 access.userHandle.getIdentifier());
diff --git a/src/com/android/settings/location/RecentLocationAccessSeeAllPreferenceController.java b/src/com/android/settings/location/RecentLocationAccessSeeAllPreferenceController.java
index a05092d..eba6271 100644
--- a/src/com/android/settings/location/RecentLocationAccessSeeAllPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationAccessSeeAllPreferenceController.java
@@ -26,7 +26,7 @@
 
 import com.android.settings.R;
 import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
-import com.android.settingslib.location.RecentLocationAccesses;
+import com.android.settingslib.applications.RecentAppOpsAccess;
 import com.android.settingslib.widget.AppPreference;
 
 import java.util.ArrayList;
@@ -37,14 +37,14 @@
         extends LocationBasePreferenceController {
 
     private PreferenceScreen mCategoryAllRecentLocationAccess;
-    private final RecentLocationAccesses mRecentLocationAccesses;
+    private final RecentAppOpsAccess mRecentLocationAccesses;
     private boolean mShowSystem = false;
     private Preference mPreference;
     private int mType = ProfileSelectFragment.ProfileType.ALL;
 
     public RecentLocationAccessSeeAllPreferenceController(Context context, String key) {
         super(context, key);
-        mRecentLocationAccesses = new RecentLocationAccesses(context);
+        mRecentLocationAccesses = RecentAppOpsAccess.createForLocation(context);
     }
 
     @Override
@@ -65,8 +65,8 @@
 
         final UserManager userManager = UserManager.get(mContext);
 
-        final List<RecentLocationAccesses.Access> recentLocationAccesses = new ArrayList<>();
-        for (RecentLocationAccesses.Access access : mRecentLocationAccesses.getAppListSorted(
+        final List<RecentAppOpsAccess.Access> recentLocationAccesses = new ArrayList<>();
+        for (RecentAppOpsAccess.Access access : mRecentLocationAccesses.getAppListSorted(
                 mShowSystem)) {
             if (isRequestMatchesProfileType(userManager, access, mType)) {
                 recentLocationAccesses.add(access);
@@ -80,7 +80,7 @@
             banner.setSelectable(false);
             mCategoryAllRecentLocationAccess.addPreference(banner);
         } else {
-            for (RecentLocationAccesses.Access request : recentLocationAccesses) {
+            for (RecentAppOpsAccess.Access request : recentLocationAccesses) {
                 final Preference appPreference = createAppPreference(
                         preference.getContext(),
                         request, mFragment);
diff --git a/src/com/android/settings/notification/SpatialAudioPreferenceController.java b/src/com/android/settings/notification/SpatialAudioPreferenceController.java
new file mode 100644
index 0000000..1420076
--- /dev/null
+++ b/src/com/android/settings/notification/SpatialAudioPreferenceController.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2021 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.settings.notification;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.Spatializer;
+
+import com.android.settings.core.TogglePreferenceController;
+
+/**
+ * The controller of the Spatial audio setting in the SoundSettings.
+ */
+public class SpatialAudioPreferenceController extends TogglePreferenceController {
+
+    private static final String KEY_SPATIAL_AUDIO = "spatial_audio";
+
+    private final Spatializer mSpatializer;
+
+    public SpatialAudioPreferenceController(Context context) {
+        super(context, KEY_SPATIAL_AUDIO);
+        AudioManager audioManager = context.getSystemService(AudioManager.class);
+        mSpatializer = audioManager.getSpatializer();
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return mSpatializer.getImmersiveAudioLevel() == Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE
+                ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
+    }
+
+    @Override
+    public boolean isChecked() {
+        return mSpatializer.isEnabled();
+    }
+
+    @Override
+    public boolean setChecked(boolean isChecked) {
+        mSpatializer.setEnabled(isChecked);
+        return isChecked == isChecked();
+    }
+}
diff --git a/src/com/android/settings/notification/zen/ZenModePrioritySendersPreferenceController.java b/src/com/android/settings/notification/zen/ZenModePrioritySendersPreferenceController.java
index 482865c..d89163d 100644
--- a/src/com/android/settings/notification/zen/ZenModePrioritySendersPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenModePrioritySendersPreferenceController.java
@@ -54,10 +54,13 @@
     @VisibleForTesting static final String KEY_NONE = "senders_none";
 
     private static final Intent ALL_CONTACTS_INTENT =
-            new Intent(Contacts.Intents.UI.LIST_DEFAULT);
+            new Intent(Contacts.Intents.UI.LIST_DEFAULT)
+                    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
     private static final Intent STARRED_CONTACTS_INTENT =
-            new Intent(Contacts.Intents.UI.LIST_STARRED_ACTION);
-    private static final Intent FALLBACK_INTENT = new Intent(Intent.ACTION_MAIN);
+            new Intent(Contacts.Intents.UI.LIST_STARRED_ACTION)
+                    .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK  | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+    private static final Intent FALLBACK_INTENT = new Intent(Intent.ACTION_MAIN)
+            .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
 
     private final PackageManager mPackageManager;
     private final boolean mIsMessages; // if this is false, then this preference is for calls
diff --git a/src/com/android/settings/notification/zen/ZenRuleStarredContactsPreferenceController.java b/src/com/android/settings/notification/zen/ZenRuleStarredContactsPreferenceController.java
index a6de68c..3ac6633 100644
--- a/src/com/android/settings/notification/zen/ZenRuleStarredContactsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenRuleStarredContactsPreferenceController.java
@@ -43,10 +43,12 @@
         mPriorityCategory = priorityCategory;
         mPackageManager = mContext.getPackageManager();
 
-        mStarredContactsIntent = new Intent(Contacts.Intents.UI.LIST_STARRED_ACTION);
+        mStarredContactsIntent = new Intent(Contacts.Intents.UI.LIST_STARRED_ACTION)
+                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
 
         mFallbackIntent =  new Intent(Intent.ACTION_MAIN);
         mFallbackIntent.addCategory(Intent.CATEGORY_APP_CONTACTS);
+        mFallbackIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
     }
 
     @Override
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index cfdc9eb..93af231 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -23,6 +23,7 @@
 import androidx.annotation.Nullable;
 
 import com.android.settings.R;
+import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider;
 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
 import com.android.settings.accounts.AccountFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProvider;
@@ -111,13 +112,13 @@
     public abstract PowerUsageFeatureProvider getPowerUsageFeatureProvider(Context context);
 
     /**
-     * Retrieve implementation for Battery Status feature.
+     * Retrieves implementation for Battery Status feature.
      */
     public abstract BatteryStatusFeatureProvider getBatteryStatusFeatureProvider(
             Context context);
 
     /**
-     * Get implementation for Battery Settings provider.
+     * Gets implementation for Battery Settings provider.
      */
     public abstract BatterySettingsFeatureProvider getBatterySettingsFeatureProvider(
             Context context);
@@ -161,25 +162,30 @@
     public abstract WifiTrackerLibProvider getWifiTrackerLibProvider();
 
     /**
-     * Retrieve implementation for Extra App Info feature.
+     * Retrieves implementation for Extra App Info feature.
      */
     public abstract ExtraAppInfoFeatureProvider getExtraAppInfoFeatureProvider();
 
     /**
-     * Retrieve implementation for SecuritySettings feature.
+     * Retrieves implementation for SecuritySettings feature.
      */
     public abstract SecuritySettingsFeatureProvider getSecuritySettingsFeatureProvider();
 
     /**
-     * Retrieve implementation for Game Settings feature.
+     * Retrieves implementation for Game Settings feature.
      */
     public abstract GameSettingsFeatureProvider getGameSettingsFeatureProvider();
 
     /**
-     * Retrieve implementation for Accessibility search index feature.
+     * Retrieves implementation for Accessibility search index feature.
      */
     public abstract AccessibilitySearchFeatureProvider getAccessibilitySearchFeatureProvider();
 
+    /**
+     * Retrieves implementation for Accessibility metrics category feature.
+     */
+    public abstract AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider();
+
     public static final class FactoryNotFoundException extends RuntimeException {
         public FactoryNotFoundException(Throwable throwable) {
             super("Unable to create factory. Did you misconfigure Proguard?", throwable);
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 9890a10..2c63856 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -25,6 +25,8 @@
 
 import androidx.annotation.Keep;
 
+import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider;
+import com.android.settings.accessibility.AccessibilityMetricsFeatureProviderImpl;
 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
 import com.android.settings.accessibility.AccessibilitySearchFeatureProviderImpl;
 import com.android.settings.accounts.AccountFeatureProvider;
@@ -109,6 +111,7 @@
     private SecuritySettingsFeatureProvider mSecuritySettingsFeatureProvider;
     private GameSettingsFeatureProvider mGameSettingsFeatureProvider;
     private AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider;
+    private AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
 
     @Override
     public SupportFeatureProvider getSupportFeatureProvider(Context context) {
@@ -346,4 +349,12 @@
         }
         return mAccessibilitySearchFeatureProvider;
     }
+
+    @Override
+    public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() {
+        if (mAccessibilityMetricsFeatureProvider == null) {
+            mAccessibilityMetricsFeatureProvider = new AccessibilityMetricsFeatureProviderImpl();
+        }
+        return mAccessibilityMetricsFeatureProvider;
+    }
 }
diff --git a/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java b/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java
index 6e73382..9009b32 100644
--- a/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java
+++ b/src/com/android/settings/widget/HighlightablePreferenceGroupAdapter.java
@@ -105,7 +105,7 @@
         context.getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
                 outValue, true /* resolveRefs */);
         mNormalBackgroundRes = outValue.resourceId;
-        mHighlightColor = context.getColor(R.color.preference_highligh_color);
+        mHighlightColor = context.getColor(R.color.preference_highlight_color);
     }
 
     @Override
diff --git a/src/com/android/settings/wifi/WifiDialogActivity.java b/src/com/android/settings/wifi/WifiDialogActivity.java
index 4514b0d..56ecde4 100644
--- a/src/com/android/settings/wifi/WifiDialogActivity.java
+++ b/src/com/android/settings/wifi/WifiDialogActivity.java
@@ -197,13 +197,11 @@
     public void onDestroy() {
         if (mIsWifiTrackerLib) {
             if (mDialog2 != null && mDialog2.isShowing()) {
-                mDialog2.dismiss();
                 mDialog2 = null;
             }
             mWorkerThread.quit();
         } else {
             if (mDialog != null && mDialog.isShowing()) {
-                mDialog.dismiss();
                 mDialog = null;
             }
         }
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 9b2e97f..43bcec7 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -50,6 +50,7 @@
         "contextualcards",
         "settings-logtags",
         "zxing-core-1.7",
+        "windowExtLib",
     ],
 
     aaptflags: ["--extra-packages com.android.settings"],
diff --git a/tests/robotests/res/xml-mcc999/location_settings.xml b/tests/robotests/res/xml-mcc999/location_settings.xml
index d2dc132..b2a67ab 100644
--- a/tests/robotests/res/xml-mcc999/location_settings.xml
+++ b/tests/robotests/res/xml-mcc999/location_settings.xml
@@ -24,6 +24,7 @@
         android:title="title"
         android:icon="@drawable/ic_android"
         android:summary="summary"
+        settings:highlightableMenuKey="menu_key"
         settings:controller="com.android.settings.slices.FakePreferenceController"
         settings:keywords="a, b, c"
         settings:unavailableSliceSubtitle="subtitleOfUnavailableSlice"/>
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceControllerTest.java
index 010b444..7354555 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFooterPreferenceControllerTest.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.accessibility;
 
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -46,7 +47,6 @@
 
     @Rule
     public final MockitoRule mockito = MockitoJUnit.rule();
-
     @Spy
     private final Context mContext = ApplicationProvider.getApplicationContext();
     @Spy
@@ -76,4 +76,15 @@
         assertThat(mPreference.getTitle()).isEqualTo(
                 mContext.getText(R.string.accessibility_button_gesture_description));
     }
+
+    @Test
+    public void displayPreference_navigationGestureDisabled_setCorrectTitle() {
+        when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
+                .thenReturn(NAV_BAR_MODE_2BUTTON);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.getTitle()).isEqualTo(
+                mContext.getText(R.string.accessibility_button_description));
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceControllerTest.java
new file mode 100644
index 0000000..da44228
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonGesturePreferenceControllerTest.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2021 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.settings.accessibility;
+
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.Settings;
+
+import androidx.preference.ListPreference;
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link AccessibilityButtonGesturePreferenceController}. */
+@RunWith(RobolectricTestRunner.class)
+public class AccessibilityButtonGesturePreferenceControllerTest {
+
+    @Rule
+    public final MockitoRule mockito = MockitoJUnit.rule();
+
+    @Spy
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+    @Spy
+    private final Resources mResources = mContext.getResources();
+    private final ContentResolver mContentResolver = mContext.getContentResolver();
+    private final ListPreference mListPreference = new ListPreference(mContext);
+    private AccessibilityButtonGesturePreferenceController mController;
+
+    @Before
+    public void setUp() {
+        mController = new AccessibilityButtonGesturePreferenceController(mContext,
+                "test_key");
+        when(mContext.getResources()).thenReturn(mResources);
+    }
+
+    @Test
+    public void getAvailabilityStatus_navigationGestureEnabled_returnAvailable() {
+        when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
+                .thenReturn(NAV_BAR_MODE_GESTURAL);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_navigationGestureDisabled_returnConditionallyUnavailable() {
+        when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
+                .thenReturn(NAV_BAR_MODE_2BUTTON);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    public void updateState_a11yBtnModeGesture_navigationBarValue() {
+        Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_BUTTON_MODE,
+                ACCESSIBILITY_BUTTON_MODE_GESTURE);
+
+        mController.updateState(mListPreference);
+
+        final String gestureValue = String.valueOf(ACCESSIBILITY_BUTTON_MODE_GESTURE);
+        assertThat(mListPreference.getValue()).isEqualTo(gestureValue);
+    }
+
+    @Test
+    public void onPreferenceChange_a11yBtnModeFloatingMenu_floatingMenuValue() {
+        final String floatingMenuValue = String.valueOf(ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU);
+
+        mController.onPreferenceChange(mListPreference, floatingMenuValue);
+
+        assertThat(mListPreference.getValue()).isEqualTo(floatingMenuValue);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreferenceControllerTest.java
new file mode 100644
index 0000000..03f7887
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreferenceControllerTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2021 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.settings.accessibility;
+
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link AccessibilityButtonPreferenceController}. */
+@RunWith(RobolectricTestRunner.class)
+public class AccessibilityButtonPreferenceControllerTest {
+
+    @Rule
+    public final MockitoRule mockito = MockitoJUnit.rule();
+    @Spy
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+    @Spy
+    private final Resources mResources = mContext.getResources();
+    @Mock
+    private PreferenceScreen mScreen;
+    private Preference mPreference;
+    private AccessibilityButtonPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        mController = new AccessibilityButtonPreferenceController(mContext, "test_key");
+        mPreference = new Preference(mContext);
+        mPreference.setKey("test_key");
+
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+        when(mContext.getResources()).thenReturn(mResources);
+    }
+
+    @Test
+    public void displayPreference_navigationGestureEnabled_setCorrectTitle() {
+        when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
+                .thenReturn(NAV_BAR_MODE_GESTURAL);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.getTitle()).isEqualTo(
+                mContext.getText(R.string.accessibility_button_gesture_title));
+    }
+
+    @Test
+    public void displayPreference_navigationGestureDisabled_setCorrectTitle() {
+        when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
+                .thenReturn(NAV_BAR_MODE_2BUTTON);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.getTitle()).isEqualTo(
+                mContext.getText(R.string.accessibility_button_title));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreviewPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreviewPreferenceControllerTest.java
index 3065030..05aba99 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreviewPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonPreviewPreferenceControllerTest.java
@@ -19,6 +19,8 @@
 import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
 import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR;
 
+import static com.android.settings.testutils.ImageTestUtils.drawableToBitmap;
+
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.verify;
@@ -28,12 +30,11 @@
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.provider.Settings;
-import android.widget.ImageView;
 
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.R;
-import com.android.settings.testutils.ImageTestUtils;
+import com.android.settingslib.widget.IllustrationPreference;
 
 import org.junit.Before;
 import org.junit.Rule;
@@ -62,7 +63,7 @@
     public void setUp() {
         when(mContext.getContentResolver()).thenReturn(mContentResolver);
         mController = new AccessibilityButtonPreviewPreferenceController(mContext, "test_key");
-        mController.mPreview = new ImageView(mContext);
+        mController.mIllustrationPreference = new IllustrationPreference(mContext);
     }
 
     @Test
@@ -74,8 +75,8 @@
 
         final Drawable navigationBarDrawable = mContext.getDrawable(
                 R.drawable.accessibility_button_navigation);
-        assertThat(ImageTestUtils.drawableToBitmap(mController.mPreview.getDrawable()).sameAs(
-                ImageTestUtils.drawableToBitmap(navigationBarDrawable))).isTrue();
+        assertThat(drawableToBitmap(mController.mIllustrationPreference.getImageDrawable()).sameAs(
+                drawableToBitmap(navigationBarDrawable))).isTrue();
     }
 
     @Test
@@ -90,10 +91,11 @@
         mController.mContentObserver.onChange(false);
 
         final Drawable smallFloatingMenuWithTenOpacityDrawable =
-                FloatingMenuLayerDrawable.createLayerDrawable(mContext,
+                AccessibilityLayerDrawable.createLayerDrawable(mContext,
                         R.drawable.accessibility_button_preview_small_floating_menu, 10);
-        assertThat(mController.mPreview.getDrawable().getConstantState()).isEqualTo(
-                smallFloatingMenuWithTenOpacityDrawable.getConstantState());
+        assertThat(
+                mController.mIllustrationPreference.getImageDrawable().getConstantState())
+                .isEqualTo(smallFloatingMenuWithTenOpacityDrawable.getConstantState());
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java
new file mode 100644
index 0000000..cc8520b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityFooterPreferenceControllerTest.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2021 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.settings.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.preference.PreferenceScreen;
+import androidx.preference.PreferenceViewHolder;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+/**
+ * Tests for {@link AccessibilityFooterPreferenceController}.
+ */
+@RunWith(RobolectricTestRunner.class)
+public class AccessibilityFooterPreferenceControllerTest {
+
+    private static final String TEST_KEY = "test_pref_key";
+    private static final String TEST_TITLE = "test_title";
+    private static final String TEST_INTRODUCTION_TITLE = "test_introduction_title";
+    private static final String TEST_CONTENT_DESCRIPTION = "test_content_description";
+    private static final int TEST_HELP_ID = 12345;
+
+    @Rule
+    public final MockitoRule mockito = MockitoJUnit.rule();
+
+    @Spy
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+    @Mock
+    private PreferenceScreen mScreen;
+    private AccessibilityFooterPreferenceController mController;
+    private AccessibilityFooterPreference mPreference;
+    private PreferenceViewHolder mPreferenceViewHolder;
+
+    @Before
+    public void setUp() {
+        mController = new AccessibilityFooterPreferenceController(mContext, TEST_KEY);
+        mPreference = new AccessibilityFooterPreference(mContext);
+        mPreference.setKey(TEST_KEY);
+        mPreference.setTitle(TEST_TITLE);
+
+        final LayoutInflater inflater = LayoutInflater.from(mContext);
+        final View view = inflater.inflate(R.layout.preference_footer, null);
+        mPreferenceViewHolder = PreferenceViewHolder.createInstanceForTests(view);
+        mPreference.onBindViewHolder(mPreferenceViewHolder);
+
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+    }
+
+    @Test
+    public void setIntroductionTitle_setCorrectIntroductionTitle() {
+        mController.setIntroductionTitle(TEST_INTRODUCTION_TITLE);
+
+        assertThat(mController.getIntroductionTitle()).isEqualTo(TEST_INTRODUCTION_TITLE);
+    }
+
+    @Test
+    public void onBindViewHolder_setIntroductionTitle_setCorrectIntroductionTitle() {
+        mController.setIntroductionTitle(TEST_INTRODUCTION_TITLE);
+        mController.displayPreference(mScreen);
+
+        mPreference.onBindViewHolder(mPreferenceViewHolder);
+
+        final TextView summaryView = (TextView) mPreferenceViewHolder
+                .findViewById(android.R.id.title);
+        assertThat(summaryView.getContentDescription().toString())
+                .contains(TEST_INTRODUCTION_TITLE);
+    }
+
+    @Test
+    public void setupHelpLink_setCorrectHelpLinkAndContentDescription() {
+        mController.setupHelpLink(TEST_HELP_ID, TEST_CONTENT_DESCRIPTION);
+
+        assertThat(mController.getHelpResource()).isEqualTo(TEST_HELP_ID);
+        assertThat(mController.getLearnMoreContentDescription())
+                .isEqualTo(TEST_CONTENT_DESCRIPTION);
+    }
+
+    @Test
+    public void onBindViewHolder_setHelpResource_emptyString_notVisible() {
+        mController.setupHelpLink(R.string.help_url_timeout, TEST_CONTENT_DESCRIPTION);
+        mController.displayPreference(mScreen);
+
+        mPreference.onBindViewHolder(mPreferenceViewHolder);
+
+        final TextView learnMoreView = (TextView) mPreferenceViewHolder
+                .findViewById(com.android.settingslib.R.id.settingslib_learn_more);
+        assertThat(learnMoreView.getContentDescription()).isNull();
+        assertThat(learnMoreView.getVisibility()).isEqualTo(View.GONE);
+        assertThat(mPreference.isLinkEnabled()).isFalse();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuLayerDrawableTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityLayerDrawableTest.java
similarity index 83%
rename from tests/robotests/src/com/android/settings/accessibility/FloatingMenuLayerDrawableTest.java
rename to tests/robotests/src/com/android/settings/accessibility/AccessibilityLayerDrawableTest.java
index 45cefe4..915c788 100644
--- a/tests/robotests/src/com/android/settings/accessibility/FloatingMenuLayerDrawableTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityLayerDrawableTest.java
@@ -30,9 +30,9 @@
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
 
-/** Tests for {@link FloatingMenuLayerDrawable}. */
+/** Tests for {@link AccessibilityLayerDrawable}. */
 @RunWith(RobolectricTestRunner.class)
-public class FloatingMenuLayerDrawableTest {
+public class AccessibilityLayerDrawableTest {
 
     private static final int TEST_RES_ID =
             com.android.internal.R.drawable.ic_accessibility_magnification;
@@ -46,8 +46,8 @@
                 R.drawable.accessibility_button_preview_base);
         final Drawable expected2ndDrawable = mContext.getDrawable(TEST_RES_ID);
 
-        final FloatingMenuLayerDrawable actualDrawable =
-                FloatingMenuLayerDrawable.createLayerDrawable(mContext, TEST_RES_ID,
+        final AccessibilityLayerDrawable actualDrawable =
+                AccessibilityLayerDrawable.createLayerDrawable(mContext, TEST_RES_ID,
                         /* opacity= */ 27);
 
         final Drawable actual1stDrawable = actualDrawable.getDrawable(0);
@@ -60,14 +60,14 @@
 
     @Test
     public void updateLayerDrawable_expectedFloatingMenuLayerDrawableState() {
-        final FloatingMenuLayerDrawable originalDrawable =
-                FloatingMenuLayerDrawable.createLayerDrawable(mContext, TEST_RES_ID, /* opacity= */
+        final AccessibilityLayerDrawable originalDrawable =
+                AccessibilityLayerDrawable.createLayerDrawable(mContext, TEST_RES_ID, /* opacity= */
                         72);
 
         originalDrawable.updateLayerDrawable(mContext, TEST_RES_ID_2, /* opacity= */ 27);
 
         assertThat(originalDrawable.getConstantState()).isEqualTo(
-                new FloatingMenuLayerDrawable.FloatingMenuLayerDrawableState(mContext,
+                new AccessibilityLayerDrawable.AccessibilityLayerDrawableState(mContext,
                         TEST_RES_ID_2, /* opacity= */ 27));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java b/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java
index 4cde04b..23ade9d 100644
--- a/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java
@@ -175,17 +175,35 @@
     }
 
     @Test
+    public void extractHomepageMetadata_shouldContainKeyAndHighlightableMenuKey()
+            throws IOException, XmlPullParserException {
+        List<Bundle> metadata = PreferenceXmlParserUtils.extractMetadata(mContext,
+                R.xml.top_level_settings,
+                MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY);
+
+        assertThat(metadata).isNotEmpty();
+        for (Bundle bundle : metadata) {
+            assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_KEY)).isNotNull();
+            assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_HIGHLIGHTABLE_MENU_KEY))
+                    .isNotNull();
+        }
+    }
+
+    @Test
     @Config(qualifiers = "mcc999")
-    public void extractMetadata_shouldContainKeyAndControllerName()
+    public void extractMetadata_shouldContainKeyAndControllerNameAndHighlightableMenuKey()
             throws IOException, XmlPullParserException {
         List<Bundle> metadata = PreferenceXmlParserUtils.extractMetadata(mContext,
                 R.xml.location_settings,
-                MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_PREF_CONTROLLER);
+                MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_PREF_CONTROLLER
+                        | MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY);
 
         assertThat(metadata).isNotEmpty();
         for (Bundle bundle : metadata) {
             assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_KEY)).isNotNull();
             assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_CONTROLLER)).isNotNull();
+            assertThat(bundle.getString(PreferenceXmlParserUtils.METADATA_HIGHLIGHTABLE_MENU_KEY))
+                    .isNotNull();
         }
     }
 
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index 6ef6b18..5d6fdf9 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -239,7 +239,7 @@
                 any(Intent.class),
                 eq(MetricsEvent.SETTINGS_GESTURES));
         verify(mActivity)
-                .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class));
+                .startActivityAsUser(any(Intent.class), any(UserHandle.class));
     }
 
     @Test
@@ -257,7 +257,7 @@
                 any(Intent.class),
                 anyInt());
         verify(mActivity)
-                .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class));
+                .startActivityAsUser(any(Intent.class), any(UserHandle.class));
     }
 
     @Test
@@ -568,7 +568,7 @@
         mImpl.openTileIntent(mActivity, tile);
 
         verify(mActivity, never())
-                .startActivityForResult(any(Intent.class), eq(0));
+                .startActivity(any(Intent.class));
         verify(mActivity).getSupportFragmentManager();
     }
 
@@ -585,7 +585,7 @@
         mImpl.openTileIntent(mActivity, tile);
 
         verify(mActivity, never())
-                .startActivityForResult(any(Intent.class), eq(0));
+                .startActivity(any(Intent.class));
         verify(mActivity).getSupportFragmentManager();
     }
 
@@ -602,7 +602,7 @@
         mImpl.openTileIntent(mActivity, tile);
 
         verify(mActivity)
-                .startActivityForResult(any(Intent.class), eq(0));
+                .startActivity(any(Intent.class));
         verify(mActivity, never()).getSupportFragmentManager();
     }
 
@@ -623,7 +623,7 @@
 
         final ArgumentCaptor<UserHandle> argument = ArgumentCaptor.forClass(UserHandle.class);
         verify(mActivity)
-                .startActivityForResultAsUser(any(Intent.class), anyInt(), argument.capture());
+                .startActivityAsUser(any(Intent.class), argument.capture());
         assertThat(argument.getValue().getIdentifier()).isEqualTo(userId);
         verify(mActivity, never()).getSupportFragmentManager();
     }
@@ -642,7 +642,7 @@
         mImpl.openTileIntent(mActivity, tile);
 
         verify(mActivity, never())
-                .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class));
+                .startActivityAsUser(any(Intent.class), any(UserHandle.class));
         verify(mActivity).getSupportFragmentManager();
     }
 
@@ -665,7 +665,7 @@
 
         final ArgumentCaptor<UserHandle> argument = ArgumentCaptor.forClass(UserHandle.class);
         verify(mActivity)
-                .startActivityForResultAsUser(any(Intent.class), anyInt(), argument.capture());
+                .startActivityAsUser(any(Intent.class), argument.capture());
         assertThat(argument.getValue().getIdentifier()).isEqualTo(0);
         verify(mActivity, never()).getSupportFragmentManager();
     }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index b50e083..ac85d97 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -30,9 +30,11 @@
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import android.app.AppOpsManager;
+import android.app.backup.BackupManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
@@ -123,6 +125,9 @@
     private BatteryUtils mBatteryUtils;
     @Mock
     private BatteryOptimizeUtils mBatteryOptimizeUtils;
+    @Mock
+    private BackupManager mBackupManager;
+
     private Context mContext;
     private Preference mForegroundPreference;
     private Preference mBackgroundPreference;
@@ -180,9 +185,10 @@
 
         mFragment.mHeaderPreference = mHeaderPreference;
         mFragment.mState = mState;
-        mFragment.enableTriState = true;
+        mFragment.mEnableTriState = true;
         mFragment.mBatteryUtils = new BatteryUtils(RuntimeEnvironment.application);
         mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
+        mFragment.mBackupManager = mBackupManager;
         mAppEntry.info = mock(ApplicationInfo.class);
 
         mTestActivity = spy(new SettingsActivity());
@@ -231,7 +237,7 @@
 
     @Test
     public void testGetPreferenceScreenResId_disableTriState_returnLegacyLayout() {
-        mFragment.enableTriState = false;
+        mFragment.mEnableTriState = false;
         assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.power_usage_detail_legacy);
     }
 
@@ -740,6 +746,16 @@
     }
 
     @Test
+    public void testInitPreferenceForTriState_isAllowlistedExceptIdleApp_hasCorrectString() {
+        when(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
+
+        mFragment.initPreferenceForTriState(mContext);
+
+        assertThat(mFooterPreference.getTitle().toString())
+                .isEqualTo("This app requires optimized battery usage.");
+    }
+
+    @Test
     public void testInitPreferenceForTriState_isSystemOrDefaultApp_hasCorrectString() {
         when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
         when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
@@ -780,4 +796,38 @@
                     new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, "app label")
                 });
     }
+
+    @Test
+    public void notifyBackupManager_optimizationModeIsNotChanged_notInvokeDataChanged() {
+        final int mode = BatteryOptimizeUtils.MODE_RESTRICTED;
+        mFragment.mOptimizationMode = mode;
+        when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode);
+
+        mFragment.notifyBackupManager();
+
+        verifyZeroInteractions(mBackupManager);
+    }
+
+    @Test
+    public void notifyBackupManager_optimizationModeIsChanged_invokeDataChanged() {
+        mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+        when(mBatteryOptimizeUtils.getAppOptimizationMode())
+                .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
+
+        mFragment.notifyBackupManager();
+
+        verify(mBackupManager).dataChanged();
+    }
+
+    @Test
+    public void notifyBackupManager_triStateIsNotEnabled_notInvokeDataChanged() {
+        mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+        when(mBatteryOptimizeUtils.getAppOptimizationMode())
+                .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
+        mFragment.mEnableTriState = false;
+
+        mFragment.notifyBackupManager();
+
+        verifyZeroInteractions(mBackupManager);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java
index c3b3075..5e69b8f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java
@@ -67,11 +67,13 @@
     private Context mContext;
     private PowerGaugePreference mPreference;
     private BatteryAppListPreferenceController mPreferenceController;
+    private FakeFeatureFactory mFeatureFactory;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
+        mFeatureFactory = FakeFeatureFactory.setupForTest();
         mContext = spy(RuntimeEnvironment.application);
         final Resources resources = spy(mContext.getResources());
         when(mContext.getResources()).thenReturn(resources);
@@ -79,9 +81,8 @@
         when(mContext.getApplicationContext()).thenReturn(mContext);
         when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
         when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[] {});
-        when(resources.getTextArray(R.array.allowlist_hide_summary_in_battery_usage))
+        when(mFeatureFactory.powerUsageFeatureProvider.getHideApplicationSummary(mContext))
                 .thenReturn(new String[] {"com.android.googlequicksearchbox"});
-        FakeFeatureFactory.setupForTest();
 
         mPreference = new PowerGaugePreference(mContext);
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
new file mode 100644
index 0000000..aa1caf9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
@@ -0,0 +1,420 @@
+/*
+ * Copyright (C) 2021 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.settings.fuelgauge;
+
+import static com.android.settings.fuelgauge.BatteryBackupHelper.DELIMITER;
+import static com.android.settings.fuelgauge.BatteryBackupHelper.DELIMITER_MODE;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_RESTRICTED;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.inOrder;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+
+import android.app.AppOpsManager;
+import android.app.backup.BackupDataInputStream;
+import android.app.backup.BackupDataOutput;
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
+import android.content.pm.UserInfo;
+import android.os.IDeviceIdleController;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.annotation.Resetter;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {BatteryBackupHelperTest.ShadowUserHandle.class})
+public final class BatteryBackupHelperTest {
+    private static final String PACKAGE_NAME1 = "com.android.testing.1";
+    private static final String PACKAGE_NAME2 = "com.android.testing.2";
+    private static final String PACKAGE_NAME3 = "com.android.testing.3";
+
+    private Context mContext;
+    private BatteryBackupHelper mBatteryBackupHelper;
+
+    @Mock
+    private PackageManager mPackageManager;
+    @Mock
+    private BackupDataOutput mBackupDataOutput;
+    @Mock
+    private BackupDataInputStream mBackupDataInputStream;
+    @Mock
+    private IDeviceIdleController mDeviceController;
+    @Mock
+    private IPackageManager mIPackageManager;
+    @Mock
+    private AppOpsManager mAppOpsManager;
+    @Mock
+    private UserManager mUserManager;
+    @Mock
+    private PowerAllowlistBackend mPowerAllowlistBackend;
+    @Mock
+    private BatteryOptimizeUtils mBatteryOptimizeUtils;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
+        doReturn(mContext).when(mContext).getApplicationContext();
+        doReturn(mAppOpsManager).when(mContext).getSystemService(AppOpsManager.class);
+        doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
+        doReturn(mPackageManager).when(mContext).getPackageManager();
+        mBatteryBackupHelper = new BatteryBackupHelper(mContext);
+        mBatteryBackupHelper.mIDeviceIdleController = mDeviceController;
+        mBatteryBackupHelper.mIPackageManager = mIPackageManager;
+        mBatteryBackupHelper.mPowerAllowlistBackend = mPowerAllowlistBackend;
+        mBatteryBackupHelper.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
+        mockUid(1001 /*fake uid*/, PACKAGE_NAME1);
+        mockUid(1002 /*fake uid*/, PACKAGE_NAME2);
+        mockUid(BatteryUtils.UID_NULL, PACKAGE_NAME3);
+        doReturn(false).when(mPowerAllowlistBackend).isDefaultActiveApp(anyString());
+        doReturn(false).when(mPowerAllowlistBackend).isDefaultActiveApp(anyString());
+        doReturn(false).when(mPowerAllowlistBackend).isAllowlistedExceptIdle(anyString());
+    }
+
+    @After
+    public void resetShadows() {
+        ShadowUserHandle.reset();
+    }
+
+    @Test
+    public void performBackup_nullPowerList_notBackupPowerList() throws Exception {
+        doReturn(null).when(mDeviceController).getFullPowerWhitelist();
+        mBatteryBackupHelper.performBackup(null, mBackupDataOutput, null);
+
+        verify(mBackupDataOutput, never()).writeEntityHeader(anyString(), anyInt());
+    }
+
+    @Test
+    public void performBackup_emptyPowerList_notBackupPowerList() throws Exception {
+        doReturn(new String[0]).when(mDeviceController).getFullPowerWhitelist();
+        mBatteryBackupHelper.performBackup(null, mBackupDataOutput, null);
+
+        verify(mBackupDataOutput, never()).writeEntityHeader(anyString(), anyInt());
+    }
+
+    @Test
+    public void performBackup_remoteException_notBackupPowerList() throws Exception {
+        doThrow(new RemoteException()).when(mDeviceController).getFullPowerWhitelist();
+        mBatteryBackupHelper.performBackup(null, mBackupDataOutput, null);
+
+        verify(mBackupDataOutput, never()).writeEntityHeader(anyString(), anyInt());
+    }
+
+    @Test
+    public void performBackup_oneFullPowerListElement_backupFullPowerListData()
+            throws Exception {
+        final String[] fullPowerList = {"com.android.package"};
+        doReturn(fullPowerList).when(mDeviceController).getFullPowerWhitelist();
+
+        mBatteryBackupHelper.performBackup(null, mBackupDataOutput, null);
+
+        final byte[] expectedBytes = fullPowerList[0].getBytes();
+        verify(mBackupDataOutput).writeEntityHeader(
+                BatteryBackupHelper.KEY_FULL_POWER_LIST, expectedBytes.length);
+        verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length);
+    }
+
+    @Test
+    public void performBackup_backupFullPowerListData() throws Exception {
+        final String[] fullPowerList = {"com.android.package1", "com.android.package2"};
+        doReturn(fullPowerList).when(mDeviceController).getFullPowerWhitelist();
+
+        mBatteryBackupHelper.performBackup(null, mBackupDataOutput, null);
+
+        final String expectedResult = fullPowerList[0] + DELIMITER + fullPowerList[1];
+        final byte[] expectedBytes = expectedResult.getBytes();
+        verify(mBackupDataOutput).writeEntityHeader(
+                BatteryBackupHelper.KEY_FULL_POWER_LIST, expectedBytes.length);
+        verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length);
+    }
+
+    @Test
+    public void performBackup_nonOwner_ignoreAllBackupAction() throws Exception {
+        ShadowUserHandle.setUid(1);
+        final String[] fullPowerList = {"com.android.package"};
+        doReturn(fullPowerList).when(mDeviceController).getFullPowerWhitelist();
+
+        mBatteryBackupHelper.performBackup(null, mBackupDataOutput, null);
+
+        verify(mBackupDataOutput, never()).writeEntityHeader(anyString(), anyInt());
+    }
+
+    @Test
+    public void backupOptimizationMode_nullInstalledApps_ignoreBackupOptimization()
+            throws Exception {
+        final UserInfo userInfo =
+                new UserInfo(/*userId=*/ 0, /*userName=*/ "google", /*flag=*/ 0);
+        doReturn(Arrays.asList(userInfo)).when(mUserManager).getProfiles(anyInt());
+        doThrow(new RuntimeException())
+                .when(mIPackageManager)
+                .getInstalledApplications(anyInt(), anyInt());
+
+        mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, null);
+
+        verify(mBackupDataOutput, never()).writeEntityHeader(anyString(), anyInt());
+    }
+
+    @Test
+    public void backupOptimizationMode_backupOptimizationMode() throws Exception {
+        final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
+        createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3);
+
+        mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
+
+        // 2 for UNRESTRICTED mode and 1 for RESTRICTED mode.
+        final String expectedResult = PACKAGE_NAME1 + ":2," + PACKAGE_NAME2 + ":1,";
+        verifyBackupData(expectedResult);
+    }
+
+    @Test
+    public void backupOptimizationMode_backupOptimizationModeAndIgnoreSystemApp()
+            throws Exception {
+        final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
+        createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3);
+        // Sets "com.android.testing.1" as system app.
+        doReturn(true).when(mPowerAllowlistBackend).isSysAllowlisted(PACKAGE_NAME1);
+
+        mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
+
+        // "com.android.testing.2" for RESTRICTED mode.
+        final String expectedResult = PACKAGE_NAME2 + ":1,";
+        verifyBackupData(expectedResult);
+    }
+
+    @Test
+    public void backupOptimizationMode_backupOptimizationModeAndIgnoreDefaultApp()
+            throws Exception {
+        final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
+        createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3);
+        // Sets "com.android.testing.1" as device default app.
+        doReturn(true).when(mPowerAllowlistBackend).isDefaultActiveApp(PACKAGE_NAME1);
+
+        mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
+
+        // "com.android.testing.2" for RESTRICTED mode.
+        final String expectedResult = PACKAGE_NAME2 + ":1,";
+        verifyBackupData(expectedResult);
+    }
+
+    @Test
+    public void backupOptimizationMode_backupOptimizationAndIgnoreAppInTheAllowlist()
+            throws Exception {
+        final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
+        createTestingData(PACKAGE_NAME1, PACKAGE_NAME2, PACKAGE_NAME3);
+        // Sets "com.android.testing.1" in the allowlist.
+        doReturn(true).when(mPowerAllowlistBackend).isAllowlistedExceptIdle(PACKAGE_NAME1);
+
+        mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, allowlistedApps);
+
+        // "com.android.testing.2" for RESTRICTED mode.
+        final String expectedResult = PACKAGE_NAME2 + ":1,";
+        verifyBackupData(expectedResult);
+    }
+
+    @Test
+    public void restoreEntity_nonOwner_notReadBackupData() throws Exception {
+        ShadowUserHandle.setUid(1);
+        mockBackupData(30 /*dataSize*/, BatteryBackupHelper.KEY_OPTIMIZATION_LIST);
+
+        mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
+
+        verifyZeroInteractions(mBackupDataInputStream);
+    }
+
+    @Test
+    public void restoreEntity_zeroDataSize_notReadBackupData() throws Exception {
+        final int zeroDataSize = 0;
+        mockBackupData(zeroDataSize, BatteryBackupHelper.KEY_OPTIMIZATION_LIST);
+
+        mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
+
+        verify(mBackupDataInputStream, never()).read(any(), anyInt(), anyInt());
+    }
+
+    @Test
+    public void restoreEntity_incorrectDataKey_notReadBackupData() throws Exception {
+        final String incorrectDataKey = BatteryBackupHelper.KEY_FULL_POWER_LIST;
+        mockBackupData(30 /*dataSize*/, incorrectDataKey);
+
+        mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
+
+        verify(mBackupDataInputStream, never()).read(any(), anyInt(), anyInt());
+    }
+
+    @Test
+    public void restoreEntity_readExpectedDataFromBackupData() throws Exception {
+        final int dataSize = 30;
+        mockBackupData(dataSize, BatteryBackupHelper.KEY_OPTIMIZATION_LIST);
+
+        mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
+
+        final ArgumentCaptor<byte[]> captor = ArgumentCaptor.forClass(byte[].class);
+        verify(mBackupDataInputStream).read(captor.capture(), eq(0), eq(dataSize));
+        assertThat(captor.getValue().length).isEqualTo(dataSize);
+    }
+
+    @Test
+    public void restoreOptimizationMode_nullBytesData_skipRestore() throws Exception {
+        mBatteryBackupHelper.restoreOptimizationMode(new byte[0]);
+        verifyZeroInteractions(mBatteryOptimizeUtils);
+
+        mBatteryBackupHelper.restoreOptimizationMode("invalid data format".getBytes());
+        verifyZeroInteractions(mBatteryOptimizeUtils);
+
+        mBatteryBackupHelper.restoreOptimizationMode(DELIMITER.getBytes());
+        verifyZeroInteractions(mBatteryOptimizeUtils);
+    }
+
+    @Test
+    public void restoreOptimizationMode_invalidModeFormat_skipRestore() throws Exception {
+        final String invalidNumberFormat = "google";
+        final String packageModes =
+                PACKAGE_NAME1 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER +
+                PACKAGE_NAME2 + DELIMITER_MODE + invalidNumberFormat;
+
+        mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
+
+        final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
+        inOrder.verify(mBatteryOptimizeUtils).setAppOptimizationMode(MODE_RESTRICTED);
+        inOrder.verify(mBatteryOptimizeUtils, never()).setAppOptimizationMode(anyInt());
+    }
+
+    @Test
+    public void restoreOptimizationMode_restoreExpectedModes() throws Exception {
+        final String packageModes =
+                PACKAGE_NAME1 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER +
+                PACKAGE_NAME2 + DELIMITER_MODE + MODE_UNRESTRICTED + DELIMITER +
+                PACKAGE_NAME3 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER;
+
+        mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
+
+        final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
+        inOrder.verify(mBatteryOptimizeUtils).setAppOptimizationMode(MODE_RESTRICTED);
+        inOrder.verify(mBatteryOptimizeUtils).setAppOptimizationMode(MODE_UNRESTRICTED);
+        inOrder.verify(mBatteryOptimizeUtils, never()).setAppOptimizationMode(MODE_RESTRICTED);
+    }
+
+    private void mockUid(int uid, String packageName) throws Exception {
+        doReturn(uid).when(mPackageManager)
+                .getPackageUid(packageName, PackageManager.GET_META_DATA);
+    }
+
+    private void mockBackupData(int dataSize, String dataKey) {
+        doReturn(dataSize).when(mBackupDataInputStream).size();
+        doReturn(dataKey).when(mBackupDataInputStream).getKey();
+    }
+
+    private void verifyBackupData(String expectedResult) throws Exception {
+        final byte[] expectedBytes = expectedResult.getBytes();
+        verify(mBackupDataOutput).writeEntityHeader(
+                BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
+        verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length);
+    }
+
+    private void createTestingData(
+            String packageName1, String packageName2, String packageName3) throws Exception {
+        // Sets the getInstalledApplications() method for testing.
+        final UserInfo userInfo =
+                new UserInfo(/*userId=*/ 0, /*userName=*/ "google", /*flag=*/ 0);
+        doReturn(Arrays.asList(userInfo)).when(mUserManager).getProfiles(anyInt());
+        final ApplicationInfo applicationInfo1 = new ApplicationInfo();
+        applicationInfo1.enabled = true;
+        applicationInfo1.uid = 1;
+        applicationInfo1.packageName = packageName1;
+        final ApplicationInfo applicationInfo2 = new ApplicationInfo();
+        applicationInfo2.enabled = false;
+        applicationInfo2.uid = 2;
+        applicationInfo2.packageName = packageName2;
+        applicationInfo2.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
+        final ApplicationInfo applicationInfo3 = new ApplicationInfo();
+        applicationInfo3.enabled = false;
+        applicationInfo3.uid = 3;
+        applicationInfo3.packageName = packageName3;
+        applicationInfo3.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+        doReturn(new ParceledListSlice<ApplicationInfo>(
+                Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3)))
+            .when(mIPackageManager)
+            .getInstalledApplications(anyInt(), anyInt());
+        // Sets the AppOpsManager for checkOpNoThrow() method.
+        doReturn(AppOpsManager.MODE_ALLOWED)
+                .when(mAppOpsManager)
+                .checkOpNoThrow(
+                        AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
+                        applicationInfo1.uid,
+                        applicationInfo1.packageName);
+        doReturn(AppOpsManager.MODE_IGNORED)
+                .when(mAppOpsManager)
+                .checkOpNoThrow(
+                        AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
+                        applicationInfo2.uid,
+                        applicationInfo2.packageName);
+    }
+
+    @Implements(UserHandle.class)
+    public static class ShadowUserHandle {
+        // Sets the default as thte OWNER role.
+        private static int sUid = 0;
+
+        public static void setUid(int uid) {
+            sUid = uid;
+        }
+
+        @Implementation
+        public static int myUserId() {
+            return sUid;
+        }
+
+        @Resetter
+        public static void reset() {
+            sUid = 0;
+        }
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
index 43fbe81..a9a743b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
@@ -103,7 +103,11 @@
         resources.getConfiguration().setLocales(new LocaleList(new Locale("en_US")));
         doReturn(resources).when(mContext).getResources();
         doReturn(new String[] {"com.android.googlequicksearchbox"})
-            .when(resources).getTextArray(R.array.allowlist_hide_summary_in_battery_usage);
+            .when(mFeatureFactory.powerUsageFeatureProvider)
+            .getHideApplicationSummary(mContext);
+        doReturn(new String[] {"com.android.gms.persistent"})
+            .when(mFeatureFactory.powerUsageFeatureProvider)
+            .getHideApplicationEntries(mContext);
         mBatteryChartPreferenceController = createController();
         mBatteryChartPreferenceController.mPrefContext = mContext;
         mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
@@ -660,7 +664,7 @@
 
         // Verifies the items which are defined in the array list.
         assertThat(mBatteryChartPreferenceController
-                .isValidToShowEntry("com.google.android.gms.persistent"))
+                .isValidToShowEntry("com.android.gms.persistent"))
             .isFalse();
     }
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
index 85ac941..b1d8f0d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
@@ -17,6 +17,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Matchers.anyInt;
 import static org.mockito.Mockito.doReturn;
@@ -28,6 +29,7 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Drawable.ConstantState;
 import android.os.BatteryConsumer;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -41,6 +43,10 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.annotation.Resetter;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -48,6 +54,7 @@
 import java.util.Locale;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {BatteryDiffEntryTest.ShadowUserHandle.class})
 public final class BatteryDiffEntryTest {
 
     private Context mContext;
@@ -60,10 +67,12 @@
     @Mock private Drawable mockBadgedDrawable;
     @Mock private BatteryHistEntry mBatteryHistEntry;
     @Mock private PackageInfo mockPackageInfo;
+    @Mock private ConstantState mockConstantState;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        ShadowUserHandle.reset();
         mContext = spy(RuntimeEnvironment.application);
         doReturn(mContext).when(mContext).getApplicationContext();
         doReturn(mockUserManager).when(mContext).getSystemService(UserManager.class);
@@ -229,6 +238,7 @@
         final ContentValues values = getContentValuesWithType(
             ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
         final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
+        mockConstantState(mockDrawable);
 
         final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
 
@@ -239,20 +249,32 @@
     }
 
     @Test
-    public void testGetAppIcon_uidConsumerWithNullIcon_returnDefaultActivityIcon()
+    public void testGetAppIcon_uidConsumerForNonOwner_returnDefaultActivityIconWithBadge()
             throws Exception {
+        ShadowUserHandle.setUid(10);
         final BatteryDiffEntry entry = createBatteryDiffEntry(mockDrawable);
-        final int userId = UserHandle.getUserId(1001);
+        mockConstantState(mockDrawable);
+        mockConstantState(mockBadgedDrawable);
         doReturn(mockBadgedDrawable).when(mockUserManager)
-            .getBadgedIconForUser(mockDrawable, new UserHandle(userId));
+            .getBadgedIconForUser(eq(mockDrawable), any());
 
         entry.mAppIcon = null;
         assertThat(entry.getAppIcon()).isEqualTo(mockBadgedDrawable);
+    }
+
+    @Test
+    public void testGetAppIcon_uidConsumerWithNullIcon_returnDefaultActivityIcon()
+            throws Exception {
+        final BatteryDiffEntry entry = createBatteryDiffEntry(mockDrawable);
+        mockConstantState(mockDrawable);
+
+        entry.mAppIcon = null;
+        assertThat(entry.getAppIcon()).isEqualTo(mockDrawable);
         assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
         // Verifies the app label in the cache.
         final BatteryEntry.NameAndIcon nameAndIcon =
             BatteryDiffEntry.sResourceCache.get(entry.getKey());
-        assertThat(nameAndIcon.icon).isEqualTo(mockBadgedDrawable);
+        assertThat(nameAndIcon.icon).isEqualTo(mockDrawable);
     }
 
     @Test
@@ -272,19 +294,17 @@
     @Test
     public void testClearCache_switchLocale_clearCacheIconAndLabel() throws Exception {
         final int userId = UserHandle.getUserId(1001);
-        doReturn(mockBadgedDrawable).when(mockUserManager)
-            .getBadgedIconForUser(mockDrawable, new UserHandle(userId));
-        doReturn(mockDrawable2).when(mockUserManager)
-            .getBadgedIconForUser(mockDrawable2, new UserHandle(userId));
         Locale.setDefault(new Locale("en_US"));
         final BatteryDiffEntry entry1 = createBatteryDiffEntry(mockDrawable);
-        assertThat(entry1.getAppIcon()).isEqualTo(mockBadgedDrawable);
+        mockConstantState(mockDrawable);
+        assertThat(entry1.getAppIcon()).isEqualTo(mockDrawable);
         // Switch the locale into another one.
         Locale.setDefault(new Locale("zh_TW"));
 
         final BatteryDiffEntry entry2 = createBatteryDiffEntry(mockDrawable2);
 
         // We should get new drawable without caching.
+        mockConstantState(mockDrawable2);
         assertThat(entry2.getAppIcon()).isEqualTo(mockDrawable2);
         // Verifies the cache is updated into the new drawable.
         final BatteryEntry.NameAndIcon nameAndIcon =
@@ -440,4 +460,34 @@
             .getPackagesForUid(1001);
         return createBatteryDiffEntry(10, batteryHistEntry);
     }
+
+    private void mockConstantState(Drawable drawable) {
+        doReturn(mockConstantState).when(drawable).getConstantState();
+        doReturn(drawable).when(mockConstantState).newDrawable();
+    }
+
+    @Implements(UserHandle.class)
+    public static class ShadowUserHandle {
+        // Sets the default as thte OWNER role.
+        private static int sUid = 0;
+
+        public static void setUid(int uid) {
+            sUid = uid;
+        }
+
+        @Implementation
+        public static int myUserId() {
+            return sUid;
+        }
+
+        @Implementation
+        public static int getUserId(int userId) {
+            return sUid;
+        }
+
+        @Resetter
+        public static void reset() {
+            sUid = 0;
+        }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
index 89d66be..c32be18 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
@@ -16,9 +16,9 @@
 
 package com.android.settings.fuelgauge;
 
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.OPTIMIZED;
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.RESTRICTED;
-import static com.android.settings.fuelgauge.BatteryOptimizeUtils.AppUsageState.UNRESTRICTED;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_OPTIMIZED;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_RESTRICTED;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -26,6 +26,7 @@
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import android.app.AppOpsManager;
@@ -47,9 +48,9 @@
     private static final int UID = 12345;
     private static final String PACKAGE_NAME = "com.android.app";
 
-    @Mock BatteryUtils mockBatteryUtils;
-    @Mock AppOpsManager mockAppOpsManager;
-    @Mock PowerAllowlistBackend mockBackend;
+    @Mock BatteryUtils mMockBatteryUtils;
+    @Mock AppOpsManager mMockAppOpsManager;
+    @Mock PowerAllowlistBackend mMockBackend;
 
     private Context mContext;
     private BatteryOptimizeUtils mBatteryOptimizeUtils;
@@ -59,42 +60,48 @@
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
-        mBatteryOptimizeUtils.mAppOpsManager = mockAppOpsManager;
-        mBatteryOptimizeUtils.mBatteryUtils = mockBatteryUtils;
-        mBatteryOptimizeUtils.mPowerAllowListBackend = mockBackend;
+        mBatteryOptimizeUtils.mAppOpsManager = mMockAppOpsManager;
+        mBatteryOptimizeUtils.mBatteryUtils = mMockBatteryUtils;
+        mBatteryOptimizeUtils.mPowerAllowListBackend = mMockBackend;
+        // Sets the default mode as MODE_RESTRICTED.
+        mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_IGNORED;
+        mBatteryOptimizeUtils.mAllowListed = false;
     }
 
     @Test
-    public void testGetAppUsageState_returnRestricted() {
-        when(mockBackend.isAllowlisted(anyString())).thenReturn(false);
-        when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
+    public void testGetAppOptimizationMode_returnRestricted() {
+        when(mMockBackend.isAllowlisted(anyString())).thenReturn(false);
+        when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
                 .thenReturn(AppOpsManager.MODE_IGNORED);
 
-        assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(RESTRICTED);
+        assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+                .isEqualTo(MODE_RESTRICTED);
     }
 
     @Test
-    public void testGetAppUsageState_returnUnrestricted() {
-        when(mockBackend.isAllowlisted(anyString())).thenReturn(true);
-        when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
+    public void testGetAppOptimizationMode_returnUnrestricted() {
+        when(mMockBackend.isAllowlisted(anyString())).thenReturn(true);
+        when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
                 .thenReturn(AppOpsManager.MODE_ALLOWED);
 
-        assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(UNRESTRICTED);
+        assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+                .isEqualTo(MODE_UNRESTRICTED);
     }
 
     @Test
-    public void testGetAppUsageState_returnOptimized() {
-        when(mockBackend.isAllowlisted(anyString())).thenReturn(false);
-        when(mockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
+    public void testGetAppOptimizationMode_returnOptimized() {
+        when(mMockBackend.isAllowlisted(anyString())).thenReturn(false);
+        when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
                 .thenReturn(AppOpsManager.MODE_ALLOWED);
 
-        assertThat(mBatteryOptimizeUtils.getAppUsageState()).isEqualTo(OPTIMIZED);
+        assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+                .isEqualTo(MODE_OPTIMIZED);
     }
 
     @Test
     public void testIsSystemOrDefaultApp_isSystemOrDefaultApp_returnTrue() {
-        when(mockBackend.isAllowlisted(anyString())).thenReturn(true);
-        when(mockBackend.isDefaultActiveApp(anyString())).thenReturn(true);
+        when(mMockBackend.isAllowlisted(anyString())).thenReturn(true);
+        when(mMockBackend.isDefaultActiveApp(anyString())).thenReturn(true);
 
         assertThat(mBatteryOptimizeUtils.isSystemOrDefaultApp()).isTrue();
     }
@@ -118,29 +125,57 @@
     }
 
     @Test
-    public void testSetAppUsageState_Restricted_verifyAction() {
-        mBatteryOptimizeUtils.setAppUsageState(RESTRICTED);
+    public void testIsAllowlistedExpectIdle_isAllowlistedExceptIdle_returnTrue() {
+        when(mMockBackend.isAllowlistedExceptIdle(anyString())).thenReturn(true);
 
-        verify(mockBatteryUtils).setForceAppStandby(UID,
+        assertThat(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).isTrue();
+    }
+
+    @Test
+    public void testIsAllowlistedExpectIdle_notAllowlistedExpectIdle_returnFalse() {
+        assertThat(mBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).isFalse();
+    }
+
+    @Test
+    public void testSetAppOptimizationMode_Restricted_verifyAction() {
+        // Sets the current mode as MODE_UNRESTRICTED.
+        mBatteryOptimizeUtils.mAllowListed = false;
+        mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_ALLOWED;
+
+        mBatteryOptimizeUtils.setAppOptimizationMode(MODE_RESTRICTED);
+
+        verify(mMockBatteryUtils).setForceAppStandby(UID,
                 PACKAGE_NAME, AppOpsManager.MODE_IGNORED);
-        verify(mockBackend).removeApp(PACKAGE_NAME);
+        verify(mMockBackend).removeApp(PACKAGE_NAME);
     }
 
     @Test
-    public void  testSetAppUsageState_Unrestricted_verifyAction() {
-        mBatteryOptimizeUtils.setAppUsageState(UNRESTRICTED);
+    public void testSetAppOptimizationMode_Unrestricted_verifyAction() {
+        mBatteryOptimizeUtils.setAppOptimizationMode(MODE_UNRESTRICTED);
 
-        verify(mockBatteryUtils).setForceAppStandby(UID,
+        verify(mMockBatteryUtils).setForceAppStandby(UID,
                 PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
-        verify(mockBackend).addApp(PACKAGE_NAME);
+        verify(mMockBackend).addApp(PACKAGE_NAME);
     }
 
     @Test
-    public void  testSetAppUsageState_Optimized_verifyAction() {
-        mBatteryOptimizeUtils.setAppUsageState(OPTIMIZED);
+    public void testSetAppOptimizationMode_Optimized_verifyAction() {
+        mBatteryOptimizeUtils.setAppOptimizationMode(MODE_OPTIMIZED);
 
-        verify(mockBatteryUtils).setForceAppStandby(UID,
+        verify(mMockBatteryUtils).setForceAppStandby(UID,
                 PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
-        verify(mockBackend).removeApp(PACKAGE_NAME);
+        verify(mMockBackend).removeApp(PACKAGE_NAME);
+    }
+
+    @Test
+    public void testSetAppOptimizationMode_sameUnrestrictedMode_verifyNoAction() {
+        // Sets the current mode as MODE_UNRESTRICTED.
+        mBatteryOptimizeUtils.mAllowListed = true;
+        mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_ALLOWED;
+
+        mBatteryOptimizeUtils.setAppOptimizationMode(MODE_UNRESTRICTED);
+
+        verifyZeroInteractions(mMockBackend);
+        verifyZeroInteractions(mMockBatteryUtils);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java
index b04f053..ff0f25c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java
@@ -40,6 +40,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -67,7 +68,7 @@
     }
 
     @Test
-    public void testConvert_returnsExpectedContentValues() {
+    public void convert_returnsExpectedContentValues() {
         final int expectedType = 3;
         when(mockBatteryEntry.getUid()).thenReturn(1001);
         when(mockBatteryEntry.getLabel()).thenReturn("Settings");
@@ -124,7 +125,7 @@
     }
 
     @Test
-    public void testConvert_nullBatteryEntry_returnsExpectedContentValues() {
+    public void convert_nullBatteryEntry_returnsExpectedContentValues() {
         final ContentValues values =
             ConvertUtils.convert(
                 /*entry=*/ null,
@@ -151,7 +152,7 @@
     }
 
     @Test
-    public void testGetIndexedUsageMap_nullOrEmptyHistoryMap_returnEmptyCollection() {
+    public void getIndexedUsageMap_nullOrEmptyHistoryMap_returnEmptyCollection() {
         final int timeSlotSize = 2;
         final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L, 104L, 105L};
 
@@ -166,7 +167,7 @@
             .isEmpty();
     }
     @Test
-    public void testGetIndexedUsageMap_returnsExpectedResult() {
+    public void getIndexedUsageMap_returnsExpectedResult() {
         // Creates the fake testing data.
         final int timeSlotSize = 2;
         final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L, 104L, 105L};
@@ -278,7 +279,7 @@
     }
 
     @Test
-    public void testGetIndexedUsageMap_usageTimeExceed_returnsExpectedResult() {
+    public void getIndexedUsageMap_usageTimeExceed_returnsExpectedResult() {
         final int timeSlotSize = 1;
         final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L};
         final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
@@ -320,7 +321,7 @@
     }
 
     @Test
-    public void testGetIndexedUsageMap_hideBackgroundUsageTime_returnsExpectedResult() {
+    public void getIndexedUsageMap_hideBackgroundUsageTime_returnsExpectedResult() {
         final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L};
         final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
         final BatteryHistEntry fakeEntry = createBatteryHistEntry(
@@ -339,8 +340,8 @@
             "package3", "label3", 500, 5L, 3600000L, 7200000L);
         entryMap.put(entry.getKey(), entry);
         batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[2]), entryMap);
-        when(mPowerUsageFeatureProvider.getHideBackgroundUsageTimeList(mContext))
-            .thenReturn(Arrays.asList((CharSequence) "package3"));
+        when(mPowerUsageFeatureProvider.getHideBackgroundUsageTimeSet(mContext))
+            .thenReturn(new HashSet(Arrays.asList((CharSequence) "package3")));
 
         final Map<Integer, List<BatteryDiffEntry>> purgedResultMap =
             ConvertUtils.getIndexedUsageMap(
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
index 874618d..923855d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
@@ -76,8 +76,8 @@
     @Test
     public void testUpdateState_isOptimizedStates_prefChecked() {
         when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
-        when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
-                BatteryOptimizeUtils.AppUsageState.OPTIMIZED);
+        when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+                BatteryOptimizeUtils.MODE_OPTIMIZED);
 
         mController.updateState(mPreference);
 
@@ -94,12 +94,22 @@
     }
 
     @Test
+    public void testUpdateState_isAllowlistedExceptIdleApp_prefEnabled() {
+        when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isEnabled()).isTrue();
+        assertThat(mPreference.isChecked()).isTrue();
+    }
+
+    @Test
     public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
         mPreference.setKey(mController.KEY_OPTIMIZED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
 
-        verify(mockBatteryOptimizeUtils).setAppUsageState(
-                BatteryOptimizeUtils.AppUsageState.OPTIMIZED);
+        verify(mockBatteryOptimizeUtils).setAppOptimizationMode(
+                BatteryOptimizeUtils.MODE_OPTIMIZED);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
index 2e17404..7b4271f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
@@ -84,8 +84,8 @@
     @Test
     public void testUpdateState_isRestrictedStates_prefChecked() {
         when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
-        when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
-                BatteryOptimizeUtils.AppUsageState.RESTRICTED);
+        when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+                BatteryOptimizeUtils.MODE_RESTRICTED);
 
         mController.updateState(mPreference);
 
@@ -102,12 +102,22 @@
     }
 
     @Test
+    public void testUpdateState_isAllowlistedExceptIdleApp_prefDisabled() {
+        when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isChecked()).isFalse();
+        assertThat(mPreference.isEnabled()).isFalse();
+    }
+
+    @Test
     public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
         mPreference.setKey(mController.KEY_RESTRICTED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
 
-        verify(mockBatteryOptimizeUtils).setAppUsageState(
-                BatteryOptimizeUtils.AppUsageState.RESTRICTED);
+        verify(mockBatteryOptimizeUtils).setAppOptimizationMode(
+                BatteryOptimizeUtils.MODE_RESTRICTED);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
index 63cf760..5052784 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
@@ -84,8 +84,8 @@
     @Test
     public void testUpdateState_isUnrestrictedStates_prefChecked() {
         when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
-        when(mockBatteryOptimizeUtils.getAppUsageState()).thenReturn(
-                BatteryOptimizeUtils.AppUsageState.UNRESTRICTED);
+        when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+                BatteryOptimizeUtils.MODE_UNRESTRICTED);
 
         mController.updateState(mPreference);
 
@@ -102,12 +102,22 @@
     }
 
     @Test
+    public void testUpdateState_isAllowlistedExceptIdleApp_prefDisabled() {
+        when(mockBatteryOptimizeUtils.isAllowlistedExceptIdleApp()).thenReturn(true);
+
+        mController.updateState(mPreference);
+
+        assertThat(mPreference.isChecked()).isFalse();
+        assertThat(mPreference.isEnabled()).isFalse();
+    }
+
+    @Test
     public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
         mPreference.setKey(mController.KEY_UNRESTRICTED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
 
-        verify(mockBatteryOptimizeUtils).setAppUsageState(
-                BatteryOptimizeUtils.AppUsageState.UNRESTRICTED);
+        verify(mockBatteryOptimizeUtils).setAppOptimizationMode(
+                BatteryOptimizeUtils.MODE_UNRESTRICTED);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java
index 32c8627..52068c4 100644
--- a/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/RecentLocationAccessPreferenceControllerTest.java
@@ -18,12 +18,10 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
-import android.graphics.drawable.Drawable;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.TextView;
@@ -34,7 +32,7 @@
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.testutils.shadow.ShadowDeviceConfig;
-import com.android.settingslib.location.RecentLocationAccesses;
+import com.android.settingslib.applications.RecentAppOpsAccess;
 
 import org.junit.After;
 import org.junit.Before;
@@ -48,7 +46,6 @@
 import org.robolectric.annotation.Config;
 
 import java.util.ArrayList;
-import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
 @Config(shadows = {ShadowDeviceConfig.class})
@@ -61,7 +58,7 @@
     @Mock
     private DashboardFragment mDashboardFragment;
     @Mock
-    private RecentLocationAccesses mRecentLocationApps;
+    private RecentAppOpsAccess mRecentLocationApps;
 
     private Context mContext;
     private RecentLocationAccessPreferenceController mController;
@@ -110,17 +107,4 @@
                 mContext.getText(R.string.location_recent_location_access_view_details));
         assertThat(details.hasOnClickListeners()).isTrue();
     }
-
-    private List<RecentLocationAccesses.Access> createMockAccesses(int count) {
-        final List<RecentLocationAccesses.Access> accesses = new ArrayList<>();
-        for (int i = 0; i < count; i++) {
-            final Drawable icon = mock(Drawable.class);
-            // Add mock accesses
-            final RecentLocationAccesses.Access access = new RecentLocationAccesses.Access(
-                    "packageName", android.os.Process.myUserHandle(), icon,
-                    "appTitle" + i, "appSummary" + i, 1000 - i);
-            accesses.add(access);
-        }
-        return accesses;
-    }
 }
diff --git a/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java
new file mode 100644
index 0000000..66d18ec
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/SpatialAudioPreferenceControllerTest.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2021 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.settings.notification;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.Spatializer;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@Ignore("b/200896161")
+@RunWith(RobolectricTestRunner.class)
+public class SpatialAudioPreferenceControllerTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+    private Context mContext;
+    @Mock
+    private AudioManager mAudioManager;
+    @Mock
+    private Spatializer mSpatializer;
+
+    private SpatialAudioPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
+        when((Object) mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
+        when(mAudioManager.getSpatializer()).thenReturn(mSpatializer);
+        mController = new SpatialAudioPreferenceController(mContext);
+    }
+
+    @Test
+    public void getAvailabilityStatus_levelNone_shouldReturnUnsupported() {
+        when(mSpatializer.getImmersiveAudioLevel()).thenReturn(
+                Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE);
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_levelMultiChannel_shouldReturnAvailable() {
+        when(mSpatializer.getImmersiveAudioLevel()).thenReturn(
+                Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL);
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+    }
+
+    @Test
+    public void setChecked_withTrue_shouldEnableSpatializer() {
+        mController.setChecked(true);
+
+        verify(mSpatializer).setEnabled(true);
+    }
+
+    @Test
+    public void setChecked_withFalse_shouldDisableSpatializer() {
+        mController.setChecked(false);
+
+        verify(mSpatializer).setEnabled(false);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index de1af23..bc430e8 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -21,6 +21,7 @@
 
 import android.content.Context;
 
+import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider;
 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
 import com.android.settings.accounts.AccountFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProvider;
@@ -89,6 +90,7 @@
     public SecuritySettingsFeatureProvider securitySettingsFeatureProvider;
     public GameSettingsFeatureProvider gameSettingsFeatureProvider;
     public AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider;
+    public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
 
     /**
      * Call this in {@code @Before} method of the test class to use fake factory.
@@ -139,6 +141,7 @@
         securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class);
         gameSettingsFeatureProvider = mock(GameSettingsFeatureProvider.class);
         mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class);
+        mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class);
     }
 
     @Override
@@ -280,4 +283,9 @@
     public AccessibilitySearchFeatureProvider getAccessibilitySearchFeatureProvider() {
         return mAccessibilitySearchFeatureProvider;
     }
+
+    @Override
+    public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() {
+        return mAccessibilityMetricsFeatureProvider;
+    }
 }
diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
index ba7e0bd..0b6061c 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -19,6 +19,7 @@
 
 import android.content.Context;
 
+import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider;
 import com.android.settings.accessibility.AccessibilitySearchFeatureProvider;
 import com.android.settings.accounts.AccountFeatureProvider;
 import com.android.settings.applications.ApplicationFeatureProvider;
@@ -84,6 +85,7 @@
     public SecuritySettingsFeatureProvider securitySettingsFeatureProvider;
     public GameSettingsFeatureProvider gameSettingsFeatureProvider;
     public AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider;
+    public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
 
     /**
      * Call this in {@code @Before} method of the test class to use fake factory.
@@ -124,6 +126,8 @@
         extraAppInfoFeatureProvider = mock(ExtraAppInfoFeatureProvider.class);
         securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class);
         gameSettingsFeatureProvider = mock(GameSettingsFeatureProvider.class);
+        mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class);
+        mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class);
     }
 
     @Override
@@ -265,4 +269,9 @@
     public AccessibilitySearchFeatureProvider getAccessibilitySearchFeatureProvider() {
         return mAccessibilitySearchFeatureProvider;
     }
+
+    @Override
+    public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() {
+        return mAccessibilityMetricsFeatureProvider;
+    }
 }