[automerger skipped] Merge "Import translations. DO NOT MERGE ANYWHERE" into sc-qpr1-dev am: 87e5157b5a -s ours am: 5714ee98e2 -s ours

am skip reason: subject contains skip directive

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

Change-Id: Iee685c52023305cd1d7a3747533db5c03d4e396f
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 f06d38f..9015d8a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -108,8 +108,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_MULTI_PANE_SETTINGS_DEEP_LINK" />
+    <uses-permission android:name="android.permission.ALLOW_PLACE_IN_MULTI_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"
@@ -121,16 +125,18 @@
             android:directBootAware="true"
             android:appComponentFactory="androidx.core.app.CoreComponentFactory">
 
-        <uses-library android:name="org.apache.http.legacy" />
-        <!-- Settings -->
+        <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"
                   android:label="@string/settings_label_launcher"
                   android:theme="@style/Theme.Settings.Home"
                   android:taskAffinity="com.android.settings.root"
                   android:launchMode="singleTask"
                   android:exported="true"
-                  android:configChanges="keyboard|keyboardHidden">
+                  android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout">
             <intent-filter android:priority="1">
                 <action android:name="android.settings.SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -139,19 +145,34 @@
                        android:value="true" />
         </activity>
 
-        <activity android:name=".network.telephony.MobileNetworkActivity"
-                  android:label="@string/network_settings_title"
-                  android:exported="true"
+        <!-- Activity for launching deep link page in 2-pane. -->
+        <activity android:name=".homepage.DeepLinkHomepageActivity"
+                  android:label="@string/settings_label_launcher"
+                  android:theme="@style/Theme.Settings.Home.DeepLink"
+                  android:taskAffinity=""
                   android:launchMode="singleTask"
-                  android:configChanges="orientation|screenSize|keyboardHidden">
-            <intent-filter android:priority="1">
-                <!-- Displays the MobileNetworkActivity and opt-in dialog for capability discovery. -->
-                <action android:name="android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN" />
-                <action android:name="android.settings.NETWORK_OPERATOR_SETTINGS" />
-                <action android:name="android.settings.DATA_ROAMING_SETTINGS" />
-                <action android:name="android.settings.MMS_MESSAGE_SETTING" />
+                  android:exported="true"
+                  android:enabled="false"
+                  android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout"
+                  android:permission="android.permission.LAUNCH_MULTI_PANE_SETTINGS_DEEP_LINK">
+            <intent-filter>
+                <action android:name="android.settings.SETTINGS_EMBED_DEEP_LINK_ACTIVITY" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                       android:value="true" />
+        </activity>
+
+        <activity android:name=".homepage.SliceDeepLinkHomepageActivity"
+                  android:label="@string/settings_label_launcher"
+                  android:theme="@style/Theme.Settings.Home.DeepLink"
+                  android:taskAffinity=""
+                  android:launchMode="singleTask"
+                  android:exported="false"
+                  android:excludeFromRecents="true"
+                  android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout">
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                       android:value="true" />
         </activity>
 
         <!-- Alias for launcher activity only, as this belongs to each profile. -->
@@ -211,10 +232,32 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.network.NetworkDashboardFragment"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                android:value="@string/menu_key_network"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
 
+        <activity android:name=".network.telephony.MobileNetworkActivity"
+                  android:label="@string/network_settings_title"
+                  android:exported="true"
+                  android:launchMode="singleTask"
+                  android:configChanges="orientation|screenSize|keyboardHidden">
+            <!-- Note: Since the framework does not support the multiple requests of network scan
+            from the UI, this singleTask can protect that there is only one
+            Settings$NetworkSelectActivity which can request the network scan.
+            If removing the "singleTask" in the future, please also modify the
+            Settings$NetworkSelectActivity's structure. -->
+            <intent-filter android:priority="1">
+                <!-- Displays the MobileNetworkActivity and opt-in dialog for capability discovery. -->
+                <action android:name="android.telephony.ims.action.SHOW_CAPABILITY_DISCOVERY_OPT_IN" />
+                <action android:name="android.settings.NETWORK_OPERATOR_SETTINGS" />
+                <action android:name="android.settings.DATA_ROAMING_SETTINGS" />
+                <action android:name="android.settings.MMS_MESSAGE_SETTING" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
         <activity android:name=".Settings$MobileNetworkListActivity"
                   android:exported="true"
                   android:label="@string/network_settings_title">
@@ -225,6 +268,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.network.MobileNetworkListFragment"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -240,6 +285,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                android:value="@string/menu_key_connected_devices"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -265,6 +312,16 @@
             </intent-filter>
         </activity>
 
+        <receiver android:name=".search.SearchStateReceiver"
+                  android:exported="true"
+                  android:enabled="false"
+                  android:permission="android.permission.READ_SEARCH_INDEXABLES">
+            <intent-filter>
+                <action android:name="com.android.settings.SEARCH_START"/>
+                <action android:name="com.android.settings.SEARCH_EXIT"/>
+            </intent-filter>
+        </receiver>
+
         <activity
             android:name="Settings$WifiSettingsActivity"
             android:label="@string/wifi_settings"
@@ -272,13 +329,15 @@
             android:exported="true"
             android:configChanges="orientation|keyboardHidden|screenSize">
             <intent-filter android:priority="1">
-                <action android:name="android.settings.WIFI_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
+                <action android:name="android.settings.WIFI_SETTINGS"/>
+                <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.wifi.WifiSettings" />
+                       android:value="com.android.settings.network.NetworkProviderSettings"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                android:value="true" />
+                       android:value="true"/>
         </activity>
 
         <!-- Keep compatibility with old shortcuts. -->
@@ -289,7 +348,11 @@
             android:icon="@drawable/ic_homepage_network"
             android:exported="true">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.wifi.WifiSettings" />
+                       android:value="com.android.settings.network.NetworkProviderSettings"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                       android:value="true"/>
         </activity-alias>
 
         <activity
@@ -299,15 +362,27 @@
             android:exported="true"
             android:configChanges="orientation|keyboardHidden|screenSize">
             <intent-filter android:priority="1">
-                <action android:name="android.settings.NETWORK_PROVIDER_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
+                <action android:name="android.settings.NETWORK_PROVIDER_SETTINGS"/>
+                <category android:name="android.intent.category.DEFAULT"/>
             </intent-filter>
             <intent-filter android:priority="1">
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.SHORTCUT" />
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="com.android.settings.SHORTCUT"/>
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.network.NetworkProviderSettings" />
+                       android:value="com.android.settings.network.NetworkProviderSettings"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                       android:value="true"/>
+        </activity>
+
+        <activity
+            android:name="Settings$NetworkSelectActivity"
+            android:label="@string/choose_network_title"
+            android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|smallestScreenSize">
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.network.telephony.NetworkSelectSettings" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -327,6 +402,8 @@
             <meta-data
                 android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.wifi.details.WifiNetworkDetailsFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                android:value="@string/menu_key_network"/>
             <meta-data
                 android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
@@ -352,6 +429,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.display.AutoBrightnessSettings"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                android:value="@string/menu_key_display"/>
         </activity>
 
         <activity
@@ -371,6 +450,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.wifi.ConfigureWifiSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                android:value="@string/menu_key_network"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -387,6 +468,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.wifi.savedaccesspoints.SavedAccessPointsWifiSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                android:value="@string/menu_key_network"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -400,6 +483,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.wifi.WifiInfo" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <activity android:name=".wifi.WifiConfigInfo"
@@ -420,6 +505,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.wifi.WifiAPITest" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <activity android:name=".wifi.WifiStatusTest"
@@ -470,6 +557,8 @@
                 android:value="true" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.network.apn.ApnSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <!-- Keep compatibility with old shortcuts. -->
@@ -484,6 +573,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
         </activity-alias>
 
         <!-- Keep compatibility with old shortcuts. -->
@@ -494,6 +585,8 @@
                         android:clearTaskOnLaunch="true">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
         </activity-alias>
 
         <activity android:name="Settings$AssistGestureSettingsActivity"
@@ -506,6 +599,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.gestures.AssistGestureSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity android:name="Settings$FaceSettingsActivity"
@@ -518,6 +613,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.biometrics.face.FaceSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
         </activity>
 
         <activity android:name="Settings$FingerprintSettingsActivity"
@@ -530,6 +627,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.biometrics.fingerprint.FingerprintSettings$FingerprintSettingsFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
         </activity>
 
         <activity android:name="Settings$CombinedBiometricSettingsActivity"
@@ -537,6 +636,8 @@
                   android:exported="false">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.biometrics.combination.CombinedBiometricSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
         </activity>
 
         <activity android:name="Settings$CombinedBiometricProfileSettingsActivity"
@@ -544,6 +645,8 @@
                   android:exported="false">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.biometrics.combination.CombinedBiometricProfileSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
         </activity>
 
         <activity android:name=".bluetooth.DevicePickerActivity"
@@ -595,6 +698,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.TetherSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <activity
@@ -612,6 +717,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.wifi.tether.WifiTetherSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
 
@@ -623,6 +730,8 @@
                   android:targetActivity="Settings$TetherSettingsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.TetherSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity-alias>
 
         <activity android:name="Settings$WifiP2pSettingsActivity"
@@ -634,6 +743,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.wifi.p2p.WifiP2pSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <activity
@@ -652,6 +763,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.vpn2.VpnSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -666,6 +779,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.datausage.DataSaverSummary" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <activity
@@ -685,6 +800,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.datetime.DateTimeSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -705,6 +822,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.localepicker.LocaleListEditor" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -728,6 +847,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.language.LanguageAndInputSettings"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true"/>
         </activity>
@@ -741,6 +862,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.inputmethod.AvailableVirtualKeyboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity
@@ -753,6 +876,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.assist.ManageAssist" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity android:name="Settings$KeyboardLayoutPickerActivity"
@@ -761,6 +886,8 @@
             android:exported="true">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.inputmethod.KeyboardLayoutPickerFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity android:name="Settings$PhysicalKeyboardActivity"
@@ -773,6 +900,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.inputmethod.PhysicalKeyboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <!-- Keep compatibility with old shortcuts. -->
@@ -783,6 +912,8 @@
                 android:targetActivity="Settings$LanguageAndInputSettingsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.language.LanguageAndInputSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity-alias>
 
         <activity
@@ -796,6 +927,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.inputmethod.SpellCheckersSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity android:name=".inputmethod.InputMethodAndSubtypeEnablerActivity"
@@ -828,6 +961,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.inputmethod.UserDictionaryList" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity android:name=".inputmethod.UserDictionaryAddWordActivity"
@@ -863,6 +998,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.notification.zen.ZenModeSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -916,6 +1053,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.notification.zen.ZenModeAutomationSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -926,6 +1065,8 @@
                   android:exported="true">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.wallpaper.WallpaperTypeSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_wallpaper"/>
         </activity>
 
         <activity android:name=".wallpaper.WallpaperSuggestionActivity"
@@ -981,6 +1122,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.notification.zen.ZenModeScheduleRuleSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -994,6 +1137,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.notification.zen.ZenModeEventRuleSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1014,6 +1159,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.DisplaySettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_display"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1033,6 +1180,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.display.SmartAutoRotatePreferenceFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_display"/>
         </activity>
 
         <activity
@@ -1051,6 +1200,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.display.NightDisplaySettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_display"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1070,6 +1221,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.display.darkmode.DarkModeSettingsFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_display"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1093,6 +1246,8 @@
                 android:value="true" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.display.NightDisplaySettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_display"/>
         </activity>
 
         <activity android:name=".Settings$MyDeviceInfoActivity"
@@ -1110,6 +1265,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_about_device"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -1124,6 +1281,25 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.security.LockscreenDashboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_display"/>
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                       android:value="true" />
+        </activity>
+
+        <activity
+            android:name=".Settings$BlueToothPairingActivity"
+            android:label="@string/bluetooth_pairing_page_title"
+            android:permission="android.permission.BLUETOOTH_SCAN"
+            android:exported="true">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.BLUETOOTH_PAIRING_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                       android:value="com.android.settings.bluetooth.BluetoothPairingDetail" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -1150,6 +1326,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.deviceinfo.legal.ModuleLicensesDashboard" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_about_device"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -1170,6 +1348,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1181,6 +1361,8 @@
                         android:targetActivity="Settings$ManageApplicationsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity-alias>
 
         <activity
@@ -1193,6 +1375,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.managedomainurls.ManageDomainUrls" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity android:name="Settings$AppMemoryUsageActivity"
@@ -1205,6 +1389,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.ProcessStatsUi" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -1217,6 +1403,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1267,6 +1455,8 @@
                 android:targetActivity="Settings$ManageApplicationsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity-alias>
 
         <!-- Provide direct entry into manage apps showing storage usage for apps.
@@ -1277,6 +1467,8 @@
                 android:targetActivity="Settings$ManageApplicationsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity-alias>
 
         <!-- Still need a top-level activity for showing app details.  Aliasing
@@ -1323,6 +1515,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1344,6 +1538,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1358,6 +1554,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.notification.history.NotificationStation" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <activity
@@ -1402,6 +1600,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.location.LocationSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_location"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1417,6 +1617,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.location.LocationServices" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_location"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1434,6 +1636,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.location.WifiScanningFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_location"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -1456,6 +1660,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.security.SecuritySettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1483,6 +1689,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.TrustedCredentialsSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1499,6 +1707,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.backup.PrivacySettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_privacy"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1517,6 +1727,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.privacy.PrivacyDashboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_privacy"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -1562,6 +1774,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
         </activity>
 
         <!-- Keep compatibility with old shortcuts. -->
@@ -1571,6 +1785,8 @@
                 android:targetActivity="Settings$DeviceAdminSettingsActivity">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.specialaccess.deviceadmin.DeviceAdminSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
         </activity-alias>
 
         <activity android:name=".applications.specialaccess.deviceadmin.DeviceAdminAdd"
@@ -1605,6 +1821,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -1621,6 +1839,8 @@
             <meta-data
                 android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.UsageAccessDetails"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity android:name="Settings$IccLockSettingsActivity"
@@ -1633,6 +1853,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.IccLockSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
         </activity>
 
         <activity
@@ -1651,6 +1873,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.accessibility.AccessibilitySettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accessibility"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1666,6 +1890,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.accessibility.AccessibilityDetailsSettingsFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accessibility"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1702,6 +1928,11 @@
         </activity-alias>
 
         <activity
+            android:name=".accessibility.AccessibilityScreenSizeForSetupWizardActivity"
+            android:theme="@android:style/Theme.DeviceDefault.Settings"
+            android:exported="false"/>
+
+        <activity
             android:name="Settings$AccessibilityDaltonizerSettingsActivity"
             android:exported="true"
             android:label="@string/accessibility_display_daltonizer_preference_title">
@@ -1715,6 +1946,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accessibility"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1733,11 +1966,33 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.accessibility.ToggleReduceBrightColorsPreferenceFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accessibility"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
 
         <activity
+            android:name="Settings$AccessibilityInversionSettingsActivity"
+            android:exported="true"
+            android:label="@string/accessibility_display_inversion_preference_title">
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.COLOR_INVERSION_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.accessibility.ToggleColorInversionPreferenceFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                android:value="@string/menu_key_accessibility"/>
+            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+                android:value="true" />
+        </activity>
+
+        <activity
             android:name="Settings$CaptioningSettingsActivity"
             android:exported="true"
             android:label="@string/accessibility_captioning_title">
@@ -1747,16 +2002,13 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.accessibility.CaptionPropertiesFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accessibility"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </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">
@@ -1766,6 +2018,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.tts.TextToSpeechSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accessibility"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -1780,6 +2034,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.enterprise.EnterprisePrivacySettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_privacy"/>
         </activity>
 
         <!-- Lock screen settings -->
@@ -1856,8 +2112,13 @@
                   android:screenOrientation="portrait"/>
 
         <activity android:name=".biometrics.face.FaceEnrollIntroduction"
-            android:exported="false"
-            android:screenOrientation="portrait"/>
+            android:exported="true"
+            android:screenOrientation="portrait">
+            <intent-filter>
+                <action android:name="android.settings.FACE_ENROLL"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
 
         <activity android:name=".biometrics.face.FaceEnrollEducation"
             android:exported="false"
@@ -1872,8 +2133,7 @@
             android:screenOrientation="portrait"/>
 
         <activity android:name=".biometrics.BiometricHandoffActivity"
-                  android:exported="false"
-                  android:screenOrientation="portrait"/>
+                  android:exported="false"/>
 
         <!-- Must not be exported -->
         <activity android:name=".biometrics.BiometricEnrollActivity$InternalActivity"
@@ -2067,6 +2327,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.deviceinfo.StorageDashboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_storage"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -2085,6 +2347,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.deviceinfo.PublicVolumeSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_storage"/>
         </activity>
 
         <activity
@@ -2094,6 +2358,8 @@
             android:permission="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.deviceinfo.PrivateVolumeForget" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_storage"/>
         </activity>
 
         <!-- Exported for SystemUI to launch into -->
@@ -2150,6 +2416,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.network.apn.ApnEditor" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <activity
@@ -2176,6 +2444,8 @@
                        android:resource="@drawable/ic_settings_development" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.development.DevelopmentSettingsDashboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -2212,6 +2482,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.print.PrintSettingsFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
         </activity>
 
         <activity android:name="Settings$PrintJobSettingsActivity"
@@ -2224,6 +2496,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.print.PrintJobSettingsFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
         </activity>
 
         <activity android:name=".development.AppPicker"
@@ -2244,7 +2518,10 @@
                   android:label="@string/accessor_info_title" />
 
         <activity android:name="Settings$WebViewAppPickerActivity"
-                  android:label="@string/select_webview_provider_dialog_title" />
+                  android:label="@string/select_webview_provider_dialog_title">
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
+        </activity>
 
         <activity android:name="Settings$BugReportHandlerPickerActivity"
             android:label="@string/bug_report_handler_title"
@@ -2258,6 +2535,8 @@
                 android:value="true" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.bugreporthandler.BugReportHandlerPicker" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity android:name=".bluetooth.BluetoothPairingDialog"
@@ -2302,6 +2581,8 @@
                   android:exported="true">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.connecteddevice.usb.UsbDetailsFragment"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
         </activity>
 
         <activity android:name=".RemoteBugreportActivity"
@@ -2376,6 +2657,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.nfc.AndroidBeam" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -2391,6 +2674,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.wfd.WifiDisplaySettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
         </activity>
 
         <activity android:name="Settings$TestingSettingsActivity" android:label="@string/testing">
@@ -2453,6 +2738,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.fuelgauge.PowerUsageSummary" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_battery"/>
         </activity>
 
         <activity
@@ -2466,6 +2753,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.fuelgauge.batterysaver.BatterySaverSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_battery"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -2491,6 +2780,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.accounts.AccountSyncSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accounts"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -2505,6 +2796,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.accounts.ManagedProfileSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accounts"/>
         </activity>
 
         <activity
@@ -2525,6 +2818,8 @@
             android:configChanges="orientation|keyboardHidden|screenSize">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.accounts.ChooseAccountFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accounts"/>
         </activity>
 
         <activity android:name=".CryptKeeper"
@@ -2583,6 +2878,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.security.CryptKeeperSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_security"/>
         </activity>
 
         <activity
@@ -2600,6 +2897,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.datausage.DataUsageSummary" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
         <activity
             android:name="Settings$MobileDataUsageListActivity"
@@ -2611,6 +2910,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.datausage.DataUsageList" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <activity
@@ -2624,6 +2925,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.dream.DreamSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_display"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -2649,6 +2952,8 @@
                        android:resource="@drawable/ic_settings_multiuser" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.users.UserSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -2668,6 +2973,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.nfc.PaymentSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -2700,6 +3007,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.notification.NotificationAccessSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <activity
@@ -2712,6 +3021,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.specialaccess.notificationaccess.NotificationAccessDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <activity
@@ -2724,6 +3035,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.notification.ConfigureNotificationSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <activity
@@ -2736,6 +3049,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.specialaccess.vrlistener.VrListenerSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -2752,6 +3067,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -2765,6 +3082,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -2777,6 +3096,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.specialaccess.interactacrossprofiles.InteractAcrossProfilesSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity android:name="Settings$AppInteractAcrossProfilesSettingsActivity"
@@ -2789,6 +3110,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.specialaccess.interactacrossprofiles.InteractAcrossProfilesDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -2803,6 +3126,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.specialaccess.zenaccess.ZenAccessDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <activity
@@ -2815,6 +3140,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.notification.zen.ZenAccessSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <activity
@@ -2831,6 +3158,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.notification.ConfigureNotificationSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -2845,6 +3174,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.notification.app.ConversationListSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -2859,6 +3190,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.notification.app.AppBubbleNotificationSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -2872,6 +3205,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.specialaccess.premiumsms.PremiumSmsAccess" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -2891,6 +3226,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.notification.SoundSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_sound"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                 android:value="true" />
         </activity>
@@ -2906,6 +3243,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <!-- Show application-level notification settings (app passed in as extras) -->
@@ -2917,6 +3256,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.notification.app.AppNotificationSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <!-- Show channel-level notification settings (channel passed in as extras) -->
@@ -2932,6 +3273,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.notification.app.ChannelNotificationSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_notifications"/>
         </activity>
 
         <!-- Show Manual (from settings item) -->
@@ -3080,6 +3423,7 @@
         <activity
             android:name="Settings$WifiCallingSettingsActivity"
             android:exported="true"
+            android:configChanges="orientation|keyboard|keyboardHidden|screenSize|smallestScreenSize|screenLayout"
             android:label="@string/wifi_calling_settings_title">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -3089,6 +3433,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.wifi.calling.WifiCallingSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3103,6 +3449,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.wifi.calling.WifiCallingSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
             <meta-data android:name="com.android.settings.dismiss"
                 android:value="10,14,30" />
             <meta-data android:name="com.android.settings.title"
@@ -3147,6 +3495,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3163,6 +3513,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.appinfo.DrawOverlayDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -3175,6 +3527,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3190,6 +3544,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.appinfo.WriteSettingsDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -3202,6 +3558,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3217,6 +3575,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.appinfo.AlarmsAndRemindersDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -3229,6 +3589,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3243,6 +3605,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.appinfo.ExternalSourcesDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity android:name=".enterprise.ActionDisabledByAdminDialog"
@@ -3267,6 +3631,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_storage"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3282,6 +3648,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.appinfo.ManageExternalStorageDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -3294,6 +3662,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3309,6 +3679,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.appinfo.MediaManagementAppsDetails" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <!-- Keep compatibility with old WebView-picker implementation -->
@@ -3325,6 +3697,8 @@
                 android:value="true" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.webview.WebViewAppPicker" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity-alias>
 
         <provider
@@ -3363,6 +3737,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.deletionhelper.AutomaticStorageManagerSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_storage"/>
         </activity>
 
         <!-- Show app-level advanced power usage details (app passed in as extras) -->
@@ -3386,6 +3762,8 @@
             android:exported="true">
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.applications.AppDashboardFragment"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_apps"/>
         </activity>
 
         <activity
@@ -3403,6 +3781,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.accounts.AccountDashboardFragment"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_accounts"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3418,6 +3798,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.system.SystemDashboardFragment"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity android:name=".support.SupportDashboardActivity"
@@ -3587,6 +3969,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3601,6 +3985,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.bluetooth.BluetoothDeviceDetailsFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_connected_devices"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3741,6 +4127,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.wifi.calling.WifiCallingDisclaimerFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_network"/>
         </activity>
 
         <activity android:name="Settings$BatterySaverScheduleSettingsActivity"
@@ -3752,6 +4140,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                 android:value="com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_battery"/>
         </activity>
 
         <activity android:name="Settings$PowerMenuSettingsActivity"
@@ -3763,6 +4153,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.gestures.PowerMenuSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity
@@ -3780,6 +4172,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.gestures.GestureNavigationSettingsFragment" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -3793,6 +4187,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.sound.MediaControlsSettings" />
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_sound"/>
         </activity>
 
         <receiver
@@ -3801,7 +4197,7 @@
             android:permission="android.permission.BLUETOOTH_CONNECT">
             <intent-filter>
                 <action android:name="com.android.settings.action.LAUNCH_BLUETOOTH_PAIRING"/>
-            </intent-filter>/>
+            </intent-filter>
         </receiver>
 
         <receiver
@@ -3867,6 +4263,8 @@
             </intent-filter>
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
                        android:value="com.android.settings.MainClear"/>
+            <meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
+                       android:value="@string/menu_key_system"/>
         </activity>
 
         <activity android:name="Settings$FactoryResetConfirmActivity"
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index a9cd4c6..2907416 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
@@ -229,6 +213,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;setup_wizard_wifi_color_dark&quot;>#89ffffff&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="27"
+            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;notification_importance_button_unselected&quot;>#5F6368&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -245,6 +245,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;setup_wizard_wifi_color_light&quot;>#89000000&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="28"
+            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;notification_history_background&quot;>#202124&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -261,8 +277,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;setup_lock_pattern_view_success_color_dark&quot;>#ff84ffff&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;lock_pattern_background&quot;>#00000000&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="30"
@@ -277,24 +293,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;setup_lock_pattern_view_error_color_dark&quot;>#fff44336&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="32"
-            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;setup_wizard_wifi_color_dark&quot;>#89ffffff&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;fingerprint_title_color&quot;>#ffffffff&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="33"
@@ -309,8 +309,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;setup_wizard_wifi_color_light&quot;>#89000000&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;fingerprint_message_color&quot;>#de000000&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="34"
@@ -325,8 +325,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;lock_pattern_background&quot;>#00000000&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;running_processes_system_ram&quot;>#ff384248&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="36"
@@ -341,8 +341,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;lock_pattern_view_regular_color&quot;>#ff37474f&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;running_processes_free_ram&quot;>#ffced7db&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="37"
@@ -357,11 +357,11 @@
         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;lock_pattern_view_regular_color_dark&quot;>#ffffff&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;confirm_device_credential_transparent_black&quot;>#60000000&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="39"
+            line="41"
             column="5"/>
     </issue>
 
@@ -373,8 +373,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;fingerprint_title_color&quot;>#ffffffff&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;icon_accent&quot;>#ffabffec&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="44"
@@ -405,24 +405,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;fingerprint_message_color&quot;>#de000000&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="45"
-            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;running_processes_system_ram&quot;>#ff384248&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;material_blue_500&quot;>#4285F4&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="47"
@@ -453,8 +437,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;running_processes_free_ram&quot;>#ffced7db&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;material_blue_700&quot;>#3367D6&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="48"
@@ -485,6 +469,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;material_grey_100&quot;>#f5f5f5&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="49"
+            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;biometric_enroll_intro_color_outline&quot;>#5e5e5e&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -501,91 +501,27 @@
         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
-            file="res/values/colors.xml"
-            line="52"
-            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;icon_accent&quot;>#ffabffec&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="55"
-            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;material_blue_500&quot;>#4285F4&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="58"
-            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;material_blue_700&quot;>#3367D6&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="59"
-            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;material_grey_100&quot;>#f5f5f5&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="60"
-            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;material_grey_200&quot;>#ffffff&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="61"
+            line="50"
+            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-night/colors.xml"
+            line="51"
             column="5"/>
     </issue>
 
@@ -601,7 +537,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="63"
+            line="52"
             column="5"/>
     </issue>
 
@@ -617,7 +553,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="64"
+            line="53"
             column="5"/>
     </issue>
 
@@ -633,7 +569,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="65"
+            line="54"
             column="5"/>
     </issue>
 
@@ -649,7 +585,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="66"
+            line="55"
             column="5"/>
     </issue>
 
@@ -665,7 +601,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="67"
+            line="56"
             column="5"/>
     </issue>
 
@@ -681,7 +617,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="68"
+            line="57"
             column="5"/>
     </issue>
 
@@ -697,7 +633,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="69"
+            line="58"
             column="5"/>
     </issue>
 
@@ -713,7 +649,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="70"
+            line="59"
             column="5"/>
     </issue>
 
@@ -729,7 +665,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="71"
+            line="60"
             column="5"/>
     </issue>
 
@@ -745,7 +681,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="72"
+            line="61"
             column="5"/>
     </issue>
 
@@ -761,7 +697,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="74"
+            line="63"
             column="5"/>
     </issue>
 
@@ -777,7 +713,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="77"
+            line="66"
             column="5"/>
     </issue>
 
@@ -793,7 +729,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="80"
+            line="69"
             column="5"/>
     </issue>
 
@@ -809,7 +745,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="83"
+            line="72"
             column="5"/>
     </issue>
 
@@ -825,7 +761,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="86"
+            line="75"
             column="5"/>
     </issue>
 
@@ -841,7 +777,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="87"
+            line="76"
             column="5"/>
     </issue>
 
@@ -857,7 +793,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="88"
+            line="77"
             column="5"/>
     </issue>
 
@@ -873,7 +809,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="89"
+            line="78"
             column="5"/>
     </issue>
 
@@ -889,7 +825,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="90"
+            line="79"
             column="5"/>
     </issue>
 
@@ -905,7 +841,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="91"
+            line="80"
             column="5"/>
     </issue>
 
@@ -921,7 +857,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="92"
+            line="81"
             column="5"/>
     </issue>
 
@@ -937,7 +873,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="93"
+            line="82"
             column="5"/>
     </issue>
 
@@ -953,7 +889,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="94"
+            line="83"
             column="5"/>
     </issue>
 
@@ -969,7 +905,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="95"
+            line="84"
             column="5"/>
     </issue>
 
@@ -985,7 +921,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="96"
+            line="85"
             column="5"/>
     </issue>
 
@@ -1001,7 +937,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="97"
+            line="86"
             column="5"/>
     </issue>
 
@@ -1017,7 +953,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="98"
+            line="87"
             column="5"/>
     </issue>
 
@@ -1033,7 +969,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="99"
+            line="88"
             column="5"/>
     </issue>
 
@@ -1049,7 +985,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="100"
+            line="89"
             column="5"/>
     </issue>
 
@@ -1065,7 +1001,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="101"
+            line="90"
             column="5"/>
     </issue>
 
@@ -1081,7 +1017,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="102"
+            line="91"
             column="5"/>
     </issue>
 
@@ -1097,7 +1033,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="103"
+            line="92"
             column="5"/>
     </issue>
 
@@ -1113,7 +1049,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="104"
+            line="93"
             column="5"/>
     </issue>
 
@@ -1129,7 +1065,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="111"
+            line="100"
             column="5"/>
     </issue>
 
@@ -1145,7 +1081,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="114"
+            line="103"
             column="5"/>
     </issue>
 
@@ -1161,7 +1097,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="115"
+            line="104"
             column="5"/>
     </issue>
 
@@ -1177,7 +1113,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="116"
+            line="105"
             column="5"/>
     </issue>
 
@@ -1193,7 +1129,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="117"
+            line="106"
             column="5"/>
     </issue>
 
@@ -1209,7 +1145,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="118"
+            line="107"
             column="5"/>
     </issue>
 
@@ -1225,7 +1161,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="119"
+            line="108"
             column="5"/>
     </issue>
 
@@ -1241,7 +1177,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="122"
+            line="111"
             column="5"/>
     </issue>
 
@@ -1257,7 +1193,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="123"
+            line="112"
             column="5"/>
     </issue>
 
@@ -1273,7 +1209,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="124"
+            line="113"
             column="5"/>
     </issue>
 
@@ -1289,7 +1225,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="125"
+            line="114"
             column="5"/>
     </issue>
 
@@ -1305,7 +1241,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="126"
+            line="115"
             column="5"/>
     </issue>
 
@@ -1321,7 +1257,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="129"
+            line="118"
             column="5"/>
     </issue>
 
@@ -1337,7 +1273,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="130"
+            line="119"
             column="5"/>
     </issue>
 
@@ -1353,7 +1289,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="131"
+            line="120"
             column="5"/>
     </issue>
 
@@ -1369,7 +1305,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="134"
+            line="123"
             column="5"/>
     </issue>
 
@@ -1385,7 +1321,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="135"
+            line="124"
             column="5"/>
     </issue>
 
@@ -1401,7 +1337,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="136"
+            line="125"
             column="5"/>
     </issue>
 
@@ -1417,7 +1353,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="137"
+            line="126"
             column="5"/>
     </issue>
 
@@ -1433,7 +1369,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="138"
+            line="127"
             column="5"/>
     </issue>
 
@@ -1449,7 +1385,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="139"
+            line="128"
             column="5"/>
     </issue>
 
@@ -1465,7 +1401,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="146"
+            line="135"
             column="5"/>
     </issue>
 
@@ -1481,7 +1417,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="147"
+            line="136"
             column="5"/>
     </issue>
 
@@ -1497,7 +1433,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="148"
+            line="137"
             column="5"/>
     </issue>
 
@@ -1513,7 +1449,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="154"
+            line="143"
             column="5"/>
     </issue>
 
@@ -1529,7 +1465,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="156"
+            line="145"
             column="5"/>
     </issue>
 
@@ -1545,7 +1481,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="160"
+            line="149"
             column="5"/>
     </issue>
 
@@ -1561,7 +1497,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="161"
+            line="150"
             column="5"/>
     </issue>
 
@@ -1577,7 +1513,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="162"
+            line="151"
             column="5"/>
     </issue>
 
@@ -1593,7 +1529,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="163"
+            line="152"
             column="5"/>
     </issue>
 
@@ -1609,7 +1545,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="164"
+            line="153"
             column="5"/>
     </issue>
 
@@ -1625,7 +1561,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="165"
+            line="154"
             column="5"/>
     </issue>
 
@@ -1641,7 +1577,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="166"
+            line="155"
             column="5"/>
     </issue>
 
@@ -1657,7 +1593,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="167"
+            line="156"
             column="5"/>
     </issue>
 
@@ -1673,7 +1609,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="170"
+            line="159"
             column="5"/>
     </issue>
 
@@ -1689,7 +1625,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="171"
+            line="160"
             column="5"/>
     </issue>
 
@@ -1705,7 +1641,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="172"
+            line="161"
             column="5"/>
     </issue>
 
@@ -1721,7 +1657,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="173"
+            line="162"
             column="5"/>
     </issue>
 
@@ -1737,7 +1673,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="174"
+            line="163"
             column="5"/>
     </issue>
 
@@ -1753,7 +1689,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="175"
+            line="164"
             column="5"/>
     </issue>
 
@@ -1769,7 +1705,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="176"
+            line="165"
             column="5"/>
     </issue>
 
@@ -1785,7 +1721,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="177"
+            line="166"
             column="5"/>
     </issue>
 
@@ -1801,7 +1737,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="180"
+            line="169"
             column="5"/>
     </issue>
 
@@ -1817,7 +1753,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="181"
+            line="170"
             column="5"/>
     </issue>
 
@@ -1833,7 +1769,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="182"
+            line="171"
             column="5"/>
     </issue>
 
@@ -1849,7 +1785,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="183"
+            line="172"
             column="5"/>
     </issue>
 
@@ -1865,7 +1801,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="184"
+            line="173"
             column="5"/>
     </issue>
 
@@ -1881,6 +1817,118 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
+            line="174"
+            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_color_cyan&quot;>#ff006D74&lt;/color> &lt;!-- Material Custom Cyan -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="177"
+            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_color_blue800&quot;>#ff185ABC&lt;/color> &lt;!-- Material Blue 800 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="178"
+            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_color_green800&quot;>#ff137333&lt;/color> &lt;!-- Material Green 800 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="179"
+            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_color_purple800&quot;>#ff7627bb&lt;/color> &lt;!-- Material Purple 800 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="180"
+            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_color_pink800&quot;>#ffb80672&lt;/color> &lt;!-- Material Pink 800 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="181"
+            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_color_orange&quot;>#ff995400&lt;/color> &lt;!-- Material Custom Orange -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="182"
+            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_cyan&quot;>#ff4DD0E1&lt;/color> &lt;!-- Material Cyan 300 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
             line="185"
             column="5"/>
     </issue>
@@ -1893,10 +1941,42 @@
         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 -->"
+        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="186"
+            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="187"
+            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="188"
             column="5"/>
     </issue>
@@ -1909,7 +1989,7 @@
         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 -->"
+        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"
@@ -1925,7 +2005,7 @@
         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 -->"
+        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"
@@ -1941,59 +2021,11 @@
         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="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="191"
-            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;>#fff48fb1&lt;/color> &lt;!-- Material Pink 200 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="192"
-            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_red&quot;>#ffef9a9a&lt;/color> &lt;!-- Material Red 200 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="193"
-            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="196"
             column="5"/>
     </issue>
 
@@ -2009,7 +2041,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="200"
+            line="197"
             column="5"/>
     </issue>
 
@@ -2025,7 +2057,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="201"
+            line="198"
             column="5"/>
     </issue>
 
@@ -2041,7 +2073,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="202"
+            line="199"
             column="5"/>
     </issue>
 
@@ -2057,7 +2089,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="204"
+            line="201"
             column="5"/>
     </issue>
 
@@ -2073,6 +2105,22 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
+            line="203"
+            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="206"
             column="5"/>
     </issue>
@@ -2453,6 +2501,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 +3845,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 +4617,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rAU/strings.xml"
-            line="3041"
+            line="3092"
             column="64"/>
     </issue>
 
@@ -4041,7 +4633,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rCA/strings.xml"
-            line="3041"
+            line="3092"
             column="64"/>
     </issue>
 
@@ -4057,7 +4649,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rGB/strings.xml"
-            line="3041"
+            line="3092"
             column="64"/>
     </issue>
 
@@ -4073,7 +4665,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rIN/strings.xml"
-            line="3041"
+            line="3092"
             column="64"/>
     </issue>
 
@@ -4089,7 +4681,7 @@
         errorLine2="                                                                                                                                                                         ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rXC/strings.xml"
-            line="3041"
+            line="3092"
             column="170"/>
     </issue>
 
@@ -4105,7 +4697,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/strings.xml"
-            line="7016"
+            line="7103"
             column="36"/>
     </issue>
 
@@ -4133,59 +4725,11 @@
         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 name=&quot;*android:regularColor&quot;>@color/lock_pattern_view_regular_color&lt;/item>"
-        errorLine2="                                           ^">
-        <location
-            file="res/values/styles.xml"
-            line="430"
-            column="44"/>
-    </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 name=&quot;*android:regularColor&quot;>@color/lock_pattern_view_regular_color_dark&lt;/item>"
-        errorLine2="                                           ^">
-        <location
-            file="res/values/styles.xml"
-            line="436"
-            column="44"/>
-    </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 name=&quot;*android:successColor&quot;>@color/lock_pattern_view_regular_color_dark&lt;/item>"
-        errorLine2="                                           ^">
-        <location
-            file="res/values/styles.xml"
-            line="437"
-            column="44"/>
-    </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 name=&quot;android:colorError&quot;>@color/settings_dialog_colorError&lt;/item>"
         errorLine2="                                        ^">
         <location
             file="res/values-night/themes.xml"
-            line="35"
+            line="37"
             column="41"/>
     </issue>
 
@@ -4201,7 +4745,7 @@
         errorLine2="                                        ^">
         <location
             file="res/values-night/themes.xml"
-            line="35"
+            line="37"
             column="41"/>
     </issue>
 
@@ -4217,7 +4761,7 @@
         errorLine2="                                       ^">
         <location
             file="res/values/themes.xml"
-            line="111"
+            line="114"
             column="40"/>
     </issue>
 
@@ -4233,7 +4777,7 @@
         errorLine2="                                       ^">
         <location
             file="res/values/themes.xml"
-            line="111"
+            line="114"
             column="40"/>
     </issue>
 
@@ -4249,7 +4793,7 @@
         errorLine2="                                        ^">
         <location
             file="res/values/themes.xml"
-            line="132"
+            line="135"
             column="41"/>
     </issue>
 
@@ -4265,7 +4809,7 @@
         errorLine2="                                        ^">
         <location
             file="res/values/themes.xml"
-            line="132"
+            line="135"
             column="41"/>
     </issue>
 
@@ -4281,7 +4825,7 @@
         errorLine2="                                            ^">
         <location
             file="res/values/themes.xml"
-            line="182"
+            line="185"
             column="45"/>
     </issue>
 
@@ -4297,7 +4841,7 @@
         errorLine2="                                                ^">
         <location
             file="res/values/themes.xml"
-            line="183"
+            line="186"
             column="49"/>
     </issue>
 
@@ -4313,7 +4857,7 @@
         errorLine2="                                            ^">
         <location
             file="res/values/themes.xml"
-            line="191"
+            line="194"
             column="45"/>
     </issue>
 
@@ -4329,7 +4873,7 @@
         errorLine2="                                                ^">
         <location
             file="res/values/themes.xml"
-            line="192"
+            line="195"
             column="49"/>
     </issue>
 
@@ -4493,259 +5037,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..ca58b36
--- /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/homepage_highlighted_item_background.xml b/res/drawable/homepage_highlighted_item_background.xml
new file mode 100644
index 0000000..b7b24e9
--- /dev/null
+++ b/res/drawable/homepage_highlighted_item_background.xml
@@ -0,0 +1,26 @@
+<?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.
+  -->
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+       android:insetLeft="@dimen/homepage_menu_entry_padding_horizontal"
+       android:insetRight="@dimen/homepage_menu_entry_padding_horizontal">
+    <shape android:shape="rectangle">
+        <solid
+            android:color="?android:attr/textColorPrimary" />
+        <corners
+            android:radius="@dimen/homepage_menu_entry_corner_radius" />
+    </shape>
+</inset>
\ No newline at end of file
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/drawable/volume_dialog_button_background_outline.xml b/res/drawable/volume_dialog_button_background_outline.xml
new file mode 100644
index 0000000..78f3fcf
--- /dev/null
+++ b/res/drawable/volume_dialog_button_background_outline.xml
@@ -0,0 +1,31 @@
+<?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.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+       android:shape="rectangle">
+    <stroke
+        android:color="?androidprv:attr/colorAccentPrimaryVariant"
+        android:width="1dp"/>
+    <corners android:radius="24dp"/>
+    <padding
+        android:left="16dp"
+        android:right="16dp"
+        android:top="8dp"
+        android:bottom="8dp" />
+    <solid android:color="@android:color/transparent" />
+</shape>
\ No newline at end of file
diff --git a/res/drawable/volume_dialog_button_background_solid.xml b/res/drawable/volume_dialog_button_background_solid.xml
new file mode 100644
index 0000000..1fa8f20
--- /dev/null
+++ b/res/drawable/volume_dialog_button_background_solid.xml
@@ -0,0 +1,31 @@
+<?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.
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+       android:shape="rectangle">
+    <stroke
+        android:color="@android:color/transparent"
+        android:width="1dp"/>
+    <corners android:radius="20dp"/>
+    <padding
+        android:left="16dp"
+        android:right="16dp"
+        android:top="8dp"
+        android:bottom="8dp" />
+    <solid android:color="?androidprv:attr/colorAccentPrimary" />
+</shape>
\ No newline at end of file
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_launch_activity_preference.xml b/res/layout/accessibility_launch_activity_preference.xml
new file mode 100644
index 0000000..772bb84
--- /dev/null
+++ b/res/layout/accessibility_launch_activity_preference.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.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:minHeight="@dimen/settingslib_min_switch_bar_height"
+    android:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    android:layout_margin="@dimen/settingslib_switchbar_margin"
+    android:paddingStart="@dimen/settingslib_switchbar_padding_left"
+    android:paddingEnd="@dimen/settingslib_switchbar_padding_right"
+    android:background="@drawable/settingslib_switch_bar_bg_on">
+
+    <TextView
+        android:id="@android:id/title"
+        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_marginEnd="@dimen/settingslib_switch_title_margin"
+        android:layout_marginVertical="@dimen/settingslib_switch_title_margin"
+        android:layout_gravity="center_vertical"
+        android:ellipsize="end"
+        android:textAppearance="?android:attr/textAppearanceListItem"
+        style="@style/MainSwitchText.Settingslib" />
+</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/accessibility_screen_size_setup_wizard.xml b/res/layout/accessibility_screen_size_setup_wizard.xml
new file mode 100644
index 0000000..e4bc55b
--- /dev/null
+++ b/res/layout/accessibility_screen_size_setup_wizard.xml
@@ -0,0 +1,31 @@
+<?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.
+-->
+<com.google.android.setupdesign.GlifLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/setup_wizard_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:icon="@drawable/ic_accessibility_visibility"
+    app:sucHeaderText="@string/title_font_size"
+    app:sudDescriptionText="@string/short_summary_font_size">
+
+    <FrameLayout
+        android:id="@+id/content_frame"
+        android:layout_marginTop="@dimen/preview_size_top_margin"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+</com.google.android.setupdesign.GlifLayout>
\ No newline at end of file
diff --git a/res/layout/biometric_handoff.xml b/res/layout/biometric_handoff.xml
index 4861568..7da4917 100644
--- a/res/layout/biometric_handoff.xml
+++ b/res/layout/biometric_handoff.xml
@@ -17,8 +17,8 @@
 
 <com.google.android.setupdesign.GlifLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    style="?attr/face_layout_theme"
     android:id="@+id/setup_wizard_layout"
     android:layout_width="match_parent"
-    android:layout_height="match_parent">
-</com.google.android.setupdesign.GlifLayout>
\ No newline at end of file
+    android:layout_height="match_parent"
+    android:icon="@drawable/ic_lock">
+</com.google.android.setupdesign.GlifLayout>
diff --git a/res/layout/bubble_preference.xml b/res/layout/bubble_preference.xml
index 08f25b4..eb9a8f1 100644
--- a/res/layout/bubble_preference.xml
+++ b/res/layout/bubble_preference.xml
@@ -55,7 +55,7 @@
             android:layout_height="wrap_content"
             android:layout_centerVertical="true"
             android:ellipsize="end"
-            android:maxLines="2"
+            android:maxLines="3"
             android:clickable="false"
             android:focusable="false"
             android:layout_toEndOf="@id/bubble_all_icon"
@@ -87,7 +87,7 @@
             android:layout_height="wrap_content"
             android:layout_centerVertical="true"
             android:ellipsize="end"
-            android:maxLines="2"
+            android:maxLines="3"
             android:clickable="false"
             android:focusable="false"
             android:layout_toEndOf="@id/bubble_selected_icon"
@@ -119,7 +119,7 @@
             android:layout_height="wrap_content"
             android:layout_centerVertical="true"
             android:ellipsize="end"
-            android:maxLines="2"
+            android:maxLines="3"
             android:clickable="false"
             android:focusable="false"
             android:layout_toEndOf="@id/bubble_none_icon"
diff --git a/res/layout/choose_lock_pattern_common.xml b/res/layout/choose_lock_pattern_common.xml
index 9ac8fe2..2dd8cd5 100644
--- a/res/layout/choose_lock_pattern_common.xml
+++ b/res/layout/choose_lock_pattern_common.xml
@@ -51,6 +51,7 @@
             style="@style/LockPatternContainerStyle"
             android:layout_width="wrap_content"
             android:layout_height="0dp"
+            android:minHeight="@dimen/choose_lockscreen_min_height"
             android:layout_weight="1">
 
             <com.android.internal.widget.LockPatternView
diff --git a/res/layout/confirm_lock_pattern_base.xml b/res/layout/confirm_lock_pattern_base.xml
index f79fc72..15c6121 100644
--- a/res/layout/confirm_lock_pattern_base.xml
+++ b/res/layout/confirm_lock_pattern_base.xml
@@ -67,6 +67,7 @@
                 style="@style/LockPatternContainerStyle"
                 android:layout_width="wrap_content"
                 android:layout_height="0dp"
+                android:minHeight="@dimen/choose_lockscreen_min_height"
                 android:layout_weight="1">
 
                 <com.android.internal.widget.LockPatternView
diff --git a/res/layout/confirm_lock_pattern_normal_base.xml b/res/layout/confirm_lock_pattern_normal_base.xml
index 62a1160..7fd6172 100644
--- a/res/layout/confirm_lock_pattern_normal_base.xml
+++ b/res/layout/confirm_lock_pattern_normal_base.xml
@@ -39,6 +39,7 @@
                 style="@style/LockPatternContainerStyle"
                 android:layout_width="wrap_content"
                 android:layout_height="0dp"
+                android:minHeight="@dimen/choose_lockscreen_min_height"
                 android:layout_weight="1">
 
                 <com.android.internal.widget.LockPatternView
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/dream_start_button.xml b/res/layout/dream_start_button.xml
new file mode 100644
index 0000000..17ba78d
--- /dev/null
+++ b/res/layout/dream_start_button.xml
@@ -0,0 +1,36 @@
+<?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.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:gravity="bottom"
+    android:paddingStart="72dp"
+    android:paddingEnd="72dp"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <Button
+        android:id="@+id/dream_start_now_button"
+        style="@style/ActionPrimaryButton"
+        android:layout_width="0dp"
+        android:layout_weight="1"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:text="@string/screensaver_settings_dream_start"/>
+
+</LinearLayout>
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/font_size_preview.xml b/res/layout/font_size_preview.xml
index 2b1773b..f916ac4 100644
--- a/res/layout/font_size_preview.xml
+++ b/res/layout/font_size_preview.xml
@@ -26,6 +26,7 @@
         android:layout_height="wrap_content">
 
         <LinearLayout
+            android:id="@+id/font_size_preview_text_group"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:paddingTop="16dp"
diff --git a/res/layout/homepage_preference.xml b/res/layout/homepage_preference.xml
new file mode 100644
index 0000000..62f6457
--- /dev/null
+++ b/res/layout/homepage_preference.xml
@@ -0,0 +1,81 @@
+<?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.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:paddingStart="@dimen/homepage_menu_entry_padding_horizontal"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/selectableItemBackground"
+    android:clipToPadding="false"
+    android:baselineAligned="false">
+
+    <LinearLayout
+        android:id="@+id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:minWidth="56dp"
+        android:gravity="center"
+        android:orientation="horizontal"
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"
+        android:paddingTop="4dp"
+        android:paddingBottom="4dp">
+
+        <androidx.preference.internal.PreferenceImageView
+            android:id="@android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:maxWidth="40dp"
+            app:maxHeight="40dp"/>
+
+    </LinearLayout>
+
+    <RelativeLayout
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="16dp"
+        android:paddingBottom="16dp"
+        android:paddingEnd="16dp">
+
+        <TextView
+            android:id="@android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:ellipsize="marquee"/>
+
+        <TextView
+            android:id="@android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:layout_gravity="start"
+            android:textAlignment="viewStart"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="4"
+            style="@style/PreferenceSummaryTextStyle"/>
+    </RelativeLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/manage_applications_apps.xml b/res/layout/manage_applications_apps.xml
index f8f4a76..a9cd72a 100644
--- a/res/layout/manage_applications_apps.xml
+++ b/res/layout/manage_applications_apps.xml
@@ -32,7 +32,10 @@
         settings:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
         settings:fastScrollVerticalThumbDrawable="@drawable/thumb_drawable"
         settings:fastScrollVerticalTrackDrawable="@drawable/line_drawable"
-        settings:layout_constraintTop_toBottomOf="@id/pinned_header"/>
+        settings:layout_constrainedHeight="true"
+        settings:layout_constraintVertical_bias="0.0"
+        settings:layout_constraintTop_toBottomOf="@id/pinned_header"
+        settings:layout_constraintBottom_toBottomOf="parent"/>
 
     <TextView
         android:id="@android:id/empty"
@@ -55,7 +58,10 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="?android:colorBackground"
-        settings:layout_constraintTop_toTopOf="parent"/>
+        settings:layout_constraintVertical_chainStyle="packed"
+        settings:layout_constraintVertical_bias="0.0"
+        settings:layout_constraintTop_toTopOf="parent"
+        settings:layout_constraintBottom_toTopOf="@id/apps_list"/>
 
 </androidx.constraintlayout.widget.ConstraintLayout>
 
diff --git a/res/layout/panel_layout.xml b/res/layout/panel_layout.xml
index 9e15f15..2b9daeb 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
@@ -85,7 +86,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/settings_panel_title_margin"
-            android:layout_marginBottom="@dimen/settings_panel_title_margin"
+            android:layout_marginBottom="@dimen/settings_panel_title_margin_bottom"
             android:gravity="center"
             android:textColor="?android:attr/textColorPrimary"
             android:textSize="24sp"
@@ -101,32 +102,24 @@
             android:visibility="gone"
             style="@style/TrimmedHorizontalProgressBar"/>
 
-        <include
-            android:id="@+id/header_divider"
-            layout="@layout/horizontal_divider"/>
-
         <!-- Note: There is a landscape version of panel_slice_list which supports scrolling. -->
         <include layout="@layout/panel_slice_list"/>
 
-        <include
-            android:id="@+id/footer_divider"
-            layout="@layout/horizontal_divider"
-            android:visibility="gone"/>
-
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
-            android:paddingTop="8dp"
-            android:paddingBottom="8dp">
+            android:layout_marginTop="16dp"
+            android:layout_marginHorizontal="24dp"
+            android:layout_marginBottom="18dp">
 
             <Button
                 android:id="@+id/see_more"
-                style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"
+                style="@style/PanelOptionRoundedOutlinedButton"
                 android:layout_width="wrap_content"
-                android:layout_height="48dp"
-                android:layout_marginStart="12dp"
-                android:text="@string/see_more"/>
+                android:layout_height="36dp"
+                android:minWidth="0dp"
+                android:text="@string/settings_button"/>
 
             <Space
                 android:layout_weight="1"
@@ -135,10 +128,10 @@
 
             <Button
                 android:id="@+id/done"
-                style="@android:style/Widget.DeviceDefault.Button.Borderless.Colored"
+                style="@style/PanelOptionRoundedSolidButton"
                 android:layout_width="wrap_content"
-                android:layout_height="48dp"
-                android:layout_marginEnd="12dp"
+                android:layout_height="36dp"
+                android:minWidth="0dp"
                 android:text="@string/done"/>
         </LinearLayout>
     </LinearLayout>
diff --git a/res/layout/panel_slice_row.xml b/res/layout/panel_slice_row.xml
index 69a36f60..b31e913 100644
--- a/res/layout/panel_slice_row.xml
+++ b/res/layout/panel_slice_row.xml
@@ -25,6 +25,6 @@
         style="@style/Widget.SliceView.Panel"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:paddingStart="8dp"
-        android:paddingEnd="8dp"/>
+        android:paddingVertical="@dimen/panel_slice_vertical_padding"
+        android:paddingHorizontal="@dimen/panel_slice_Horizontal_padding"/>
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/panel_slice_slider_row.xml b/res/layout/panel_slice_slider_row.xml
index a7659d3..f42ef90 100644
--- a/res/layout/panel_slice_slider_row.xml
+++ b/res/layout/panel_slice_slider_row.xml
@@ -26,6 +26,6 @@
         style="@style/Widget.SliceView.Panel.Slider"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:paddingStart="0dp"
-        android:paddingEnd="0dp"/>
+        android:paddingVertical="@dimen/panel_slice_vertical_padding"
+        android:paddingHorizontal="@dimen/panel_slice_Horizontal_padding"/>
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/preference_balance_slider.xml b/res/layout/preference_balance_slider.xml
index b84afbd..7f1e809 100644
--- a/res/layout/preference_balance_slider.xml
+++ b/res/layout/preference_balance_slider.xml
@@ -64,7 +64,7 @@
                 android:id="@*android:id/seekbar"
                 android:minHeight="?android:attr/listPreferredItemHeightSmall"
                 android:paddingStart="0dp"
-                android:paddingEnd="12dp"
+                android:paddingEnd="0dp"
                 android:layout_gravity="center_vertical"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"/>
diff --git a/res/layout/preference_expand_divider.xml b/res/layout/preference_expand_divider.xml
index 164419a..ce3d2e7 100644
--- a/res/layout/preference_expand_divider.xml
+++ b/res/layout/preference_expand_divider.xml
@@ -26,9 +26,7 @@
     android:paddingRight="?android:attr/listPreferredItemPaddingRight"
     android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
     android:background="?android:attr/selectableItemBackground"
-    android:orientation="horizontal"
-    android:clipToPadding="false"
-    android:baselineAligned="false">
+    android:orientation="horizontal">
 
     <TextView
         android:id="@+id/expand_title"
diff --git a/res/layout/preference_widget_seekbar_settings.xml b/res/layout/preference_widget_seekbar_settings.xml
index 29b4106..c4e1506 100644
--- a/res/layout/preference_widget_seekbar_settings.xml
+++ b/res/layout/preference_widget_seekbar_settings.xml
@@ -61,7 +61,7 @@
             android:id="@*android:id/seekbar"
             android:layout_gravity="center_vertical"
             android:layout_width="match_parent"
-            android:paddingStart="0dp"
+            android:paddingStart="12dp"
             android:paddingEnd="12dp"
             android:layout_height="48dp"/>
     </LinearLayout>
diff --git a/res/layout/search_bar_two_pane_version.xml b/res/layout/search_bar_two_pane_version.xml
new file mode 100644
index 0000000..a869853
--- /dev/null
+++ b/res/layout/search_bar_two_pane_version.xml
@@ -0,0 +1,41 @@
+<?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.
+-->
+
+<com.google.android.material.card.MaterialCardView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/SearchBarStyle"
+    android:layout_width="0dp"
+    android:layout_height="wrap_content"
+    android:layout_weight="1"
+    android:layout_margin="@dimen/search_bar_margin">
+    <Toolbar
+        android:id="@+id/search_action_bar_two_pane"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/search_bar_height"
+        android:paddingStart="4dp"
+        android:background="@drawable/search_bar_selected_background"
+        android:contentInsetStartWithNavigation="@dimen/search_bar_content_inset"
+        android:navigationIcon="@drawable/ic_homepage_search">
+        <TextView
+            style="@style/TextAppearance.SearchBar"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingStart="-4dp"
+            android:layout_gravity="start"
+            android:text="@string/search_menu"/>
+    </Toolbar>
+</com.google.android.material.card.MaterialCardView>
\ No newline at end of file
diff --git a/res/layout/settings_homepage_app_bar_regular_phone_layout.xml b/res/layout/settings_homepage_app_bar_regular_phone_layout.xml
new file mode 100644
index 0000000..110376b
--- /dev/null
+++ b/res/layout/settings_homepage_app_bar_regular_phone_layout.xml
@@ -0,0 +1,47 @@
+<?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.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/account_avatar"
+        android:layout_width="@dimen/avatar_length"
+        android:layout_height="@dimen/avatar_length"
+        android:layout_marginTop="@dimen/avatar_margin_top"
+        android:layout_marginEnd="@dimen/avatar_margin_end"
+        android:layout_gravity="end"
+        android:visibility="invisible"
+        android:accessibilityTraversalAfter="@id/homepage_title"
+        android:contentDescription="@string/search_bar_account_avatar_content_description"/>
+
+    <TextView
+        android:id="@+id/homepage_title"
+        android:text="@string/settings_label"
+        style="@style/HomepageTitleText"/>
+
+    <FrameLayout
+        android:id="@+id/suggestion_content"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+
+    <include layout="@layout/search_bar"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/settings_homepage_app_bar_two_pane_layout.xml b/res/layout/settings_homepage_app_bar_two_pane_layout.xml
new file mode 100644
index 0000000..3777f61
--- /dev/null
+++ b/res/layout/settings_homepage_app_bar_two_pane_layout.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.
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <FrameLayout
+        android:id="@+id/two_pane_suggestion_content"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"/>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="16dp"
+        android:orientation="horizontal">
+
+        <include layout="@layout/search_bar_two_pane_version"/>
+
+        <ImageView
+            android:id="@+id/account_avatar_two_pane_version"
+            android:layout_width="@dimen/avatar_length"
+            android:layout_height="@dimen/avatar_length"
+            android:layout_gravity="center"
+            android:layout_marginEnd="16dp"
+            android:contentDescription="@string/search_bar_account_avatar_content_description"/>
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/settings_homepage_container.xml b/res/layout/settings_homepage_container.xml
index 4fd62fd..4f0d804 100644
--- a/res/layout/settings_homepage_container.xml
+++ b/res/layout/settings_homepage_container.xml
@@ -46,8 +46,7 @@
                 android:id="@+id/main_content"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:animateLayoutChanges="true"
-                android:background="?android:attr/windowBackground"/>
+                android:animateLayoutChanges="true"/>
 
         </LinearLayout>
     </androidx.core.widget.NestedScrollView>
@@ -65,29 +64,14 @@
             android:orientation="vertical"
             app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed">
 
-            <ImageView
-                android:id="@+id/account_avatar"
-                android:layout_width="@dimen/avatar_length"
-                android:layout_height="@dimen/avatar_length"
-                android:layout_marginTop="@dimen/avatar_margin_top"
-                android:layout_marginEnd="@dimen/avatar_margin_end"
-                android:layout_gravity="end"
-                android:visibility="invisible"
-                android:accessibilityTraversalAfter="@id/homepage_title"
-                android:contentDescription="@string/search_bar_account_avatar_content_description"/>
+            <include
+                android:id="@+id/homepage_app_bar_regular_phone_view"
+                layout="@layout/settings_homepage_app_bar_regular_phone_layout"/>
 
-            <TextView
-                android:id="@+id/homepage_title"
-                android:text="@string/settings_label"
-                style="@style/HomepageTitleText"/>
-
-            <FrameLayout
-                android:id="@+id/suggestion_content"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"/>
-
-            <include layout="@layout/search_bar"/>
-
+            <include
+                android:id="@+id/homepage_app_bar_two_pane_view"
+                layout="@layout/settings_homepage_app_bar_two_pane_layout"
+                android:visibility="gone"/>
         </LinearLayout>
     </com.google.android.material.appbar.AppBarLayout>
 </androidx.coordinatorlayout.widget.CoordinatorLayout>
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/sfps_enroll_find_sensor_layout.xml b/res/layout/sfps_enroll_find_sensor_layout.xml
new file mode 100644
index 0000000..fe74e58
--- /dev/null
+++ b/res/layout/sfps_enroll_find_sensor_layout.xml
@@ -0,0 +1,56 @@
+<?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.
+-->
+
+<com.google.android.setupdesign.GlifLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/setup_wizard_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    style="?attr/fingerprint_layout_theme">
+
+    <LinearLayout
+        style="@style/SudContentFrame"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center_vertical"
+        android:orientation="vertical"
+        android:clipToPadding="false"
+        android:clipChildren="false">
+
+        <com.airbnb.lottie.LottieAnimationView
+            android:id="@+id/illustration_lottie"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:scaleType="centerInside"
+            app:lottie_imageAssetsFolder="images"
+            app:lottie_autoPlay="true"
+            app:lottie_loop="true"
+            app:lottie_rawRes="@raw/fingerprint_edu_lottie"/>
+
+        <com.airbnb.lottie.LottieAnimationView
+            android:id="@+id/illustration_lottie_portrait"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:scaleType="centerInside"
+            android:visibility="gone"
+            app:lottie_imageAssetsFolder="images"
+            app:lottie_autoPlay="true"
+            app:lottie_loop="true"
+            app:lottie_rawRes="@raw/fingerprint_edu_lottie_portrait"/>
+
+    </LinearLayout>
+</com.google.android.setupdesign.GlifLayout>
diff --git a/res/layout/suw_font_size_fragment.xml b/res/layout/suw_font_size_fragment.xml
new file mode 100644
index 0000000..898b9eb
--- /dev/null
+++ b/res/layout/suw_font_size_fragment.xml
@@ -0,0 +1,80 @@
+<?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.
+-->
+<androidx.core.widget.NestedScrollView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fillViewport="true">
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <include layout="@layout/suw_preview_seek_bar_view_pager"/>
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+            android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+            <com.android.settings.widget.DotsPageIndicator
+                android:id="@+id/page_indicator"
+                style="@style/PreviewPagerPageIndicator"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:padding="3dp"/>
+
+            <TextView
+                android:id="@+id/current_label"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:padding="6dp"
+                android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.TextView"
+                android:elevation="2dp"/>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical"
+                android:paddingTop="8dp">
+
+                <ImageView
+                    android:id="@+id/smaller"
+                    android:src="@drawable/ic_font_size_16dp"
+                    android:contentDescription="@string/font_size_make_smaller_desc"
+                    style="@style/screen_size_imageview_style"/>
+
+                <com.android.settings.widget.LabeledSeekBar
+                    android:id="@+id/seek_bar"
+                    android:layout_width="0dp"
+                    android:layout_height="48dp"
+                    android:layout_weight="1"
+                    style="@android:style/Widget.Material.SeekBar.Discrete"/>
+
+                <ImageView
+                    android:id="@+id/larger"
+                    android:src="@drawable/ic_font_size_24dp"
+                    android:contentDescription="@string/font_size_make_larger_desc"
+                    style="@style/screen_size_imageview_style"/>
+            </LinearLayout>
+        </LinearLayout>
+    </LinearLayout>
+</androidx.core.widget.NestedScrollView>
diff --git a/res/layout/suw_preview_seek_bar_view_pager.xml b/res/layout/suw_preview_seek_bar_view_pager.xml
new file mode 100644
index 0000000..71ec5f0
--- /dev/null
+++ b/res/layout/suw_preview_seek_bar_view_pager.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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="0dp"
+    android:layout_weight="1"
+    android:orientation="vertical"
+    android:paddingStart="@dimen/preview_pager_padding"
+    android:paddingEnd="@dimen/preview_pager_padding"
+    android:background="@drawable/preview_seek_bar_outline" >
+
+    <androidx.viewpager.widget.ViewPager
+        android:id="@+id/preview_pager"
+        android:layout_width="match_parent"
+        android:layout_height="200dp"
+        android:layout_weight="1"
+        android:background="?android:attr/colorBackground"
+        android:contentDescription="@string/preview_pager_content_description" />
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="36dp"
+        android:paddingStart="32dp"
+        android:gravity="start|center"
+        android:text="@string/screen_zoom_preview_title"
+        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title"
+        android:importantForAccessibility="no" />
+</LinearLayout>
+
diff --git a/res/layout/suw_screen_zoom_fragment.xml b/res/layout/suw_screen_zoom_fragment.xml
new file mode 100644
index 0000000..369ff14
--- /dev/null
+++ b/res/layout/suw_screen_zoom_fragment.xml
@@ -0,0 +1,79 @@
+<?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.
+-->
+<androidx.core.widget.NestedScrollView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:fillViewport="true">
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <include layout="@layout/suw_preview_seek_bar_view_pager"/>
+
+        <LinearLayout
+            android:orientation="vertical"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+            android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
+            <com.android.settings.widget.DotsPageIndicator
+                android:id="@+id/page_indicator"
+                style="@style/PreviewPagerPageIndicator"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:padding="3dp"/>
+
+            <TextView
+                android:id="@+id/current_label"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:padding="6dp"
+                android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.TextView"
+                android:elevation="2dp"/>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:gravity="center_vertical">
+
+                <ImageView
+                    android:id="@+id/smaller"
+                    android:src="@drawable/ic_remove_24dp"
+                    android:contentDescription="@string/screen_zoom_make_smaller_desc"
+                    style="@style/screen_size_imageview_style"/>
+
+                <com.android.settings.widget.LabeledSeekBar
+                    android:id="@+id/seek_bar"
+                    android:layout_width="0dp"
+                    android:layout_height="48dp"
+                    android:layout_weight="1"
+                    style="@android:style/Widget.Material.SeekBar.Discrete"/>
+
+                <ImageView
+                    android:id="@+id/larger"
+                    android:src="@drawable/ic_add_24dp"
+                    android:contentDescription="@string/screen_zoom_make_larger_desc"
+                    style="@style/screen_size_imageview_style"/>
+            </LinearLayout>
+        </LinearLayout>
+    </LinearLayout>
+</androidx.core.widget.NestedScrollView>
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/fingerprint_edu_lottie.json b/res/raw/fingerprint_edu_lottie.json
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/res/raw/fingerprint_edu_lottie.json
diff --git a/res/raw/fingerprint_edu_lottie_portrait.json b/res/raw/fingerprint_edu_lottie_portrait.json
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/res/raw/fingerprint_edu_lottie_portrait.json
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/lottie_power_menu.json b/res/raw/lottie_power_menu.json
new file mode 100644
index 0000000..9348a6b
--- /dev/null
+++ b/res/raw/lottie_power_menu.json
@@ -0,0 +1 @@
+{"v":"5.7.6","fr":60,"ip":0,"op":241,"w":412,"h":300,"nm":"Digital Assistant V01","ddd":0,"assets":[{"id":"image_0","w":803,"h":479,"u":"","p":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyMAAAHfCAYAAABDHAeOAAAACXBIWXMAAAABAAAAAQBPJcTWAAAAJHpUWHRDcmVhdG9yAAAImXNMyU9KVXBMK0ktUnBNS0tNLikGAEF6Bs5qehXFAAAgAElEQVR4nOy9y5LltrWu+wPkzMwqVUmWK7TWscIRq2KHWlLTjdPcegk/j6zn8UvoPICbdkuxolaEQj7eOrItqS6Zc5IYp4HbwIWcnJlZqsys/4uoSk4CBAZAkBwDGAAAQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCFnEvGsBCCH3EqP+yrsUpOKuyUPeD9juPKwDQsjJDO9aAELIveR978h438tP7jdsv4SQOwNfSITcXVaeT3ZAPmy+NsBXvMnkjnPX22nxCr3DchLyfkNjhJC7C40RQgi5NjRGCLkP2HctACGEEELIW4Qdr4TcYWiMEELIr87Xd0w5umvykPeDX63dcVSEkDsMP0CE3F3opkUeGHd9jgF5WNBNi5D7AI0RQn5V5N0/c0uf5K/ZO34jvgLw9bsWgtw/bqHhPIS291XHSH2nb6SUOY0YQt4ydNMi5H3lLhsfX71rAa7BfVcG7zz3sVFs4RYaDtseIeQeQ2OEkHvNDQyKXk/kXYHK1T3i1zIS7lOj2Fgnd8a+ujOCEELeQ+5uzygh945bcMHS5kExcrFBWbiOq8Zf/8x3ALk//PA3g08+vztG9F2T5yHwxR/fUn2ql6PuiLn2G9DwvhNyS3BkhJCHwn3qOCbkOtw1xf/XkueHv737ToM/LxwTQsgNoTFCCDnOXVCGyO3D+3o/eNtGz5Z28MeFY0IIuSH8EBFyMie6YxWuVyc8c4ULVefr/+f+6cQP3/Tz+nLhx/8G8P9sFa7i+7+8P++Sf/23wcf/62710BNyF/j0D7fwXHzTPcQnX14j7YUhnE2uYGGo+U/XmVtHFy5CToEjI4TcV267d/K6hsh95F//fX3jiYYIIbfL/37XAhBC3iXvT28mISdxjcnof9ow4fzYaMcXejTjy+W8Fkci/tA//a8FN4wvlrPwwZ+vRwhc/fhtkf63AD7bdOXdYPrlOzM+/f1bNjI+g6+ZlqK+1irvFipWJ3Hf7tO74NQ6eut1eo0Mbqd9L7ffyPmzz7p5/BV/25jH58BfVdyPt7qn/SUfLo7OfKMEWhplUSMp3dETNTGPIyaE3BocGSGE3Dq3ooyt6z23yts3RIC1An22+KO66rOlgM6FCxJolZKGyHFOraO3Xqe9DI48K7fTvm/rgVzr4NhqtBBCHhI0Rgghd5MHoClPv3x349HnRfujqZ/jyuJn1d+3wa9oQ74zbuO+3irv5Fm5bqYPyeC4wxvHEnKP4INE3nfUM7Cx8/BPG56bvy7E6blhFS5Xys3qU+1aVfUmVm5Rkc+UgjD98qIvw/P+j+mnd6dgfQfg9w8ys7vHuyq+e/UPYz/4z/fQTeX38LVO1hg/iqM3L/LJF72YwPj0edGOvtUmcOEqpgyf77XL1wa3rs/DB6GYA3/MjSvwpy0fk+J1+x4+F4RkODJCyKncymbF93m2+O2rsr+qcnxHDJHT1dPbEfwmqbhX/1Aa1Gkp3WlD5K3aCqcn/tZNl1/NNjqhjfzXkfDn5c/3YQSOkPcFGiOEnMqtbC54n5ePeXuaTKnsPmx6atp6zb773vXSoPjuV7pfywrtd4s/1iKelEU3ibd9J966vXwsg1so4HenJvQ/R8JflD9/Fc+0vy0sj04IuVX4oJH3keOuWfXppf1BtDuWXhzrb+r8ohtWiKNcrgo3q2cvjP8CP8f007j4rLpXQw77NJ+fX9qjz7d73YnzH/248vqfK+k9C39/VMe3wW2nd/d4Bl/K07jFermeANeTY2NeOdqG9EPkZ/gRP76ttnKjOrrx5W8t0e1JrN2Hfgrm8W/7L9f/s56TfeyOjqANPy/HsR/MKSy7fgF48SIfPp38+W8B/N/KratYyeuNP1+4cX2TD4sVuar9TAoXri0rcNFli7zfcGSEkDvN83ctQEVfIXFv/m3Wwm87v9uJfSJN4rejXm5N5dnKrw0X3FyAG2VyWl4/nNKefox/FuLeRqO44a3uXd6KdWImi9H7Ac864dtzfEAdAs/V8QNYJIOQhwCNEULuCre2Qs/vwr8l/vMGaffVKvvoNzfozbu9PuMf8aMyjLbzbIscTfBbVNA6SZ9SS89OvaCLSuBZ8ed43lvCVyLerD1VXKsebn0co0lf5/AMAJ496964Xnter+N+6I9Hwk/nxyap230ibvKeWuHF20mWEHJ96KZF3idCe1/Qc9Y2LdSbFf5R+WMtuWP961E+/iKvhPXZjzn+9Mwf61Ws3EfZ5Uq7WdXuVPJEu0xlFcC9yfHksVZiPs7XXv2Uzv8m/Pt3+lXiLn7e+I74aFs0Qt5D3NUvxp4/faDuNz+dFNtefijqpaPwJ346/6hbT+a1qPP/LNNUxqt5meNpl6/hiXLt+l5dq926/jWl4+TK9WyvrlMrcn2qPiSfVx8V7bX1xcIHZ9uKWw+0zRBSwpERQm6Lf/33rRr3/zgx/nV7JRudgNw73NUv7Fi6w9SGyHt/v/jSIYQoaIwQclt8/L9u3oulvKuOOilU1sfbdiwhd5eH2+v+MOH9ui1+e/olax6shJB3wvvdO0PeB9ZXzlpyzao3LdSbFX7/dH11LADPX7xIhv70cV4JS698NX/oXaq0C5Y8MTnc/JzS+OiqdNNyF8qFS4XJPl+PDz9EPv/SAMATAN/vjXmCFjk3134fyOH6174ffADgVXNWDq+N2T1+2Ippv+jkLXCr7ekD4NUrf/vWyTf31LzNTrlevfR/7NkHKo2XOe5ldrMyZ9mY+xnAb86Va9ZlPv5JndduXvaRSuvl/0nHu//42KU4P3n3rey69QIvnqrVuf5f5b4VV96KfPqLWqFLrbp1bZetrw3wJ7ceh5D7C0dGCPm1+DW2ifhlPfglnqBniNwLFrQiOby+JUPog+VMegIc19IUPW38g5OVt7fFK9xmPXYSv2P8aiKd1EZunuattqdNhsimZN4qHx6Pcks8v72kTt44d2lJYEIeBjRGCPm1OLqT2Sc3z+Np+LtolLxcCrj7LGg1t6eAvVrOpCfAq5uqahvVtI3ZnCB5N4u7Yhi13L5GfyzFW1Og34Ymfs00T7/sdur9bdhj955b2TiXkIcDXSvIQ+SIa5YK16tk6V0Lv6ieDb1S1qd5pazPfvw8HV+O31l8B+D3pTvW9x/+zsT5H7P9/1IHQHTD+ujqt3mFLfMyhcuFctl6ORQdB9qlSrtIyVn/PM6gzl+m40d4lNPcGQO8AfS5Kce9vAQuLrCRpYiXbdh8ZTCcn6YId5Kpg1ai3B6Lmdws93T1JYCLjWmtRsuB66mdWnu3W8u3VGvb09na9pYSLG/UNjE3Jbwt+MRoN7xurRLWMeOF5FfLm3T+zZv4Dnrj4wC41K5br3NcjE4wXRqMF1K4dwGw8ii5MJkr5Y51po7dnF2wlMvXLx8+zde+/lH8PJR/Ypg/cgCw+48phX//0yyxT6lYeev589KF6nv14dGrbv1Vf5DUklt6k8RFl638Cu+HE3J/4cgIIbdJZ/TjLa2W39D2fD5Wx2+a0Pbs2q+OIdLRQfypNfWmE3aqIbKaxWUKWleylhSo+vwRReskDfC40hZjpGQvTsgkKcWLgdXR0cRuMd6G0l9eR6HWqV4cSeeyuuSy0/Yu+7+WBLs4FuEYa4bI9grZajb2rzveLo9a/0Uybbw3gO7jSDzKodsYj+/OXvD0eJSWfy6GHB3cJoRcCxoj5P3jZH/du4s2QLw7hDZAXqvjjiZQn32zEtYj6hyX7SkdcEzV2aIKbY+XJViPf1S7DAlcVLpWP9U2bKtyWqa3PmKxJaUTlOLLXqpRod96VzZnVUq2pBlfLoTVzFcmX9RJp8tFFd6LeLHyq5LtOlW0dk0ddnGxZBodTW/Z8Oixpc2sxLnQ9RpvYnnt0XfJCuW1jxdiLXBkDl1E7710Yz4/HoUQUkI3LfJQWHfNAvLKWX/9vHTN+uEbg0++lMI16/vq2dArZf3XC4v/8cfTT8/T+cPwj+yCZQfljpWPn/78SxNHx3XWZjct5XJ1YUzRceBwZQFvP1xM2W1MzFW+flYuW6Ny2SrOX6lynvtz07451xzOVyvvjnPgqozf/FacAdgvJwZcAWfnR+Icoc6jyTPI18pyhTOcY78Y3hF2qaAnyHfb8XvXybw3Zjjb3NN83Tw3sbl+bzGzFc7C30aW5tIryGxOqseY/v6abaUnf663K+Dq/Eiy1823l59Pr/d8/TL1RzzNKP3zU3hxDyLRpjFjTsMc8opVKS68+XN1fp5drQ6vU9ilXGTXrMfOxd4b61w6PzzJ7luDPEnHv4iPM4gKV65ew895lObs06vCTevFj9mFC1ef5bBbcdkq979twwm5f3BkhJBPvjzthf4/b0kOAKdO91zscbxOr+1R/eS4AuOVuKsi6tmRS69mb/ycLUW4oSECtNfv6/yCfPurNvO9Dj+a0/WUyzbdRpCC7fVRprNXp05VoG/LSOje59pw7XG1Fnjk2iLC+dGIeyjlfoUznFf1eFSAlP4xORafh04b2+t0zo/JcayN1tfm3z0jrWdAbm4rS6I0/orLpFfdMW+vO7iq2yoPaASfkGPQGCHkbXGtLdHXvphvqr9LLPpNrbNJkTvGHrWGcUwxMcOZ4OqWe8S7onYU85qbdRhvkqVVMnuZ1ufaAsmcR7DWFNci7Iad4mcLx6egDaI6nX1lyBZxztN/izKl4I7hclZEUPWyzX4o0w/o0YEey3UU4y/fjLXnYbkN1X9PkalOq66zLNOZanvHRjVXORa+0KnSfa3pnpmN01Cuu7bgP/Ar7J3IFbfIewTdtMgDQfptubepod7QcMk16xwW+Db9fP4sb1y4//7c+k/R33EYR2/Q/wDM/1d2t/pwyO5Wh8OrIR4XLllPfZzzyaZwh3ydm6/yeWPL1bSU29YZ9so160K5bB3U+Vi2PWQ4z+V0exNVDhk6GxfOvXfEAbuhPn8GYAfg0EZf5NT4269bi3H61deQ8xAu6129FnaE69aYzvNY2Jq8N5Vla9preSzne+3aKQkyFalpOY/I/BYl63ONOmzTCLHqdNbKnX7v849hJzFo0UoZsmvR+bCTFG0fjmwOt9i5NPYyXalVsnbl6lUq7DDs5hRPsjuWEXG981fjeTf++GaagdI16+X4JMUd5nxer7gFAGf4Xfr94sdvT3PZKjZGVBbJn3p7jRi6aZEHAUdGCOnx7bfl7/+qI/y9/HkLW4RoNnXsbenhbrpBz6pfW/u3D+qvV1xa/SerPNt0tUP3sE+tBa1fUwZtkObQSb/zu0npEIOrkF0ZpQkL1y0WYSGgUeSrZBdLuiv+dMNStdY6aRV+RMQioKfbFj926/dmNY9DHWHBRDnJCtgloQ/V6YUfReSlvPr2wq49Ws60Ex5i7UK+C9ceK/4O8An0HoFdHbH6fcg/1qK298rTtVeak0fGTOvRlYvFNdEyJyzgdSpvfcSEkAcIR0bIfaY/aV33FX2t9xQJx198o0ZDvlSjId8m41yPhADAHucpbP/65zzSYXZ5crp5lo6nw+sUZ5qGdHx+nkdB5mk/AIBz8dwl3O5xCt/Nh3Qs5sIC2T/bjYchfqNH5FESPWIimHJnw/CBidqATGrExBqDCcAIRBVidAczxfDeaAmA0U0GI4ApnUl/pgkpaCwu8ieb84kcshinSGMKccdw3E91PadjofG4d+5Xoqjnt5B7lf7tsF3KfC+P3Puajtz1tTeqK9WWl6hl35Lmtet6Q3m3M4XnZjm9tuUfv0dGjWpo28PMIqVRG1JQ8Y0LE9v1ORnzyIbbyw4HHKrzAHDQox52zCMdNo+SGLl0gLddrBo9GQ5OxZ/T8dVVGBkZLtK5cZzS8auzD3IaapI7UI6mPHrynynerYySFCMknMxOHgYcGSHknRC75rT38/EJHvvmYCt6JKPSaCqtYpuuNCajoLhSKW+jPq/+LCtPbcjU05ZSzBFIClUwTcYq4uaclkK1OjZ1wmNut6HNL6SxfrtuOdu+DEulWy71dilH9X995WqtTm3oWF3Rk2LbnQpt+UgxatmPpNjPfGtVTe3hMUNp6Vd+bjqijOo4/S2fgXg0YWN9VkMl/dyPc0jjf8vjPcfGeo8PKF93IeIfr3kdIYTGCCHvhPjBu939HNaIn+9xqXt2k2ah+02Xfi1dU2e2HD0pQifo+GORrFZLp/S3PbdFpta8amPc1ETwPdU3Zjx+C+vwJfU9V+WyZCdJXEeuq7VjFK8r22Xr62fSM1iWQjqxNrS/qfq7JPRiWa5hxzZpdR6U8k6u36nSHl2zmEqjccTxNqANp211v0bPf6zk2gthpL6g6/pwbVix5Jfv6I1CSAcaI4TcWY4tNbPfvKSR9mVfNByOahbLPiZlD/IWVaNOq+72bdM4SYEZa7XJ/9XnmlEXZcBM6v9+7uvSHBtf6KmOurdZnT6NI25FPsnW/GjL2x9k0vIdq4GmxuqRtHifpxzezX+Bsp9+KdIp43BbCDWlKidmsTgoN/ZOVulVv68p1sLJdYfENsYpNbNmBJW/N4+irHLiygGncN1+oX+dEPfp7+lKRUgHGiPk/eLPx6P0udm0xOstcX/EoeDsbHM3oJ6ffR0lbNoBq6pErUEfH0yoWFJh6jMblbojHk8T6s7kqeg/HrW/yjH5OkZc0SudlNFl9bnXe1wELGR9PZbqdtv4R7wPx1zdejW2lHMv9y3m6NgJP+Z1tlUhXjC7/f+psYzJnlpMd2olbdJTv5cN4lq2tRGhVWHS0XEz5VhKPZfFrUyoCnsyt2+a9F205PBqeUTj41sXgpD3Dg4ZkntMvZzv1wb4SvAnPWn9z2oZ30/88fdP87lP/5B3VseLPEldTVgHwqT1ZwB+BGbzHynsg/0rNVF99Mcvgemjq/SVPj8b86T1/ZDOu52fuD7ucz+rc3bYn/kBj9FNQ/zcOjMXX30R49PcAXLIk9YHmfOkdzWxHcMuTTjXE9vFqQnqcblel+tPbA4vBHBTVfena8hR0HkChhGYMWHAiBnY4lmiWIkcggYAcz/GqnzbrvGZbI0vfsvuk3pIU9oLRe3l3ZUnWmETgHHEgAnzWkWvVG2b/oRhGjE3xtcY4nfyOuk+r1Bnt1JPaORu0/Lt8foy1nXT/J6AudsuwzOwud1erwJPfR4W49fZW0is/2xfjDDuUnLtR2bADmqy+uAndLupPBfyMCNcSg/idA7znCehG6MnsEu+jSqO3YWuiDPAvlJxZJ7ytT7+3v1mAl77ehjzBPfd/CjFfXU2F9WjJ7SfPT6ksGLJXyBPYP9eTT7/9Bu1A/sPgj+G47gz+5++BsBlfsnDgiMj5AHRe0HfIlvmJ74E8ORInM489TTAcaY9r7YsSbtBpsAp8y+Ok7+9w8LfLSnMAJAUvzGnuthN3hZiWHXTqaU9nVyepQocT8qjNURyusNCFjHtYaGovbznXlqxN3+MMh8fj9hE6P3PctSWQZVXGgqaFtvLgONtaYiJqZG4IWbfYQYwyWzytR3Gqj5HndcWedr7MVfXx66F9h6N6ZnopZNI113HEJk66a7f90U5etk3foYTYulzHdQ1skKTRxiH2jgssluLuMeyN2xy23q9fP3P22S4Nn/snXzL3zlC3gE0Rgi5TZ48wVFrJH7klBfWWefotllWN8ayh3Oc1z2UANRqRe/vlpzX1RGlpCeFcOz1r242gBbzn8o0dE9wMgRiPa2L6uMuxOvLmSt4sfd5LXyJa7n+j8XJoZnvoHqjO+fKPOO96ggyNgcJrdAfL287MnDsGmMGwXRCXU5Vur17W8fpROzmd40Rl6PX1W2xCo5GYXn+NKN0UFG2PsM+7/h/76r1PJsib+yIOVQb+hRv2LN91xv2Iv23zs8fbpMBuIX9R766aQKE3F3opkXuG/29RXo7rQPlbusf/8Ub358+yq5ZLx4ng/zZmXfN+juQd1YPTE+zq9UH+7xvyGF4k76Rc9pP5DHO7GU+bw9Z9XJT6qabjVf1RmOzm5Y+ni7T5AtrXOOmFdUwGUySZ3D5WMzORi1bZqj9R1wum4EFZmAYMBxGA8wQgXbdyrj++2IGMITeZn/NEdOg0EX8j8INpBN+JJEjYeu/11xWhhmYr2vpVCINg85HyZAOF8pUn5a9gRvE1/ORsp0k/03MOp2ETiceL/29rlzH7vHbIJul9fkBQ0fR7rTtiOwNzFmnh3trOap46ueAGXM3LMq5va42uXO5zv4Wc/rPJxLcseYBGA85/rwTSW00nDeTuCivweByHeZdzo2RGaHOBwDOHOY4T2mW3BUwKzctK27qHc/mUTJVBnV+CscfuHmK/Uf787zMwuA+nuJsQO2yBZRuW+OjvDfJ7vtchrP9VXbZev5auWy9yfX5rz/k82nPkaVd2bnnCLm/cGSEkMDf0eyrvsJal9jKsP4azc7Vx6YIa9a7a1uFohoHqCKsKiBV4Mkq4NB605cO1+WPMv0lhXCJnuJ17FplMqio61ctVWBWyMoYVcLzSg71aeMNkdrxZeiUNcu/NG5V34t8vpWm6wzWSaJqW+JMdtNZMyB7v7Pxslb/y+luzG5LxHnZcax1WqyPq5iuZ4i013Rz67WVZMx2amoI92iOBlPHsFuoj1n9j7ltwYslHOoIQxJF/45Zp/P6GlXfS++vnH+xZMSvxPWWJSGEtNAYIeRarDsL91eJPDLuv8t/8p4gHj0ZtCT8HivXiwmFptA6VeWz4uKoxty7ICs3Hb+Zvg5zTNNbMA7mLakt9NUuZnlcSZ2bH3WP+5EsevkUStiyA9vS5esEBU0ZPEldP1oPvdGEXn32TJuekMNy0SPG5p7wIpZWjWs52jayaMzheItrIqSRgpZumaPGPMeHYE3WMrib9aBDtDFQtpXCGNAJNAXujRSpC7qWQ8xXJTjXZcvpDkNb5+2zo7IpDI+qw6GK3BRfib2NCSMmTNPJnm9hvt6ye2x6l19cfzvETXy+cP6Hb+jBQh48bOTknlGvoBU4toIWAHz/pT8+/zYZ4b8fL9Lx1dXPWZefLorv4AcfnOWwi+yyNb3JGxmcSV5Ad7Z5qvGwszvAf/QGN4c4Zxjcmx0AOLHh3ARrzrKblriU3mBMuZhV+j3DqrDJmaQyiDj/OZ9nYAzuWBhg1SpbxYpbFmYGMAhMUk+cMz4IcEOOKmJu9u4ws0lryVjodWWWqeN1rlt0K9maR8GCm81aWj0Z4c8NAGYdXsXd5BKzhWuV9QZ5YSG/JMeKW1BP1s3yb3c3WmXlnmy/9gTXJwvMbi0vbSQOCzIu5LdR/mwerNwXOW3FN09uwSYYoRaAE+U2ZNSxcvEysA4A3CC5BFMujdFuWoMtBkDcnN2xzHCWZgQ5KNcsY9PYs5uGdHevHvUAACAASURBVGxlr1y2cpzBugMATDbGvcJoxxS+F+2ydVbIs5sPaqWtfXbZ+uVpOj4/v0rH302XucxXn+XjT1Vd/TUcf6HO/WnJHYsra5H7BUdGCDmBo4unrAx+NH1vegLmVE3E3TwBOvk05F91d2XqFV1SltQKwEVqCmdhsfTCsNXfDWxU+AqJtTK2oHQtKvNR+TuJBRcRLUfvL9Rvl+PPthOmaGW/pmniNl7Xk3cj6b44YFiqWxfjrijpvXbQM07Wpbg9TjXiUnxlNHRHwuYUnhZ97RmtIS1v96vy6biuCrN1WEWn/o7OG3G9C+sG7D2p+s57OWC1SnsXD/PxOFvT0ozV35pqQnw7VrK079P6eIlc/cxOX0KOwIeE3AduPmkdSHuK6P1E3rx8lL7Ih6tf0vETNRICAPtXecRiGtRoiI0Tzi8xn41pJOPRYU7fsslZNWLi0nkbRkScac8BgBvUcRglUaMeKUyPjIiYIeoMImaISriNoySYIQbW2aBOOD8yEnovDVBOcLcCk3XvAbBBuZDZRA3fhjDfrYlGObIWcLon2CLMIwBKrXxbt+5SrPK8hYW75gCB7u5fyM1ZhI7cFYla6fT/vfBVOkp/kV4h0xZaaU65A7mW2uGg43W/sc6c8+2nF+zgG9dCjepwABBxxoiVLUaXdYCzusFuub8x0/g7Hx+tj2sZy6eRJdo4fJLc647FPyAK7/Sy1ckodoDZqZEREecAC4fBWpdSDqMkxtjkPHYIoyH+lWHnWFFmkDwqAeAgktbDM+LDZgDO2EN0OLRGkrkhYvaAt0tcOD8C2ItNq6wPkx8ZceOwP4Mf2Z7snNIY9/l4b3aFKTPOedTk7IM88vLyVR4l2Z3nUZJHT96k4xd4riaz/6WdzK5HRrZNZgc4oZ3ccTgyQsitUA6J7NW/zWtQrsy8XJ46qyJEVG98+YRnH3nrXKFfLKkaat0tOFvrTEEB0Ul1OlOLtK2tomT1aIk6zNWhQV0pZXOYxZlsLFUJVL3TPZnysW3K7JV+26ZbHVulaSHV0/pwgO1ItHSqSM82NXOEVprjBkSMFe59ULTr+lvs9N8mUnHx4kCJRbBye4MMtjBEgOA2ZLtNtBXD9oRZojRE2vRcqCFbn14XYnvwpmtzdtpI2pLDsRdFO2KyHO7TaGVS8Xq2fzzp2vT7k/LjO3POkToT//uLVrckC6U7OLJhDWBCyCo0Rgg5lenNiSOKG3fnqtwHlqajlsxHIoRUnIpm+92wHXWpUByiIlCrnotvka6yVfcQ22UlPeofx9RHm2NpGyz6rLs6DYugqHZkd81BX2YAVibjazIaA1UezvoqU0I1altHuSrS7LKi1DbpHLl28Zw/X7aJstc/3jOHZBMsyNFV9/tyLFp3Wc7mXnZT1hZnjGqT/WLTuRCra5QekTUdqbzc0v1r5ek/Rn3zwBUSL8u6tabLe9iOfKjH9XgGRdC6oV1G7jx8aTTLNq+0fElMTy9AsOIaB3jXrwGdRTJOXHuru0Hi5bUXUCSEeOimRe4BtzBpHUgT18tJ6+d5MrraS+SxfV2YBgezS793U3bHmlyetD7Y7Jo1H4bsemXzsZF96ltzZ/YME2CNnCUXg1lSXO2+ZcTuAOsdzgdAYHZRhzA2u2yJkySnNflbLXN234IZUn+z+I7tqED5cQs9OV38TiQA/EiDA6y1ys0qpLQrjRYX+swTQdbkHjbn65Mu1OsubfWkDnmUohyFUSeWjpco4vTV+tXrUq/9wghHT8lzvTCHwk9ptUyd/I7VaTi2AJyxou9rV9ZuvdT5VvdjsWyVjFpOJbe361wy3Hx1OFhnk+7qVu/tSh0WcuQ86rIso8J7934tL52uQ1tfa3n32kFX/nWZS/EcYMbGnSfZB027LLO1DsCU3eCMnqiuhHWYszkoTqIUJg3tjXOM7/cTCSkYmaPoBlJYESIyxXIZNQk9umOFtA5xpoyIy+5YZncVN4p3Lp8XmfcAMLg5nRvHYR9/zG7YA36wZDJTMfx9GLLb1s5Nkzl7IgDw2mX3Lb3/yPlPn6jJ7N/mmi4ms3/j6/OvP+R6/eKPGyazA5zQTu46G7+whDxgfnibibcuWlNzMBR/lvGGSLOyk61PqPjB0ih1FJd7GaseYZcUFVsGxLNFz2QlQur8VenboLTEfIoOYpevs/r6qgh1sZoIC32y9bU9xbwuSyxMVAZ1D2760xM0Jpd7yHt1mHp/O6d1mJcllM3V8Xr5likWPdu6LLVSqcVNhogrw3vGghcw59Zpg4XNov/W96MQIsqYLOTQdrPV5ByCwRsuc5W8RSUWGVVlcKUM9WXFD9WA60DdrgqLAtX9UmM6zhZedfm26PaxYjX32kRtiCw+MzmgfZLbjDqPfHOF1SeW2qjOMcUpU4gtp5tEvuGtAOHHMYVm8RXbGyDZOKDdHSxRREOk5kafnT/f5GJC7h40Rgj55HgUvb3Vm5MSb79o9WIu/XX5+8yzX5wXdmGlnbobOwxF6AfdWtvobMp6iNoeSgWhPGoolFY/iyAqjT7POq8Yr1ROoopZKDerCk7H+OopuVuuj3p/tycbSjmuhCqS6NRRkV4Z3vwqirOgXCblt2PV9HTgKFllCC4LGru5j8SrgxrNVKH2Gkl+UlohbdJSBUlyV5Zx/0f5WxdDadWpZWsZVPe/WsKhMi46sq4ZQ/FkeL6SGLa8FTG/1H5sKanuHyiK2KvzWNe990JrAZc0984CwR0RgB+h0pfX9euwYXDG5nvR2In6nbOUkDZEY+bx+rpM2X1rdbGtEe2LuTPVb9+eWuHxauiGz84yf7zJxYTcPU7dH4iQO8rC2/nTvyW3k+d4bADgzct/pq/cPPzeAv8EADw1n6TzV4fLpO2/AvBbez68gV/E0e73Y/yw7XbD6PvGznFw2fIYxiFtYbiT+WwKXW/G2OR6JWLPAWB24v/OwDjIee6my+5dCKtw+SU/Z0AkpG8BcTtlCyjrZxiid4qFG+OoxyzOwiAqD/4yAaz4lbXERnXCAQZG4BBm/ua9QUwIj7mKBeaQpHFmCPEEgHGAhB1NwoJdMCaKblNyAoGDDcdhOwIJvh5GYOIGBTammWoypBBlkZyBEldEgtwmX2cN/DJiBhITNPG8BWJSEpwFjcA4AzGAgfUyxOwhcDA+r6TXRrlDya2BOABWwhYu/uJYfhiTxHNF2bxYYsryJc+qfD+TLAa5vn16EurCoF5Syse1OQ2xPgvYXPZCHsnXWROaingPvyhfuE/xznpPkSC3TlPVn0G4HoAMACqvsSJ7oyUpj8sLQqgRGGMhVd0XlWBC+0vpp5aYsw11JMWFQX4LwNmincJaf89NTMsXPrcrSe3MwaR7YAb46/QNSFmFCwS+7yLedyuAcyFIly+0Qsnty8ACNrbM0K6DoWhczDvElBkm7wQSzoZrozvWDGCILxQHGayk98UU4ljAiIh36xogVlx8l4h3+MquWfaAeT/OaTTWmilaOza8JG30EZPomjUAklfNGoAxmiGjtXkQY55tXrr7YPxckgHWOJP2eAneqvOYVwi7NHk5xNEcUg3NbkjHAHAxmhmP3wCvDfaH1+lb8nS8SPFe/vhTSvdw7tLx84+yq9wL/E010C/pakUeLBwZIQ+bpV1tE/88msQH4e/yavK9JVaiTXDAhKlxA6h7AWbMGNbctFRvfzl2oH+1PZ2tG8ZKL249qBBHAlKvsMudmvm/1GsbrzVhh7OsCgXl0ppsw4S/UY/JyroUZ8qUJF0vNsYHCoUy/OpPMjKqgCFNJ+lXjmUK2WC9/7uxArggk/UGhwkyxb8prXR9TMWE8oQYLpYnmSGpbG1pYjlVXYTfouNHxVXlV5ffoHDk92fVoIXJOlHKrTX6jDfWktWkVoDVMoeSxVJC/Z+U+njW5lgSZXc5vm5HuUaR61PXYfFVy6n6e4fOiGAgtPfYFnPryy0S8Ep6TyuMdRvLFo3waJj4OssGYq5bo/7lutTGQH0n0rn4SKfBOqOeoVq20jwVlJ55Ur5SimuNzQZZm1JvQMW29RzfGekdot89to3rbHBVrBIq7lnxQmpYHg2ptxitX779l/HZyk7tzaJaN57U/uKmCRByb6AxQh42f7udZJJr1vrIu0KN8Vf7GQKTsk3iwpQL+2/LXGmU0ZFjyZdIUdkd2j3EFddEF46eQlAl7YIxFPZ/AIBaX4iqm1ahDIKiG5XqoMwnpSmOmvjVeNXVXv0xACTuYRCULoEk5V3tI6+Ufh+36ANPCq5WkFslzSgjR5zACUw9tzsqcKLkjNTKWkrNQcXLho0uc6FI2nydKFlzOsYrkbZWP/udqGXq4bgoVzZ0GmwsVcw/phbryRT3wRsp2owoDS1RxpMJhoKEvHVtJoPAmrZeY/3ofFzRAoCgTNflKHOIMgfF3UZZTG4rVrUYm++4De3S590xNJwUD502T1N6yWwxfjRFG5Y2xypRhqrqPMg1YlK70MafvtqE+vJyxhCp/mbDKBuoqs5sZ45Hb3m10PnRe3M1RqGee9VzN+uka20btE5vi9flpX89K45al6fmf6wr7Lk6PtqrRsi9hm5a5H6hdYyvF+J8/5f81T7/gwG+BQBM4+i/vVdjCpenz9LxbF7mgQEzFJ+2s2nv9wX+GXC7vOrWbKb0DI3ImyEamfOKWzicT/MoIwA72rO4t69xcu5dbaYLYMAwWBwm77plARjIudcgBJiDe1dUOIzk3yN2qWcxuW8BYjBmtyoZvbJvi1W2DGDhrFe+zOR3Gwuamx8IcNY4wDtOpO5NOJG0zk0MmrOABl5q5fsdXE1m8cnPQZFD8PzSNlfSDSplPvjOmBQeb5Gk9BrmMqXaPCh/KzW3uC7Ij6j3GeWKbpTRpnrhm7x6+Yczcx1D9XoXcmQlOslhJcSpS1gpqqVJhhyoRkViLkkeCfcnXDfn6/X/KZsgb2mSlblFB59sLFTG4FyfU3IHuQYlkwkylaUy2VstouXKVk9RJi2jmctRCrhYL+H8nOUSiUvOqTLNcdSiY/AoQ1iXL3pb5RiSZM91pY0AlG3H6nsU2uAc5YrPXGybKk7VDlIHgMnlScaHMcrXK5wTkx8c7doFSBwXkwGCIdhGYlWsvLKW5KtnZZ3MuRdFptgZI4Pv7fGOXQDMfHASLMRZ9n6Y1wLKujjMcxrK3Q3e720AMOVXNVwuNMSNzr/xZhf7k4zMXsYDMJ9l1yy3s8VTPE/7IQ6VuCGPcc3mpcVTAL8A8viZ+zjUovtlSo1wmvP3CdNZOP4WuPopHP9hqach030ZEnJ34cgIeeB8e7vJXaP3C2bM6+12Nw8ZMKQJlnPtTBWIoxdVoAVcdFXo7b6d7IdKkQnEz6TRl8YO8/ifzUpM4YoT7Z80FhIjGLiyD7zMv/YU67HpzaRdV4z6t0QdR1CmoePV+QDWmkpe01E4s3Jrdbxu+kvmSpjRUY/EqLTTfBLVLMo8A01vt863N5pS1omr790CrtMui/IVXju1UbS2KXov302bqC8QRwD65emONxYn6/qo0tGjSimftbrLo2quqDOl/Ee5o4Ea49TCOi2TqY5FXd+TYUmuKlxPOokdCVYZK+raooZC9m39LviGxStz91Ab06Gd+I9wrhkmiTHCWubhPTwfXcHQM9bdtkdX2roA5n+b7vfil215EvI+QWOEkI1cAtkvuLsT73H88Erq4k3Mac3eof0sFz7RrnlqbTi9rNkjuQHVMwaMdcHNJ6aeLAwfDgAuzehIaZmYJ1Q/b5JLYCELq+osKeYVzsAe7d6rDZ5jXYMSu2bRGgQ95UunYeBcNEpUeq4XPyryWrZa1t75fM4V8SpsWzZX/W3l1+fWDYv22k78+t42irG/TumS1f2UJrpv5kuGUs43N/UtBoWpRK3vIYDBSD06otPO6alRq3Cck4kGSG2IbqE2XpTBLPkgG1InpFnf78XrF56XhbTd6vOmRrrUqFWn2fZziS5wdqW8sadEeXOpy/vRAaT1++KGI6lDaHWtreyv1Vlha5HhQrg5OyHboJsWuav0P11ff63Of5UPv/gmn//+S3VBHhlxrwYDAPKbIcX96Cpv8Hc5Z9esi0elKj2Z39pzXEIA7OZXQ5ycaES5Zu2mMX6zjMsbI9ohuk4NcPN0ltwiwspaTqbkmjVAztOHdZALOAe/wo8o88dBYPJMysmd5a70QT/TY9RhDDCq1YuyGWSVWuaMteIAO9jojSHK2V7EGXFzUC/isk8SPMV0t6cxBgLrKkUoZN6ezetN+TBJ6frQvmrVPy57rKNClHpuXcxL6pAjsub0lncbX+8BN0Vuube6VdGrScbes03yqkdlbkt1onvFdTnqM1i8th/ileIFZbcqpQ5xSsraKBYE1yvXm2atjpMB3Ja5f510DDQJ9zCkMNeGUa9MdW1JR4Z8J3tp6N/ttfXIQp2uwMhsxFiJ9atXadOtvfyVW3p+xgT1FPelNhFDbSWttSZNd3KTck9Ubk4OM+ITZmRweW0EtUoCTJrFZY2dLRzcbOc0mjK4uEYfnFGmwGTHwqI0efDZmDGPwxn/fh/gW4ILx06MRAPDpslskvsBABi7D63k0RytEXeWN2EcnUlTSkRsMcYyu/3g09zjYoyLL77B4eUuCf3RkL89L5/kY/fv/H3C+Wdo0N86vcJW+W2sb+SR3gVC3i0cGSFkEb1+1nH/rCn9H75RhanfmaCufuo5qAkXQtJgiC2DVJRwII3ilbolW4UpJlCcMXEJUPRidxVW7blVqlalUpSv0qMSUsTXy5H2Vav+N3W5D7dUx3oOJWu0Yxq9GqnnntS9xGVevZJot5ZcKx6bgrKiXpbBdI/LVLOs+d6YQvJ+2co0DOo0pUijX791uqLKV4+EaPmW706v/FLVXNmK6nx69Po/YnuO6faV9TrvdWOufTLqFpTj5ZgSlj2rn6Tyd26xUoXlZ6ysmRxatgBTpBRw7d1tjssXQjnx3yjPUVG7gosB4OJq2iGv+CeNm2UxVjWXzcNHi+g39Ri6mJZ6brcPllTrMf5mLe7vNqdKyEOAxgh573h2JPxlOtLbG/bG23t774bds0ZUS7HUbgBDYZ8c+3y6KpaFnyeSHmCrjZaASNJIpP2e+yjJx0udA1CoKiarZEWI01eacGGrrJWqrD4j1fnyilqOWonX/ex1Dj3a/uDlK1p1Lf6uU2jV6nbx3OoK16bU66nWJe71ypcy9I5Lv3218CzyHZVO7FIJrVPPa11F02TJKMx3qm/mAFE5NtVdrctXL1Rcmhht+jHl2pzs31edT1uKVu6esh/boVHH8ahfK2VbXsuzefLS1W3KcRHftoztcg31lWVtdU0vG+6VoIqpfmefKB/qYikAiB96cOFHcrcz4QL1njIhyBaJxqSTX+lx1AhKk9ZC/9AQB48HYArv8d4m7QCwO8l3S/HvtcC/Xy9NQu4pdNMi94yv8uFf/5y/rl+o/Wz/pTY6/OBxOt4/939/+DEPg09jXkFLzncG8PuKuDfqC/YGcE9/9l+nc8AcLkLYBTBcDr5vbAc7ZZet2c4jdgAmYBbsot0xWhtcthwGzGdutDBz3ggRJrtjGYfz/M01xSwVY+bz+OUUY84MBBgMDNxOqT96muWovsGDTxMYBINEb/7kAi8mKQgiFhJURsmuBLAmzx0BgGLdW91jW84QjbLl8LR+UQjvqYLeGhJpVcUcv+dKsxWtrFpEj/g6rP+7Z1i0shWxB+QNFtHKXF5fq939axaFWZV32XQ7Nn6wpF7rsCh/3AexSD9ELMtTtoF4L3rylEZWaZiuq/WlzOXoQEivkdcUcZbyqc26vO/IiulYV6b6bUK4qN+1qVs/T3H9s1ruOv7p996lEEnGSEjGqnWlkw+jwDqjuidmSffbGBctDavGZl1Ys8+If7MJgLTRoV+pY0xmlglTz4dUrjw9SfIWndYBiJ5VcSDGb3TqBR0BJ3lA2YoEpz0HwW6a5xmDzLvYuTRAuWaN0TXrHO5wKF50YgaLcwBXgHtzpb4xeaWsaVarN755nN/On+Z0nr94keK/ePXahPBc38U3sHHNIuTewJERQhbw4yKPytH1zmDI4sIq4bMVv5r1wi2uePyqnj6nhjk6PglxhZ9oMvWUpEZZMnpUI0++7SrxSlnUrh9NnDKHFFAoYJ0ubaW9dFNosqoCTJPOQhmWWBCvnmGg9S4duZf0WnYZWyib3Ws7ZduMLMshKd3+Ol8Ld7mJeFQuU7WpIJOpM1tPor0Xi/H6PftFJKB7z2ujBmgNp+rS4rpjci0llI34NmFdlvp+9gygaLR4XHFe56tHOnrlKdPuLR9hyntobTYwmvTKcbgmYz2yUnRklOM3klxVXQiVfHkiLynX32vElorOsWalJrWnd/bSsMjaslqdb8Wr6vfPR0Qh5H2BxgghC3gbJLhqdVbPisMZh/BBWvxeAZjnuXEJKEwR58qTaQdji2ZXQUT7xKWOyFq50ucSWnGwpbrS9P9LVk9qp4+kR4hSHYw6mWIZaOW7lk/nvaQEx2QbJUwpac31WypjRSazEE8rVT0jKPaqL6Xrcd3wQleLe2BUMm81gJbqOBtBy9pYksO09bBoPNXX16Mg8d9G66pWjJeMC33/C8W3jhrLvXDPl4z3WqbVNtqJ3w3stJ86qm9Har+LSoZuktI2e/+3szoejtQvABhXyhgqsriHzpk6pd69S+8LbYHp58TYIln9w+j3oZY+LuKQJs1Fkaq2bQErk6miVXiTYy5/pnPDykpbOxxW7JHqo/HGj7prPlxMmXNGyPsF3bTIHeXUfuEv8+EX/W3X55dxZajfqrP5EZDDZf5c7oo+QJyNMPGbdJj8kPwl9rD2cfrEDW4/RKkHDPmTNgxDWqdLpl3cU0Rk2BkAzsou7UZughuXA2aDMxs3+rPRlcu7LIjDmdq78DwpkQ471bO+i+qAEeNX1oKDtXaImo0zMsTIficNAQRWYPxISrA2RPKxBSDO+2wJXB6NCZaDCX3jPgvvgiVGYKIxZMpN75q+TmXTSPSZ0cpMERZ7hbWmaaqhlPC71sTq7utUbyFAVBzTU6ZDuso60x2+OQ/dZy9lvkmmcH0qS8jQqrB0fawTv+Fet+J0XIR96pRx2SiXWk6ji5QrTR2GqFU9q7RkoXzl75hH54aYfA+KNpCsAu2ulDVtkTKZXPVxzoLSykXXpy5ACDdG4CQNB4iWM8ldtd/Ceg7C1G0RKkzLrpJxRt3nWB8CP+dbtTddn/60oGlvijyCgnT/8h6GEk75Z79MK+xYGO/5nF3BLERi3GREhapRFpW+Xfm0yVtsGonDH8oVChhiIQ1kSPfChFq1cbUuGEwAjIVRmyY5A+diWzqYNBhtYaY8tcVMcKNfWNAcxpy3Gf27bpdf32olQjHTcAUAV4CYg43dU2cAHPY27tbudo/9fiMfAu71z9lly+zy3VCGkv9O/cOffI4OX6rjP/cidDhqfhLyTuHICHmYfL4t2towebF+Vj3kfgachY9P7hhbGxsBYL2t4gf/j+y2ZZceTn82qxm1W5HuLwYKrcAAMH6RTjHGKyGpK1P1aRpkl644CT6mqHV0400PMSq/qMik3E1SoCSKZ6oEtbJW6NOVMhWVsKTwST4fo2kn/Ni9n5SqKLQp09PpS1nmVBH6OqPqViuGuVBVWSorRlS0eA+MLosqULpvOh0pslnqcS7KVMSVftl1nrERxARiHej6iOlUxasaQKkcx/KmNKUsXzrWcqAxRNTNqsoQwlMbMarMjaDhT6eS/H0wKTw/QOFeibonlQyi27QqU9G/0WnbqX2bnE6KGtJMdaDqE8gypWNTnauKHducTi/cV4l1pQxGEy1Q/SypBGs3ysYOWqj64qepqqgQXFC2C5QbTGqSwdGOkkRc+k8HOvVW7o2GxNDeez5P+9t3Qpf2G3naO/mf/biEPGRojJCHSX9wpOHDFWtEfz9662b5j45eS6UcaGzMDTeHz2m7hFbXcWbh6bTVr/Zarbn54/YjL0pZ0dpxTsEfZIWkWGYUaqSj7gZXurwJIyJJ/0/KdyVqzqRUrgtdo9JwamVwSfGvldSkiAflKinAtcGhFG5dzno0wlTlb3ycYrAqXNK+tCyq7IVCL2W9RAU/yVMbSZVBVA8VFIZNzF5fG9Ou5DWqDHqkKRknMZ22PanCVHUQr63qpVCsY57I9ziVK/yNPeaAMhyiAl/XR3Ws613fz0bPDbKk+tf3Td3Luo3FuKlOpcyvfhj0aEiqTmVYlcMbWDT+4nU6/XROyyj5uGj+Zfsy6p7EVFOIMe07plfXHZGL8x3boknAQC1nrqP4ODbOd+9PIPFxwn9WnRiK9CrXrcgEHHMokfmw1Pgbupux/2Pr1YQ8HOimRe4xf9wQ57k69m95eZw/m/Lkl3w8naXjC2uMHhk5c/u0ZIwMOxN38BXz2vov1AiYvKILBjNMYQmtQeYhfdTEDOmxEwxeLxmG9HUVtXkX7JgW9RVJAzAzAAvZxUsGyYMzJq3WZQB1jRgzRkXLzDEPA2OCyxYEsGJhAJnVJtRWLWElgzESTRJrnMl7usflPsX3qJq8fWGlSIfftT6VDprzWtlXSmbq2dWKq05Lpad7f1f1ZN37Kkkn9/p17jnOVhi8+1ldkNpwSLIZFDsWqnQKJT70gjeiquKXZZZcPhiUWpqUMkBydH2NuKDrVoZWWulMW3W9cmoZVL6NfFom8UpsXOu4lrm5T7WmmtPRdmxwDFTRcjuQ6CJYFzNlpuquqDeke+/bRHFjlcw6bd3+4vOQ19hq24A2glRb0WUIx3kxikqDL9qBNmxUgXRaddxUT2W4FNcAYqqxEAH8Kltxh6JYoOhG5cTLbWCHwXn7TQDn3US9eCasohVX7DAwxq/m5+0kk8dK57KRODjlRWhmE9b/cH4HRL8WmHHKBUtGA/jpWQczAs7bGeKGAQNmC8C5YRgAmOilNUPUql3FcdrAwx+bUAAAIABJREFU8AwYDPz28VcAzgFrzAXCSPvwgZ848grAmLu7xE25dgsL6Lk67vWwbfkGEnL34cgIIR0WtzhshkiCIdJjzluJFKMktvoLQE9G1+fS2vvxZ0AgeVFMrScu4L/Uc71fnVeMdE+n1m2q3ltT+e2b1GOahYhmSCNQoceaIlh3jLdlkeraSiGOCl/V+dv0ykrSaBbrKrubRU0vqj9Q5Vbp1HaSzk+f6xo/Snsu3NGypdBcttCbnOc8LAgS6yfqpam+pKhTU18OtXll1W4aeeoy63MLtoyvv6zkpl0+lCGSk4tGU9UM1L0v22NHHh2WZFOCq315ClReyThN52tDoJbLFBWr9q8s66e5tmMwNVlJKVtPrjrtWk5UcZVt0tzUpedGHcVlf406l205k6vEqLpu2pbJz3H1vkip6fPS6RCAfm3atPpgg96byVk009XDj65TbdcrVztp5Qns8XvyGmiX1Oo7a7VsdD0m5D7CkRHyMPj+L/l79Okf0uH003fpvLv62R8/zSuVyN6mcJnViMlQ6TRxj40R2M0+7ABADo9NfIqMzUtUSuiomwDAGDtli8TGVbKMmb23gHGDQ1yWUvIESYchfkWNYNAKyQA7uGCrmEGGuFK+zPMYJXcwaVF7M5sx7cRhZIgax4xhMPA9rVb8XsnWSlprS4zNDjA26FIWWfNDjBg7iyX1sPeW9/VpumQWCAxs3HgjzRI1KNyACk26TK84jlHqNYtVXDE2KJPaGgrRiztuUYyGhFM5vfDDeAWp2D89pq+UbG/0aQNEdT9rIygZPDpDJWehXIYCRoOkKG+tOeu6Ckp9VApTUm29xw33CgVc1UNZvUbJrtByC8KO3LrSg6IeFMzc3xwM4NRuffxUXVAyh7SqVhdkj9cnAVDUq9G/Y3rqr4prdH02Sr06X7jDKQU6aeNt+6vba5yTVbZ9U46KqPtmtPzppnWMHxWWShiLjDnVs4iUdi5QttsoguriMFYQJ/4bbS2pl6NJi1/AD6KGItjUDgzgokGiJ3DB5Reg8SMqoU6Mi+9NAxE7OIhfMHCHAc5hHgHMZrBhOFmtbI45HLvBQWDsEDuA4s2eZuvtjhmw56EYk889vHd3VWsQs1ffgjzqIfMu9184GL/F7stilMS9zt+kac7fL/wtWCP6W4c/LJiIhNwvODJCyBaW9hdZNefnzlEkL+Xr6sdQj5y4+qQ/5e0Zq35EXUWKDlMfJkmpjCSdSGkpWu+Ou0knpafWvOpTUUcJCpiISTq3Ty90gZqo4pq8QXZS3JWmXXQMS1eE0tfLVIp6RVJkBY1jeqPg5wKmlYZ6c0nSFVlRTgqo5ISzW5DkcJgUX1JZJFdYvStgTK4QXSmpRbmbiEj1o+TQ85vTiVLTL8N1UFA1i5EhNbLQLPKlFOkyUGviZdZlfdVFivHLtMrbb7KLXZuAqrO8ClrMtmh7+lCayq6Kogugypa0/spAKC6plPzUBkwhXLuAbkcfLebQoLqv+RpTRPdzP9LO7tru0u+F4hGp8vbtILyKpCtaIVJMX91vaWJWh/qUqgqjTtp4Iu7onnZ2d36kpCOTHxcBipdqQZ7Anl/73kxZ2oO9XhH+cfHr5cJVwA+LIYQ8TGiMENKhWPzkEt19RoDeR6i/otawtHhWvaxL+HDaZoJm7hS0iA+u9zEQWythUf+TsJ8ISr0u734XY+Wr0o9KmYpHrT6jNAsplZ+gR0VTR3tmVMkCtRKnrkOhABlkTUmygi2VehMz6rkwxeJ3FaUgdOxtbvywakVQqXV61aW0LGudSZuOqYO1klfrtr361xTGkD4Z02vrOZe7k7YxyL3zoVXpZXqjgp1WLvPHqus7Jyl61aXqXhWyVeU26p8OrDVmqPxSm8jFlxQuOW5QwlMbLdpeLZ/+sSSLqufGHokWoL5UGWF6pYfQBPOaCRITactaiJUKCj/uqAsj4X+TrheY1GyNlO8RbdL64pUdGj7pjmGmba2O7VVHLd8/+fkxWtaYViWfbpk5QN0TbYi4uNiHC39PUH+K3qQxmSNj+Lu01Uhv4ZMtfHLN6wi5r9AYIaRDMWekWpbxoI7aj5AeKhmAcXnDrJrQcQdbzR9Ji8IoBa1npyRlK038UFqcUWlofR76Q94aNTXJ2EBxkBI00QBQoVmpKlPPpyrF3WghK42uWQbY5GImRcxUHdhaYcyZN4ZVFMgIyhGKSkVLPdX+n+7V9dcoRb+xRfSN0OnF3nlteJXZdm/Oor1TK6FVHRS97SZH0UZPT8GFNtA6QoSy53ub69Go+1Gotene6fYUDUKgVbqruDGRYMSlfVSMSsvEtilluQp1tmOc6aprtGnfblNZ60nteqQMypWvaIfdm+dTCW5S3ihW6Ut8UpWxlRTwbGAtPcxGuVol48uYbOfXoulJZLFOJBo21XNUZFQdVJZMrJXSVoqueVI+Up20RR0nWXRsg3JkJL014wu1moxndVhFpzNpxOqMQULICdAYIe81T8K/U9jpozgQMqEZuveH7VdsyTzJBkb8evqRj2Jiu2S3rmyjRKcqpDONIiLVP0S9rKfNAlnDqs+p052e7GISbX15YfxIVuSrlXqaRFPeopStGEWUHeOVzrhmUWPMaAW77rkO1zYWgAmSNwZYNFgqjakxGipFv1auoxDdif/aWNDGQ7iyVrgLpBC1rYAgf1SWoz1olMGnlcmeYVVkbXI8rWKmeTKSw01nXwqdXzLuFiIVrnO1IbE08V8bh1q2+uZUZVEja9eb+K9uUmqjeW5ZX9tWD4puo+r5S3OQkA0TSfWcJWhU9JSGbre1EyeKQRr9nGdvxXyuN8LYPgL18uKipVJNR3J7al4v4Z2o2mJRps7vegngNKKsSG6yLrpnLatF/h0/pf8LQ8SVS/ouDKa/Xb56F5kScnNo1JOHyeforITYDn43XruvUTv2tuiPjhUTv1+HPcJkdgMzjiaaHYOb8jbDGFInm2T9M6TnMMCGbYIN7CDGxZVVY1eiBaw4wOR9hufcFwpjrJpL7YxSbArVUnz+GOKkdPjPvPgEw6xSAayabmy0JSBhkmns30zzj5P+k3UGr9k4yRpz7KX2RXJKKYwVEsRy+nSIU9gWwfBIil+lCBWKXEjXRfny6j9FXJ1/Ju0cWS50JOlGipaxSFAZRlLKmuR1UcdWu7kkPTnI433wlQptOnnoukHQwaVUGCVMTK/2MjFdQylJmOOp8rVz5CtTIEaQqDKrBiIqTqV86uwNAN/kw/2WsprLe5WNi3ReAJOWSq52Yld1YeKoSi2EMuYKm6y4p7lufD6VhpxGLGP6Tt1gHynNEYE2DuKrQVW0tiNCOY2q06Tkl9Y/ipEZ9ShLqI60WEHIzsYlr9TCC9Hg0fWUngc14b8Ih08s1mWc0iGIeUQZ/TK+flq4qvQkg02NRowzcKGuLCBzmgoPZ8e8BsLsTDYwBr8JiQNmtS6v1cahzOG9PQPwS70P45hWRDxMswEMJsy4QO52Gt3raC/5v4OpXLQuUQ6xPwbwE26dr28/SUJ+DTgyQh4mGzc9bDhmiHQJn6TlFX77v5u1fG2YXOk/nk1wrSel0+rTL3VIcxKSNvortOqywzkdREWjFsDkvxJ7YiUote1E4vh//NdaDFqRKlWRtmC6VD3luZUy/soGk+5arZTHaHfUvcXx0rgUcq4YpfhrxT1l1twXxPrS0ZRqWUmcFOksqFLqO3WQTZpawe7XlyktChXW3BEI1Hhab6PFFF2K8MIQSSmEOJ37HKrEX2FyHUiYl+KjxxJqeatWb3I9Ncs4xHkQekPKIFdS8JORpq5O7UO37Y4REe9Ps+GlNqLzPZP6uiRqLpc2RLJRp009KZ/joi1reXJZka5W2Wnjpao3o67No6GmCI3Zpb2GmrZ6ApVtkgc3JGzHko1LK7a6Rrllhfl4fcVHD6EMxdLsQPkeb120dkhj5t0JJPUW7K+7EhDyvkJjhJCNy7wvMnUctIbluSLJcavaITiYIGp1LVfuEiyAX8u3TE+rYrXSnlUUFSrBL7tejarRT3SnpYoZwwsdKysisce9lEkqyfTfOHG4VOVKtaw+U6dWx1Je9UqDzG790TBpZYuyxKRzabRirVTeqFyq5alKg0vNl2itLCT1XvIvLU15aal26zRKVa+uhdrYKzRVdY26uUrR7v2fpdJGRkwqmU9V3FiCeL9qibMMEgTOZoByf4pxTUwxt19Tly25IbXGZT6qDYmq/LUOnU56Y6JNvS59XTeqpaRFAlScKrG6HvM4D6pHN9/rnjFWplibqaX7XH6iwp0S/aYpDTF9UIgeLUn1nLQlquStUDuVtJdGGdLyzYAz/QnqyfnVLak9trBbMNQdSdnldgr/TemHYmlpLULIInTTIvefH74x+FhZFF0Xrd+rk78rg37ZkknYTRcA7C5/N+0oOPOHBk52CL1mV1eILln7YRAg9LKJxSAHA7MTuAMAC2Ot2DC+7yCSP4HW721oADjrv7QiCPskJBnCLh1evYibAwCAGIFD9EdIfZP+Yq/IuaSBSUpHrNILjNFRvF2idJA0xzicqgYclDJpYI0flBGTXX3i7Jc0XyHufJ4FKJXzWneu6F6ndBmxnchal442mtLfpIpeqNnJub5vbGXdMJSt1oN0uW15TbrdSeluTKZUXz40391WYQsKsFGFVJpnrP/cNx8KHufkGB2vU9B6vk1oGIWCH+tCVY6eY6QbaHs/orylcRXTUI6CrYx1O9FttCmLSidcLLq+tMD6vulrVV3WNlojR1WvhUKuyh3bgbQbn5d5xI4AW91jXXWAarMGVvI8DWPmnJx6FsR4N7L8OxspaUZVKn5OwQDBLTJPRDJqMXKX/O4QPE9DZuoJStWX3m0Oxg6FjWJUq7IuNmIHayCpcye8O63fZ0QAf+tmF5ccdABiuhYwzp+f8sRAY0cB/OCHxMVJRgDYlTdmYVVFzROsLe57Tb4CXbXIvYQjI+Th0XXR+u6EBDq+WlfbpyP6z1A5cX1Ifx1gdlKu5OJQe2QB6uHUSmqjQSU1MwSXj7TYqKDpnlkUfv7+umqJX5UudFhUKUzua60HWOLk2OziniNIVCijjlSM0EQl2uRzxapgyOEpnhcgKmVJOav7WSUaBLWsKE8kBbConCKfvHpWaZ7k+lHypwnQEhRxnakyMmolXMWRckOQIIt0jA5dMBU3KdM6Cif+5x8aKURtK0BS+873NNTLPZ34n4y5spRBPinyTY+fsnGKW6mfT8m3YY1SWn1hIM4gybM8sgxVlRuVhL+03J8p7TMSVs4q375WjYQsbdnuuY1e3C2GyClfLQA0RMi9hcYIuSd8vfxJ++TLhc/9NV7mALr+vOd6OqIeh+84CKtOsVkf5MkiRXRb/HWIu66n/x2qXs66uFkZbjfcrs8HpUNtSFaox1EBQaWDFsYAyn2RK90yKrT52o5EJpg/yr0ia0BSZh4zSAq+tjqMUpZM7jxHSEtUNJV8lEW0kqbSS5JrLSfOhaktuVAhanhKFbo0GEyafa0o9GhlyIQymkJWLY9SunVCtQKslWqVdzGnIIkpZZmLMqpwU0fQFyUh82BNYVWo6Kk9ovibFP7YG7+kZHeHQZSxgOju5VSOytDRox2xXL01n3tvn2wP5TKr9uDdt0z7UNb1HYVRS9qmNqTbeZAxtYP0vJTyi/4dw41Ku7HM/Ln6tnsZ4/Vx6d9YrtAiRWWjitJj8SUt5Y9sCIUgWwyCKNFt84jWxauxcWQkLPVrw7nI0nZQnmyqLI173LaH1u+XAv7130dMPELuF3TTIveEr1Y+MQA+/YMK/1t6UT//6PN0/vDyH00a5ux3Ev203kyXEsdEjC0/acY9zenIKHvscQbA2r0AB4zYYTpMPo4FzDgki2MUcfErNxi4OS7usrfO78AuehV8B+e9m40b5zidHdb5L2FWqWYJ0SF2jlqANWaOH3StBQnm1F1p0h4OeXdwYwRirADiXb1U0VNq0TfDZ5U70YNcDnFloiCl8wFZXxbVW2qUa0q5eI7Xw5TB5mI8wNQdlkn5MyHQhJWHOvFqhVcnEUQo5nZohbm3fumSbgyDcEv7ulnydcnJlwYDlDKqApXeXFa8qpSUtN75vcrDVQZfbbxUF+QVs1Td6nQdIKotrSqjUdM0UuYd2wMkrXamy+lUZtpuTPLFmyedHu00cpa8g4q0o7Uj0fnIGIHTS6RV8av6WY4D1avfipUD1P2Vqg2GNOrrRf3Vc7hSePptUBpsouorJyLx+dFtDEj3IhcrGTp+BomJxl0qg8T2Bz3YKt7lSQTAaF1cxcyK5Onn4hcGFOPm4P4FK3GxQAMDzNH0cpObY8WIf7vNsSYHPcCBvJChGJld1SPkABjJb5XBeHlmJTPSu3yATKpM6htxMBDgDMAeBwA7c5af0ODa5Y+nfL0DzNmT8BrP5o197FKc8cnvBf8F4H+ANOT/6R8kfe/+BUIeBBwZIe83T/OEke0Lae3jNJHArtNTNneP52qfLQDVUxgmUdrjj6ZBiKe6EuPU1kqDQK3NpN7m+Dte3WrO1UVxNaOs32e9VHI8pZuktVgFRUduPxflMKbKFXXnpgZ0N261lGnZvWq6+eqsFjdvi0q2LmzMp/V3KyIVemVSGpUi3hhNIVLq7tUCBiWvyCaEV3u+GO1XUxhVIU1lBBSC6nRVEoWBpNNNcaSsG60tF8fVRPGkFEuRZ66rXA11UdJhMmqq9lso++X9L20GL5hqSqZoQ/U9j3VRJ6iNKx1fGU1NG4rtNorYa4M9QyQ2k9S26+e9LmnOWD8yRZvUgR0Dp5e+L65UwZ2FscsLUuz2kVGuaupcOSoWypt8RfPtqqsvbiS7VdWZAczX1or26ehsJVYkGSIBufqp/wb6n+vKQ8j9gSMj5B7zZ3X8x0745wBeqN+PAADmde7mNnt17FT393Be6Suv1acx93RBDvm85NEQTEi9aRjEzYNfYMsYyZbJOEwA4A4yWRvtE5kQhk5mK5NNnbkyWTi4GFFkgMCvmW+NMl3yBAqxfsKIAzA4SBhFgbEyxrm3DnZO+qggrPOfl+lPa74K/J4qWVMzWeEwKCalDEotMTbp1pKS0zPhg4JU9wZHBUSA7CuuDA5N0QMMtIqHUkSVyPq43Dw7BOq5EFqudKKn6KpzSXnv7f5dCVBm0iRV2hy2TE9v3lcYYuqc3kVbLRSQr1dl70167siyis4jEvIyzSSjutymlFdbRelaVS51z8rWYaoksmUQdx4vV2CQNm504+pN/C/SzPe6NBJz2es9Ggvh9A7qgGorbXtPsqtsyszqtqUyNZV8qc3ktpmLqJ7BKivjXLZVguVrTZyN7kcsjNHDiX7UFQKIE4nVKiaMXFjAiHPBdTP17YgxU64HP3wgfgyr8IgSsYe4eYmYMMxggUkw+dHnGVaM6jMyU9x+xNpw3gEw8wwBBgNMsPMMYJhy15ERPfSmjudQPX5wBHtcqZegeiFevlIiZOPF2Edi8KHgtVS7Jb7AOse+gYTcDzgyQh4w191sJHK5cH6/cL607mcAGGbMGMqVfuOPPG+yM4vE1ZsH5+O89Xrxs0WqcFvoSqrTdpN+qXuak9tOV1kqr/HTIIL3eTHZRKWhlUygVNyTL32luOrJ8FGpzl3XKHpT9UR5rXzXhdeKmgC61zopbXoCs+7FLVyqdBpRfl050h6bWIaqbqDCYlkLw0xUeH29LqApb04xchSLIyqP+Leqr/qW13uNaONH1yFUXehMCkNOGVa17FoAvfNhvfyZUXGUkl22jZ7REMup26A2VpDTq9tbkV7HWNAjF0nR1+0FOa/CIFL56hnb+h4VaMNIndPtNxmp0cDKdexD8s5Fam9IlUZenFnSL/iNI0Pk5q0gkosd/pYbcVbVDIROl85U8ubdk4+dfn6andfL36kHx/UihQ1rMcB3KPlfmeOrZd0dVuZbEnJHoDFCyCL1RlWRhUH4Se8zAgwDMM/AEHfPiszhh3r6bHEidNk5oHHhck5NLgnu//rTXyv6vc9QoRfZeKqvkyvdJYYYifM9VOef+ps6knViaWM3+NGRNPqgNDStuNWCF/lpJTMq4lo700q2qa5Tf5P+qvIqFGNlJEhVx7VLWE93Lv4qpbaIq5VCU8pUr5OcwtSJpF+H+OlGqptXr5+bZ9qXQvaUYC1/odQrxT+NyijNtdATF4whLZMuD8I1RR0qpbkRvWigpZFRKK0xzcrgaQzkut4bNbkMb3/05TFVWLGNfDSwtOiSy9e4YfXarI5rVN2r8tVGVZGIhHdDuXli2cZyIrl6yv1O/E72VX3oW9+8U+qA8L/1cdICH4UBpn+EIV31ngG8seEWdjhUr9Em3G90GF/YYeWRGdXeUQtOJYv9VFXH1q+65+GR+ZaE3AHopkXuKLU2e4xv8uFf/yMff5APh+d+YuDh6p/qumxwmF1eK95cvVGZPsJhPMvfLpnzsR3zF+rMqcWzvAuWGQAn0+StlAEmL1qPuIC9MfbgVaYZmGWEM4CdYezoHa0M4CTu1OU1A2MG/w21DnAi0XIpVAwnaVInjJmRVYwpKg5WZm0mhR1JxCYdPKrKElQVARzE71AclRYDDC773JvkWpYxIXkTuzujXimoFJdaSVKlXmoGK0phmFBf2BZ1j6wvhx+H0ntghLpIv8sN6yXIL0o/q5RYdRzj6fzj3UCTZ5BbxUrpq7TLspTylupzr+LyuZRXnZaWpVBmy/B4kOunur/JCJPFFVOzDbVch/m3lMcLjaNtW0r+cE2up16Z1A+DjuztNUYs/IIMOhELiCvyysfx/jbWQq57g7TlRX5BiS5GJVanDnttR0sQrrExmpF07G1Jp24mlKFoZQa8J6UAEKfKKBJnjxhRjpzWuJxEnsDujJ0BA+NX2wjZyCRwMLCYIVM0JI0xpdpvsMfgYGEhsw+bZ2A0sk85GXdIW7CbvPCVkzm/kwWTS4eYgAEws3+vuxmDet+beLwD3OupaB0Hc+ZwDuAKGA/xW/IG9vEjH+8xYObs4qsHWoYneQJ74aUVPby++Aan01h+hNwpODJCyFHe3OzyzmbstQVQfMksANf4bvVJ8dpHudn2oKOUNnpXpV/VnfkxvXZXki24JlOd9lo6tQy9C1rjp69fGxUhx3NlXRhgy+txyT7qymHy3/61auZPOlpuBK28ZdjW+1LsTVMNaqRl5TbcpF6eWvcvBbZtvIUseve1+L1wE47dm6V89VjKscR0XP+suCY8zQarB0tCWD1g0lS11I+mbeRZq7NeO16z9epnJ/4tV1aO875m097z2BJyYyqW/u1g6v+Lm9CZA9aRD87GVdELmn3YXT/VSLm8r16Tvb/w725pPd+rhfNH+N3xKIQ8OGiMkPebn992BpPyNy4H/+Nf/2205cNocfTpjD7PcVfx5jtfaxW1O0d9qvr4695TqY4hqLyfpFGqjqqDpuzB7ypFXQWuf2JJwdLpJH1IdR7X+QC5NzifrpTyRtAate19LdRitRy3PhtFOep7jeG5RL63+beek1uJKa5IPxkWSh5NXe+NUZioliMG1CaZVZpVG9B59qqybYcqj/hfp7FtMV50sj39eq0+jhkQaaRDRS8MkIRr6rWWocyqbVe9Nl/k2akMKVKO+7+YKg6gZ4wIUE7c7xjNPRnS8+l6bajz7gq4vHxWwMItdOz0n7a5eDf3qGeLLNki27bJ/bA58/dN1xHysKCbFrlnfJ0Pv9C+sN/kb9PHeW+RF+f5G/bp9/41b3/zm3RuHMbUJf7vq0t5Es7bR+fFt8rs8zC8tbs8VD/5IfwDkseCjyPiv1njOTC9mdIWhm44mGCYGCND2FHEAoIZBhjCxiLpo+p/2KpXzkGSs5iZvduDWMDoNfZFdlEJMDBD9N6wkwQfL4EYv9CW9YqGDStXmah8C/7/9u5tSXLbTPD4BzDr0Cdp7F7bY4citmNDV9alH2B8sa/g55H9OuuX8DyAL+3YC8VEz65Cs7ZClqU+VVWSwF6QAD6AAMnMququqv7/IrqLyQRB8JCZ+AgQHGx4MncYWMuIiDjdX8OL2E61Qui7fltVPDNVfFPFIn8w3tRjfVYzylMuyUrg5/NjcdX76T1VBvESqyZTxxOdpl6QelWmXm69TVMKJ9NZkcurYV7yoXJb9FqdSLZE6pSS7/20XLm3l4I+r175eWnrqafL5q1ueOWzDhfOqOl4l8fFSOirN473pMNs/X7IvxbFF+dlpRRlzF8c0Ur6shz1LRr/H7K5Y5U/XBxI56Q+O/Oy59OtgGN+9NP8VBoZd6UYsSY85iZ80dj0NTA9ZMWLF2PUSIPifAiCjZg4LJeV8fvTh2eDeBFjzBCeo2Osner9nYjzMQYwIuLN9NqJWNNdhiFAvPGX41enES/mckoi1psrq6ZjmW1q5zgJ3bdOTve76X7AQYbByPjp3vVTt9y9iD2dfhMuRc7ORN663l1NZdO/JeZdes7Irns63bnyVOwj9fyRb9KeevnsRZp/Gg7H31OCL36njqL6bZQvBbhPaBnBw/Jvxy/6dD1JxfjbVT6HPUb5/dQyMsUSg/q/KbtYXbv7spK+dp+mT8tnFaUiYf6yvOFDjfuf5STx4fBLTOOVKUrl4//FOirV8bJ6pS+5mllKPbd8jp2Z/Z9KoMtSXgtP061Wgtr0vFJqsrVmV/1tuY0hdV7lzlOZ2Z7L04zT+p4eE8O1fIQkkdbxyMuv1a9XpzWkddaXlGqatHyWyunzUm/7/BkX6Z2wn73aNynQyK/n67OnPBemc9CV59x8b+evy63PjvhsWR1slGnCNqQtCud2e+0tZlamsPbyk5/v77lW4GXKZPMotrmEq6xuvQXRiYh1bjZPJB8mJBkqU5MpENlN04vODuid9S/5y+ciIvLd1qWBB4VgBA/Lv7+/VY3N8CoM6auTWbfjrpg9exUaQ4LZJ7QxOkwtvZneMSKmGYCMFSKnKgg54xEvAAAgAElEQVQmzc5S+WIZsUZss7KThxdlNW1203r8f151N0VtpHZN2qg8yoFF1UClxbJ5a4Beor1N82XzOfPqbbpiXeZdqzrWt658L69ym9n+nVP7z+ZhSD1MWq0vSrgmX69OpwBAV9Z1BXp+pPI0+gyaVd9t9ujELD8/O1/mYZt+Hba2PA/m25+OrBczNQJkjxnPlijP/nzfpHm1fZDv//Zx1eVaS1XPR39y0rpD+vLzkp8ZfhrNz08dxyoXBGo1jPC9JO2wIu6hRjzswjdY4x6RcNtdmpN/Nc6L1WVTtctFvYjIrt0tq61xz+E/85djGPL84NyBh6D1qwvcIV7/PiZ/UOfvX9T0T/6cfmvOPo3Tn+3OrYjI5eVZJ/IzEflW+me7+Cv0C/t2F57HftWfjlHGExF5I3IydDHq6Ls+ju1rnYtdgzvbpTF/jTsPEcmw785CU4mx7jwl8eciIqbzZ+EH0PX2LPwuGvFnItMPq/dneqhfb4bT1P/fnIyJnHifymnE7MKvtbHShcqF97ZLaaYOW86Jsd3UjJJ+xsOonV5EnA8POoxLpVy8Hrs22Xa1o1b1Ta/HMbjG9U5jFcW8a41E7eumrapmbb2tMi1V7DaYFbC1zvo15nZ5DymDGXvKTMvX91kt7w3rszKNN522Ix2z1vK1fVrZF82Du3z+rJd3Ka+yjLqcqtzldod9HPsChX2+ZMvxP/KYF9Jnam1do16mjptxf6ll9MMN9a1ARnz8zOio0unbzAcXW2/dGGNYE7pryfi0womX9NBCY/x+LMo4OpZ36SGIxvsrtczVlK146S7DdGfHsXY7EekHExszvDVxDF7vTi9EeunMkN6X4VL2Mo6gZezllYwDvTtrxzRhBK1hdzUO53su+26IZTvdXcXpt+5x3J7dqz5u59nZZZz+ur9I++ryh3H6+9+keV+oA/dlEV9nys6OwN1Cywgetldfbw64X9VmvtEvWg9BnOi+Wr36k92ZVe+iFQfYrQzYEq4huuzTWvno2nJeil68hCvi1cxFwtCcBW/HDiG1655extaRvEtTTatbR8qp+nq6fUXd05LdUh4quPVbe/X6yopk5Zq/6XzZzhHFwCtUwJa2c0VleNh4S3m4Xadcf0kPvDxbr1FlbpUhP14pUMjLNc+nUqbynHLzdGmTi+Wtnq+3Zd7mVGRUKetaoCnTOVSsezayUrlPG/ulPBdccQxcUeYiEMkPT37MK0MfVNZfZlKWc+m1DkQq69LHxaoyZYGbPj9qZU1tWzFb4ypJVaY2XzIqWovtNDMM/CGufrqHQQatmlOmW+4w2+iTFb7nrypPnDpyBC3gY0cwgoft2WeNX/VvVxedP5eq9RDEyXTNK/xWhX7GfT+9iL9tlZ/AIc2rfyhtuqdd/w2cm+4kdcX7+r5RkVklZVqZaax1rBoa8TZ05tBdN2qV4ZqlCnyDNapia4q/ed4uVuR1mVoVpMo8KxJvAIjUy2oFTP2tVqCLJDNlUOU3XDmfllMV/lmlNj6YZuGYVAvl228v/kqUleylyrvk07Xgwh5yrhzWsJ8FXUv7R0Tq51utpSgL9zeXL9/0PDheul0sPy+XArB0fsyDm5VgOl7DMOrrxKf15dG/lNuZmkDy+U4N+6djVl/dUJ+6lhYjC85OG1u848I9IxLurp+pD9KbrNzVN2o8+zZZ+b0AEDGaFu4X/fv2+0aaX/1G/dr+NU7vZOdFRPav1cMN334Xp7snP0v1AH/h9A3t3c7E3yd35QY5F5ELkc4O/dQyL70ffz57EbHG7cM1v9MTY0MkYnxovnDiBj8NrGUlfBStGZvTx2WHVM4wgr4dfyit2fXT88JErDtR/bd2IV3I1InITlynrgvG32I/tac4ETHGhYuOcS97O3XU8kaMmXpeTIGCESMyyFhpcM7Mb6FNY/yoMqU1y7SEHSs6ZiqIFy9iTCqlC2MJzStRob0kps/qHrWKcCp/dnW8c6qbzfg3VUXDeEUq224sl3TpKvisrcKOnVCM2l4dyOnr4eN+kEpeqlJsjRiX9+MPgYwPV6idjD0yYvegkGe6F8B7EdNJPH3Gip8ZX09lTsWcljWpfPFBdiEvE5/VLc66eVwXl0sjUcXtsyL6gnl6rp6+n2fabzZViOOZFoLpuF/KUcHG88qr2m95lubbHNJMAXjszubUdk9rmrpmDSJq29JZPx0MvTNVkB3WpUub1p/e1scurD0c33wZI/kZ5SVVqmsdwMpQa2wvMTGR8V68Hed0LozTNY51FdPZ8fadNFxU+hiGU0pERHpJ/QGNeOvH5owwnIJP4YOMxTbinRMRO4TvLWO9aqqwfTzBvYjzZi/ShcBlP7bkWBHbX4X93XVdbLfo+/1V+ILx4uL8MLKWlUH8YPayE3EmdQFzZ90+PGV959QDbPd5/NLpB+C6FBF1/mnaVW+/jbvfPn42Tf9Cdk9fqsNypaan37Xv1Yq+lDSI1mGxOXCn0DICHGS8GfFc9dhab5nPm/vjr9Ta5bka1eKR35/ZvlPC5qkbWRb9IIqrkcXK8vQuVRj9dEU13thsU+XR2HS91JrOi0yVIZeqWrG66HzWPaMcEcmIxMqRiBmrNPpyq02pciowCsuo7lEmti5MFTY7X9qIpEpq2Wqiww2X5oz/dAXYi5fUzuRjnnkuesSoMhARUXk4mSr8oXzpbziWqQw+7dcQw07LZn3+4/4I5UtlM1Y9UV7t41kgIl5tVxFITHnWKsnj0TUqEBF1ZV7tB5fnEZZLf/OWvHm4rPZV2N5pm+O9HmlLVNnG8mRjhVlVwY8tjj5f2qV081Hqsk9A9d0Ynjkza5nLl07bm5dd7Ssr8Vwvj2Pcp04HrWGLdDqv4vr8m6T6jWRljDlmXUptc8qKE1tvRivWVD700C18La59+Xb1S7VXxesb75b1t8OS/2E9CXAfEIwATU9ERN828k5EHonI6t0ji+q3h9Q7BsQ06sFd4zz18xw6R5dUrWDpg57FHfrHu/JDnuKevMqQKodTBS1kqiqwoYLjRcTFWquqXocbfqWsqOk5OnAx8wpWqL46HQClfEPlK6uMh8BHfAymJF59zivPKXyYX5XO59cuVKplXFiqHKBWJFUL05XpODfro19WWcvRqiZuDNaM2rfxGrsqRzWg0vtKrdW7tERoBTJFmvRuepX+zo+cDszyLStGnGp0sWpeGFaX7b2MrUBlYJKO7rgt8WF7OpCyOpAxMSCLa9aBVey+lIJyHSiqEGbKy8j8eJYhhB4XTorj4rNgyE/r9PHDrdsop611ElsD8yBX1Hk2bYMtzooYxJiw6WKXvmV03JDf/DZbqvw6U9ckGr2uUuZOpPq9tdWm7lnBpTSfbPiu+AtgGd208ED8UU3/LE1+89v4G/ry7KtxevcL99k0zz1Plz5fvUu1nMcnj4fx5/exfCoiF/2FHfsAezk9PY1NHf2+T32f/JDaD1zKd9C1J3Wp3ZxZ3/Uig997cc6INV5M59ID9rp0J8nO5c0rfn+S6vpGf47jtOmmUbM6EefMFNdYMdJn3bRi/y/vjFgR64z1xhnT2bF27sbamU+PqBCxY9p48VHVobwOs+xYRbBSDALs+6lmbcYSuCmk8Wb8ExOO1ZxsWVWx8Vm3lylr03nxbuzvNkxXYYf4ZpZ+7IVk0kakx1mO5fBSdK2pt7SUlbmxC0+qorlsuXDlfbw1P+zH+ZMtxvJkeQ+6f9m0E8rX1oq4MQ8r8fBNtdSpgqpas0LlO7UaTduULjhP+1rGfGN5RcRY7/3YV0kfs3G79H4ryxnyLfZL7Hhm1XlhpsfhqTxUoCu6PHp+2JZQQw37ZRjXVQaP8biEj1/5/jTGUwwIvA/R7DQAXSifE29t3mKj94+umE/b6LNa8LT/1HmSbXdYdhKOSzxf4xs6nT5Pa+dwiGx26brCbrrk4Wzat3H/hm5W0yGaiuh6G06Pcfi+8QtArO3HxTorLp5ZRsSL7yV8E1g37o9uCBGI6fzQhbydH0J5xBbNzWbfh09av9vt0xdcl0bW8m7sbtWJeOvi/M6cxPYN51zsF+WnUbm6IY2GZXZpvf3pSS9+jEe87bMjaLx3F9Oe3Z08ju+9cunhubvnn8bpkx9SF+GX332VjuJleoCv/OpP04S+3/F3AjwEtIzgo/PZepKZ+c3sbem+xmJE+vLJiGHoXxER23n1KlrqTBCrKDa9Lqfms8ruXUrIzFrp1JOUi74PKW3jCmQ5u37F1KqKlV1OF2om1uXdq0TSpVLdvJP1FbJ5gcrChRv/a9u42N9E6t+eWT5jhbp9obYYlKDZFNVYt53OAL3t1rbLGyqRTr3UdWidLttnaoEyCND7unliSV7OrDJe37hxv+gKeJG4LF9Ik227fp1vYLbauC8l37bynIifj5CN1W+o87cIHOYnnSqfnZdnlrQSiOhVtfZjbb4tE+g3bLaO2keimqfa/dlrlVEtq9C2a/NDI/EzW+zO8e3KykVExjBFnNj1FueNzR87Wb5aGxpFLlvNIwA2IxgBNnjcmF/7GUrdivW4WpJik2LEyG4h5Fj73XTxP63yK64Clvg731yurDzkFdz6OmVWh8i+XWKR0oLVJyRX8x0rStbNtyevQLWr/XlZXLG8lbLrSHp3Ic9qxayIDJ1NO7usdM3iBjuvAS4GFkXlXB/2WYCq1lFmvhBYZsvoim+c1hXrYhGXL54Fd+W84nhmgXW5rbPi2UoaFTmV65qOqg7k88CnmFfJsjY/S+5cWrUtFnK2yMPWh+2u1bsX4pr8fCwCyJBzFmzZIr0Tp0fks9LYLzqPvDj5Ps3XOSZP+buwM+P7ocyuebhtVgC1suZXaPEIwyLd0vdrNgBiRfZgEQDXQjct3ANlP+pA3b33xZfpjb+oJD/5c1r4+TgayU5exrT714+8yC9E5G9iLvXIWqfZz353cRp/ty47E/M89UPs89Q/6Uz4Xdqpn7muP0tdtnbWhxjFxw7pxqWPYuiw0Ukv+5i3caYfRP2Wmi51xxK3k+k972UXK0cm9VawZmdVms65seJrbOpL46f6gDO7dKet35tpcBuRqdeXERHjfdHXoxMZpvJNeWe/9IOIeGesS6FOeHrIKtVtJo5pNoxXop1zqTtKGqgsxijxIO4l1fGGPMSwg6oYFcoyzlIVtZlqLvupbGXNJ75WSw12lkfzmv7Q+KuWtOLEDXqOztuK3UvxpOqy9LpslfUMoVVgl4Ww4z6dlh5ULq2yDmptg4p6Wlf9JSWp7Uebrrs3a5zj+aQjLJfOq9gtLJdt12x75hFYOmfzjRhTquhxKI94+vyE3mrZ0QnrdSkWC/tar7/M27upZ1nlXBER6XRfN69aR3X68FmL31TZCeZdnNiPt0cZEZETH88P78NNU2Jsir7dNOKW6cbHLg0i4mQfIxPjbTzbpt5dabukS6+d78elO/HG7UM3NCMn+zSE+m7sgiUiXtzeu94Yu/Pe2NR9axgvH7ndaZzX29Rla9cP/dhmfi5X5mmv2893+9Rtq3vyfdxG8zaNjmWHZ3F69+lL9cP2eZr+5s9p9l+mLsf6QYfZHexfqulN36zAnbFwuQn4WBw4gomkn51sJPnVC2RlP61A/65O8cMwzC72pdcr7SXZp7pxybvSBSU1LOSXrpezq+Rf1mmrrSq2+DdWAnUWZZbltNNXvYsEulqav29nLTAudpWZNyeUJSqrjLUL0TPWSq0L2lIdu0zppKi8tnLJL89LdkjTtefi4vWs6UDS0ahsUaWlwhVNM24KJFx83SjvLGurUsemhVm68cK+TdNFWZdimPplflds6hgBlHvaFUvZbLXFvir2k/7I6f0+b33Lj0O5zrIA1fereYnMR7FaWKbx1THfsW5xKu0k/VlsNavoRfV3Q3orv0pUK+Ag2bfnEL4xw/emXmgact2e+1kzSOvreuZCqh15X29d/ghfricB7hOCEeAIodvW8qha5VOx9pU0Zc/kcLlx6W6RbhaPhNT1apu6ypytSV2fdWV1OdV2XFGxmF/jLc0DnflrV/wTcS4FBLN6YTv3bCXzarWbDfcZ6kK6QSBba6OONKNrgeFicnm/ypSgVuZaxa2+N91sr1j1bl7YVvCpC6paDfLa9JSlVWWulGi2jK5Uh/PNNXZco3yqQp8HTFN+RZcpp1LOKqhFafJSLpTBhuXcFOykPZ+Wyj8nlbgszSj206wrlmu1x+mM3UL8kN7w3pnWZpUZ26zQC1WAzbWDylZUP7BFkLlwrg5FJvPgcsj+5C+62DlrGF8u3EcSvnv7eT+R2tf1IZ6uJzkaQ/rigaEtD/dM2T1o8nt1Lv9FTX+hpr+Zps++ir9rn+3O4/Tl5Vn8zeqfvcp+v55c/bdO5Ef5UUQedSfxZ2uwV3H61OzidO+6k9CdeOe6k3AnyeDseL1tL9Lt3ImIiDOncTm7G+L1OOfdyW43PsHdik3rFBE7DGmZznSxW0IcNUvE+zQtO1X3HtKQXnG4m0FETtTIslP9wpo0glZe0S6DpVQhSd3JrAzi1BMWh+O+b1o1tkPnr6abSq7it0PzL3qoj/Os6ilTLFtLf3i5W1THvrVtPdZ1l2/lt7Lvj9pv5Tq2rC/KOkkesNzCOg8pb7Cy3GH7ZRCxXSXPcVsH0/muEt6HDRjEShf/hjSpDWKnB8Hwkj30MK7JiY9dUafoxJ16N2YziPRdXLGRSyddJzIMYrqTXh8TN6TxyFzX9SEccZJGIbTGpocX9l2ctv4qphlUms6Oo2/1NqXdqW5aVz499LBzp1m7ysmwj6/fnF6lQRFfPYvT355dDmEwla/7CyfyuYh8JXL5edrZvxLd/XjeTev381GZR6YxH7ibaBkBNhkDkU9WUtW7bZVPytpXuwCkC3Ppd63vZXbFLuuuFS8QrjzEK75dVlVcmel038dydnPp2mWn5qWgpFGcmvJbqVWWsn5kOj+r9FmRZvVslm+38v7KfFusadqO7HaAWevURgdUSNMycWTnfJ+kueulqDctHF6WpXxr+c0bXtL8cj9vUlmiDAoqPYeSyhl7nUDkkF/e5X5Y2XrSVm7YQwuBiMT/dbtTHph0nUupuzyjTvJN7Bb3VXFAw71ns9bh0CKsntRUOSyddDK0tl9/l1bvTt+nr2bVsH0b42XNR3X86hbWAtwP3MCOe+YGbmZ//ijdOPhSjat/qn5RHz3L1vpGdtLJ+ADEJ1f1qvSVvYphxydXqQvXEIbtPRPZXVkXfkEHezL+tPp3J2FrvLPT3eKDeGPHn8teYr0+xiZWdurKdiqQH9I97mJst+tk6EXs5WAHEekGkX6XnofS2XRPeOfGG/OHEzHht9y5wQxT5cB0IjKECoAaiXiseZh6BWhMsBPJnrHihim/lmMuk5jpyRoxAAmtAkdkNltEXxkvrpKLuiJd7ZK20TzbOLOTeK/4YRnZsW0qa5KyKskwiHQn7fWreXkZqoVtql6xt3nFd/a+XoUt1rdhX4Q8x7+Nvne17cnOn3I7p+MxjB+Fzce3FtTZsIZyPwxThVrvlyEGl7nGfhlscXhUujhZy1MXtJf5tqsMnMjOiIgbvFxKOkGmRZx6eMpgu/gYHePSF7exfmwGsVM+ImJ674ZpFWaKcqb9oPttxZ5cg4iYeL2jF3FdH74s/Wn8ehPvhj58QXdm34eoY7CPUsuHd70XkZ2cSX/xrhcR2e2GfrgYv3evzuqtISfDo17kE/lRfpRPROTNaRrwZPfoLE6ffK+eM/K2T79TL64aN63/Js2PLSLctI6Hh5YRPBw3dlPfL6+dQ/VekhsfAbKPVxPq1cIxENEVvaFIOA8fuln9puvC6/qVyLkh1nXqCwzLt8S0h4dSs6Ye4WWSIa/W5Qsecj291ZZT5hmm5gWptWAtmhU5HYhBpJnHfFfWg6YsXVe5N6kLIyMNUltoyLajq+z7NGMe0+SJY1U7tuxVdPXSz7e3vmPqZ1FjJ5YfjFhxL4NOdTxahsaLYT5viOtK3Ztk6FTZ46WCWuYy2xsxef08FUmHvJu9PxTzNwab+jRb6SeWbU0rXfn9M0u6yy6jduV7N0J9WS/fGKiMgYj8eENFAD4iBCN4OG7spr7/uqmMlFpDf3mDe67Xf6dB7/Of2p30WVeDUMHM81n6zc+pn/2t9fZqfaVrxyH6/VmByopXtQ9Gmhi6WZKuq1XgwnSo/LYrzXn6WiljZCbdLP88XVaOqaLfVVK2i1BclW5UMEPL1UxRkc62prh/J1V1QwmHfHUybW+xyXmAM28tSivOohrJgt5BigdVptLWjkDtvF3Y0mJeFpq3Ciurn6VWI4WUB6OrTNb2Uy1dbUVLH+5BHRPVCqKOqV6kNV7fcvBWaSkqG09qjSnFVi5+Pyx+f+1EpC+6WKkUfZF0jdubWS/ahvP1JKO1vrwAZghGgDU/u+byZyL6EVnJ8q/gbupGsAv/TT+u2e/wrjIscDHZ0sX/gnpLRDlM5lE2tQxsKLTOp5J8rAstPEZyttEbL8+uFGVhZSq9bndoXLmeNymoN3RFWl2/7ip5xuI3SmlO0zN1VJn0VfFaK1q9ePNq7TCooLBS5x0ro+n9Lt7snLavvfcr66uuQK9+WsI7Uw0m44HpVFC8LRTKV7RQkw7ByqBan4bFHNdlEeN4JLP8isCmHrRtDY9rZ0B5NaCVdX4uNGO5pbV3IvUbPboUd+wqSZaG6LUnfuWaULS1gYSGEeBwBCPAmm8PTF8+rv2yOrmuMbRk2ToikldBdF1nVVZpqLdELF6o1Xk0kwxFJaXeJrNsyPNR87ssjapXLgUasS5Y1p7WSpS3qsRrycWV/frSupJbtqpsC05qVfTUO0ptS9aCtFSWfIvqV8XnactWj9kqWudTo6Y8a6sahrJavby+6vrL9qlBRI3wNCtKKM7ULzHu62w3rASyZQuPDgg7GWvUXScx0psd3zI6WdvSRnAw1JebBW3NfbxlXSsWYrnagBuzxqny/aGdKL9AUyy4ZYjeja0jW9AwAhyOO55wj20Z5vePapjfn43T3/w2zfufYuSv4+QLFZxfyX9lgfrV25PuuYh8JyKD6eJ7T67S5fx99y7+DL7quy7EJKdq+F/n0h2ju+kp6u7JvpOr8fKc2/fpIl83pd2LuC6/3bvzfXzkcNelPL2c2NCNwffjbe4iIt6o25/tLm6/N4ONVxOtmLL7g1dps994N+3j2Whf+YxU3QkZp/e8H4wxXTYEZaN6tOrY5RJdvrQNId/aBd+yOtTJLqadV5WKGlJl1qYEq8vdvOvv21vOu7pPxpk3XvawLr3O2vrVvLIMh5SpnnZ+frbWfcw6trQbNtl0c/qFKoZxvQ+hdJbnqcSHDRo/DSDi0o3dcZ6ImF26gf1EvNNfVca6od/3spOdDGYXV2Ftuou+H9Tz6U9Sk7LdqzR+SPPtmP5K3aje7VKUdzL8og/tIG9O8+iv82kMvdPH+/jeqfwyzn+pb8j/Ro3G8qs/qQFYvlU3sP9unGY4XzxAtIzg4/bX7Um/OyDbx+r/RZciIRBpXpw7ESkv77W7Rvd5t66+TL2g39o6kPiufHZIXpphWnen+pmFXMtAZEyvy7O87hiN9Y0K2dKy1bm79Le88b8o27zDym6hbaVSM2xUFlNPlFqCXrrVAGbLW5V0/VJb0MbzZ0WX3wU15T0vSJe/XDfrmpNq48NCHmXbVGul2Xu74u803ZUrUe+X2ziU5VGvl7ufhfXsmu+n8sytt/Xl8zYFIgvHZ5ddlIhtiM3ls1N7ZQjevkjU78fXzeIUrSM30xCytUPW9QdEAR46ghFgwfV+Rt7GqWZ/Y3UTSavr8on6v2ahbqNuOJkvlZ7QGCay3vXSyfxHv1QGFD7cGB3z3EknfWwdaV/prZi1uOhSigy1imFIW1RQZ5W8tUrubkMf9pX5R1+Rb1Qm28dh3uq0tGiXVRKnv4vbu5sdoq74u8UQg9GliKoI6napB9Xiupo12fKlCoRUAJYHwWVAnfjmjf+pmaR1V0VqEi22p/kcoUIIUtWxKMtTK/PSvFoQ1j4P5sFk5Uukkl59VhfybsbLzWWLJqDaV+S+/t7pbGJu8yBaq25jQBTgYeE5I7jHjnzmyBcq6Tdp8uWZ+PDgqRfPx6fgfifj79Xg/pZWpkL4N+rH7MlVuvxmBh/Xu7+68p2Mv4tnZ7vYNO+cdyIig+q6daKaJ7wbnw5/JSLe7bN6gzfGyun05n7fjbmfyIlRjxC2p2OZ9yJyqkrteiMy/fxbk7ZrehLAoB47sXNiQs1A7+29iKl9eZjQU2BqCOmzq/ypohmrETuZVf6W9ari17CbKmy7/Ap51sNmlsVhX4X9bsy+3SOmlz67NrxNGciU+dcrirv0R1XiWmWr3Z2yFDjV9tcw5b7UhahlMUir3IC81uXtgB5T+bsxACuWOp+XIaYqHo4z35b5Pon7WG1bdb3V/LKsx/fVIiaWR+Wl92G2P/P1zTdx7WzNo/+8x9o4ZWTX6CrU+3AS7fZq3X7qprXbpe5ZU1evvYiceuOmrzaR/sqH7znxfvoeHb/tnA9PbRex6hmrvjsZxJ2JyKXs5Cp+9+7d9PyRCxFxqfvWzg7DOxF5JCLDRT/sReSis8PT8L5J38/6WSK6W5aISOfG138TkRe6a9Z3X6X9c/m56pqln7T+28qzRUTS7xrPFsHDQ8sIEH11WPLnG9K8rs9+F6c2Dxg5c5r1NRgjiH3t6mCzUeX47jftaouqFvbtdDtdewyTi3WhZjPInGqVyXPo47rTNd5+vlgtq7I0/VppDg9E5uvuD8uj2VNo7Tgvtq1V82mX7JpbvVjUeqCzq0wvXVifraI8Gbc01ImIsc2Kd31N8xXXFz+KyktvxryZNL63/HHLC1vbJbNPZAg2VsrX107U6QKJXvZET+xnc+eafa8OGDbk3RiIaE+rCbf5xTWWBT4mBCPAsbbcRFL7Jct+8CqdATb+dlZ/e6cf7cptJtl801oAABP2SURBVJmlakOe5pg35wlmlZlK7aa8KL5cRZZZhWndLmaUKlL6mvnSteJ+VoYy5qmWZmU/LYVCu93U/HJs0LibTTQTrocfrXx0+fpajy6VsnZE5xFre5+sV97DOpY7glWKsSX/4m0fWxjz93uZVdMr5VzaT8uvr2O9Q1+IZMpAfnvm1U/RvnhdJpwCu+a2niyP0Csia49tmqtdByojkSNsuUYFIEcbHx6I1shaf1Dzp+btv6jz/gs1/Y2aPvsqC9RfPP88vhdG2vqliPyfv+9iuqFLo2w97V+nQShtZ0Veicgz6R/t4nxnnlqRt3LWX47z3om4xzbm4Y2xKa3NynMyqG5bOzHh5hN3tU/pdmdGZPyNvpB97PJ16sTELl6n0y/4qYh/tx+3cRATu0Podeof++Gtyd+v1ATKLOZZ5hc9l+ZuyGtNyvVEZL+Xk5N8LdlaD86/viVHL7t5X1XUyq7mneynFrSVdOslrZe73K9bctr2zkpuC2U/LM+QyX79vNu8vde1vgWHn7/j50Bv7vJnbFzDvCRXaYHusdezqyXuUtejs877q/DdcTXlY8WLnMqVXMm5nKTuT28v4zNB7OlJ1i1K+sspzzPZd2rULO+ciMi5XMilP3PlfBGRy93ZIE9E5M1jsd47kTciIrJ7N3bJCl2uRERe756mrllDmn/y8z4rz2m7a1ZKl3XNkpWuWSLy+y8rLXGMoIWHgZYR4EiH3Zb4rDLvbf5yw1W5+k2Vlae7D1cqeEpOazNrr/e6hlKzXNM5qSUpKzrN3Ctzl/JqLFarZ8epk5PZWrLXKxXy+YL7+fvVPnM1+/lkcSV4VtFc0uiqd1J25Wt16dunf7N9mK27fpwWixfe3LdTHVOx30/rPijPZtefvVSXqAWIW7d3tqZWYVvz96uxRXn+nkj6d2DhGsHMmH5fOS/GN04qqUfe7ecXi05FYiBS+UKaXd443dL00WpWzptBfH+Rl+eNyOz7GMB7Q8sIHgp1LjcuFoXnj+hnj8jv0mSrlUQkayl58Tw9e+Pqm7PUMvKJjfPH1pBpWj2X5Jlq4RjMaysiMrxO7ztrq60h58ZYeZf6d/mTx+lZIZeXqTVlJ2YMWc7FnzxKafrLtD1DuGn9TPzucvYd4HtT/V44i2mvZN4SUgmIWi4vRc4OSL9RaOxRK5L1ci2k2bL4DRjLnVY2347r5H0pVzLewLt1Y9IyS2lErm5l/yxnepP7ZpMN29iqTtfTtvbttu0+fvs3HqyN2zv7nFWWu+zPql/EZufr8/vpi7tL75vdmZdzEbkQMft30/wLedSf+3hh5lzEvD1z4bvR7N+mZ53480pryBOx7lWc3z1NLRydfxqnX03pOz+48Iwp3UrS/ejiek5/dZm1jLz8broZ/9XXRk5/m8YlaLWGyB/TZHieiIhI9Zki2dczLSN4EGgZAe4Qv3/buEBQubOyae2m+FBruMxfSj67rXKF8nKhy7bK71SkEohUVrjhvplyffNKWr1WdbqS5rT91mT7DbFL13LzSmxa2Y1UtqciXqrAc6t5ZXm+vVeHZSkiW7v0p0xr6a8qxZmnWz8+5TL1sl1Wt/FUvz+VafWYTUVqB3nLO7MM//1wZfTr5X17QNRYJGseg3LObQbts+bg82nWeXr/oHs93hxchM3PmPrvxetnnxEsABsQjOAB+sOHafG79tApT8WcpD7Xt9Vp4GytsnZ20PgzcZlUYbqcvRfUK21FcKRmZRW/Itt5XttKvVRxLK/61iut660G+bqKcl1uu8K9VnlffH8qoulOK5Whw47uqZzJcsV3Kb/03qFBVjX9rF59WTleoSUoL5evdF1cbtWoH+d0nh9QA58l1eVL5TxVf8t9roMeo1oP6i2CxcpXD3k9wbZjduid44XZvjluhMF360lu3Yv//NAlAO4numnhIVrusvV79f6WLlsiebetX6XpFy9fxoC+/8kLI/K1iIi4T7spzS9l//dvxzTfigz/+kPqUvX4uRERefZ/X1n5dJznzlNXL6e6erl/GKNH5vJnqSuVM+9SnnvVxapPecnjdOnwfG/MO3knj+RR6jv9TkR+GlKktLO+1U1lBeKiMu8YIZ/y73Xyar3evuTxKW9qv1xfqyTj/K3bUaS7EJHz29nGCxE5Hy7NRXfm27nfnf27LJXzFnfZhrWXL/SsQ84BUWkvZnma3bn6In43ft88kiyCCGkuTt76+B30ViXYpW5R5iTv6mX9o9hNylym9+zpEy/yWuSZyOsfBvdJmH+R8nr1ybO07Nvv4vxu+NSJqJvTfyli//fgRT4Tka9l930f07588SK/of4b9cNzI12zRNTPGq0teHBoGQFuzNeVeeo29581Fvt0Q9YhEGk8t6St3n/hkZr/rp3sCGXF5Lq5hXzKv4eURfJuHVElr2F+D001ZevxzBfnKwnWyr/y3OeNj4XekqwdiLTeLZeuVFbPtyyrVrY+K8+6DETC8dI3EMQXzYN0XOEaqS6mtBdLiyy8V9tlF5Xp2rxjnTdf6Fmt49j6jF+k99ZOgcXvm0ez6WO+nl5P/z8VEXkl8sli6g3iV3nte/62fKBWfuA9IxgB7ryn1clt1jsvbPuh3xoEbA8WVitUF8eENDrX1Ke8ns9FsciFSFfedHtRf9Uq2PlagjULy11s3yFbktX2/3nzndrSjbWsxQLhrWYl+AChu5K6fWA9cN2wlovZRDOn81B1P2+cK+UqWxvfSF62C9aXvrh2gCKyElBlJVp6LdePlqJ36v/DHH395k6pDecLPDxE3XjgGs8fCX7f+Az8pZj/xZ/USFvP0vT3acQq+dfT1H3rVRpxq/9Jmk7dt0T2f//eioj4pz83IuPDsr59l7pW+cepy9Wnl/kIV+5cddNS7/mrV2ladfnSUYy7emMqs/MuXivmN9o/2broNT2R2g2ofv/W6PttHqT6puMW3Oj59ETkzZv39wk51hs5tozppDx0n2XdraaoYexaVcwUEaO6VpnTZ3k3rTPVNesiTf+g5pu3Ks2jMa/nIvKP13+P809+/pM0+tYPgxeRvDvWszQt/+8qTf/kXb7dv3qlumb9Nn+GyJeSPT5ERBa6Zmk8UwQPFy0jwEH+/cD0L4vXv2ym3Dxiy016Xfy9EU9kuVrzZPHlslpt/MnBlaDb8kaWRkS7gczvmPdWpNuoyS/keaPn0w0FIre9r5/E/3K3dj5XvD686fdalr9zP7udlZaBCACCEeAw/3Zg+hfF68MelXjrnsoYiNxoHeCNLFedivfeXLeqtrGatnE1B5S8uoq7EhjN3XyNfi3HG6tA30ZN/Mg8D1/sZvb7k2tkkwcUh2X0Ps/np8VVkfnX0qv85Y9Hruj5lkTv894Q4ONGNy18RI7ssiWSd9tSg27JX8XIv8nYYJKNuPXXNP3dcvct96ZTy6Wsh9dqZK23Niubf6q6ab37p3rvpynN43q3q08vf1Dz/2X2vjv/8YjvhS134eOhcpevjD17dkeDMJRu9nj9cFBqe/FJY73/HHM7+7T+UMS3egStf+R5PvqX1B3rteqO9dj5v8k46nr3NHXzkm/Usk+GOL/aJeu56o71za/ro2T9uuhmpQbKki8aXbDomgVEtIwA13Voz63SXWosmccmwCoCkfvlThyvQ79r/lHO+GktVSYEIn87cFW36ssPXQDg7iEYAT609m0k798/P3QB8D65y1e0juPGuMvX28+nQ79rptgjxSSz6GTmF8XfO4F7RoAZfojwMVp+KKKIyO/L8d3V5azmgxLViFvy2zT5zZ/ro2998evx73dfVbtxyYsXcbL/4etx/tci8lnRtUsZPrGrn+myy9fMz+uz/dt/zJZ7LuEm0LVO2N9tSHOd9Flhbkcjf/fun0Z3Ezkymxsrz42uY9ERx2ghL/euO2g/ioTtvMlyXNM1d/zNHDe1P6YMt+S7lia+P0tYX8o8/mn9WP59uRz2sVs9B7of22mybleffpbSvXyZJvWoWM8/VyNf/TVlFEbI+tVv1Lr+lCb1KFlZvyzJH2Koo4/ft4bqzXvh1tMADxctI8B79+vjF72lAV5Gracytm2vOB1aWTyicvndLVe/G9kfWoG+qVI+X8hofR0HlKJ5KA4NLpdXku/HbeXbEggfdiaV6z3waG2opIvUy7QpENm0MSrR9JnYshVrab6bTRzm24OXuKH2jP9+jWW//w8u2ALvAcEIPkYf+Afmr+tJZkMCH2+tv/S3lalFN3URei2fg9dzXMHyAQDev2N353KdsP7u88rU+oqW17Qtp4VU2Vvf1WZe65Q7rO5crqm95vUytVOEMulzb1M5Dw4EbjJQu57apY7lb5wbutPjP6+x7E/+RwqQDx1IEcBmRP342K132So1H5TY6L5Vjr5V0t245DdpUo/IFVpTfi1jLKO6dn0un8dU/auX9bK9qL+I3b9uiHvzN2Of/OL9dDOYuqytzMLBPhOGNb2GtZPwg52kBx7X91zO1KXqZZr5Uk+8SGmfvUjfMV+JfPX5V2kZ3e1KX/jRI2HJn9Nk1g1LCSNkZT2w1IusK1Zh20hZ+gVds/BRo2UEeN+uc4VtS6PKoa5R7ywXtd83fthvoxyVitJDDkTeX3jwkQci2ebXzyj35m/tIH7tJLypk/Tgw/T1YctsKed7O1VetN/6vP0WgPuBYAR438qhgFf7JV/jHhPlReuNQypHReVjtuhnRYKbrvxsVa73OpWmu1A3//qzBxdoLVboD3IDtX99jD9rvZESvLfWv1JRzq/lwP140yfRQzspA7pkAe8V3bSAqpUHJNZkI3A1BpNvdeUKWiNylVpdu1q+V12+vlhKGPqBhaT1QOhSdROr+kpu4Yrl51PGN6t/9bXZPfvsGpXL2ykXbsvK8Wqdu7dyTi9ne0urvDVnWRep5C+HNOn+RU3/5NcbP5cbul01R8LS1rphbRkZawkPMQRqaBkBoNxGP7CbcjsV/t2zz3wt67W1fVWZ2rzwA9C/OuJ+o5UY4P1YWVOr9n9LUcFStvq9j+CU2k5fXAFw7xGMAPfdXfxh/iCXc/WN/Fsqyp9XJxdmbX//wO0/qmJ/rBuKnY5qTVrYL/epBaDudrfg/u+fJQd2Rd3cYgLgPrh7lRjgzjuwC9eW7ltB1o1Lq3TpWvOt6vL1W/3Gb+Xasm5iB/r+P0w2ZOZteB/rAJBrdpE6xJ+qk/KzVteqJX+sz14aCSuaumTRHQu4dbSMAHi/bipIWLrxn0AEDxUP4jtcIyYBcDfwpQbcmCNuehfJR5j/wwGtKMdqtr4AB/j2r0Z+RncZTP4o9Qbc1vyW//U7r+8Tvzkq0y9Va8fR34a0fgA3hZYRALhN397Be3puwm0EIh/DFexjzof7sF9aAcehPUxvJRBRbukaD4DjEYwA+Di9ryDhPrUefOjA6dCK6/ss700FBMecD0fcMoaG2w52AByMYATAx+k+BQkiHz5QuCk3eZX/fR5DAgIAuBUEI8CN+cPDqCzibrqpivdSUPM+Kve3Wam/D92Z1tyFbbgLZTgW3bCAe4fKE3D71OfsA12Mb632DwRQx/lS6O+BD+OBnntfVobQ/aDfTnHl96sFFbiHaBkB8IHdx0uZD7AyeF338TDeS+/53Lszx5ULJ8BDRTAC3FsP5cf5D3eowoOjEZ8l1fP5np7kd+a4HvPwQQD3wQOpzAAP0ofv3iUiY9BDRQD31fs4f/mM3E1ZFYfjA9xRBCPA3XVHgpHbRkUO9wHn6f1DMALcBwQjwN31kQQjALDmmGCQYAS4DwhGAByD7w7gbjLy4SreVPgBHIwb2AHctrsWuNy18uDj8L7OOwICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA++b/A6vg0VK9Uz8lAAAAAElFTkSuQmCC","e":1}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Bottom capsule","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":203,"s":[100]},{"t":210,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[205.695,273.127,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.4,"y":0},"t":85,"s":[{"i":[[0,0],[-0.587,0],[0.003,0.278],[0,0],[0.282,0],[0.328,0],[0,-0.282],[0,-0.004],[-0.278,0.003]],"o":[[0.004,0],[0.284,0],[0,0],[0,-0.282],[0,0],[-0.26,0],[0,0.004],[0.003,0.278],[0,0]],"v":[[15.38,0.504],[15.392,0.504],[15.89,-0.006],[15.89,-0.006],[15.38,-0.516],[-14.755,-0.5],[-15.265,0.01],[-15.265,0.022],[-14.755,0.52]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0.167,"y":0},"t":125,"s":[{"i":[[0,0],[-0.284,0],[0.003,0.278],[0,0],[0.282,0],[0.328,0],[0,-0.282],[0,-0.004],[-0.278,0.003]],"o":[[0.004,0],[0.284,0],[0,0],[0,-0.282],[0,0],[-0.26,0],[0,0.004],[0.003,0.278],[0,0]],"v":[[54.505,0.501],[54.517,0.501],[55.015,-0.009],[55.015,-0.009],[54.505,-0.519],[-54.505,-0.501],[-55.015,0.009],[-55.015,0.021],[-54.505,0.519]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.65,"y":0},"t":185,"s":[{"i":[[0,0],[-0.284,0],[0.003,0.278],[0,0],[0.282,0],[0.328,0],[0,-0.282],[0,-0.004],[-0.278,0.003]],"o":[[0.004,0],[0.284,0],[0,0],[0,-0.282],[0,0],[-0.26,0],[0,0.004],[0.003,0.278],[0,0]],"v":[[54.505,0.501],[54.517,0.501],[55.015,-0.009],[55.015,-0.009],[54.505,-0.519],[-54.505,-0.501],[-55.015,0.009],[-55.015,0.021],[-54.505,0.519]],"c":true}]},{"t":210,"s":[{"i":[[0,0],[-0.587,0],[0.003,0.278],[0,0],[0.282,0],[0.328,0],[0,-0.282],[0,-0.004],[-0.278,0.003]],"o":[[0.004,0],[0.284,0],[0,0],[0,-0.282],[0,0],[-0.26,0],[0,0.004],[0.003,0.278],[0,0]],"v":[[15.38,0.504],[15.392,0.504],[15.89,-0.006],[15.89,-0.006],[15.38,-0.516],[-14.755,-0.5],[-15.265,0.01],[-15.265,0.022],[-14.755,0.52]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960785687,0.450980395079,0.909803926945,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":1500,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Mic","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":99,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":198,"s":[100]},{"t":205,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":85,"s":[206,240.25,0],"to":[0,-14.292,0],"ti":[0,14.292,0]},{"i":{"x":1,"y":1},"o":{"x":0.167,"y":0.167},"t":125,"s":[206,154.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.65,"y":0},"t":180,"s":[206,154.5,0],"to":[0,6.875,0],"ti":[0,-6.875,0]},{"t":205,"s":[206,195.75,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],[4.636,0],[0,4.636],[0,0],[-5.694,-0.823],[0,0],[0,0],[0,0],[0,5.93]],"o":[[0,4.636],[-4.636,0],[0,0],[0,5.93],[0,0],[0,0],[0,0],[5.694,-0.823],[0,0]],"v":[[8.399,61.968],[0,70.367],[-8.399,61.968],[-11.758,61.968],[-1.68,73.592],[-1.68,78.766],[1.68,78.766],[1.68,73.592],[11.758,61.968]],"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":[[-2.788,0],[0,2.788],[0,0],[2.788,0],[0,-2.788],[0,0]],"o":[[2.788,0],[0,0],[0,-2.788],[-2.788,0],[0,0],[0,2.788]],"v":[[0,67.007],[5.039,61.968],[5.039,51.89],[0,46.85],[-5.039,51.89],[-5.039,61.968]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960785687,0.450980395079,0.909803926945,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":1500,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[201.888,231.614,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,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0,0],[0,1],[1,1],[1,0]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,-0.282],[0,0],[0.278,-0.003],[0.004,0],[0,0]],"o":[[0,0],[0.282,0],[0,0],[0.003,0.278],[-0.004,0],[0,0],[0,0]],"v":[[-13.753,-0.51],[13.243,-0.51],[13.753,0],[13.753,0],[13.255,0.51],[13.243,0.51],[-13.753,0.51]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960785687,0.450980395079,0.909803926945,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":[246.957,273.118],"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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-13.753,-0.51],[13.753,-0.51],[13.753,0.51],[-13.753,0.51]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960785687,0.450980395079,0.909803926945,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":[219.451,273.118],"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],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-13.753,-0.51],[13.753,-0.51],[13.753,0.51],[-13.753,0.51]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960785687,0.450980395079,0.909803926945,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":[191.939,273.118],"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.004],[-0.282,0],[0,0],[0,0],[0,0],[0,0],[0.003,0.278]],"o":[[0,-0.282],[0,0],[0,0],[0,0],[0,0],[-0.278,0.003],[0,-0.004]],"v":[[-13.753,0],[-13.243,-0.51],[-13.243,-0.51],[13.753,-0.51],[13.753,0.51],[-13.243,0.51],[-13.753,0.012]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960785687,0.450980395079,0.909803926945,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":[151.415,289.942],"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":"tr","p":{"a":0,"k":[151.415,289.942],"ix":2},"a":{"a":0,"k":[151.415,289.942],"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":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[151.415,289.942],"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},{"ty":"tr","p":{"a":0,"k":[151.415,289.942],"ix":2},"a":{"a":0,"k":[151.415,289.942],"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":1500,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206.122,203.583,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,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0,0],[0,1],[1,1],[1,0]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,-0.282],[0,0],[0.278,-0.003],[0.004,0],[0,0]],"o":[[0,0],[0.282,0],[0,0],[0.003,0.278],[-0.004,0],[0,0],[0,0]],"v":[[-13.753,-0.51],[13.243,-0.51],[13.753,0],[13.753,0],[13.255,0.51],[13.243,0.51],[-13.753,0.51]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960785687,0.450980395079,0.909803926945,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":[246.957,273.118],"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.004],[-0.282,0],[0,0],[0,0],[0,0],[0,0],[0.003,0.278]],"o":[[0,-0.282],[0,0],[0,0],[0,0],[0,0],[-0.278,0.003],[0,-0.004]],"v":[[-13.753,0],[-13.243,-0.51],[-13.243,-0.51],[13.753,-0.51],[13.753,0.51],[-13.243,0.51],[-13.753,0.012]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.101960785687,0.450980395079,0.909803926945,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":[164.433,273.136],"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":"tr","p":{"a":0,"k":[164.433,273.136],"ix":2},"a":{"a":0,"k":[164.433,273.136],"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":[164.433,273.136],"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},{"ty":"tr","p":{"a":0,"k":[164.433,273.136],"ix":2},"a":{"a":0,"k":[164.433,273.136],"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":1500,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Gradient Mask","td":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":202,"s":[100]},{"t":210,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,273.699,0],"ix":2,"l":2},"a":{"a":0,"k":[0,48,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.4,"y":0},"t":80,"s":[{"i":[[0,0],[5.243,0],[0,0],[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045]],"o":[[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045],[0,0],[5.243,0],[0,0]],"v":[[64.188,38.773],[54.679,47.923],[-54.679,47.923],[-64.188,38.773],[-64.25,38.727],[-54.741,29.577],[54.617,29.577],[64.126,38.727]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0.167,"y":0},"t":125,"s":[{"i":[[0,0],[5.243,0],[0,0],[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045]],"o":[[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045],[0,0],[5.243,0],[0,0]],"v":[[64.188,38.773],[54.679,47.923],[-54.679,47.923],[-64.188,38.773],[-64.188,-38.773],[-54.679,-47.923],[54.679,-47.923],[64.188,-38.773]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.65,"y":0},"t":185,"s":[{"i":[[0,0],[5.243,0],[0,0],[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045]],"o":[[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045],[0,0],[5.243,0],[0,0]],"v":[[64.188,38.773],[54.679,47.923],[-54.679,47.923],[-64.188,38.773],[-64.188,-38.773],[-54.679,-47.923],[54.679,-47.923],[64.188,-38.773]],"c":true}]},{"t":210,"s":[{"i":[[0,0],[5.243,0],[0,0],[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045]],"o":[[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045],[0,0],[5.243,0],[0,0]],"v":[[64.188,38.773],[54.679,47.923],[-54.679,47.923],[-64.188,38.773],[-64.25,38.727],[-54.741,29.577],[54.617,29.577],[64.126,38.727]],"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":1500,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":2,"nm":"Blur.png","cl":"png","tt":1,"refId":"image_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":92,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":203,"s":[100]},{"t":210,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[207,280,0],"ix":2,"l":2},"a":{"a":0,"k":[401.5,239.5,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1,1,1]},"o":{"x":[0.4,0.4,0.333],"y":[0,0,0]},"t":85,"s":[14.648,17.086,100]},{"i":{"x":[1,1,0.833],"y":[1,1,-25.694]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":125,"s":[33.266,33.266,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0,0.65,0.167],"y":[0,0.65,0]},"t":185,"s":[33.266,33.266,100]},{"t":210,"s":[14.648,17.086,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":1500,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Bottom Sheet","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":80,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":88.334,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":201.666,"s":[100]},{"t":210,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,273.699,0],"ix":2,"l":2},"a":{"a":0,"k":[0,48,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":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.4,"y":0},"t":80,"s":[{"i":[[0,0],[5.243,0],[0,0],[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045]],"o":[[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045],[0,0],[5.243,0],[0,0]],"v":[[64.188,38.773],[54.679,47.923],[-54.679,47.923],[-64.188,38.773],[-64.25,38.727],[-54.741,29.577],[54.617,29.577],[64.126,38.727]],"c":true}]},{"i":{"x":1,"y":1},"o":{"x":0.167,"y":0},"t":113,"s":[{"i":[[0,0],[5.243,0],[0,0],[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045]],"o":[[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045],[0,0],[5.243,0],[0,0]],"v":[[64.188,38.773],[54.679,47.923],[-54.679,47.923],[-64.188,38.773],[-64.188,-38.773],[-54.679,-47.923],[54.679,-47.923],[64.188,-38.773]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.65,"y":0},"t":185,"s":[{"i":[[0,0],[5.243,0],[0,0],[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045]],"o":[[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045],[0,0],[5.243,0],[0,0]],"v":[[64.188,38.773],[54.679,47.923],[-54.679,47.923],[-64.188,38.773],[-64.188,-38.773],[-54.679,-47.923],[54.679,-47.923],[64.188,-38.773]],"c":true}]},{"t":210,"s":[{"i":[[0,0],[5.243,0],[0,0],[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045]],"o":[[0,5.045],[0,0],[-5.243,0],[0,0],[0,-5.045],[0,0],[5.243,0],[0,0]],"v":[[64.188,38.773],[54.679,47.923],[-54.679,47.923],[-64.188,38.773],[-64.25,38.727],[-54.741,29.577],[54.617,29.577],[64.126,38.727]],"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":1500,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Device Frame","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,"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],[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":[[64.188,114.112],[54.679,123.622],[-54.679,123.622],[-64.188,114.112],[-64.188,-114.112],[-54.679,-123.622],[54.679,-123.622],[64.188,-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,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]],"o":[[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]],"v":[[66.566,-114.112],[54.679,-126],[-54.679,-126],[-66.566,-114.112],[-66.566,114.112],[-54.679,126],[54.679,126],[66.566,114.112],[66.566,-2.378],[68.943,-4.755],[68.943,-28.528],[66.566,-30.906]],"c":true},"ix":2},"nm":"Path 2","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 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1500,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Power Button","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.605],"y":[0.583]},"o":{"x":[0.36],"y":[0]},"t":40,"s":[206]},{"i":{"x":[0.635],"y":[0.851]},"o":{"x":[0.314],"y":[3.484]},"t":60,"s":[205.339]},{"i":{"x":[0.456],"y":[1]},"o":{"x":[0.665],"y":[-0.02]},"t":119.92,"s":[205.15]},{"t":139.919921875,"s":[206]}],"ix":3},"y":{"a":0,"k":150,"ix":4}},"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,1.313],[0,0],[1.313,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-1.313],[0,0],[0,0],[0,0],[1.313,0]],"v":[[68.943,-52.302],[68.943,-61.811],[66.566,-64.188],[65.456,-64.188],[65.55,-49.906],[66.566,-49.924]],"c":true},"ix":2},"nm":"Path 3","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}],"ip":0,"op":1500,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Device Screen","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,"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],[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":[[64.188,114.112],[54.679,123.622],[-54.679,123.622],[-64.188,114.112],[-64.188,-114.112],[-54.679,-123.622],[54.679,-123.622],[64.188,-114.112]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176486015,0.75686275959,0.776470601559,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":1500,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Gesture Tap","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[273.205,92.869,0],"ix":2,"l":2},"a":{"a":0,"k":[273.205,92.869,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,-5.226],[-5.226,0],[0,5.226],[5.226,0]],"o":[[0,5.226],[5.226,0],[0,-5.226],[-5.226,0]],"v":[[-9.463,0],[0,9.463],[9.463,0],[0,-9.463]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,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":[273.205,92.869],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.239,0.239],"y":[0.604,0.604]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[13,13]},{"i":{"x":[0.596,0.596],"y":[1,1]},"o":{"x":[0.182,0.182],"y":[0.996,0.996]},"t":55,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.793,0.793],"y":[0,0]},"t":124.92,"s":[129,129]},{"t":139.919921875,"s":[13,13]}],"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,-8.26],[-8.26,0],[0,8.26],[8.26,0]],"o":[[0,8.26],[8.26,0],[0,-8.26],[-8.26,0]],"v":[[-14.957,0],[0,14.957],[14.957,0],[0,-14.957]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.68235296011,0.796078443527,0.980392158031,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":[273.205,92.869],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.304,0.304],"y":[0.758,0.758]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[13,13]},{"i":{"x":[0.709,0.709],"y":[0.99,0.99]},"o":{"x":[0.196,0.196],"y":[1.618,1.618]},"t":50,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.609,0.609],"y":[-0.001,-0.001]},"t":125,"s":[113.775,113.775]},{"t":140,"s":[8,8]}],"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}],"ip":0,"op":1500,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
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/raw/udfps_edu_lottie.json b/res/raw/udfps_edu_lottie.json
index c13a02f..e012380 100644
--- a/res/raw/udfps_edu_lottie.json
+++ b/res/raw/udfps_edu_lottie.json
@@ -1,12485 +1 @@
-{
-  "v": "5.7.13",
-  "fr": 60,
-  "ip": 0,
-  "op": 541,
-  "w": 300,
-  "h": 289,
-  "nm": "enrollment_edu_02",
-  "ddd": 0,
-  "assets": [],
-  "layers": [
-    {
-      "ddd": 0,
-      "ind": 1,
-      "ty": 4,
-      "nm": "fingerprint motion 8",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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.333
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 429,
-                "s": [
-                  100
-                ]
-              },
-              {
-                "t": 440,
-                "s": [
-                  0
-                ]
-              }
-            ],
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 100,
-            "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": 418,
-      "op": 630,
-      "st": 232,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 2,
-      "ty": 4,
-      "nm": "fingerprint motion 7",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0.667
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.333
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 380,
-                "s": [
-                  100
-                ]
-              },
-              {
-                "t": 394,
-                "s": [
-                  0
-                ]
-              }
-            ],
-            "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": 369,
-      "op": 418,
-      "st": 232,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 3,
-      "ty": 4,
-      "nm": "fingerprint motion 6",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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.333
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 335,
-                "s": [
-                  100
-                ]
-              },
-              {
-                "t": 348,
-                "s": [
-                  0
-                ]
-              }
-            ],
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 100,
-            "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": 324,
-      "op": 369,
-      "st": 131,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 4,
-      "ty": 4,
-      "nm": "fingerprint motion 5",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0.667
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.333
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 285,
-                "s": [
-                  100
-                ]
-              },
-              {
-                "t": 299,
-                "s": [
-                  0
-                ]
-              }
-            ],
-            "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": 278,
-      "op": 324,
-      "st": 131,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 5,
-      "ty": 4,
-      "nm": "fingerprint motion 4",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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.333
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 232,
-                "s": [
-                  100
-                ]
-              },
-              {
-                "t": 245,
-                "s": [
-                  0
-                ]
-              }
-            ],
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 100,
-            "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": 218,
-      "op": 278,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 6,
-      "ty": 4,
-      "nm": "fingerprint motion 3",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0.667
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.333
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 185,
-                "s": [
-                  100
-                ]
-              },
-              {
-                "t": 199,
-                "s": [
-                  0
-                ]
-              }
-            ],
-            "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": 160,
-      "op": 218,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 7,
-      "ty": 4,
-      "nm": "fingerprint motion 2",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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.333
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 138,
-                "s": [
-                  100
-                ]
-              },
-              {
-                "t": 149,
-                "s": [
-                  0
-                ]
-              }
-            ],
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 100,
-            "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": 0,
-      "op": 160,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 8,
-      "ty": 4,
-      "nm": "fingerprint motion",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.541000007181,
-                  0.705999995213,
-                  0.972999961703,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0.667
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.333
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 92,
-                "s": [
-                  100
-                ]
-              },
-              {
-                "t": 106,
-                "s": [
-                  0
-                ]
-              }
-            ],
-            "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": 0,
-      "op": 160,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 9,
-      "ty": 4,
-      "nm": "fingerprint static",
-      "parent": 10,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            -10.467,
-            814.892,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            22.5,
-            28.676,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            353.53,
-            353.53,
-            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.564,
-                      0
-                    ],
-                    [
-                      2.241,
-                      1.694
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -2.329,
-                      2.012
-                    ],
-                    [
-                      -3.23,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      8.7,
-                      -1.624
-                    ],
-                    [
-                      -0.335,
-                      1.624
-                    ],
-                    [
-                      -8.7,
-                      -1.076
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.290196078431,
-                  0.313725490196,
-                  0.352941176471,
-                  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": [
-                  22.837,
-                  48.229
-                ],
-                "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.553,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ]
-                  ],
-                  "o": [
-                    [
-                      -0.988,
-                      -2.577
-                    ],
-                    [
-                      0,
-                      -6.83
-                    ],
-                    [
-                      7.553,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -12.247,
-                      8.824
-                    ],
-                    [
-                      -13.235,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -8.824
-                    ],
-                    [
-                      13.235,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.290196078431,
-                  0.313725490196,
-                  0.352941176471,
-                  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": [
-                  22.5,
-                  30.441
-                ],
-                "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.647,
-                      0
-                    ],
-                    [
-                      0.388,
-                      2.294
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      2.117,
-                      0
-                    ],
-                    [
-                      -5.241,
-                      -1.482
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      2.629
-                    ],
-                    [
-                      -2.33,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -0.353,
-                      -2.1
-                    ],
-                    [
-                      -7.624,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      10.95,
-                      -1.756
-                    ],
-                    [
-                      10.95,
-                      -1.244
-                    ],
-                    [
-                      6.168,
-                      3.538
-                    ],
-                    [
-                      1.456,
-                      -0.45
-                    ],
-                    [
-                      0.962,
-                      -3.415
-                    ],
-                    [
-                      -3.326,
-                      -7.05
-                    ],
-                    [
-                      -2.568,
-                      7.05
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.290196078431,
-                  0.313725490196,
-                  0.352941176471,
-                  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": [
-                  24.786,
-                  35.727
-                ],
-                "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.618,
-                      0
-                    ],
-                    [
-                      -2.665,
-                      -4.165
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.665,
-                      -4.165
-                    ],
-                    [
-                      6.618,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -15,
-                      3.529
-                    ],
-                    [
-                      0,
-                      -3.529
-                    ],
-                    [
-                      15,
-                      3.529
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.290196078431,
-                  0.313725490196,
-                  0.352941176471,
-                  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": [
-                  22.5,
-                  18.088
-                ],
-                "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.53,
-                      0
-                    ],
-                    [
-                      -2.859,
-                      -1.429
-                    ]
-                  ],
-                  "o": [
-                    [
-                      2.859,
-                      -1.429
-                    ],
-                    [
-                      3.529,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      -9.706,
-                      1.12
-                    ],
-                    [
-                      0,
-                      -1.12
-                    ],
-                    [
-                      9.706,
-                      1.12
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.290196078431,
-                  0.313725490196,
-                  0.352941176471,
-                  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": [
-                  22.5,
-                  8.621
-                ],
-                "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": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 100,
-            "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": 0,
-      "op": 630,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 10,
-      "ty": 4,
-      "nm": "background",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.14,
-            205.871,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            -11.477,
-            810.793,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 1,
-          "k": [
-            {
-              "i": {
-                "x": [
-                  0.511,
-                  0.511,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.333,
-                  0.333,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 92,
-              "s": [
-                17.82,
-                17.82,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.833,
-                  0.833,
-                  0.833
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.333,
-                  0.333,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 102,
-              "s": [
-                16.92,
-                16.92,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.369,
-                  0.369,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.292,
-                  0.292,
-                  0.167
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 138,
-              "s": [
-                16.92,
-                16.92,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.667,
-                  0.667,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.167,
-                  0.167,
-                  0.167
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 148,
-              "s": [
-                17.82,
-                17.82,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.511,
-                  0.511,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.333,
-                  0.333,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 185,
-              "s": [
-                17.82,
-                17.82,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.833,
-                  0.833,
-                  0.833
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.333,
-                  0.333,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 195,
-              "s": [
-                16.92,
-                16.92,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.369,
-                  0.369,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.292,
-                  0.292,
-                  0.167
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 232,
-              "s": [
-                16.92,
-                16.92,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.667,
-                  0.667,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.167,
-                  0.167,
-                  0.167
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 242,
-              "s": [
-                17.82,
-                17.82,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.511,
-                  0.511,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.333,
-                  0.333,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 285,
-              "s": [
-                17.82,
-                17.82,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.833,
-                  0.833,
-                  0.833
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.333,
-                  0.333,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 295,
-              "s": [
-                16.92,
-                16.92,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.369,
-                  0.369,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.292,
-                  0.292,
-                  0.167
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 335,
-              "s": [
-                16.92,
-                16.92,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.667,
-                  0.667,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.167,
-                  0.167,
-                  0.167
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 345,
-              "s": [
-                17.82,
-                17.82,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.511,
-                  0.511,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.333,
-                  0.333,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 380,
-              "s": [
-                17.82,
-                17.82,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.833,
-                  0.833,
-                  0.833
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.333,
-                  0.333,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 390,
-              "s": [
-                16.92,
-                16.92,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.369,
-                  0.369,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.292,
-                  0.292,
-                  0.167
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 429,
-              "s": [
-                16.92,
-                16.92,
-                100
-              ]
-            },
-            {
-              "t": 439,
-              "s": [
-                17.82,
-                17.82,
-                100
-              ]
-            }
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  258.387,
-                  258.387
-                ],
-                "ix": 2
-              },
-              "p": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 3
-              },
-              "nm": "Ellipse Path 1",
-              "mn": "ADBE Vector Shape - Ellipse",
-              "hd": false
-            },
-            {
-              "ty": "fl",
-              "c": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 92,
-                    "s": [
-                      0.247058838489,
-                      0.305882352941,
-                      0.396078461292,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 98,
-                    "s": [
-                      0.105882360421,
-                      0.152941176471,
-                      0.223529426724,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 138,
-                    "s": [
-                      0.105882360421,
-                      0.152941176471,
-                      0.223529426724,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 143,
-                    "s": [
-                      0.247058838489,
-                      0.305882352941,
-                      0.396078461292,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 185,
-                    "s": [
-                      0.247058838489,
-                      0.305882352941,
-                      0.396078461292,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 190,
-                    "s": [
-                      0.117647059262,
-                      0.152941182256,
-                      0.219607844949,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 232,
-                    "s": [
-                      0.117647059262,
-                      0.152941182256,
-                      0.219607844949,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 237,
-                    "s": [
-                      0.258823543787,
-                      0.305882364511,
-                      0.388235300779,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 285,
-                    "s": [
-                      0.258823543787,
-                      0.305882364511,
-                      0.388235300779,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 290,
-                    "s": [
-                      0.117647059262,
-                      0.152941182256,
-                      0.219607844949,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 335,
-                    "s": [
-                      0.117647059262,
-                      0.152941182256,
-                      0.219607844949,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 340,
-                    "s": [
-                      0.258823543787,
-                      0.305882364511,
-                      0.388235300779,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 380,
-                    "s": [
-                      0.258823543787,
-                      0.305882364511,
-                      0.388235300779,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 385,
-                    "s": [
-                      0.117647059262,
-                      0.152941182256,
-                      0.219607844949,
-                      1
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 429,
-                    "s": [
-                      0.117647059262,
-                      0.152941182256,
-                      0.219607844949,
-                      1
-                    ]
-                  },
-                  {
-                    "t": 434,
-                    "s": [
-                      0.258823543787,
-                      0.305882364511,
-                      0.388235300779,
-                      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": [
-                  -8.807,
-                  813.193
-                ],
-                "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": 0,
-      "op": 630,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 11,
-      "ty": 4,
-      "nm": "Phone/Phone_Illustration Outlines 2",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.5,
-            139.97,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            64,
-            118.5,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            103.629,
-            103.629,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "ind": 0,
-              "ty": "sh",
-              "ix": 1,
-              "ks": {
-                "a": 0,
-                "k": {
-                  "i": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      4.901,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      4.902
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -4.902,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      -4.902
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      4.902
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -4.902,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      -4.902
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      4.901,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      58.897,
-                      106.681
-                    ],
-                    [
-                      50.008,
-                      115.572
-                    ],
-                    [
-                      -52.229,
-                      115.572
-                    ],
-                    [
-                      -61.118,
-                      106.681
-                    ],
-                    [
-                      -61.118,
-                      -106.68
-                    ],
-                    [
-                      -52.229,
-                      -115.571
-                    ],
-                    [
-                      50.008,
-                      -115.571
-                    ],
-                    [
-                      58.897,
-                      -106.68
-                    ]
-                  ],
-                  "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.227
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      1.227,
-                      0.001
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      6.127,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.128
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -6.127,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      6.128
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      1.228
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      1.227,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      -1.228
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      -6.128
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      -6.127,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      6.128
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      6.127,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      1.227,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      -1.227
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      1.227,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      63.341,
-                      -48.896
-                    ],
-                    [
-                      63.341,
-                      -57.786
-                    ],
-                    [
-                      61.12,
-                      -60.008
-                    ],
-                    [
-                      61.12,
-                      -106.68
-                    ],
-                    [
-                      50.008,
-                      -117.795
-                    ],
-                    [
-                      -52.229,
-                      -117.795
-                    ],
-                    [
-                      -63.341,
-                      -106.68
-                    ],
-                    [
-                      -63.341,
-                      106.681
-                    ],
-                    [
-                      -52.229,
-                      117.795
-                    ],
-                    [
-                      50.008,
-                      117.795
-                    ],
-                    [
-                      61.12,
-                      106.681
-                    ],
-                    [
-                      61.12,
-                      -2.223
-                    ],
-                    [
-                      63.341,
-                      -4.445
-                    ],
-                    [
-                      63.341,
-                      -26.671
-                    ],
-                    [
-                      61.12,
-                      -28.893
-                    ],
-                    [
-                      61.12,
-                      -46.674
-                    ]
-                  ],
-                  "c": true
-                },
-                "ix": 2
-              },
-              "nm": "Path 2",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "mm",
-              "mm": 1,
-              "nm": "Merge Paths 1",
-              "mn": "ADBE Vector Filter - Merge",
-              "hd": false
-            },
-            {
-              "ty": "fl",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.501999978458,
-                  0.525,
-                  0.545000023935,
-                  1
-                ],
-                "ix": 4
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 60,
-                    "s": [
-                      100
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 70,
-                    "s": [
-                      0
-                    ]
-                  },
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 489,
-                    "s": [
-                      0
-                    ]
-                  },
-                  {
-                    "t": 499,
-                    "s": [
-                      100
-                    ]
-                  }
-                ],
-                "ix": 5
-              },
-              "r": 1,
-              "bm": 0,
-              "nm": "Fill 1",
-              "mn": "ADBE Vector Graphic - Fill",
-              "hd": false
-            },
-            {
-              "ty": "tr",
-              "p": {
-                "a": 0,
-                "k": [
-                  63.591,
-                  118.045
-                ],
-                "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": 4,
-          "cix": 2,
-          "bm": 0,
-          "ix": 1,
-          "mn": "ADBE Vector Group",
-          "hd": false
-        }
-      ],
-      "ip": 0,
-      "op": 630,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 13,
-      "ty": 4,
-      "nm": "checkmark 2",
-      "parent": 14,
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            338.091,
-            629.95,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            334.381,
-            630.336,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            104.745,
-            104.745,
-            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
-                    ]
-                  ],
-                  "o": [
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ],
-                    [
-                      0,
-                      0
-                    ]
-                  ],
-                  "v": [
-                    [
-                      283,
-                      629.5
-                    ],
-                    [
-                      322.5,
-                      661.5
-                    ],
-                    [
-                      382.5,
-                      591.5
-                    ]
-                  ],
-                  "c": false
-                },
-                "ix": 2
-              },
-              "nm": "Path 1",
-              "mn": "ADBE Vector Shape - Group",
-              "hd": false
-            },
-            {
-              "ty": "st",
-              "c": {
-                "a": 0,
-                "k": [
-                  0.400000029919,
-                  0.61568627451,
-                  0.964705942191,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 487,
-                    "s": [
-                      100
-                    ]
-                  },
-                  {
-                    "t": 490,
-                    "s": [
-                      0
-                    ]
-                  }
-                ],
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 14,
-                "ix": 5
-              },
-              "lc": 1,
-              "lj": 1,
-              "ml": 4,
-              "bm": 0,
-              "nm": "Stroke 1",
-              "mn": "ADBE Vector Graphic - Stroke",
-              "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": "Shape 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": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.645
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 433,
-                "s": [
-                  0
-                ]
-              },
-              {
-                "t": 447,
-                "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
-        }
-      ],
-      "ip": 429,
-      "op": 630,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 14,
-      "ty": 4,
-      "nm": "checkmark",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            200.737,
-            254.567,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            338.647,
-            629.648,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 1,
-          "k": [
-            {
-              "i": {
-                "x": [
-                  0.549,
-                  0.549,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.04,
-                  0.04,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 429,
-              "s": [
-                7.2,
-                7.2,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.323,
-                  0.323,
-                  0.667
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  0.271,
-                  0.271,
-                  0.333
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 437,
-              "s": [
-                19.525,
-                19.525,
-                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": 454,
-              "s": [
-                17.185,
-                17.185,
-                100
-              ]
-            },
-            {
-              "i": {
-                "x": [
-                  0.913,
-                  0.913,
-                  0.833
-                ],
-                "y": [
-                  1,
-                  1,
-                  1
-                ]
-              },
-              "o": {
-                "x": [
-                  1,
-                  1,
-                  0.167
-                ],
-                "y": [
-                  0,
-                  0,
-                  0
-                ]
-              },
-              "t": 480,
-              "s": [
-                17.185,
-                17.185,
-                100
-              ]
-            },
-            {
-              "t": 490,
-              "s": [
-                7.2,
-                7.2,
-                100
-              ]
-            }
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  177.191,
-                  177.191
-                ],
-                "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.964705942191,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 482,
-                    "s": [
-                      100
-                    ]
-                  },
-                  {
-                    "t": 490,
-                    "s": [
-                      0
-                    ]
-                  }
-                ],
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 14,
-                "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.125490196078,
-                  0.129411764706,
-                  0.141176470588,
-                  1
-                ],
-                "ix": 4
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 482,
-                    "s": [
-                      100
-                    ]
-                  },
-                  {
-                    "t": 490,
-                    "s": [
-                      0
-                    ]
-                  }
-                ],
-                "ix": 5
-              },
-              "r": 1,
-              "bm": 0,
-              "nm": "Fill 1",
-              "mn": "ADBE Vector Graphic - Fill",
-              "hd": false
-            },
-            {
-              "ty": "tr",
-              "p": {
-                "a": 0,
-                "k": [
-                  338.104,
-                  629.943
-                ],
-                "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": 429,
-      "op": 630,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 15,
-      "ty": 4,
-      "nm": "Shape Layer 20",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 270,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.541176470588,
-                  0.705882352941,
-                  0.972549079446,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 480,
-                    "s": [
-                      100
-                    ]
-                  },
-                  {
-                    "t": 486,
-                    "s": [
-                      0
-                    ]
-                  }
-                ],
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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": 477,
-      "op": 630,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 16,
-      "ty": 4,
-      "nm": "Shape Layer 19",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 270,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.541176470588,
-                  0.705882352941,
-                  0.972549079446,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 0,
-                "k": 100,
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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
-        },
-        {
-          "ty": "tm",
-          "s": {
-            "a": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0.2
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.4
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 380,
-                "s": [
-                  0
-                ]
-              },
-              {
-                "i": {
-                  "x": [
-                    0.833
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.167
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 429,
-                "s": [
-                  22.5
-                ]
-              },
-              {
-                "t": 440,
-                "s": [
-                  26
-                ]
-              }
-            ],
-            "ix": 2
-          },
-          "o": {
-            "a": 0,
-            "k": 365,
-            "ix": 3
-          },
-          "m": 1,
-          "ix": 2,
-          "nm": "Trim Paths 1",
-          "mn": "ADBE Vector Filter - Trim",
-          "hd": false
-        }
-      ],
-      "ip": -7,
-      "op": 477,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 17,
-      "ty": 4,
-      "nm": "Shape Layer 18",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 270,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.18431372549,
-                  0.223529426724,
-                  0.282352941176,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 69,
-                    "s": [
-                      0
-                    ]
-                  },
-                  {
-                    "t": 79,
-                    "s": [
-                      100
-                    ]
-                  }
-                ],
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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
-        },
-        {
-          "ty": "tm",
-          "s": {
-            "a": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 22.5,
-            "ix": 2
-          },
-          "o": {
-            "a": 0,
-            "k": 365,
-            "ix": 3
-          },
-          "m": 1,
-          "ix": 2,
-          "nm": "Trim Paths 1",
-          "mn": "ADBE Vector Filter - Trim",
-          "hd": false
-        }
-      ],
-      "ip": -7,
-      "op": 477,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 18,
-      "ty": 4,
-      "nm": "Shape Layer 17",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 180,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.541176470588,
-                  0.705882352941,
-                  0.972549079446,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 0,
-                "k": 100,
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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
-        },
-        {
-          "ty": "tm",
-          "s": {
-            "a": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0.21
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.564
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 285,
-                "s": [
-                  0
-                ]
-              },
-              {
-                "i": {
-                  "x": [
-                    0.833
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.167
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 335,
-                "s": [
-                  22.5
-                ]
-              },
-              {
-                "i": {
-                  "x": [
-                    0.833
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.167
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 429,
-                "s": [
-                  22.5
-                ]
-              },
-              {
-                "t": 440,
-                "s": [
-                  26
-                ]
-              }
-            ],
-            "ix": 2
-          },
-          "o": {
-            "a": 0,
-            "k": 365,
-            "ix": 3
-          },
-          "m": 1,
-          "ix": 2,
-          "nm": "Trim Paths 1",
-          "mn": "ADBE Vector Filter - Trim",
-          "hd": false
-        }
-      ],
-      "ip": -7,
-      "op": 477,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 19,
-      "ty": 4,
-      "nm": "Shape Layer 16",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 180,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.18431372549,
-                  0.223529426724,
-                  0.282352941176,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 69,
-                    "s": [
-                      0
-                    ]
-                  },
-                  {
-                    "t": 79,
-                    "s": [
-                      100
-                    ]
-                  }
-                ],
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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
-        },
-        {
-          "ty": "tm",
-          "s": {
-            "a": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 22.5,
-            "ix": 2
-          },
-          "o": {
-            "a": 0,
-            "k": 365,
-            "ix": 3
-          },
-          "m": 1,
-          "ix": 2,
-          "nm": "Trim Paths 1",
-          "mn": "ADBE Vector Filter - Trim",
-          "hd": false
-        }
-      ],
-      "ip": -7,
-      "op": 477,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 20,
-      "ty": 4,
-      "nm": "Shape Layer 15",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 90,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.541176470588,
-                  0.705882352941,
-                  0.972549079446,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 0,
-                "k": 100,
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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
-        },
-        {
-          "ty": "tm",
-          "s": {
-            "a": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0.2
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.4
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 185,
-                "s": [
-                  0
-                ]
-              },
-              {
-                "i": {
-                  "x": [
-                    0.833
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.167
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 232,
-                "s": [
-                  22.5
-                ]
-              },
-              {
-                "i": {
-                  "x": [
-                    0.833
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.167
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 429,
-                "s": [
-                  22.5
-                ]
-              },
-              {
-                "t": 440,
-                "s": [
-                  26
-                ]
-              }
-            ],
-            "ix": 2
-          },
-          "o": {
-            "a": 0,
-            "k": 365,
-            "ix": 3
-          },
-          "m": 1,
-          "ix": 2,
-          "nm": "Trim Paths 1",
-          "mn": "ADBE Vector Filter - Trim",
-          "hd": false
-        }
-      ],
-      "ip": -7,
-      "op": 477,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 21,
-      "ty": 4,
-      "nm": "Shape Layer 14",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 90,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.18431372549,
-                  0.223529426724,
-                  0.282352941176,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 69,
-                    "s": [
-                      0
-                    ]
-                  },
-                  {
-                    "t": 79,
-                    "s": [
-                      100
-                    ]
-                  }
-                ],
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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
-        },
-        {
-          "ty": "tm",
-          "s": {
-            "a": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 22.5,
-            "ix": 2
-          },
-          "o": {
-            "a": 0,
-            "k": 365,
-            "ix": 3
-          },
-          "m": 1,
-          "ix": 2,
-          "nm": "Trim Paths 1",
-          "mn": "ADBE Vector Filter - Trim",
-          "hd": false
-        }
-      ],
-      "ip": -7,
-      "op": 477,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 22,
-      "ty": 4,
-      "nm": "Shape Layer 9",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.541176470588,
-                  0.705882352941,
-                  0.972549079446,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 0,
-                "k": 100,
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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
-        },
-        {
-          "ty": "tm",
-          "s": {
-            "a": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 1,
-            "k": [
-              {
-                "i": {
-                  "x": [
-                    0.2
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.4
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 92,
-                "s": [
-                  0
-                ]
-              },
-              {
-                "i": {
-                  "x": [
-                    0.833
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.167
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 138,
-                "s": [
-                  22.5
-                ]
-              },
-              {
-                "i": {
-                  "x": [
-                    0.833
-                  ],
-                  "y": [
-                    1
-                  ]
-                },
-                "o": {
-                  "x": [
-                    0.167
-                  ],
-                  "y": [
-                    0
-                  ]
-                },
-                "t": 429,
-                "s": [
-                  22.5
-                ]
-              },
-              {
-                "t": 440,
-                "s": [
-                  26
-                ]
-              }
-            ],
-            "ix": 2
-          },
-          "o": {
-            "a": 0,
-            "k": 365,
-            "ix": 3
-          },
-          "m": 1,
-          "ix": 2,
-          "nm": "Trim Paths 1",
-          "mn": "ADBE Vector Filter - Trim",
-          "hd": false
-        }
-      ],
-      "ip": -7,
-      "op": 477,
-      "st": 30,
-      "bm": 0
-    },
-    {
-      "ddd": 0,
-      "ind": 23,
-      "ty": 4,
-      "nm": "Shape Layer 6",
-      "sr": 1,
-      "ks": {
-        "o": {
-          "a": 0,
-          "k": 100,
-          "ix": 11
-        },
-        "r": {
-          "a": 0,
-          "k": 0,
-          "ix": 10
-        },
-        "p": {
-          "a": 0,
-          "k": [
-            151.32,
-            206.475,
-            0
-          ],
-          "ix": 2,
-          "l": 2
-        },
-        "a": {
-          "a": 0,
-          "k": [
-            37.523,
-            788.471,
-            0
-          ],
-          "ix": 1,
-          "l": 2
-        },
-        "s": {
-          "a": 0,
-          "k": [
-            17.09,
-            17.09,
-            100
-          ],
-          "ix": 6,
-          "l": 2
-        }
-      },
-      "ao": 0,
-      "shapes": [
-        {
-          "ty": "gr",
-          "it": [
-            {
-              "d": 1,
-              "ty": "el",
-              "s": {
-                "a": 0,
-                "k": [
-                  793.047,
-                  793.047
-                ],
-                "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.18431372549,
-                  0.223529426724,
-                  0.282352941176,
-                  1
-                ],
-                "ix": 3
-              },
-              "o": {
-                "a": 1,
-                "k": [
-                  {
-                    "i": {
-                      "x": [
-                        0.833
-                      ],
-                      "y": [
-                        0.833
-                      ]
-                    },
-                    "o": {
-                      "x": [
-                        0.167
-                      ],
-                      "y": [
-                        0.167
-                      ]
-                    },
-                    "t": 69,
-                    "s": [
-                      0
-                    ]
-                  },
-                  {
-                    "t": 79,
-                    "s": [
-                      100
-                    ]
-                  }
-                ],
-                "ix": 4
-              },
-              "w": {
-                "a": 0,
-                "k": 34,
-                "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": [
-                  37.523,
-                  787.523
-                ],
-                "ix": 2
-              },
-              "a": {
-                "a": 0,
-                "k": [
-                  0,
-                  0
-                ],
-                "ix": 1
-              },
-              "s": {
-                "a": 0,
-                "k": [
-                  100.278,
-                  100.278
-                ],
-                "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
-        },
-        {
-          "ty": "tm",
-          "s": {
-            "a": 0,
-            "k": 0,
-            "ix": 1
-          },
-          "e": {
-            "a": 0,
-            "k": 22.5,
-            "ix": 2
-          },
-          "o": {
-            "a": 0,
-            "k": 365,
-            "ix": 3
-          },
-          "m": 1,
-          "ix": 2,
-          "nm": "Trim Paths 1",
-          "mn": "ADBE Vector Filter - Trim",
-          "hd": false
-        }
-      ],
-      "ip": -7,
-      "op": 477,
-      "st": 30,
-      "bm": 0
-    }
-  ],
-  "markers": []
-}
\ No newline at end of file
+{"v":"5.7.6","fr":60,"ip":0,"op":601,"w":1650,"h":2900,"nm":"UDFPS_EDU_LOTTIE_V02","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"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":2,"ty":4,"nm":".blue400","cl":"blue400","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-0.512,0.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":"Checkmark","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,13.798],[13.798,0],[0,-13.798],[-13.798,0]],"o":[[0,-13.798],[-13.798,0],[0,13.798],[13.798,0]],"v":[[25.345,-0.429],[0.322,-25.454],[-24.701,-0.429],[0.322,24.595]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.399993896484,0.615661621094,0.964691162109,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"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":[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":"Outline","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":328,"op":2428,"st":328,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".black","cl":"black","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":[1348.087,2521.152,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,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":[243.6,243.6,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":[232,232,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":[232,232,100]},{"t":555,"s":[0,0,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,0,0,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}],"ip":328,"op":2428,"st":328,"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":1,"k":[{"i":{"x":0.07,"y":0.954},"o":{"x":0.64,"y":0.046},"t":143.928,"s":[837,2098,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.07},"o":{"x":0.64,"y":0.64},"t":151.455,"s":[879,2057,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.99},"o":{"x":0.64,"y":0.01},"t":219.176,"s":[879,2057,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.07},"o":{"x":0.64,"y":0.64},"t":226.697,"s":[856,2015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.99},"o":{"x":0.64,"y":0},"t":295.674,"s":[856,2015,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.07,"y":0.07},"o":{"x":0.64,"y":0.64},"t":303.193,"s":[808,2019,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.64,"y":0},"t":507.961,"s":[808,2019,0],"to":[0,0,0],"ti":[0,0,0]},{"t":521.345703125,"s":[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":".grey700","cl":"grey700","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},{"ind":1,"ty":"sh","ix":2,"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":[[-13.072,-9.314],[-14.099,-14.814],[-0.349,-27.648],[13.401,-14.814]],"c":false},"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],[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":[[13.401,-14.814],[13.401,-14.283],[8.433,-9.314],[3.538,-13.458],[3.025,-16.538],[-1.43,-20.314],[-0.642,-5.665]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"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.933,-27.646],[-0.35,-34.979],[15.234,-27.646]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"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.433,-39.985],[-0.35,-42.313],[9.734,-39.985]],"c":false},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.372549027205,0.388235300779,0.407843142748,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":6,"cix":2,"bm":0,"ix":1,"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":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":-20,"op":4855,"st":55,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":".blue400","cl":"blue400","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":8,"ty":4,"nm":".blue400","cl":"blue400","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":88,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":128,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":153,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":158,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":183,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":198,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":223,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":230,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":255,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":280,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":295,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":368,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":383,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":508,"s":[0]},{"t":518,"s":[40]}],"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":"fl","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-70,"op":2585,"st":117.5,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":".grey700","cl":"grey700","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":88,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":113,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":128,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":153,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":158,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":183,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":198,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":223,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":230,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":255,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":280,"s":[40]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":295,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":368,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":383,"s":[40]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":508,"s":[40]},{"t":518,"s":[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":[440,440],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.372549027205,0.388235300779,0.407843142748,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":2,"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":".grey600","cl":"grey600","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":12.5,"s":[100]},{"t":47.5,"s":[1]}],"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.501960813999,0.525490224361,0.54509806633,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":2455,"st":55,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":".blue400","cl":"blue400","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":618,"s":[630.722]}],"ix":10},"p":{"a":0,"k":[839.723,2083.641,0],"ix":2,"l":2},"a":{"a":0,"k":[-13.09,1270.41,0],"ix":1,"l":2},"s":{"a":0,"k":[125,125,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":12,"ty":4,"nm":".blue400","cl":"blue400","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.88],"y":[0]},"t":37.5,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[40]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":550,"s":[40]},{"t":582.5,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[839.723,2083.641,0],"ix":2,"l":2},"a":{"a":0,"k":[-13.09,1270.41,0],"ix":1,"l":2},"s":{"a":0,"k":[125,125,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.40000000596,0.615686297417,0.964705884457,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":65,"ix":5},"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":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-70,"op":2585,"st":117.5,"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-night/themes_suw.xml b/res/values-night/themes_suw.xml
index ee0dd67..dea7b1a 100644
--- a/res/values-night/themes_suw.xml
+++ b/res/values-night/themes_suw.xml
@@ -17,9 +17,6 @@
 
 <!-- SUW related themes -->
 <resources>
-    <!-- This theme was applied to Settings pages which are running under SUW. -->
-    <style name="SubSettings.SetupWizard" parent="SudThemeGlifV3" />
-
     <!-- DayNight themes -->
     <style name="GlifTheme.DayNight" parent="GlifTheme" />
     <style name="GlifV2Theme.DayNight" parent="GlifV2Theme" />
diff --git a/res/values-sw600dp/config.xml b/res/values-sw600dp/config.xml
index 543dfee..f22d7ba 100644
--- a/res/values-sw600dp/config.xml
+++ b/res/values-sw600dp/config.xml
@@ -19,4 +19,6 @@
     <!-- Dashboard number of columns -->
     <integer name="dashboard_num_columns">2</integer>
 
+    <!-- Whether to support large screen -->
+    <bool name="config_supported_large_screen">true</bool>
 </resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 241471c..b357758 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -63,7 +63,12 @@
     <dimen name="confirm_credentials_side_margin">0dp</dimen>
     <dimen name="confirm_credentials_top_margin">64dp</dimen>
 
+    <!-- padding for font size preview in large screen -->
+    <dimen name="font_size_preview_padding_start">32dp</dimen>
+
     <!-- 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/colors.xml b/res/values/colors.xml
index 2114b96..9de420e 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -24,21 +24,10 @@
 
     <color name="divider_color">#20ffffff</color>
     <color name="title_color">@android:color/holo_blue_light</color>
-    <color name="setup_lock_pattern_view_regular_color_light">
-        @color/lock_pattern_view_regular_color
-    </color>
-    <color name="setup_lock_pattern_view_success_color_dark">#ff84ffff</color>
-    <color name="setup_lock_pattern_view_success_color_light">@color/sud_color_accent_light</color>
-    <color name="setup_lock_pattern_view_error_color_dark">#fff44336</color>
     <color name="setup_wizard_wifi_color_dark">#89ffffff</color>
     <color name="setup_wizard_wifi_color_light">#89000000</color>
 
     <color name="lock_pattern_background">#00000000</color>
-    <color name="lock_pattern_view_regular_color">#ff37474f</color>
-
-    <color name="lock_pattern_view_regular_color_dark">#ffffff</color>
-
-    <color name="unlock_pattern_view_regular_color">@android:color/white</color>
 
     <color name="fingerprint_title_area_bg">?android:attr/colorAccent</color>
     <color name="fingerprint_title_color">#ffffffff</color>
diff --git a/res/values/config.xml b/res/values/config.xml
index 9ed7536..987eaf9 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>
 
@@ -526,6 +529,12 @@
     <!-- Whether to show Smart Storage toggle -->
     <bool name="config_show_smart_storage_toggle">true</bool>
 
+    <!-- Whether suw to support two panes -->
+    <bool name="config_suw_supported_two_panes">false</bool>
+
+    <!-- Whether to support large screen -->
+    <bool name="config_supported_large_screen">false</bool>
+
     <!-- Display settings screen, Color mode options. Must be the same length and order as
          config_color_mode_options_values below. Only the values that also appear in
          frameworks/base/core/res/res/values/config.xml's config_availableColorModes are shown. -->
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 7a75883..2468db6 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -141,6 +141,10 @@
     <dimen name="homepage_title_margin_bottom">8dp</dimen>
     <dimen name="homepage_title_margin_horizontal">24dp</dimen>
 
+    <!-- Homepage menu entry -->
+    <dimen name="homepage_menu_entry_padding_horizontal">16dp</dimen>
+    <dimen name="homepage_menu_entry_corner_radius">28dp</dimen>
+
     <!-- Dimensions for Wifi Assistant Card -->
     <dimen name="wifi_assistant_padding_top_bottom">16dp</dimen>
     <dimen name="wifi_assistant_padding_start_end">16dp</dimen>
@@ -313,6 +317,9 @@
          The unit is sp as it is related to the text size of password requirement item. -->
     <dimen name="visible_vertical_space_below_password">20sp</dimen>
 
+    <!-- Minimum height for setting a lock pattern -->
+    <dimen name="choose_lockscreen_min_height">200dp</dimen>
+
     <!-- Select dialog -->
     <dimen name="select_dialog_padding_start">20dp</dimen>
     <dimen name="select_dialog_item_margin_start">12dp</dimen>
@@ -426,6 +433,12 @@
     <!-- Settings panel related dimensions -->
     <dimen name="settings_panel_corner_radius">28dp</dimen>
     <dimen name="settings_panel_title_margin">24dp</dimen>
+    <dimen name="settings_panel_title_margin_bottom">16dp</dimen>
+    <dimen name="settings_panel_width">@dimen/match_parent</dimen>
+
+    <!-- Panel slices dimensions -->
+    <dimen name="panel_slice_vertical_padding">8dp</dimen>
+    <dimen name="panel_slice_Horizontal_padding">24dp</dimen>
 
     <!-- Text padding for EmptyTextSettings -->
     <dimen name="empty_text_padding">24dp</dimen>
@@ -433,6 +446,9 @@
     <!--  Choose SIM Activity dimens  -->
     <dimen name="subtitle_bottom_padding">24dp</dimen>
 
+    <!-- Top margin for preview view pager -->
+    <dimen name="preview_size_top_margin">-12dp</dimen>
+
     <!-- Battery usage chart view component -->
     <dimen name="chartview_text_padding">6dp</dimen>
     <dimen name="chartview_divider_width">1dp</dimen>
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 3d73f64..d110de2 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -21,4 +21,9 @@
     <integer name="job_anomaly_detection">102</integer>
     <integer name="device_index_update">103</integer>
     <integer name="sim_notification_send">104</integer>
+
+    <!-- Controls the maximum number of faces enrollable during SUW -->
+    <integer name="suw_max_faces_enrollable">1</integer>
+    <!-- Controls the maximum number of fingerprints enrollable during SUW -->
+    <integer name="suw_max_fingerprints_enrollable">1</integer>
 </resources>
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 e01b309..c227aeb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -212,8 +212,6 @@
     <string name="bluetooth_notif_message">Tap to pair with <xliff:g id="device_name">%1$s</xliff:g>.</string>
     <!-- Item in bluetooth settings screen, used to show the list of received files [CHAR LIMIT=30] -->
     <string name="bluetooth_show_received_files">Received files</string>
-    <!-- Item in bluetooth settings screen, used to show the list of Files received via Bluetooth [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_show_files_received_via_bluetooth">Files received via Bluetooth</string>
 
     <!-- Title for contextual Bluetooth devices card when Bluetooth is off [CHAR LIMIT=NONE]-->
     <string name="bluetooth_devices_card_off_title">Bluetooth is off</string>
@@ -793,6 +791,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] -->
@@ -871,11 +871,9 @@
     <!-- Dialog title shown when the user removes an enrollment [CHAR LIMIT=35] -->
     <string name="security_settings_face_settings_remove_dialog_title">Delete face model?</string>
     <!-- Dialog contents shown when the user removes an enrollment [CHAR LIMIT=NONE] -->
-    <string name="security_settings_face_settings_remove_dialog_details">Your face model will be permanently and securely deleted. After deletion, you will need your PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
-    <!-- Dialog title shown when the user chooses to delete an existing enrolled face model. [CHAR LIMIT=35] -->
-    <string name="security_settings_face_settings_remove_model_dialog_title">Delete face model?</string>
-    <!-- Dialog contents shown when the user chooses to delete an existing enrolled face model. [CHAR LIMIT=NONE] -->
-    <string name="security_settings_face_settings_remove_model_dialog_details">Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your fingerprint, PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
+    <string name="security_settings_face_settings_remove_dialog_details">Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern, or password to unlock your phone or for authentication in apps.</string>
+    <!-- Dialog contents shown when the user removes an enrollment when configured as a convenience [CHAR LIMIT=NONE] -->
+    <string name="security_settings_face_settings_remove_dialog_details_convenience">Your face model will be permanently and securely deleted.\n\nAfter deletion, you will need your PIN, pattern, or password to unlock your phone.</string>
     <!-- Subtitle shown for contextual setting face enrollment [CHAR LIMIT=NONE] -->
     <string name="security_settings_face_settings_context_subtitle">Use Face Unlock to unlock your phone</string>
 
@@ -995,12 +993,16 @@
     <string name="biometric_settings_intro">When you set up Face Unlock and Fingerprint Unlock, your phone will ask for your fingerprint when you wear a mask or are in a dark area</string>
     <!-- Biometric category title - biometric options for unlocking the device. [CHAR LIMIT=50] -->
     <string name="biometric_settings_category_ways_to_unlock">Ways to unlock</string>
-    <!-- Biometric category title - configuration options for using biometric to unlock the device or authenticate in apps. [CHAR LIMIT=50] -->
-    <string name="biometric_settings_category_ways_to_use">Use face and fingerprint for</string>
     <!-- Text shown on a toggle which allows or disallows the device to use biometric for unlocking the device. [CHAR LIMIT=50] -->
-    <string name="biometric_settings_use_biometric_unlock_phone">Unlocking your phone</string>
+    <string name="biometric_settings_use_biometric_unlock_phone">Unlock your phone</string>
     <!-- Text shown on a toggle which allows or disallows the device to use biometric for authentication. [CHAR LIMIT=50] -->
-    <string name="biometric_settings_use_biometric_for_apps">Authentication in apps</string>
+    <string name="biometric_settings_use_biometric_for_apps">Verify it\u2019s you in apps</string>
+    <!-- Message for a biometric preference toggle, indicating that an action can only be performed by using Face Unlock. [CHAR LIMIT=50] -->
+    <string name="biometric_settings_use_face_preference_summary">Using face</string>
+    <!-- Message for a biometric preference toggle, indicating that an action can only be performed by using Fingerprint Unlock. [CHAR LIMIT=50] -->
+    <string name="biometric_settings_use_fingerprint_preference_summary">Using fingerprint</string>
+    <!-- Message for a biometric preference toggle, indicating that an action can be performed by using either Face Unlock or Fingerprint Unlock. [CHAR LIMIT=50] -->
+    <string name="biometric_settings_use_face_or_fingerprint_preference_summary">Using face or fingerprint</string>
     <!-- Message shown during enrollment to prompt a child to give the device to a parent or guardian. [CHAR LIMIT=NONE]-->
     <string name="biometric_settings_hand_back_to_guardian">Hand the phone back to your parent</string>
     <!-- Button text shown during enrollment to proceed after a child user has handed the device to a parent or guardian. [CHAR LIMIT=22] -->
@@ -1053,7 +1055,7 @@
     <!-- Message shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=NONE] -->
     <string name="security_settings_fingerprint_enroll_start_message">Put your finger on the sensor and lift after you feel a vibration</string>
     <!-- Message shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=NONE] -->
-    <string name="security_settings_udfps_enroll_start_message">Keep your finger on the sensor until you feel a vibration</string>
+    <string name="security_settings_udfps_enroll_start_message">Keep your fingerprint flat on the sensor until you feel a vibration</string>
     <!-- Title shown in fingerprint enrollment [CHAR LIMIT=NONE]-->
     <string name="security_settings_fingerprint_enroll_udfps_title">Touch &amp; hold the fingerprint sensor</string>
     <!-- Title shown in fingerprint enrollment dialog to repeat touching the fingerprint sensor [CHAR LIMIT=40] -->
@@ -1069,7 +1071,7 @@
     <!-- Title shown during fingerprint enrollment that instructs the user to enroll their fingertip [CHAR LIMIT=80] -->
     <string name="security_settings_udfps_enroll_fingertip_title">Place the tip of your finger on the sensor</string>
     <!-- Title shown during fingerprint enrollment that instructs the user to enroll the edges of their finger [CHAR LIMIT=80] -->
-    <string name="security_settings_udfps_enroll_edge_title">Finally, place the edges of your finger</string>
+    <string name="security_settings_udfps_enroll_edge_title">Finally, use the edges of your finger</string>
     <!-- Message shown during fingerprint enrollment that instructs the user to enroll the edges of their finger [CHAR LIMIT=160] -->
     <string name="security_settings_udfps_enroll_edge_message">Place the side of your fingerprint on the sensor and hold, then switch to the other side</string>
     <!-- Message shown in fingerprint enrollment asking users to repeat touching the fingerprint sensor. [CHAR LIMIT=160] -->
@@ -1240,25 +1242,6 @@
     <!-- Button to confirm the last removing the last fingerprint. [CHAR LIMIT=20]-->
     <string name="fingerprint_last_delete_confirm">Yes, remove</string>
 
-    <!-- Title of the combined biometrics settings screen. [CHAR LIMIT=40] -->
-    <string name="security_settings_biometrics_title">Face \u0026 fingerprint unlock</string>
-    <!-- Summary of the current biometrics setting when no biometrics have been enrolled. [CHAR LIMIT=50] -->
-    <string name="security_settings_biometrics_summary_none">Tap to set up</string>
-    <!-- Summary of the current biometrics setting when the user has enrolled a face but no fingerprint. [CHAR LIMIT=50] -->
-    <string name="security_settings_biometrics_summary_face">Face only</string>
-    <!-- Summary of the current biometrics setting when the user has enrolled a fingerprint but no face. [CHAR LIMIT=50] -->
-    <string name="security_settings_biometrics_summary_fingerprint">Fingerprint only</string>
-    <!-- Summary of the current biometrics setting when the user has enrolled both a face and a fingerprint. [CHAR LIMIT=50] -->
-    <string name="security_settings_biometrics_summary_both">Face and fingerprint</string>
-    <!-- Description shown on the combined biometrics settings screen. [CHAR LIMIT=NONE] -->
-    <string name="security_settings_biometrics_description">When you set up face and fingerprint unlock, your phone will ask for your fingerprint when you wear a mask or are in a dark area</string>
-    <!-- Title of a section on the biometrics settings screen for setting up different types of authentication. [CHAR LIMIT=50] -->
-    <string name="security_settings_biometrics_types_category">Ways to unlock</string>
-    <!-- Title of a section on the biometrics settings screen for adjusting authentication preferences. [CHAR LIMIT=50] -->
-    <string name="security_settings_biometrics_preferences_category">Use face or fingerprint for</string>
-    <!-- Title of a section on the biometrics settings screen for adjusting authentication preferences. [CHAR LIMIT=50] -->
-    <string name="security_settings_biometrics_preference_use_with_apps">Authentication in apps</string>
-
     <!-- Title of the preferences category for preference items to control encryption -->
     <string name="crypt_keeper_settings_title">Encryption</string>
 
@@ -1941,9 +1924,6 @@
     <!-- Bluetooth device details companion apps. The body of confirmation dialog for remove association. [CHAR LIMIT=60] -->
     <string name="bluetooth_companion_app_body"><xliff:g id="app_name" example="App Name">%1$s</xliff:g> app will no longer connect to your <xliff:g id="device_name" example="Device Name">%2$s</xliff:g></string>
 
-    <!--  Bluetooth device details. The body of a confirmation dialog for unpairing a paired device. [CHAR LIMIT=NONE] -->
-    <string name="bluetooth_untethered_unpair_dialog_body"><xliff:g id="device_name" example="Jack's headphone">%1$s</xliff:g> will no longer be paired with any device linked to this account</string>
-
     <!--  Bluetooth device details. In the confirmation dialog for unpairing a paired device, this is the label on the button that will complete the unpairing action. -->
     <string name="bluetooth_unpair_dialog_forget_confirm_button">Forget device</string>
     <!-- Bluetooth device details companion apps. In the confirmation dialog for removing an associated app, this is the label on the button that will complete the disassociate action. [CHAR LIMIT=80] -->
@@ -3240,6 +3220,8 @@
     <string name="screensaver_settings_when_to_dream">When to start</string>
     <!-- Dream settings screen, action label, current selected screen saver -->
     <string name="screensaver_settings_current">Current screen saver</string>
+    <!-- Dream settings screen, button label to start dreaming [CHAR LIMIT=30] -->
+    <string name="screensaver_settings_dream_start">Start now</string>
     <!-- Dream settings screen, button label for settings for a specific screensaver -->
     <string name="screensaver_settings_button">Settings</string>
     <!-- Sound & display settings screen, setting option name to change whether the screen adjusts automatically based on lighting conditions -->
@@ -5275,8 +5257,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] -->
@@ -5352,7 +5344,7 @@
     <!-- Title for the accessibility tutorial dialog in accessibility service with gesture. [CHAR LIMIT=50] -->
     <string name="accessibility_tutorial_dialog_title_gesture">Use gesture to open</string>
     <!-- Title for the accessibility tutorial dialog in gesture navigation settings. [CHAR LIMIT=50] -->
-    <string name="accessibility_tutorial_dialog_title_gesture_settings">Use new accessibility gesture</string>
+    <string name="accessibility_tutorial_dialog_title_gesture_settings">Use accessibility gesture</string>
     <!-- Message for the accessibility tutorial dialog when user enables an accessibility service while using the 3-button nav bar. [CHAR LIMIT=NONE] -->
     <string name="accessibility_tutorial_dialog_message_button">To use this feature, tap the accessibility button <xliff:g id="accessibility_icon" example="[Icon]">%s</xliff:g> on the bottom of your screen.\n\nTo switch between features, touch &amp; hold the accessibility button.</string>
     <!-- Message for the accessibility tutorial dialog when user enables an accessibility service while using the accessibility floating button. [CHAR LIMIT=100] -->
@@ -5427,14 +5419,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] -->
@@ -5488,6 +5486,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] -->
@@ -5499,6 +5501,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/>
@@ -5512,6 +5516,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] -->
@@ -5550,6 +5558,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] -->
@@ -5629,6 +5647,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] -->
@@ -6124,7 +6146,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] -->
@@ -6266,6 +6288,8 @@
 
     <!-- Summary for battery manager when it is on -->
     <string name="battery_manager_summary">Detecting when apps drain battery</string>
+    <!-- Summary for battery manager when it is on. [CHAR LIMIT=NONE] -->
+    <string name="battery_manager_summary_unsupported">Detecting when apps drain battery</string>
 
     <!-- Summary for battery manager when it is off -->
     <string name="battery_manager_off">Off</string>
@@ -6541,6 +6565,8 @@
     <string name="battery_not_usage">No usage from last full charge</string>
     <!-- Description for no any battery usage for past 24 hr [CHAR LIMIT=120] -->
     <string name="battery_not_usage_24hr">No usage for past 24 hr</string>
+    <!-- Description for no usage time but have battery usage [CHAR LIMIT=120] -->
+    <string name="battery_usage_without_time"></string>
 
     <!-- Graph subtext displayed to user when enhanced battery estimate is being used [CHAR LIMIT=120] -->
     <string name="advanced_battery_graph_subtext">Battery left estimate is based on your device usage</string>
@@ -7436,7 +7462,7 @@
     <!-- Button label to disconnect from a VPN profile. [CHAR LIMIT=40] -->
     <string name="vpn_disconnect">Disconnect</string>
     <!-- Field label to show the version number for a VPN app. [CHAR LIMIT=40] -->
-    <string name="vpn_version">Version <xliff:g id="version" example="3.3.0">%s</xliff:g></string>
+    <string name="vpn_version">Version</string>
     <!-- Button label to forget a VPN profile [CHAR LIMIT=40] -->
     <string name="vpn_forget_long">Forget VPN</string>
     <!-- Dialog message title to set another VPN app to be always-on [CHAR LIMIT=40] -->
@@ -8459,6 +8485,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>
 
@@ -11784,6 +11813,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] -->
@@ -13268,6 +13299,10 @@
     <string name="lockscreen_privacy_controls_setting_toggle">Show device controls</string>
     <!-- Device controls summary [CHAR LIMIT=NONE] -->
     <string name="lockscreen_privacy_controls_summary">Access controls when locked</string>
+    <!-- Lockscreen double-line clock summary [CHAR LIMIT=NONE] -->
+    <string name="lockscreen_double_line_clock_summary">Show double-line clock when available</string>
+    <!-- Lockscreen double-line clock toggle [CHAR LIMIT=60] -->
+    <string name="lockscreen_double_line_clock_setting_toggle">Double-line clock</string>
 
     <!-- Title for RTT setting. [CHAR LIMIT=NONE] -->
     <string name="rtt_settings_title"></string>
@@ -13331,8 +13366,6 @@
     <string name="provider_internet_settings">Internet</string>
     <!-- Provider Model: SIMs controls settings screen, item title to go into the SIMs settings -->
     <string name="provider_network_settings_title">SIMs</string>
-    <!-- Provider Model: Summary for Wi-Fi switch [CHAR LIMIT=NONE] -->
-    <string name="wifi_switch_summary">Find and connect to Wi\u2011Fi networks</string>
     <!-- Provider Model: List of synonyms for the airplane-safe networks, used to match in settings search [CHAR LIMIT=NONE] -->
     <string name="keywords_airplane_safe_networks">airplane, airplane-safe</string>
     <!-- Provider Model: Calls and SMS controllers settings screen, item title to go into the Calls and SMS settings -->
@@ -13510,8 +13543,6 @@
     <string name="adaptive_brightness_main_switch_title">Use adaptive brightness</string>
     <!-- Title for wifi calling main switch preferences. [CHAR LIMIT=50] -->
     <string name="wifi_calling_main_switch_title">Use Wi‑Fi calling</string>
-    <!-- Title for Screen saver main switch preferences. [CHAR LIMIT=50] -->
-    <string name="screen_saver_main_switch_title">Use screen saver</string>
 
     <!-- Default preference title for showing all apps on device [CHAR_LIMIT=50]-->
     <string name="default_see_all_apps_title">See all apps</string>
@@ -13576,8 +13607,10 @@
     <string name="camera_toggle_title">Camera access</string>
     <!-- Label for the camera use toggle [CHAR LIMIT=40] -->
     <string name="mic_toggle_title">Microphone access</string>
-    <!-- Describes what is affected by the camera or mic toggle [CHAR LIMIT=NONE] -->
-    <string name="sensor_toggle_description">For all apps and services</string>
+    <!-- Describes what is affected by the camera toggle [CHAR LIMIT=NONE] -->
+    <string name="cam_toggle_description">For apps and services</string>
+    <!-- Describes what is affected by the mic toggle [CHAR LIMIT=NONE] -->
+    <string name="mic_toggle_description">For apps and services. If this setting is off, microphone data may still be shared when you call an emergency number.</string>
 
     <!-- Title for Game settings entry. [CHAR_LIMIT=NONE] -->
     <string name="game_settings_title">Game settings</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8b0b7a2..8402dec 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -237,6 +237,26 @@
         <item name="android:textAppearance">@android:style/TextAppearance.DeviceDefault.Small</item>
     </style>
 
+    <style name="vpn_app_management_version_title">
+        <item name="android:textAppearance">?android:attr/textAppearanceListItem</item>
+        <item name="android:textColor">?android:attr/textColorPrimary</item>
+    </style>
+
+    <style name="vpn_app_management_version_summary">
+        <item name="android:textAppearance">?android:attr/textAppearanceListItemSecondary</item>
+        <item name="android:textColor">?android:attr/textColorSecondary</item>
+    </style>
+
+    <style name="screen_size_imageview_style">
+        <item name="android:layout_width">48dp</item>
+        <item name="android:layout_height">48dp</item>
+        <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
+        <item name="android:tint">?android:attr/textColorPrimary</item>
+        <item name="android:tintMode">src_in</item>
+        <item name="android:scaleType">center</item>
+        <item name="android:focusable">true</item>
+    </style>
+
     <style name="TextAppearance" parent="android:TextAppearance.DeviceDefault"/>
 
     <style name="TextAppearance.info_label">
@@ -444,28 +464,10 @@
     </style>
 
     <style name="LockPatternStyle">
-        <item name="*android:regularColor">@color/lock_pattern_view_regular_color</item>
-        <item name="*android:successColor">@color/lock_pattern_view_success_color</item>
+        <item name="*android:regularColor">?android:attr/colorAccent</item>
+        <item name="*android:successColor">?android:attr/textColorPrimary</item>
         <item name="*android:errorColor">?android:attr/colorError</item>
-    </style>
-
-    <style name="LockPatternStyle.Dark">
-        <item name="*android:regularColor">@color/lock_pattern_view_regular_color_dark</item>
-        <item name="*android:successColor">@color/lock_pattern_view_regular_color_dark</item>
-    </style>
-
-    <style name="LockPatternStyle.Dark.Work">
-        <item name="*android:regularColor">@*android:color/white</item>
-    </style>
-
-    <style name="LockPatternStyle.Unlock">
-        <item name="*android:regularColor">@color/unlock_pattern_view_regular_color</item>
-        <item name="*android:successColor">@color/unlock_pattern_view_success_color</item>
-    </style>
-
-    <style name="LockPatternStyle.Setup">
-        <item name="*android:regularColor">@color/setup_lock_pattern_view_regular_color_light</item>
-        <item name="*android:successColor">@color/setup_lock_pattern_view_success_color_light</item>
+        <item name="*android:dotColor">?android:attr/textColorSecondary</item>
     </style>
 
     <style name="device_info_dialog_label">
@@ -575,15 +577,16 @@
     </style>
 
     <style name="SliceRow.Slider">
-        <!-- Padding between content and the start icon is 0dp -->
-        <item name="contentStartPadding">0dp</item>
-        <item name="contentEndPadding">36dp</item>
+        <!-- Padding between content and the start icon is 5dp -->
+        <item name="contentStartPadding">5dp</item>
+        <item name="contentEndPadding">0dp</item>
 
         <!-- 0dp start padding for the end item -->
         <item name="endItemStartPadding">0dp</item>
         <!-- 8dp end padding for the end item -->
         <item name="endItemEndPadding">8dp</item>
 
+        <item name="titleSize">20sp</item>
         <!-- Align text with slider -->
         <item name="titleStartPadding">11dp</item>
         <item name="subContentStartPadding">11dp</item>
@@ -614,6 +617,15 @@
         <item name="android:paddingEnd">8dp</item>
     </style>
 
+    <style name="PanelOptionRoundedOutlinedButton" parent="@android:style/Widget.Material.Button">
+        <item name="android:background">@drawable/volume_dialog_button_background_outline</item>
+    </style>
+
+    <style name="PanelOptionRoundedSolidButton" parent="@android:style/Widget.Material.Button">
+        <item name="android:textColor">@android:color/system_neutral1_900</item>
+        <item name="android:background">@drawable/volume_dialog_button_background_solid</item>
+    </style>
+
     <style name="SetupWizardPartnerResource">
         <!-- Disable to use partner overlay theme for outside setupwizard flow. -->
         <item name="sucUsePartnerResource">@bool/config_suc_use_partner_resource</item>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index f937a3b..d65c1b3 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -58,7 +58,7 @@
         <!-- For AndroidX AlertDialog -->
         <item name="alertDialogTheme">@style/Theme.AlertDialog</item>
 
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Setup</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
 
         <!-- For AppBarLayout -->
         <item name="colorPrimary">@*android:color/primary_device_default_settings_light</item>
@@ -123,7 +123,7 @@
         <item name="android:windowDrawsSystemBarBackgrounds">false</item>
         <item name="android:background">@android:color/black</item>
 
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Unlock</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
     </style>
 
     <style name="ThemeOverlay.AlertDialog" parent="@android:style/ThemeOverlay.Material.Dialog.Alert">
@@ -164,13 +164,13 @@
         <item name="confirmDeviceCredentialsSideMargin">32dp</item>
         <item name="confirmDeviceCredentialsTopMargin">32dp</item>
 
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Dark</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
 
         <item name="android:windowAnimationStyle">@style/ConfirmDeviceCredentialsAnimationStyle</item>
     </style>
 
     <style name="Theme.ConfirmDeviceCredentialsWork" parent="Theme.ConfirmDeviceCredentialsDark">
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Dark.Work</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
         <item name="android:colorAccent">@*android:color/white</item>
     </style>
 
@@ -220,6 +220,10 @@
         <item name="android:statusBarColor">?attr/colorPrimaryDark</item>
     </style>
 
+    <style name="Theme.Settings.Home.DeepLink">
+        <item name="android:windowAnimationStyle">@null</item>
+    </style>
+
     <style name="Theme.Settings.ContextualCard" parent="Theme.Settings.Home">
         <item name="android:textAppearanceListItem">@style/TextAppearance.HomepageCardTitle</item>
     </style>
diff --git a/res/values/themes_suw.xml b/res/values/themes_suw.xml
index a0585fd..129769f 100644
--- a/res/values/themes_suw.xml
+++ b/res/values/themes_suw.xml
@@ -33,7 +33,7 @@
         <item name="preferenceTheme">@style/PreferenceTheme.SetupWizard</item>
 
         <!-- LockPatternView colors -->
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Setup</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
     </style>
 
     <style name="GlifTheme.Light" parent="SudThemeGlif.Light">
@@ -51,7 +51,7 @@
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
         <item name="preferenceTheme">@style/PreferenceTheme.SetupWizard</item>
 
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Setup</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
     </style>
 
     <style name="GlifV2Theme" parent="SudThemeGlifV2.DayNight">
@@ -70,7 +70,7 @@
         <item name="preferenceTheme">@style/PreferenceTheme.SetupWizard</item>
 
         <!-- LockPatternView colors -->
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Setup</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
     </style>
 
     <style name="GlifV2Theme.Light" parent="SudThemeGlifV2.Light">
@@ -88,7 +88,7 @@
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
         <item name="preferenceTheme">@style/PreferenceTheme.SetupWizard</item>
 
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Setup</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
     </style>
 
     <style name="GlifV3Theme" parent="SudThemeGlifV3.DayNight">
@@ -107,7 +107,7 @@
         <item name="preferenceTheme">@style/PreferenceTheme.SetupWizard</item>
 
         <!-- LockPatternView colors -->
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Setup</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
     </style>
 
     <style name="GlifV3Theme.Footer" parent="@style/SudThemeGlifV3.DayNight">
@@ -130,7 +130,7 @@
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
         <item name="preferenceTheme">@style/PreferenceTheme.SetupWizard</item>
 
-        <item name="*android:lockPatternStyle">@style/LockPatternStyle.Setup</item>
+        <item name="*android:lockPatternStyle">@style/LockPatternStyle</item>
     </style>
 
     <style name="GlifV3Theme.Light.NoActionBar" parent="GlifV3Theme.Light">
@@ -224,9 +224,6 @@
         <item name="android:fontFamily">@*android:string/config_bodyFontFamily</item>
     </style>
 
-    <!-- This theme was applied to Settings pages which are running under SUW. -->
-    <style name="SubSettings.SetupWizard" parent="SudThemeGlifV3.Light" />
-
     <!-- This theme was applied to Settings pages which are running under SUW with DynamicColor. -->
     <style name="SudDynamicColorThemeSettings.SetupWizard" parent="SudDynamicColorThemeGlifV3.Light">
         <item name="android:textAppearanceListItem">@style/TextAppearance.PreferenceTitle.SettingsLib</item>
@@ -234,6 +231,7 @@
         <item name="android:listPreferredItemPaddingEnd">16dp</item>
         <item name="preferenceTheme">@style/PreferenceTheme.SettingsLib</item>
         <item name="android:switchStyle">@style/Switch.SettingsLib</item>
+        <item name="preferenceFragmentCompatStyle">@style/SetupWizardPreferenceFragmentStyle</item>
     </style>
 
     <!-- This theme was applied to Settings pages which are running under SUW with DynamicColor. -->
@@ -243,6 +241,7 @@
         <item name="android:listPreferredItemPaddingEnd">16dp</item>
         <item name="preferenceTheme">@style/PreferenceTheme.SettingsLib</item>
         <item name="android:switchStyle">@style/Switch.SettingsLib</item>
+        <item name="preferenceFragmentCompatStyle">@style/SetupWizardPreferenceFragmentStyle</item>
     </style>
 
     <!-- DayNight themes -->
@@ -254,4 +253,4 @@
     <style name="GlifV3Theme.DayNight.Transparent" parent="GlifV3Theme.Light.Transparent" />
     <style name="SetupWizardTheme.DayNight.Transparent" parent="SetupWizardTheme.Light.Transparent" />
     <style name="SuwAlertDialogThemeCompat.DayNight" parent="SuwAlertDialogThemeCompat.Light" />
-</resources>
\ No newline at end of file
+</resources>
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_settings_for_setup_wizard.xml b/res/xml/accessibility_settings_for_setup_wizard.xml
index a3f56b5..dc359f4 100644
--- a/res/xml/accessibility_settings_for_setup_wizard.xml
+++ b/res/xml/accessibility_settings_for_setup_wizard.xml
@@ -21,26 +21,25 @@
     android:title="@string/vision_settings_title">
 
     <Preference
-        android:fragment="com.android.settings.display.FontSizePreferenceFragmentForSetupWizard"
         android:key="font_size_preference"
         android:icon="@drawable/ic_font_size"
         android:summary="@string/short_summary_font_size"
-        android:title="@string/title_font_size"/>
+        android:title="@string/title_font_size"
+        settings:controller="com.android.settings.accessibility.FontSizePreferenceController" />
 
     <com.android.settings.display.ScreenZoomPreference
-        android:fragment="com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard"
         android:key="force_density_preference"
         android:icon="@drawable/ic_screen_zoom"
         android:summary="@string/screen_zoom_short_summary"
-        android:title="@string/screen_zoom_title"/>
+        android:title="@string/screen_zoom_title"
+        settings:controller="com.android.settings.accessibility.ScreenSizePreferenceController" />
 
     <Preference
-        android:fragment="com.android.settings.accessibility.MagnificationPreferenceFragment"
+        android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragmentForSetupWizard"
         android:key="screen_magnification_preference"
         android:icon="@drawable/ic_accessibility_magnification"
         android:summary="@string/accessibility_preference_magnification_summary"
-        android:title="@string/accessibility_screen_magnification_title"
-        settings:controller="com.android.settings.accessibility.MagnificationPreferenceController"/>
+        android:title="@string/accessibility_screen_magnification_title" />
 
     <com.android.settingslib.RestrictedPreference
         android:fragment="com.android.settings.accessibility.ToggleSelectToSpeakPreferenceFragmentForSetupWizard"
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/accounts_dashboard_settings_header.xml b/res/xml/accounts_dashboard_settings_header.xml
new file mode 100644
index 0000000..99f0736
--- /dev/null
+++ b/res/xml/accounts_dashboard_settings_header.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:title="@string/account_dashboard_title"
+    settings:searchable="false">
+</PreferenceScreen>
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/connected_devices_advanced.xml b/res/xml/connected_devices_advanced.xml
index 85e4a76..152446c 100644
--- a/res/xml/connected_devices_advanced.xml
+++ b/res/xml/connected_devices_advanced.xml
@@ -60,11 +60,6 @@
         android:fragment="com.android.settings.print.PrintSettingsFragment"
         android:order="-3"/>
 
-    <Preference
-        android:key="bt_received_files"
-        android:icon="@drawable/ic_folder_vd_theme_24"
-        android:title="@string/bluetooth_show_files_received_via_bluetooth"/>
-
     <SwitchPreference
         android:key="uwb_settings"
         android:title="@string/uwb_settings_title"
diff --git a/res/xml/dream_fragment_overview.xml b/res/xml/dream_fragment_overview.xml
index 6e18a97..42b0334 100644
--- a/res/xml/dream_fragment_overview.xml
+++ b/res/xml/dream_fragment_overview.xml
@@ -19,11 +19,6 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/screensaver_settings_title">
 
-    <com.android.settingslib.widget.MainSwitchPreference
-        android:key="dream_start_now_button_container"
-        android:title="@string/screen_saver_main_switch_title"
-        settings:controller="com.android.settings.dream.StartNowPreferenceController"/>
-
     <com.android.settings.widget.GearPreference
         android:key="current_screensaver"
         android:title="@string/screensaver_settings_current"
@@ -35,4 +30,12 @@
         android:title="@string/screensaver_settings_when_to_dream"
         android:fragment="com.android.settings.dream.WhenToDreamPicker" />
 
+    <PreferenceCategory>
+        <com.android.settingslib.widget.LayoutPreference
+            android:key="dream_start_now_button_container"
+            android:layout="@layout/dream_start_button"
+            android:selectable="false"
+            settings:controller="com.android.settings.dream.StartNowPreferenceController" />
+    </PreferenceCategory>
+
 </PreferenceScreen>
diff --git a/res/xml/location_recent_location_access_header.xml b/res/xml/location_recent_location_access_header.xml
new file mode 100644
index 0000000..219f13e
--- /dev/null
+++ b/res/xml/location_recent_location_access_header.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:title="@string/location_category_recent_location_access"
+    settings:searchable="false">
+</PreferenceScreen>
diff --git a/res/xml/location_recent_requests_header.xml b/res/xml/location_recent_requests_header.xml
new file mode 100644
index 0000000..0e252a5
--- /dev/null
+++ b/res/xml/location_recent_requests_header.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:title="@string/location_category_recent_location_requests"
+    settings:searchable="false">
+</PreferenceScreen>
diff --git a/res/xml/location_services_header.xml b/res/xml/location_services_header.xml
new file mode 100644
index 0000000..4eaf2c5
--- /dev/null
+++ b/res/xml/location_services_header.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:title="@string/location_services_preference_title"
+    settings:searchable="false">
+</PreferenceScreen>
diff --git a/res/xml/location_settings_header.xml b/res/xml/location_settings_header.xml
new file mode 100644
index 0000000..4749a2e
--- /dev/null
+++ b/res/xml/location_settings_header.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:title="@string/location_settings_title"
+    settings:searchable="false">
+</PreferenceScreen>
diff --git a/res/xml/mobile_network_list.xml b/res/xml/mobile_network_list.xml
index 6bf9ad2..6008de7 100644
--- a/res/xml/mobile_network_list.xml
+++ b/res/xml/mobile_network_list.xml
@@ -13,7 +13,8 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
+<!-- @deprecated This class will be removed in Android U, use {@link network_provider_sims_list.xml}
+     instead.-->
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml
index 7d1ff09..673994a 100644
--- a/res/xml/mobile_network_settings.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -223,7 +223,6 @@
             <Preference
                 android:key="choose_network_key"
                 android:title="@string/choose_network_title"
-                android:fragment="com.android.phone.NetworkSelectSetting"
                 settings:controller="com.android.settings.network.telephony.gsm.OpenNetworkSelectPagePreferenceController"/>
         </PreferenceCategory>
 
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index 818069b..9547318 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -52,7 +52,7 @@
             settings:controller="com.android.settings.deviceinfo.BrandedAccountPreferenceController"/>
 
         <!-- Phone number -->
-        <Preference
+        <com.android.settings.deviceinfo.PhoneNumberSummaryPreference
             android:key="phone_number"
             android:order="3"
             android:title="@string/status_number"
@@ -84,9 +84,7 @@
         <Preference
             android:key="safety_info"
             android:order="17"
-            android:title="@string/safety_and_regulatory_info">
-            <intent android:action="android.settings.SHOW_SAFETY_AND_REGULATORY_INFO"/>
-        </Preference>
+            android:title="@string/safety_and_regulatory_info"/>
     </PreferenceCategory>
 
     <PreferenceCategory
@@ -115,7 +113,7 @@
             settings:controller="com.android.settings.deviceinfo.HardwareInfoPreferenceController"/>
 
         <!-- IMEI -->
-        <Preference
+        <com.android.settings.deviceinfo.PhoneNumberSummaryPreference
             android:key="imei_info"
             android:order="32"
             android:title="@string/status_imei"
diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml
index 7b6b67c..d842aad 100644
--- a/res/xml/network_and_internet.xml
+++ b/res/xml/network_and_internet.xml
@@ -13,7 +13,8 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
+<!-- @deprecated This class will be removed in Android U, use {@link network_provider_internet.xml}
+     instead.-->
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res-auto"
diff --git a/res/xml/network_provider_settings.xml b/res/xml/network_provider_settings.xml
index 2d211b5..92eca76 100644
--- a/res/xml/network_provider_settings.xml
+++ b/res/xml/network_provider_settings.xml
@@ -51,7 +51,6 @@
     <com.android.settingslib.RestrictedSwitchPreference
         android:key="main_toggle_wifi"
         android:title="@string/wifi"
-        android:summary="@string/wifi_switch_summary"
         settings:keywords="@string/keywords_wifi"
         settings:allowDividerAbove="true"/>
 
@@ -68,7 +67,7 @@
         android:layout="@layout/preference_category_no_label"/>
 
     <Preference
-        android:key="configure_wifi_settings"
+        android:key="configure_network_settings"
         android:title="@string/network_and_internet_preferences_title"
         settings:allowDividerAbove="true"
         android:fragment="com.android.settings.wifi.ConfigureWifiSettings"/>
diff --git a/res/xml/power_menu_settings.xml b/res/xml/power_menu_settings.xml
index 121a2da..864cf1b 100644
--- a/res/xml/power_menu_settings.xml
+++ b/res/xml/power_menu_settings.xml
@@ -17,6 +17,14 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:title="@string/power_menu_setting_name">
 
+    <!-- Animation uses embedded PNGs and lottie requires asset folder to be set despite
+         embedding. -->
+    <com.android.settingslib.widget.IllustrationPreference
+        android:key="gesture_power_menu_video"
+        settings:searchable="false"
+        settings:lottie_imageAssetsFolder="power_menu"
+        settings:lottie_rawRes="@raw/lottie_power_menu"/>
+
     <SwitchPreference
         android:key="gesture_power_menu_long_press_for_assist"
         android:title="@string/power_menu_long_press_for_assist"
diff --git a/res/xml/privacy_dashboard_settings.xml b/res/xml/privacy_dashboard_settings.xml
index f4e7062..3f093aa 100644
--- a/res/xml/privacy_dashboard_settings.xml
+++ b/res/xml/privacy_dashboard_settings.xml
@@ -67,14 +67,14 @@
     <com.android.settingslib.RestrictedSwitchPreference
         android:key="privacy_camera_toggle"
         android:title="@string/camera_toggle_title"
-        android:summary="@string/sensor_toggle_description"
+        android:summary="@string/cam_toggle_description"
         settings:controller="com.android.settings.privacy.CameraToggleController"/>
 
     <!-- Microphone toggle -->
     <com.android.settingslib.RestrictedSwitchPreference
         android:key="privacy_mic_toggle"
         android:title="@string/mic_toggle_title"
-        android:summary="@string/sensor_toggle_description"
+        android:summary="@string/mic_toggle_description"
         settings:controller="com.android.settings.privacy.MicToggleController"/>
 
     <!-- Show passwords -->
diff --git a/res/xml/security_lockscreen_settings.xml b/res/xml/security_lockscreen_settings.xml
index 82cb860..19a1a4c 100644
--- a/res/xml/security_lockscreen_settings.xml
+++ b/res/xml/security_lockscreen_settings.xml
@@ -56,6 +56,12 @@
             android:title="@string/lockscreen_privacy_controls_setting_toggle"
             android:summary="@string/lockscreen_privacy_controls_summary"
             settings:controller="com.android.settings.display.ControlsPrivacyPreferenceController" />
+
+        <SwitchPreference
+            android:key="lockscreen_double_line_clock_switch"
+            android:title="@string/lockscreen_double_line_clock_setting_toggle"
+            android:summary="@string/lockscreen_double_line_clock_summary"
+            settings:controller="com.android.settings.display.LockscreenClockPreferenceController" />
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/res/xml/security_settings_combined_biometric.xml b/res/xml/security_settings_combined_biometric.xml
index a394b7b..ef3a3fd 100644
--- a/res/xml/security_settings_combined_biometric.xml
+++ b/res/xml/security_settings_combined_biometric.xml
@@ -43,8 +43,7 @@
     </PreferenceCategory>
 
     <PreferenceCategory
-        android:key="biometric_ways_to_use"
-        android:title="@string/biometric_settings_category_ways_to_use">
+        android:key="biometric_ways_to_use">
 
         <com.android.settingslib.RestrictedSwitchPreference
             android:key="biometric_settings_biometric_keyguard"
diff --git a/res/xml/security_settings_combined_biometric_profile.xml b/res/xml/security_settings_combined_biometric_profile.xml
index 1a7fdff..1ba48ef 100644
--- a/res/xml/security_settings_combined_biometric_profile.xml
+++ b/res/xml/security_settings_combined_biometric_profile.xml
@@ -43,8 +43,7 @@
     </PreferenceCategory>
 
     <PreferenceCategory
-        android:key="biometric_ways_to_use"
-        android:title="@string/biometric_settings_category_ways_to_use">
+        android:key="biometric_ways_to_use">
 
         <SwitchPreference
             android:key="biometric_settings_biometric_app_profile"
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..042ce43 100644
--- a/res/xml/top_level_settings.xml
+++ b/res/xml/top_level_settings.xml
@@ -20,158 +20,176 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="top_level_settings">
 
-    <Preference
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.network.NetworkDashboardFragment"
         android:icon="@drawable/ic_settings_wireless"
         android:key="top_level_network"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment"
         android:icon="@drawable/ic_devices_other"
         android:key="top_level_connected_devices"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.applications.AppDashboardFragment"
         android:icon="@drawable/ic_apps"
         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
+    <com.android.settings.widget.HomepagePreference
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"
         android:icon="@drawable/ic_settings_battery_white"
         android:key="top_level_battery"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.deviceinfo.StorageDashboardFragment"
         android:icon="@drawable/ic_storage_white"
         android:key="top_level_storage"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.notification.SoundSettings"
         android:icon="@drawable/ic_volume_up_24dp"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.DisplaySettings"
         android:icon="@drawable/ic_settings_display_white"
         android:key="top_level_display"
         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
+    <com.android.settings.widget.RestrictedHomepagePreference
         android:icon="@drawable/ic_settings_wallpaper_white"
         android:key="top_level_wallpaper"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.accessibility.AccessibilitySettings"
         android:icon="@drawable/ic_settings_accessibility"
         android:key="top_level_accessibility"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.security.SecuritySettings"
         android:icon="@drawable/ic_settings_security_white"
         android:key="top_level_security"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.privacy.PrivacyDashboardFragment"
         android:icon="@drawable/ic_settings_privacy"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.location.LocationSettings"
         android:icon="@drawable/ic_settings_location"
         android:key="top_level_location"
         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
+    <com.android.settings.widget.HomepagePreference
         android:key="top_level_emergency"
         android:title="@string/emergency_settings_preference_title"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.accounts.AccountDashboardFragment"
         android:icon="@drawable/ic_settings_accounts"
         android:key="top_level_accounts"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.system.SystemDashboardFragment"
         android:icon="@drawable/ic_settings_system_dashboard_white"
         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
+    <com.android.settings.widget.HomepagePreference
         android:fragment="com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment"
         android:icon="@drawable/ic_phone_info"
         android:key="top_level_about_device"
         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
+    <com.android.settings.widget.HomepagePreference
         android:icon="@drawable/ic_help"
         android:key="top_level_support"
         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/res/xml/vpn_app_management.xml b/res/xml/vpn_app_management.xml
index bcaa6b0..adc441d 100644
--- a/res/xml/vpn_app_management.xml
+++ b/res/xml/vpn_app_management.xml
@@ -15,14 +15,24 @@
 -->
 
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res-auto">
+        xmlns:settings="http://schemas.android.com/apk/res-auto"
+        orderingFromXml="false"
+        >
+
+        <!-- To limit the size (in height) of version Preference displayed here,
+             maximum height of TextView need to be set programmingly.
+             Therefore, this Preference got removed from here and will be added
+             dynamically through source code.
 
         <Preference
+                android:order="0"
                 android:key="version"
                 android:textColor="?android:attr/textColorSecondary"
                 android:selectable="false"/>
+        -->
 
         <com.android.settingslib.RestrictedSwitchPreference
+                android:order="10"
                 android:key="always_on_vpn"
                 android:title="@string/vpn_menu_lockdown"
                 android:defaultValue="false"
@@ -32,6 +42,7 @@
                 settings:restrictedSwitchSummary="@string/disabled_by_admin_summary_text" />
 
         <com.android.settingslib.RestrictedSwitchPreference
+                android:order="20"
                 android:key="lockdown_vpn"
                 android:title="@string/vpn_require_connection"
                 android:defaultValue="false"
@@ -41,6 +52,7 @@
                 settings:restrictedSwitchSummary="@string/disabled_by_admin_summary_text" />
 
         <com.android.settingslib.RestrictedPreference
+                android:order="30"
                 android:key="forget_vpn"
                 android:title="@string/vpn_forget_long"
                 android:icon="@drawable/ic_delete"
diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml
index 623f326..2ab7b6a 100644
--- a/res/xml/wifi_configure_settings.xml
+++ b/res/xml/wifi_configure_settings.xml
@@ -42,15 +42,7 @@
 
     <Preference
         android:key="install_credentials"
-        android:title="@string/wifi_install_credentials">
-        <intent
-            android:action="android.credentials.INSTALL"
-            android:targetPackage="com.android.certinstaller"
-            android:targetClass="com.android.certinstaller.CertInstallerMain">
-            <!-- Same value as CERTIFICATE_USAGE_WIFI in keystore/java/android/security/Credentials.java -->
-            <extra android:name="certificate_install_usage" android:value="wifi"/>
-        </intent>
-    </Preference>
+        android:title="@string/wifi_install_credentials"/>
 
     <Preference
         android:key="wifi_direct"
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index da988f8..8ba77a4 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -83,13 +83,14 @@
     }
 
     public static class VpnSettingsActivity extends SettingsActivity { /* empty */ }
-    public static class DataSaverSummaryActivity extends SettingsActivity{ /* empty */ }
+    /** Activity for Data saver settings. */
+    public static class DataSaverSummaryActivity extends SettingsActivity { /* empty */ }
     public static class DateTimeSettingsActivity extends SettingsActivity { /* empty */ }
     public static class PrivateVolumeForgetActivity extends SettingsActivity { /* empty */ }
     public static class PublicVolumeSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiSettingsActivity extends SettingsActivity { /* empty */ }
-    public static class WifiSettings2Activity extends SettingsActivity { /* empty */ }
     public static class NetworkProviderSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class NetworkSelectActivity extends SettingsActivity { /* empty */ }
     /** Activity for the Wi-Fi network details settings. */
     public static class WifiDetailsSettingsActivity extends SettingsActivity { /* empty */ }
     public static class WifiP2pSettingsActivity extends SettingsActivity { /* empty */ }
@@ -121,13 +122,11 @@
     public static class AccessibilityInversionSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccessibilityContrastSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccessibilityDaltonizerSettingsActivity extends SettingsActivity { /* empty */ }
-    /**
-     * Activity for lockscreen settings.
-     */
+    /** Activity for lockscreen settings. */
     public static class LockScreenSettingsActivity extends SettingsActivity { /* empty */ }
-    /**
-     * Activity for Reduce Bright Colors.
-     */
+    /** Activity for bluetooth pairing settings. */
+    public static class BlueToothPairingActivity extends SettingsActivity { /* empty */ }
+    /** Activity for Reduce Bright Colors. */
     public static class ReduceBrightColorsSettingsActivity extends SettingsActivity { /* empty */ }
     /** Activity for the security dashboard. */
     public static class SecurityDashboardActivity extends SettingsActivity {
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index f3cdd6c..d3d3604 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -16,6 +16,10 @@
 
 package com.android.settings;
 
+import static android.provider.Settings.ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY;
+import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY;
+import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI;
+
 import static com.android.settings.applications.appinfo.AppButtonsPreferenceController.KEY_REMOVE_TASK_WHEN_FINISHING;
 
 import android.app.ActionBar;
@@ -29,6 +33,7 @@
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
 import android.content.res.Resources.Theme;
 import android.graphics.drawable.Icon;
 import android.os.AsyncTask;
@@ -52,12 +57,15 @@
 
 import com.android.internal.util.ArrayUtils;
 import com.android.settings.Settings.WifiSettingsActivity;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
 import com.android.settings.applications.manageapplications.ManageApplications;
 import com.android.settings.core.OnActivityResultListener;
 import com.android.settings.core.SettingsBaseActivity;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.core.gateway.SettingsGateway;
 import com.android.settings.dashboard.DashboardFeatureProvider;
+import com.android.settings.homepage.SettingsHomepageActivity;
+import com.android.settings.homepage.SliceDeepLinkHomepageActivity;
 import com.android.settings.homepage.TopLevelSettings;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.wfd.WifiDisplaySettings;
@@ -137,6 +145,12 @@
             ":settings:show_fragment_as_subsetting";
 
     /**
+     * Additional extra of Settings#ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK.
+     * Set true when the deep link intent is from a slice
+     */
+    public static final String EXTRA_IS_FROM_SLICE = "is_from_slice";
+
+    /**
      * Personal or Work profile tab of {@link ProfileSelectFragment}
      * <p>0: Personal tab.
      * <p>1: Work profile tab.
@@ -147,9 +161,13 @@
     public static final String META_DATA_KEY_FRAGMENT_CLASS =
             "com.android.settings.FRAGMENT_CLASS";
 
+    public static final String META_DATA_KEY_HIGHLIGHT_MENU_KEY =
+            "com.android.settings.HIGHLIGHT_MENU_KEY";
+
     private static final String EXTRA_UI_OPTIONS = "settings:ui_options";
 
     private String mFragmentClass;
+    private String mHighlightMenuKey;
 
     private CharSequence mInitialTitle;
     private int mInitialTitleResId;
@@ -229,18 +247,25 @@
 
     @Override
     protected void onCreate(Bundle savedState) {
+        // Should happen before any call to getIntent()
+        getMetaData();
+        final Intent intent = getIntent();
+
+        if (shouldShowTwoPaneDeepLink(intent)) {
+            launchHomepageForTwoPaneDeepLink(intent);
+            finishAndRemoveTask();
+            super.onCreate(savedState);
+            return;
+        }
+
         super.onCreate(savedState);
         Log.d(LOG_TAG, "Starting onCreate");
+
         long startTime = System.currentTimeMillis();
 
         final FeatureFactory factory = FeatureFactory.getFactory(this);
-
         mDashboardFeatureProvider = factory.getDashboardFeatureProvider(this);
 
-        // Should happen before any call to getIntent()
-        getMetaData();
-
-        final Intent intent = getIntent();
         if (intent.hasExtra(EXTRA_UI_OPTIONS)) {
             getWindow().setUiOptions(intent.getIntExtra(EXTRA_UI_OPTIONS, 0));
         }
@@ -248,17 +273,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 +366,99 @@
         }
     }
 
+    private boolean isSubSettings(Intent intent) {
+        return this instanceof SubSettings ||
+            intent.getBooleanExtra(EXTRA_SHOW_FRAGMENT_AS_SUBSETTING, false);
+    }
+
+    /**
+     * Returns the deep link trampoline intent for large screen devices.
+     */
+    public static Intent getTrampolineIntent(Intent intent, String highlightMenuKey) {
+        final Intent detailIntent = new Intent(intent);
+        // It's a deep link intent, SettingsHomepageActivity will set SplitPairRule and start it.
+        final Intent trampolineIntent = new Intent(ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)
+                .setPackage(Utils.SETTINGS_PACKAGE_NAME)
+                .replaceExtras(detailIntent);
+
+        // Relay detail intent data to prevent failure of Intent#ParseUri.
+        // If Intent#getData() is not null, Intent#toUri will return an Uri which has the scheme of
+        // Intent#getData() and it may not be the scheme of an Intent.
+        trampolineIntent.putExtra(
+                SettingsHomepageActivity.EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_DATA,
+                detailIntent.getData());
+        detailIntent.setData(null);
+
+        trampolineIntent.putExtra(EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI,
+                detailIntent.toUri(Intent.URI_INTENT_SCHEME));
+
+        trampolineIntent.putExtra(EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY,
+                highlightMenuKey);
+        trampolineIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+        return trampolineIntent;
+    }
+
+    private void launchHomepageForTwoPaneDeepLink(Intent intent) {
+        final Intent trampolineIntent;
+        if (intent.getBooleanExtra(EXTRA_IS_FROM_SLICE, false)) {
+            // Get menu key for slice deep link case.
+            final String highlightMenuKey = intent.getStringExtra(
+                    EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY);
+            if (!TextUtils.isEmpty(highlightMenuKey)) {
+                mHighlightMenuKey = highlightMenuKey;
+            }
+            trampolineIntent = getTrampolineIntent(intent, mHighlightMenuKey);
+            trampolineIntent.setClass(this, SliceDeepLinkHomepageActivity.class);
+        } else {
+            trampolineIntent = getTrampolineIntent(intent, mHighlightMenuKey);
+        }
+        startActivity(trampolineIntent);
+    }
+
+    private boolean shouldShowTwoPaneDeepLink(Intent intent) {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) {
+            return false;
+        }
+
+        // If the activity is not the task root, it should not start trampoline for deep links.
+        if (!isTaskRoot()) {
+            return false;
+        }
+
+        // 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 (intent.getBooleanExtra(EXTRA_IS_FROM_SLICE, false)) {
+            // Slice deep link starts the Intent using SubSettingLauncher. Returns true to show
+            // 2-pane deep link.
+            return true;
+        }
+
+        if (isSubSettings(intent)) {
+            return false;
+        }
+
+        if (intent.getBooleanExtra(SettingsHomepageActivity.EXTRA_IS_FROM_SETTINGS_HOMEPAGE,
+                /* defaultValue */ false)) {
+            return false;
+        }
+
+        if (TextUtils.equals(intent.getAction(), Intent.ACTION_CREATE_SHORTCUT)) {
+            // Returns false to show full screen for Intent.ACTION_CREATE_SHORTCUT because
+            // - Launcher startActivityForResult for Intent.ACTION_CREATE_SHORTCUT and activity
+            //   stack starts from launcher, CreateShortcutActivity will not follows SplitPaitRule
+            //   registered by Settings.
+            // - There is no CreateShortcutActivity entry point from Settings app UI.
+            return false;
+        }
+
+        return true;
+    }
+
     /** Returns the initial fragment name that the activity will launch. */
     @VisibleForTesting
     public String getInitialFragmentName(Intent intent) {
@@ -407,6 +519,9 @@
                     return;
                 } catch (NameNotFoundException e) {
                     Log.w(LOG_TAG, "Could not find package" + initialTitleResPackageName);
+                } catch (Resources.NotFoundException resourceNotFound) {
+                    Log.w(LOG_TAG,
+                            "Could not find title resource in " + initialTitleResPackageName);
                 }
             } else {
                 setTitle(mInitialTitleResId);
@@ -716,6 +831,7 @@
                     PackageManager.GET_META_DATA);
             if (ai == null || ai.metaData == null) return;
             mFragmentClass = ai.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
+            mHighlightMenuKey = ai.metaData.getString(META_DATA_KEY_HIGHLIGHT_MENU_KEY);
         } catch (NameNotFoundException nnfe) {
             // No recovery
             Log.d(LOG_TAG, "Cannot get Metadata for: " + getComponentName().toString());
diff --git a/src/com/android/settings/SettingsApplication.java b/src/com/android/settings/SettingsApplication.java
new file mode 100644
index 0000000..353208d
--- /dev/null
+++ b/src/com/android/settings/SettingsApplication.java
@@ -0,0 +1,47 @@
+/*
+ * 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;
+import com.android.settings.homepage.SettingsHomepageActivity;
+
+import java.lang.ref.WeakReference;
+
+/** Settings application which sets up activity embedding rules for the large screen device. */
+public class SettingsApplication extends Application {
+
+    private WeakReference<SettingsHomepageActivity> mHomeActivity = new WeakReference<>(null);
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        final ActivityEmbeddingRulesController controller =
+                new ActivityEmbeddingRulesController(this);
+        controller.initRules();
+    }
+
+    public void setHomeActivity(SettingsHomepageActivity homeActivity) {
+        mHomeActivity = new WeakReference<>(homeActivity);
+    }
+
+    public SettingsHomepageActivity getHomeActivity() {
+        return mHomeActivity.get();
+    }
+}
diff --git a/src/com/android/settings/SettingsInitialize.java b/src/com/android/settings/SettingsInitialize.java
index cd949de..ca13683 100644
--- a/src/com/android/settings/SettingsInitialize.java
+++ b/src/com/android/settings/SettingsInitialize.java
@@ -37,8 +37,11 @@
 import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
+import androidx.window.embedding.SplitController;
 
 import com.android.settings.Settings.CreateShortcutActivity;
+import com.android.settings.homepage.DeepLinkHomepageActivity;
+import com.android.settings.search.SearchStateReceiver;
 import com.android.settingslib.utils.ThreadUtils;
 
 import java.util.ArrayList;
@@ -48,7 +51,8 @@
  * Listens to {@link Intent.ACTION_PRE_BOOT_COMPLETED} and {@link Intent.ACTION_USER_INITIALIZED}
  * performs setup steps for a managed profile (disables the launcher icon of the Settings app,
  * adds cross-profile intent filters for the appropriate Settings activities), disables the
- * webview setting for non-admin users, and updates the intent flags for any existing shortcuts.
+ * webview setting for non-admin users, updates the intent flags for any existing shortcuts and
+ * enables DeepLinkHomepageActivity for large screen devices.
  */
 public class SettingsInitialize extends BroadcastReceiver {
     private static final String TAG = "Settings";
@@ -64,6 +68,7 @@
         managedProfileSetup(context, pm, broadcast, userInfo);
         webviewSettingSetup(context, pm, userInfo);
         ThreadUtils.postOnBackgroundThread(() -> refreshExistingShortcuts(context));
+        enableTwoPaneDeepLinkActivityIfNecessary(pm, context);
     }
 
     private void managedProfileSetup(Context context, final PackageManager pm, Intent broadcast,
@@ -143,4 +148,17 @@
         }
         shortcutManager.updateShortcuts(updates);
     }
+
+    private void enableTwoPaneDeepLinkActivityIfNecessary(PackageManager pm, Context context) {
+        final ComponentName deepLinkHome = new ComponentName(context,
+                DeepLinkHomepageActivity.class);
+        final ComponentName searchStateReceiver = new ComponentName(context,
+                SearchStateReceiver.class);
+        final int enableState = SplitController.getInstance().isSplitSupported()
+                ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+                : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+        pm.setComponentEnabledSetting(deepLinkHome, enableState, PackageManager.DONT_KILL_APP);
+        pm.setComponentEnabledSetting(searchStateReceiver, enableState,
+                PackageManager.DONT_KILL_APP);
+    }
 }
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index b8ff60c..1d6a48d 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -119,8 +119,7 @@
 
     @VisibleForTesting
     public HighlightablePreferenceGroupAdapter mAdapter;
-    @VisibleForTesting
-    public boolean mPreferenceHighlighted = false;
+    private boolean mPreferenceHighlighted = false;
 
     @Override
     public void onCreate(Bundle icicle) {
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..50f6003 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;
@@ -1222,7 +1223,11 @@
         return getColorAttrDefaultColor(context, android.R.attr.textColorSecondary);
     }
 
-    public static boolean isProviderModelEnabled(Context context) {
-        return FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL);
+    /**
+     * Returns the highlight color of homepage preference icons.
+     */
+    @ColorInt
+    public static int getHomepageIconColorHighlight(Context context) {
+        return getColorAttrDefaultColor(context, android.R.attr.textColorSecondaryInverse);
     }
 }
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..f06138f 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)
@@ -173,6 +180,23 @@
         return alertDialog;
     }
 
+    /**
+     * Updates the software shortcut in edit shortcut dialog.
+     *
+     * @param context A valid context
+     * @param editShortcutDialog Need to be a type of edit shortcut dialog
+     * @return True if the update is successful
+     */
+    public static boolean updateSoftwareShortcutInDialog(Context context,
+            Dialog editShortcutDialog) {
+        final View container = editShortcutDialog.findViewById(R.id.container_layout);
+        if (container != null) {
+            initSoftwareShortcut(context, container);
+            return true;
+        }
+        return false;
+    }
+
     private static AlertDialog createDialog(Context context, int dialogType,
             CharSequence dialogTitle, DialogInterface.OnClickListener listener) {
 
@@ -315,9 +339,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 +363,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 +396,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 +413,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 +425,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 +447,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 +500,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/AccessibilityScreenSizeForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivity.java
new file mode 100644
index 0000000..7c8076f
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivity.java
@@ -0,0 +1,174 @@
+/*
+ * 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.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE;
+
+import android.app.settings.SettingsEnums;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
+import androidx.annotation.IntDef;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.PreferenceFragmentCompat;
+
+import com.android.settings.R;
+import com.android.settings.core.InstrumentedActivity;
+import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard;
+import com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard;
+import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
+
+import com.google.android.setupcompat.template.FooterBarMixin;
+import com.google.android.setupcompat.template.FooterButton;
+import com.google.android.setupdesign.GlifLayout;
+import com.google.android.setupdesign.util.ThemeHelper;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/** Settings font/display size activity for SUW. */
+public class AccessibilityScreenSizeForSetupWizardActivity extends InstrumentedActivity {
+    private static final String TAG = "ScreenSizeForSetup";
+
+    // A parameter decides which fragment ({@link FontSizePreferenceFragmentForSetupWizard} or
+    // {@link ScreenZoomPreferenceFragmentForSetupWizard}) will be visioned.
+    static final String VISION_FRAGMENT_NO = "vision_fragment_no";
+    /**
+     * Flags indicating the type of the fragment.
+     */
+    @IntDef({
+        FragmentType.FONT_SIZE,
+        FragmentType.SCREEN_SIZE,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface FragmentType {
+        int FONT_SIZE = 1;
+        int SCREEN_SIZE = 2;
+    }
+
+    // Keep the last height of the scroll view in the {@link GlifLayout}
+    private int mLastScrollViewHeight;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        final int appliedTheme = ThemeHelper.trySetDynamicColor(this)
+                ? R.style.SudDynamicColorThemeGlifV3_DayNight : R.style.SudThemeGlifV3_DayNight;
+        setTheme(appliedTheme);
+        setContentView(R.layout.accessibility_screen_size_setup_wizard);
+        updateHeaderLayout();
+        scrollToBottom();
+        initFooterButton();
+        if (savedInstanceState == null) {
+            final PreferenceFragmentCompat fragment =
+                    getFragmentType(getIntent()) == FragmentType.FONT_SIZE
+                            ? new FontSizePreferenceFragmentForSetupWizard()
+                            : new ScreenZoomPreferenceFragmentForSetupWizard();
+            getSupportFragmentManager()
+                    .beginTransaction()
+                    .replace(R.id.content_frame, fragment)
+                    .commit();
+        }
+    }
+
+    @Override
+    protected void onPause() {
+        // For accessibility activities launched from setup wizard.
+        if (getTransitionType(getIntent()) == TransitionType.TRANSITION_FADE) {
+            overridePendingTransition(R.anim.sud_stay, android.R.anim.fade_out);
+        }
+        super.onPause();
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return getFragmentType(getIntent()) == FragmentType.FONT_SIZE
+                ? SettingsEnums.SUW_ACCESSIBILITY_FONT_SIZE
+                : SettingsEnums.SUW_ACCESSIBILITY_DISPLAY_SIZE;
+    }
+
+    @VisibleForTesting
+    void updateHeaderLayout() {
+        if (ThemeHelper.shouldApplyExtendedPartnerConfig(this) && isSuwSupportedTwoPanes()) {
+            final GlifLayout layout = findViewById(R.id.setup_wizard_layout);
+            final LinearLayout headerLayout = layout.findManagedViewById(R.id.sud_layout_header);
+            if (headerLayout != null) {
+                headerLayout.setPadding(0, layout.getPaddingTop(), 0,
+                        layout.getPaddingBottom());
+            }
+        }
+        ((TextView) findViewById(R.id.suc_layout_title)).setText(
+                getFragmentType(getIntent()) == FragmentType.FONT_SIZE
+                        ? R.string.title_font_size
+                        : R.string.screen_zoom_title);
+        ((TextView) findViewById(R.id.sud_layout_subtitle)).setText(
+                getFragmentType(getIntent()) == FragmentType.FONT_SIZE
+                        ? R.string.font_size_summary
+                        : R.string.screen_zoom_summary);
+    }
+
+    private boolean isSuwSupportedTwoPanes() {
+        return getResources().getBoolean(R.bool.config_suw_supported_two_panes);
+    }
+
+    private void initFooterButton() {
+        final GlifLayout layout = findViewById(R.id.setup_wizard_layout);
+        final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
+        final View.OnClickListener nextButtonListener = v -> onBackPressed();
+        final FooterButton primaryButton =
+                new FooterButton.Builder(this)
+                        .setText(R.string.done)
+                        .setListener(nextButtonListener)
+                        .setButtonType(FooterButton.ButtonType.NEXT)
+                        .setTheme(R.style.SudGlifButton_Primary)
+                        .build();
+        mixin.setPrimaryButton(primaryButton);
+    }
+
+    /**
+     * Scrolls to bottom while {@link ScrollView} layout changed.
+     */
+    private void scrollToBottom() {
+        mLastScrollViewHeight = 0;
+        final GlifLayout layout = findViewById(R.id.setup_wizard_layout);
+        final ScrollView scrollView = layout.getScrollView();
+        scrollView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
+            final int scrollViewHeight = scrollView.getHeight();
+            if (scrollViewHeight > 0 && scrollViewHeight != mLastScrollViewHeight) {
+                mLastScrollViewHeight = scrollViewHeight;
+                scrollView.post(() -> {
+                    // Here is no need to show the scrolling animation. So disabled first and
+                    // then enabled it after scrolling finished.
+                    scrollView.setSmoothScrollingEnabled(false);
+                    scrollView.fullScroll(View.FOCUS_DOWN);
+                    scrollView.setSmoothScrollingEnabled(true);
+                });
+            }
+        });
+    }
+
+    private int getTransitionType(Intent intent) {
+        return intent.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_NONE);
+    }
+
+    private int getFragmentType(Intent intent) {
+        return intent.getIntExtra(VISION_FRAGMENT_NO, FragmentType.FONT_SIZE);
+    }
+}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
index 4e8be42..a365566 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
@@ -28,29 +28,29 @@
 import android.graphics.Color;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityManager;
-import android.widget.LinearLayout;
 
 import androidx.preference.Preference;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.dashboard.DashboardFragment;
 import com.android.settingslib.RestrictedPreference;
 
 import com.google.android.setupdesign.GlifPreferenceLayout;
-import com.google.android.setupdesign.util.ThemeHelper;
 
 import java.util.List;
 
 /**
  * Activity with the accessibility settings specific to Setup Wizard.
  */
-public class AccessibilitySettingsForSetupWizard extends SettingsPreferenceFragment
+public class AccessibilitySettingsForSetupWizard extends DashboardFragment
         implements Preference.OnPreferenceChangeListener {
+    private static final String TAG = "AccessibilitySettingsForSetupWizard";
 
     // Preferences.
     private static final String DISPLAY_MAGNIFICATION_PREFERENCE =
@@ -81,16 +81,11 @@
         super.onViewCreated(view, savedInstanceState);
 
         final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
-        layout.setDividerInsets(Integer.MAX_VALUE, 0);
-        layout.setDescriptionText(R.string.vision_settings_description);
-        layout.setHeaderText(R.string.vision_settings_title);
-        layout.setIcon(getPrefContext().getDrawable(R.drawable.ic_accessibility_visibility));
-
-        if (ThemeHelper.shouldApplyExtendedPartnerConfig(getActivity())) {
-            final LinearLayout headerLayout = layout.findManagedViewById(R.id.sud_layout_header);
-            headerLayout.setPadding(0, headerLayout.getPaddingTop(), 0,
-                    headerLayout.getPaddingBottom());
-        }
+        final String title = getContext().getString(R.string.vision_settings_title);
+        final String description = getContext().getString(R.string.vision_settings_description);
+        final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
+        AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
+                description, icon);
     }
 
     @Override
@@ -103,8 +98,6 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-        addPreferencesFromResource(R.xml.accessibility_settings_for_setup_wizard);
-
         mDisplayMagnificationPreference = findPreference(DISPLAY_MAGNIFICATION_PREFERENCE);
         mScreenReaderPreference = findPreference(SCREEN_READER_PREFERENCE);
         mSelectToSpeakPreference = findPreference(SELECT_TO_SPEAK_PREFERENCE);
@@ -143,6 +136,23 @@
         return super.onPreferenceTreeClick(preference);
     }
 
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.accessibility_settings_for_setup_wizard;
+    }
+
+    @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    /**
+     * Returns accessibility service info by given package name and service name.
+     *
+     * @param packageName Package of accessibility service
+     * @param serviceName Class of accessibility service
+     * @return {@link AccessibilityServiceInfo} instance if available, null otherwise.
+     */
     private AccessibilityServiceInfo findService(String packageName, String serviceName) {
         final AccessibilityManager manager =
                 getActivity().getSystemService(AccessibilityManager.class);
@@ -150,8 +160,8 @@
                 manager.getInstalledAccessibilityServiceList();
         for (AccessibilityServiceInfo info : accessibilityServices) {
             ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo;
-            if (packageName.equals(serviceInfo.packageName)
-                    && serviceName.equals(serviceInfo.name)) {
+            if (TextUtils.equals(packageName, serviceInfo.packageName)
+                    && TextUtils.equals(serviceName, serviceInfo.name)) {
                 return info;
             }
         }
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
index b65b349..7a28e39 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -16,7 +16,10 @@
 
 package com.android.settings.accessibility;
 
+import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO;
+
 import android.content.ComponentName;
+import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.Menu;
@@ -29,8 +32,8 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.SetupWizardUtils;
+import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType;
 import com.android.settings.core.SubSettingLauncher;
-import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard;
 import com.android.settings.search.actionbar.SearchMenuController;
 import com.android.settings.support.actionbar.HelpResourceProvider;
 import com.android.settingslib.core.instrumentation.Instrumentable;
@@ -123,19 +126,11 @@
                 && new ComponentName(getPackageName(),
                 CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW).equals(
                 getIntent().getComponent())) {
-            final Bundle args = new Bundle();
-            args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0);
-            args.putBoolean(SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR, false);
-            final SubSettingLauncher subSettingLauncher = new SubSettingLauncher(this)
-                    .setDestination(FontSizePreferenceFragmentForSetupWizard.class.getName())
-                    .setArguments(args)
-                    .setSourceMetricsCategory(Instrumentable.METRICS_CATEGORY_UNKNOWN)
-                    .setExtras(SetupWizardUtils.copyLifecycleExtra(getIntent().getExtras(),
-                            new Bundle()))
-                    .setTransitionType(SettingsTransitionHelper.TransitionType.TRANSITION_FADE);
-
+            final Intent intent = new Intent(this,
+                    AccessibilityScreenSizeForSetupWizardActivity.class);
+            intent.putExtra(VISION_FRAGMENT_NO, FragmentType.FONT_SIZE);
+            startActivity(intent);
             Log.d(LOG_TAG, "Launch font size settings");
-            subSettingLauncher.launch();
             finish();
         }
     }
diff --git a/src/com/android/settings/accessibility/AccessibilitySetupWizardUtils.java b/src/com/android/settings/accessibility/AccessibilitySetupWizardUtils.java
new file mode 100644
index 0000000..95b689b
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilitySetupWizardUtils.java
@@ -0,0 +1,58 @@
+/*
+ * 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.graphics.drawable.Drawable;
+import android.widget.LinearLayout;
+
+import com.android.settings.R;
+
+import com.google.android.setupdesign.GlifPreferenceLayout;
+import com.google.android.setupdesign.util.ThemeHelper;
+
+/** Provides utility methods to accessibility settings for Setup Wizard only. */
+class AccessibilitySetupWizardUtils {
+
+    private AccessibilitySetupWizardUtils(){}
+
+    /**
+     * Update the {@link GlifPreferenceLayout} attributes if they have previously been initialized.
+     * When the SetupWizard supports the extended partner configs, it means the material layout
+     * would be applied. It should set a different padding/margin in views to align Settings style
+     * for accessibility feature pages.
+     *
+     * @param layout The layout instance
+     * @param title The text to be set as title
+     * @param description The text to be set as description
+     * @param icon The icon to be set
+     */
+    public static void updateGlifPreferenceLayout(Context context, GlifPreferenceLayout layout,
+            CharSequence title, CharSequence description, Drawable icon) {
+        layout.setHeaderText(title);
+        layout.setDescriptionText(description);
+        layout.setIcon(icon);
+        layout.setDividerInsets(Integer.MAX_VALUE, 0);
+
+        if (ThemeHelper.shouldApplyExtendedPartnerConfig(context)) {
+            final LinearLayout headerLayout = layout.findManagedViewById(R.id.sud_layout_header);
+            if (headerLayout != null) {
+                headerLayout.setPadding(0, layout.getPaddingTop(), 0,
+                        layout.getPaddingBottom());
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceController.java
index ce3d294..d204bb7 100644
--- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceController.java
@@ -23,6 +23,7 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -57,4 +58,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
 }
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/AccessibilitySlicePreferenceController.java b/src/com/android/settings/accessibility/AccessibilitySlicePreferenceController.java
index ca3befa..dd6edeb 100644
--- a/src/com/android/settings/accessibility/AccessibilitySlicePreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilitySlicePreferenceController.java
@@ -26,6 +26,7 @@
 import android.provider.Settings;
 import android.view.accessibility.AccessibilityManager;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.accessibility.AccessibilityUtils;
 
@@ -98,6 +99,11 @@
         return true;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
+
     private AccessibilityServiceInfo getAccessibilityServiceInfo() {
         final AccessibilityManager accessibilityManager = mContext.getSystemService(
                 AccessibilityManager.class);
diff --git a/src/com/android/settings/accessibility/AccessibilityUtil.java b/src/com/android/settings/accessibility/AccessibilityUtil.java
index 5c316a4..c935956 100644
--- a/src/com/android/settings/accessibility/AccessibilityUtil.java
+++ b/src/com/android/settings/accessibility/AccessibilityUtil.java
@@ -17,16 +17,22 @@
 package com.android.settings.accessibility;
 
 import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
+import static android.view.WindowInsets.Type.displayCutout;
+import static android.view.WindowInsets.Type.systemBars;
 import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
 
 import android.accessibilityservice.AccessibilityServiceInfo;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Insets;
+import android.graphics.Rect;
 import android.os.Build;
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.TypedValue;
+import android.view.WindowManager;
+import android.view.WindowMetrics;
 import android.view.accessibility.AccessibilityManager;
 
 import androidx.annotation.IntDef;
@@ -391,6 +397,25 @@
     }
 
     /**
+     * Gets the bounds of the display window excluding the insets of the system bar and display
+     * cut out.
+     *
+     * @param context the current context.
+     * @return the bounds of the display window.
+     */
+    public static Rect getDisplayBounds(Context context) {
+        final WindowManager windowManager = context.getSystemService(WindowManager.class);
+        final WindowMetrics metrics = windowManager.getCurrentWindowMetrics();
+
+        final Rect displayBounds = metrics.getBounds();
+        final Insets displayInsets = metrics.getWindowInsets().getInsetsIgnoringVisibility(
+                systemBars() | displayCutout());
+        displayBounds.inset(displayInsets);
+
+        return displayBounds;
+    }
+
+    /**
      * Indicates if the accessibility service belongs to a system App.
      * @param info AccessibilityServiceInfo
      * @return {@code true} if the App is a system App.
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/DisableAnimationsPreferenceController.java b/src/com/android/settings/accessibility/DisableAnimationsPreferenceController.java
index 1f91a87..5630dd9 100644
--- a/src/com/android/settings/accessibility/DisableAnimationsPreferenceController.java
+++ b/src/com/android/settings/accessibility/DisableAnimationsPreferenceController.java
@@ -22,6 +22,7 @@
 
 import androidx.annotation.VisibleForTesting;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 public class DisableAnimationsPreferenceController extends TogglePreferenceController {
@@ -71,4 +72,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
 }
diff --git a/src/com/android/settings/accessibility/FontSizePreferenceController.java b/src/com/android/settings/accessibility/FontSizePreferenceController.java
new file mode 100644
index 0000000..35f96d4
--- /dev/null
+++ b/src/com/android/settings/accessibility/FontSizePreferenceController.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO;
+import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE;
+
+import android.content.Context;
+import android.content.Intent;
+
+import androidx.preference.Preference;
+
+import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
+
+/** PreferenceController for displaying font size page. */
+public class FontSizePreferenceController extends BasePreferenceController {
+
+    public FontSizePreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (!mPreferenceKey.equals(preference.getKey())) {
+            return false;
+        }
+
+        final Intent intent = new Intent(mContext,
+                AccessibilityScreenSizeForSetupWizardActivity.class);
+        intent.putExtra(VISION_FRAGMENT_NO, FragmentType.FONT_SIZE);
+        intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_FADE);
+        mContext.startActivity(intent);
+        return true;
+    }
+}
diff --git a/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java b/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
index 97f96a4..b59b3b2 100644
--- a/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
+++ b/src/com/android/settings/accessibility/FontWeightAdjustmentPreferenceController.java
@@ -20,6 +20,7 @@
 import android.graphics.fonts.FontStyle;
 import android.provider.Settings;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /** PreferenceController for displaying all text in bold. */
@@ -47,4 +48,9 @@
         return Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.FONT_WEIGHT_ADJUSTMENT, (isChecked ? BOLD_TEXT_ADJUSTMENT : 0));
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
 }
diff --git a/src/com/android/settings/accessibility/HighTextContrastPreferenceController.java b/src/com/android/settings/accessibility/HighTextContrastPreferenceController.java
index f4474d6..e98a28c 100644
--- a/src/com/android/settings/accessibility/HighTextContrastPreferenceController.java
+++ b/src/com/android/settings/accessibility/HighTextContrastPreferenceController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.provider.Settings;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 public class HighTextContrastPreferenceController extends TogglePreferenceController {
@@ -43,4 +44,9 @@
         return Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, (isChecked ? 1 : 0));
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
 }
diff --git a/src/com/android/settings/accessibility/LargePointerIconPreferenceController.java b/src/com/android/settings/accessibility/LargePointerIconPreferenceController.java
index a7ee3d5..0220245 100644
--- a/src/com/android/settings/accessibility/LargePointerIconPreferenceController.java
+++ b/src/com/android/settings/accessibility/LargePointerIconPreferenceController.java
@@ -21,6 +21,7 @@
 
 import androidx.annotation.VisibleForTesting;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 public class LargePointerIconPreferenceController extends TogglePreferenceController {
@@ -50,4 +51,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
 }
diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
index 98090ac..9666fe9 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();
@@ -137,6 +150,7 @@
 
     private void initLaunchPreference() {
         final Preference launchPreference = new Preference(getPrefContext());
+        launchPreference.setLayoutResource(R.layout.accessibility_launch_activity_preference);
         launchPreference.setKey(KEY_LAUNCH_PREFERENCE);
 
         final AccessibilityShortcutInfo info = getAccessibilityShortcutInfo();
diff --git a/src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java b/src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java
index a9716d5..5ed4b5c 100644
--- a/src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java
+++ b/src/com/android/settings/accessibility/LockScreenRotationPreferenceController.java
@@ -23,6 +23,7 @@
 
 import com.android.internal.view.RotationPolicy;
 import com.android.internal.view.RotationPolicy.RotationPolicyListener;
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -62,6 +63,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
+
+    @Override
     public void onStop() {
         if (mRotationPolicyListener != null) {
             RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener);
diff --git a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
index 900e280..37d09a7 100644
--- a/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationGesturesPreferenceController.java
@@ -77,6 +77,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
+
+    @Override
     public CharSequence getSummary() {
         int resId = 0;
         if (mIsFromSUW) {
diff --git a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
index 9813bde..98855f7 100644
--- a/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
+++ b/src/com/android/settings/accessibility/MagnificationNavbarPreferenceController.java
@@ -83,6 +83,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
+
+    @Override
     public CharSequence getSummary() {
         int resId = 0;
         if (mIsFromSUW) {
diff --git a/src/com/android/settings/accessibility/PowerButtonEndsCallPreferenceController.java b/src/com/android/settings/accessibility/PowerButtonEndsCallPreferenceController.java
index 9ea9644..d409fa4 100644
--- a/src/com/android/settings/accessibility/PowerButtonEndsCallPreferenceController.java
+++ b/src/com/android/settings/accessibility/PowerButtonEndsCallPreferenceController.java
@@ -21,6 +21,7 @@
 import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
 
+import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.TogglePreferenceController;
 
@@ -51,4 +52,9 @@
         return !KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)
                 || !Utils.isVoiceCapable(mContext) ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
 }
diff --git a/src/com/android/settings/accessibility/PrimaryMonoPreferenceController.java b/src/com/android/settings/accessibility/PrimaryMonoPreferenceController.java
index bf12bde..5e69da7 100644
--- a/src/com/android/settings/accessibility/PrimaryMonoPreferenceController.java
+++ b/src/com/android/settings/accessibility/PrimaryMonoPreferenceController.java
@@ -20,6 +20,7 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -47,4 +48,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
 }
diff --git a/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceController.java b/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceController.java
index 62051c1..7550a30 100644
--- a/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceController.java
+++ b/src/com/android/settings/accessibility/ReduceBrightColorsPersistencePreferenceController.java
@@ -22,6 +22,7 @@
 
 import androidx.preference.Preference;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /** PreferenceController for persisting feature activation state after a restart. */
@@ -62,4 +63,9 @@
         super.updateState(preference);
         preference.setEnabled(mColorDisplayManager.isReduceBrightColorsActivated());
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
 }
diff --git a/src/com/android/settings/accessibility/ReduceBrightColorsPreferenceController.java b/src/com/android/settings/accessibility/ReduceBrightColorsPreferenceController.java
index d886a59..ca91219 100644
--- a/src/com/android/settings/accessibility/ReduceBrightColorsPreferenceController.java
+++ b/src/com/android/settings/accessibility/ReduceBrightColorsPreferenceController.java
@@ -95,6 +95,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accessibility;
+    }
+
+    @Override
     public void onStart() {
         mContext.getContentResolver().registerContentObserver(Settings.Secure.getUriFor(
                 Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED),
diff --git a/src/com/android/settings/accessibility/ScreenSizePreferenceController.java b/src/com/android/settings/accessibility/ScreenSizePreferenceController.java
new file mode 100644
index 0000000..9734dc6
--- /dev/null
+++ b/src/com/android/settings/accessibility/ScreenSizePreferenceController.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO;
+import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE;
+
+import android.content.Context;
+import android.content.Intent;
+
+import androidx.preference.Preference;
+
+import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
+
+/** PreferenceController for displaying screen size page. */
+public class ScreenSizePreferenceController extends BasePreferenceController {
+
+    public ScreenSizePreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (!mPreferenceKey.equals(preference.getKey())) {
+            return false;
+        }
+
+        final Intent intent = new Intent(mContext,
+                AccessibilityScreenSizeForSetupWizardActivity.class);
+        intent.putExtra(VISION_FRAGMENT_NO, FragmentType.SCREEN_SIZE);
+        intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_FADE);
+        mContext.startActivity(intent);
+        return true;
+    }
+}
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..c9449d2 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..233b7ee 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,7 +77,9 @@
     protected SettingsMainSwitchPreference mToggleServiceSwitchPreference;
     protected ShortcutPreference mShortcutPreference;
     protected Preference mSettingsPreference;
+    protected AccessibilityFooterPreferenceController mFooterPreferenceController;
     protected String mPreferenceKey;
+    protected Dialog mDialog;
 
     protected CharSequence mSettingsTitle;
     protected Intent mSettingsIntent;
@@ -106,6 +107,7 @@
     public static final int NOT_SET = -1;
     // Save user's shortcutType value when savedInstance has value (e.g. device rotated).
     protected int mSavedCheckBoxValue = NOT_SET;
+    private boolean mSavedAccessibilityFloatingMenuEnabled;
 
     // For html description of accessibility service, must follow the rule, such as
     // <img src="R.drawable.fileName"/>, a11y settings will get the resources successfully.
@@ -127,7 +129,6 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
         // Restore the user shortcut type.
         if (savedInstanceState != null && savedInstanceState.containsKey(
                 KEY_SAVED_USER_SHORTCUT_TYPE)) {
@@ -142,9 +143,7 @@
             setPreferenceScreen(preferenceScreen);
         }
 
-        final List<String> shortcutFeatureKeys = new ArrayList<>();
-        shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS);
-        shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);
+        final List<String> shortcutFeatureKeys = getFeatureSettingsKeys();
         mSettingsContentObserver = new SettingsContentObserver(new Handler(), shortcutFeatureKeys) {
             @Override
             public void onChange(boolean selfChange, Uri uri) {
@@ -154,6 +153,13 @@
         };
     }
 
+    protected List<String> getFeatureSettingsKeys() {
+        final List<String> shortcutFeatureKeys = new ArrayList<>();
+        shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS);
+        shortcutFeatureKeys.add(Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE);
+        return shortcutFeatureKeys;
+    }
+
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
@@ -200,6 +206,8 @@
         mSettingsContentObserver.register(getContentResolver());
         updateShortcutPreferenceData();
         updateShortcutPreference();
+
+        updateEditShortcutDialogIfNeeded();
     }
 
     @Override
@@ -208,6 +216,8 @@
                 AccessibilityManager.class);
         am.removeTouchExplorationStateChangeListener(mTouchExplorationStateChangeListener);
         mSettingsContentObserver.unregister(getContentResolver());
+        mSavedAccessibilityFloatingMenuEnabled = AccessibilityUtil.isFloatingMenuEnabled(
+                getContext());
         super.onPause();
     }
 
@@ -222,24 +232,23 @@
 
     @Override
     public Dialog onCreateDialog(int dialogId) {
-        Dialog dialog;
         switch (dialogId) {
             case DialogEnums.EDIT_SHORTCUT:
                 final CharSequence dialogTitle = getPrefContext().getString(
                         R.string.accessibility_shortcut_title, mPackageName);
                 final int dialogType = WizardManagerHelper.isAnySetupWizard(getIntent())
                         ? DialogType.EDIT_SHORTCUT_GENERIC_SUW : DialogType.EDIT_SHORTCUT_GENERIC;
-                dialog = AccessibilityDialogUtils.showEditShortcutDialog(
+                mDialog = AccessibilityDialogUtils.showEditShortcutDialog(
                         getPrefContext(), dialogType, dialogTitle,
                         this::callOnAlertDialogCheckboxClicked);
-                setupEditShortcutDialog(dialog);
-                return dialog;
+                setupEditShortcutDialog(mDialog);
+                return mDialog;
             case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
-                dialog = AccessibilityGestureNavigationTutorial
+                mDialog = AccessibilityGestureNavigationTutorial
                         .createAccessibilityTutorialDialog(getPrefContext(),
                                 getUserShortcutTypes());
-                dialog.setCanceledOnTouchOutside(false);
-                return dialog;
+                mDialog.setCanceledOnTouchOutside(false);
+                return mDialog;
             default:
                 throw new IllegalArgumentException("Unsupported dialogId " + dialogId);
         }
@@ -284,7 +293,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);
@@ -399,10 +415,13 @@
             return;
         }
 
+        final int displayHalfHeight =
+                AccessibilityUtil.getDisplayBounds(getPrefContext()).height() / 2;
         final IllustrationPreference illustrationPreference =
                 new IllustrationPreference(getPrefContext());
         illustrationPreference.setImageUri(mImageUri);
         illustrationPreference.setSelectable(false);
+        illustrationPreference.setMaxHeight(displayHalfHeight);
         illustrationPreference.setKey(KEY_ANIMATED_IMAGE);
 
         getPreferenceScreen().addPreference(illustrationPreference);
@@ -434,8 +453,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 +481,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 +516,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 +596,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 +621,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 +632,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= */
@@ -748,6 +742,20 @@
         }
     }
 
+    private void updateEditShortcutDialogIfNeeded() {
+        if (mDialog == null || !mDialog.isShowing()) {
+            return;
+        }
+
+        // Content in software shortcut need to be adjusted depend on the accessibility button
+        // mode status which can be changed in background.
+        final boolean valueChanged = mSavedAccessibilityFloatingMenuEnabled
+                != AccessibilityUtil.isFloatingMenuEnabled(getContext());
+        if (valueChanged) {
+            AccessibilityDialogUtils.updateSoftwareShortcutInDialog(getContext(), mDialog);
+        }
+    }
+
     @VisibleForTesting
     void saveNonEmptyUserShortcutType(int type) {
         if (type == UserShortcutType.EMPTY) {
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..1586c5a 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -38,7 +38,6 @@
 import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener;
 import android.widget.CheckBox;
 
-import androidx.appcompat.app.AlertDialog;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceCategory;
 
@@ -95,7 +94,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
@@ -119,26 +131,25 @@
     @Override
     public Dialog onCreateDialog(int dialogId) {
         if (mDialogDelegate != null) {
-            final Dialog dialog = mDialogDelegate.onCreateDialog(dialogId);
-            if (dialog != null) {
-                return dialog;
+            mDialog = mDialogDelegate.onCreateDialog(dialogId);
+            if (mDialog != null) {
+                return mDialog;
             }
         }
-        final AlertDialog dialog;
         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);
                 final int dialogType = WizardManagerHelper.isAnySetupWizard(getIntent())
                         ? DialogType.EDIT_SHORTCUT_MAGNIFICATION_SUW
                         : DialogType.EDIT_SHORTCUT_MAGNIFICATION;
-                dialog = AccessibilityDialogUtils.showEditShortcutDialog(getPrefContext(),
+                mDialog = AccessibilityDialogUtils.showEditShortcutDialog(getPrefContext(),
                         dialogType, dialogTitle, this::callOnAlertDialogCheckboxClicked);
-                setupMagnificationEditShortcutDialog(dialog);
-                return dialog;
+                setupMagnificationEditShortcutDialog(mDialog);
+                return mDialog;
             default:
                 return super.onCreateDialog(dialogId);
         }
@@ -196,7 +207,7 @@
     }
 
     @VisibleForTesting
-    void setupMagnificationEditShortcutDialog(AlertDialog dialog) {
+    void setupMagnificationEditShortcutDialog(Dialog dialog) {
         final View dialogSoftwareView = dialog.findViewById(R.id.software_shortcut);
         mSoftwareTypeCheckBox = dialogSoftwareView.findViewById(R.id.checkbox);
         setDialogTextAreaClickListener(dialogSoftwareView, mSoftwareTypeCheckBox);
@@ -252,6 +263,25 @@
         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 List<String> getFeatureSettingsKeys() {
+        final List<String> shortcutKeys = super.getFeatureSettingsKeys();
+        shortcutKeys.add(Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED);
+        return shortcutKeys;
+    }
+
     @Override
     protected CharSequence getShortcutTypeSummary(Context context) {
         if (!mShortcutPreference.isChecked()) {
@@ -262,18 +292,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 +308,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 +423,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/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java
index 016ac05..799508b 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizard.java
@@ -17,13 +17,46 @@
 package com.android.settings.accessibility;
 
 import android.app.settings.SettingsEnums;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.settings.R;
+
+import com.google.android.setupdesign.GlifPreferenceLayout;
 
 public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard
         extends ToggleScreenMagnificationPreferenceFragment {
 
     @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
+        final String title = getContext().getString(
+                R.string.accessibility_screen_magnification_title);
+        final String description = getContext().getString(
+                R.string.accessibility_preference_magnification_summary);
+        final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
+        AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
+                description, icon);
+
+        // Hide the setting from the vision settings.
+        mSettingsPreference.setVisible(false);
+    }
+
+    @Override
+    public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
+            Bundle savedInstanceState) {
+        final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
+        return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
+    }
+
+    @Override
     public int getMetricsCategory() {
         return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION;
     }
@@ -49,12 +82,4 @@
         // Hides help center in action bar and footer bar in SuW
         return 0;
     }
-
-    @Override
-    public void onViewCreated(View view, Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
-
-        // Hide the setting from the vision settings.
-        mSettingsPreference.setVisible(false);
-    }
 }
diff --git a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
index c0d54e8..7adddf9 100644
--- a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
@@ -17,8 +17,17 @@
 package com.android.settings.accessibility;
 
 import android.app.settings.SettingsEnums;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.settings.R;
+
+import com.google.android.setupdesign.GlifPreferenceLayout;
 
 public class ToggleScreenReaderPreferenceFragmentForSetupWizard
         extends ToggleAccessibilityServicePreferenceFragment {
@@ -28,10 +37,25 @@
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+
+        final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
+        final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE);
+        final String description = getContext().getString(R.string.talkback_summary);
+        final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
+        AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
+                description, icon);
+
         mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked();
     }
 
     @Override
+    public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
+            Bundle savedInstanceState) {
+        final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
+        return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
+    }
+
+    @Override
     public int getMetricsCategory() {
         return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SCREEN_READER;
     }
diff --git a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java
index 4334cd0..b5c1123 100644
--- a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java
@@ -17,8 +17,17 @@
 package com.android.settings.accessibility;
 
 import android.app.settings.SettingsEnums;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.settings.R;
+
+import com.google.android.setupdesign.GlifPreferenceLayout;
 
 public class ToggleSelectToSpeakPreferenceFragmentForSetupWizard
         extends InvisibleToggleAccessibilityServicePreferenceFragment {
@@ -28,12 +37,27 @@
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+
+        final GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
+        final String title = getArguments().getString(AccessibilitySettings.EXTRA_TITLE);
+        final String description = getContext().getString(R.string.select_to_speak_summary);
+        final Drawable icon = getContext().getDrawable(R.drawable.ic_accessibility_visibility);
+        AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
+                description, icon);
+
         mToggleSwitchWasInitiallyChecked = mToggleServiceSwitchPreference.isChecked();
     }
 
     @Override
+    public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
+            Bundle savedInstanceState) {
+        final GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
+        return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
+    }
+
+    @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/accounts/AvatarViewMixin.java b/src/com/android/settings/accounts/AvatarViewMixin.java
index 7a2565c..6b04e97 100644
--- a/src/com/android/settings/accounts/AvatarViewMixin.java
+++ b/src/com/android/settings/accounts/AvatarViewMixin.java
@@ -37,6 +37,7 @@
 import androidx.lifecycle.OnLifecycleEvent;
 
 import com.android.settings.R;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
 import com.android.settings.homepage.SettingsHomepageActivity;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.utils.ThreadUtils;
@@ -105,6 +106,17 @@
                 return;
             }
 
+            // Set a component name since activity embedding requires a component name for
+            // registering a rule.
+            intent.setComponent(matchedIntents.get(0).getComponentInfo().getComponentName());
+            ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+                    mContext,
+                    intent.getComponent(),
+                    intent.getAction(),
+                    false /* finishPrimaryWithSecondary */,
+                    true /* finishSecondaryWithPrimary */,
+                    false /* clearTop */);
+
             FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
                     .logSettingsTileClick(KEY_AVATAR_ICON, SettingsEnums.SETTINGS_HOMEPAGE);
 
diff --git a/src/com/android/settings/accounts/CrossProfileCalendarPreferenceController.java b/src/com/android/settings/accounts/CrossProfileCalendarPreferenceController.java
index 863e790..3dc05ef 100644
--- a/src/com/android/settings/accounts/CrossProfileCalendarPreferenceController.java
+++ b/src/com/android/settings/accounts/CrossProfileCalendarPreferenceController.java
@@ -22,6 +22,7 @@
 import android.provider.Settings;
 import android.util.Log;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 import java.util.Set;
@@ -71,6 +72,11 @@
                 CROSS_PROFILE_CALENDAR_ENABLED, value, mManagedUser.getIdentifier());
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_accounts;
+    }
+
     static boolean isCrossProfileCalendarDisallowedByAdmin(Context context, int userId) {
         final Context managedProfileContext = createPackageContextAsUser(context, userId);
         final DevicePolicyManager dpm = managedProfileContext.getSystemService(
diff --git a/src/com/android/settings/accounts/ManagedProfileSettings.java b/src/com/android/settings/accounts/ManagedProfileSettings.java
index f16bc3f..a6fa15a 100644
--- a/src/com/android/settings/accounts/ManagedProfileSettings.java
+++ b/src/com/android/settings/accounts/ManagedProfileSettings.java
@@ -16,33 +16,25 @@
 
 package com.android.settings.accounts;
 
-import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.SearchIndexableResource;
 import android.util.Log;
 
-import androidx.preference.Preference;
-import androidx.preference.PreferenceGroup;
-import androidx.preference.PreferenceManager;
-
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.search.Indexable;
 import com.android.settingslib.search.SearchIndexable;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 /**
  * Setting page for managed profile.
diff --git a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
index 037f584..2ce2206 100644
--- a/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
+++ b/src/com/android/settings/accounts/RemoveAccountPreferenceController.java
@@ -53,6 +53,7 @@
 public class RemoveAccountPreferenceController extends AbstractPreferenceController
         implements PreferenceControllerMixin, OnClickListener {
 
+    private static final String TAG = "RemoveAccountPrefController";
     private static final String KEY_REMOVE_ACCOUNT = "remove_account";
 
     private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -175,10 +176,11 @@
                                 | IOException
                                 | AuthenticatorException e) {
                             // handled below
-                        }
-                        if (failed) {
+                            Log.w(TAG, "Remove account error: " + e);
                             RemoveAccountFailureDialog.show(getTargetFragment());
-                        } else {
+                        }
+                        Log.i(TAG, "failed: " + failed);
+                        if (!failed) {
                             targetActivity.finish();
                         }
                     }, null, mUserHandle);
@@ -210,7 +212,7 @@
             final Context context = getActivity();
 
             return new AlertDialog.Builder(context)
-                    .setTitle(R.string.really_remove_account_title)
+                    .setTitle(R.string.remove_account_label)
                     .setMessage(R.string.remove_account_failed)
                     .setPositiveButton(android.R.string.ok, null)
                     .create();
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
new file mode 100644
index 0000000..8484324
--- /dev/null
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingRulesController.java
@@ -0,0 +1,219 @@
+/*
+ * 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.window.embedding.ActivityFilter;
+import androidx.window.embedding.ActivityRule;
+import androidx.window.embedding.SplitController;
+import androidx.window.embedding.SplitPairFilter;
+import androidx.window.embedding.SplitPairRule;
+import androidx.window.embedding.SplitPlaceholderRule;
+import androidx.window.embedding.SplitRule;
+
+import com.android.settings.Settings;
+import com.android.settings.SubSettings;
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling;
+import com.android.settings.biometrics.fingerprint.FingerprintEnrollIntroduction;
+import com.android.settings.homepage.DeepLinkHomepageActivity;
+import com.android.settings.homepage.SettingsHomepageActivity;
+import com.android.settings.homepage.SliceDeepLinkHomepageActivity;
+
+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();
+
+        registerAlwaysExpandRule();
+    }
+
+    /** Register a SplitPairRule for 2-pane. */
+    public static void registerTwoPanePairRule(Context context,
+            ComponentName primaryComponent,
+            ComponentName secondaryComponent,
+            String secondaryIntentAction,
+            int finishPrimaryWithSecondary,
+            int finishSecondaryWithPrimary,
+            boolean clearTop) {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
+            return;
+        }
+        final Set<SplitPairFilter> filters = new HashSet<>();
+        filters.add(new SplitPairFilter(primaryComponent, secondaryComponent,
+                secondaryIntentAction));
+
+        SplitController.getInstance().registerRule(new SplitPairRule(filters,
+                finishPrimaryWithSecondary,
+                finishSecondaryWithPrimary,
+                clearTop,
+                ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(context),
+                ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(context),
+                ActivityEmbeddingUtils.SPLIT_RATIO,
+                LayoutDirection.LOCALE));
+    }
+
+    /**
+     * Register a new SplitPairRule for Settings home. Because homepage is able to be opened by
+     * {@link Settings} or {@link SettingsHomepageActivity} or
+     * {@link SliceDeepLinkHomepageActivity}, we register split rule for above cases.
+     */
+    public static void registerTwoPanePairRuleForSettingsHome(Context context,
+            ComponentName secondaryComponent,
+            String secondaryIntentAction,
+            boolean finishPrimaryWithSecondary,
+            boolean finishSecondaryWithPrimary,
+            boolean clearTop) {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
+            return;
+        }
+
+        registerTwoPanePairRule(
+                context,
+                new ComponentName(context, Settings.class),
+                secondaryComponent,
+                secondaryIntentAction,
+                finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+                finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+                clearTop);
+
+        registerTwoPanePairRule(
+                context,
+                new ComponentName(context, SettingsHomepageActivity.class),
+                secondaryComponent,
+                secondaryIntentAction,
+                finishPrimaryWithSecondary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+                finishSecondaryWithPrimary ? SplitRule.FINISH_ADJACENT : SplitRule.FINISH_NEVER,
+                clearTop);
+
+        // We should finish HomePageActivity altogether even if it shows in single pane for all deep
+        // link cases.
+        registerTwoPanePairRule(
+                context,
+                new ComponentName(context, DeepLinkHomepageActivity.class),
+                secondaryComponent,
+                secondaryIntentAction,
+                finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+                finishSecondaryWithPrimary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+                clearTop);
+
+        registerTwoPanePairRule(
+                context,
+                new ComponentName(context, SliceDeepLinkHomepageActivity.class),
+                secondaryComponent,
+                secondaryIntentAction,
+                finishPrimaryWithSecondary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+                finishSecondaryWithPrimary ? SplitRule.FINISH_ALWAYS : SplitRule.FINISH_NEVER,
+                clearTop);
+    }
+
+    /**
+     * Register a new SplitPairRule for Settings home.
+     */
+    public static void registerTwoPanePairRuleForSettingsHome(Context context,
+            ComponentName secondaryComponent,
+            String secondaryIntentAction,
+            boolean clearTop) {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
+            return;
+        }
+
+        registerTwoPanePairRuleForSettingsHome(
+                context,
+                secondaryComponent,
+                secondaryIntentAction,
+                true /* finishPrimaryWithSecondary */,
+                true /* finishSecondaryWithPrimary */,
+                clearTop);
+    }
+
+    /** Register a SplitPairRule for SubSettings if the device supports 2-pane. */
+    public static void registerSubSettingsPairRule(Context context, boolean clearTop) {
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
+            return;
+        }
+
+        registerTwoPanePairRuleForSettingsHome(
+                context,
+                new ComponentName(context, SubSettings.class),
+                null /* secondaryIntentAction */,
+                clearTop);
+    }
+
+    private void registerHomepagePlaceholderRule() {
+        final Set<ActivityFilter> activityFilters = new HashSet<>();
+        addActivityFilter(activityFilters, SettingsHomepageActivity.class);
+        addActivityFilter(activityFilters, DeepLinkHomepageActivity.class);
+        addActivityFilter(activityFilters, SliceDeepLinkHomepageActivity.class);
+        addActivityFilter(activityFilters, Settings.class);
+
+        final Intent intent = new Intent(mContext, Settings.NetworkDashboardActivity.class);
+        final SplitPlaceholderRule placeholderRule = new SplitPlaceholderRule(
+                activityFilters,
+                intent,
+                true /* stickyPlaceholder */,
+                SplitRule.FINISH_ADJACENT,
+                ActivityEmbeddingUtils.getMinCurrentScreenSplitWidthPx(mContext),
+                ActivityEmbeddingUtils.getMinSmallestScreenSplitWidthPx(mContext),
+                ActivityEmbeddingUtils.SPLIT_RATIO,
+                LayoutDirection.LOCALE);
+
+        mSplitController.registerRule(placeholderRule);
+    }
+
+    private void registerAlwaysExpandRule() {
+        final Set<ActivityFilter> activityFilters = new HashSet<>();
+        addActivityFilter(activityFilters, FingerprintEnrollIntroduction.class);
+        addActivityFilter(activityFilters, FingerprintEnrollEnrolling.class);
+        mSplitController.registerRule(new ActivityRule(activityFilters, true /* alwaysExpand */));
+    }
+
+    private void addActivityFilter(Set<ActivityFilter> activityFilters,
+            Class<? extends Activity> activityClass) {
+        activityFilters.add(new ActivityFilter(new ComponentName(mContext, activityClass),
+                null /* intentAction */));
+    }
+}
diff --git a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
new file mode 100644
index 0000000..ac3a01d
--- /dev/null
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
@@ -0,0 +1,77 @@
+/*
+ * 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.app.ActivityTaskManager;
+import android.content.Context;
+import android.graphics.Rect;
+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;
+    }
+
+    /** Whether the screen meets two-pane resolution. */
+    public static boolean isTwoPaneResolution(Activity activity) {
+        final Rect currentTaskBounds =
+                ActivityTaskManager.getInstance().getTaskBounds(activity.getTaskId());
+
+        return currentTaskBounds.width() >= getMinCurrentScreenSplitWidthPx(activity)
+                && currentTaskBounds.height() >= getMinSmallestScreenSplitWidthPx(activity);
+    }
+}
diff --git a/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java b/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java
index 1d34a13..d922867 100644
--- a/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceController.java
@@ -26,6 +26,7 @@
 import static com.android.settings.Utils.PROPERTY_HIBERNATION_TARGETS_PRE_S_APPS;
 
 import android.app.AppOpsManager;
+import android.apphibernation.AppHibernationManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.provider.DeviceConfig;
@@ -134,8 +135,15 @@
     @Override
     public boolean onPreferenceChange(Preference preference, Object isChecked) {
         try {
+            final boolean checked = (boolean) isChecked;
             mAppOpsManager.setUidMode(OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, mPackageUid,
-                    (boolean) isChecked ? MODE_ALLOWED : MODE_IGNORED);
+                    checked ? MODE_ALLOWED : MODE_IGNORED);
+            if (!checked) {
+                final AppHibernationManager ahm =
+                        mContext.getSystemService(AppHibernationManager.class);
+                ahm.setHibernatingForUser(mPackageName, false);
+                ahm.setHibernatingGlobally(mPackageName, false);
+            }
         } catch (RuntimeException e) {
             return false;
         }
diff --git a/src/com/android/settings/applications/autofill/PasswordsPreferenceController.java b/src/com/android/settings/applications/autofill/PasswordsPreferenceController.java
index 1d67fb7..cb8b73d 100644
--- a/src/com/android/settings/applications/autofill/PasswordsPreferenceController.java
+++ b/src/com/android/settings/applications/autofill/PasswordsPreferenceController.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.applications.autofill;
 
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static android.service.autofill.AutofillService.EXTRA_RESULT;
 
 import static androidx.lifecycle.Lifecycle.Event.ON_CREATE;
@@ -133,7 +134,8 @@
                         new Intent(Intent.ACTION_MAIN)
                                 .setClassName(
                                         serviceInfo.packageName,
-                                        service.getPasswordsActivity());
+                                        service.getPasswordsActivity())
+                                .setFlags(FLAG_ACTIVITY_NEW_TASK);
                 prefContext.startActivityAsUser(intent, UserHandle.of(user));
                 return true;
             });
diff --git a/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java b/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
index 43c377a..88ce786 100644
--- a/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
+++ b/src/com/android/settings/applications/intentpicker/AppLaunchSettings.java
@@ -105,6 +105,11 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (mAppEntry == null) {
+            Log.w(TAG, "onCreate: mAppEntry is null, please check the reason!!!");
+            getActivity().finish();
+            return;
+        }
         addPreferencesFromResource(R.xml.installed_app_launch_settings);
         mDomainVerificationManager = mContext.getSystemService(DomainVerificationManager.class);
         initUIComponents();
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index edd4088..d20e570 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -272,8 +272,8 @@
 
         Intent intent = activity.getIntent();
         Bundle args = getArguments();
-        int screenTitle = intent.getIntExtra(
-                SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.all_apps);
+        final int screenTitle = getTitleResId(intent, args);
+
         String className = args != null ? args.getString(EXTRA_CLASSNAME) : null;
         if (className == null) {
             className = intent.getComponent().getClassName();
@@ -290,49 +290,36 @@
             mSortOrder = R.id.sort_order_size;
         } else if (className.equals(UsageAccessSettingsActivity.class.getName())) {
             mListType = LIST_TYPE_USAGE_ACCESS;
-            screenTitle = R.string.usage_access;
         } else if (className.equals(HighPowerApplicationsActivity.class.getName())) {
             mListType = LIST_TYPE_HIGH_POWER;
             // Default to showing system.
             mShowSystem = true;
-            screenTitle = R.string.high_power_apps;
         } else if (className.equals(OverlaySettingsActivity.class.getName())) {
             mListType = LIST_TYPE_OVERLAY;
-            screenTitle = R.string.system_alert_window_settings;
 
             reportIfRestrictedSawIntent(intent);
         } else if (className.equals(WriteSettingsActivity.class.getName())) {
             mListType = LIST_TYPE_WRITE_SETTINGS;
-            screenTitle = R.string.write_settings;
         } else if (className.equals(ManageExternalSourcesActivity.class.getName())) {
             mListType = LIST_TYPE_MANAGE_SOURCES;
-            screenTitle = R.string.install_other_apps;
         } else if (className.equals(GamesStorageActivity.class.getName())) {
             mListType = LIST_TYPE_GAMES;
             mSortOrder = R.id.sort_order_size;
         } else if (className.equals(Settings.ChangeWifiStateActivity.class.getName())) {
             mListType = LIST_TYPE_WIFI_ACCESS;
-            screenTitle = R.string.change_wifi_state_title;
         } else if (className.equals(Settings.ManageExternalStorageActivity.class.getName())) {
             mListType = LIST_MANAGE_EXTERNAL_STORAGE;
-            screenTitle = R.string.manage_external_storage_title;
         }  else if (className.equals(Settings.MediaManagementAppsActivity.class.getName())) {
             mListType = LIST_TYPE_MEDIA_MANAGEMENT_APPS;
-            screenTitle = R.string.media_management_apps_title;
         } else if (className.equals(Settings.AlarmsAndRemindersActivity.class.getName())) {
             mListType = LIST_TYPE_ALARMS_AND_REMINDERS;
-            screenTitle = R.string.alarms_and_reminders_title;
         } else if (className.equals(Settings.NotificationAppListActivity.class.getName())) {
             mListType = LIST_TYPE_NOTIFICATION;
             mUsageStatsManager = IUsageStatsManager.Stub.asInterface(
                     ServiceManager.getService(Context.USAGE_STATS_SERVICE));
             mNotificationBackend = new NotificationBackend();
             mSortOrder = R.id.sort_order_recent_notification;
-            screenTitle = R.string.app_notifications_title;
         } else {
-            if (screenTitle == -1) {
-                screenTitle = R.string.all_apps;
-            }
             mListType = LIST_TYPE_MAIN;
         }
         final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
@@ -881,6 +868,46 @@
         params.setBehavior(behavior);
     }
 
+    /**
+     * Returns a resource ID of title based on what type of app list is
+     * @param intent the intent of the activity that might include a specified title
+     * @param args the args that includes a class name of app list
+     */
+    public static int getTitleResId(@NonNull Intent intent, Bundle args) {
+        int screenTitle = intent.getIntExtra(
+                SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.all_apps);
+        String className = args != null ? args.getString(EXTRA_CLASSNAME) : null;
+        if (className == null) {
+            className = intent.getComponent().getClassName();
+        }
+        if (className.equals(Settings.UsageAccessSettingsActivity.class.getName())) {
+            screenTitle = R.string.usage_access;
+        } else if (className.equals(Settings.HighPowerApplicationsActivity.class.getName())) {
+            screenTitle = R.string.high_power_apps;
+        } else if (className.equals(Settings.OverlaySettingsActivity.class.getName())) {
+            screenTitle = R.string.system_alert_window_settings;
+        } else if (className.equals(Settings.WriteSettingsActivity.class.getName())) {
+            screenTitle = R.string.write_settings;
+        } else if (className.equals(Settings.ManageExternalSourcesActivity.class.getName())) {
+            screenTitle = R.string.install_other_apps;
+        } else if (className.equals(Settings.ChangeWifiStateActivity.class.getName())) {
+            screenTitle = R.string.change_wifi_state_title;
+        } else if (className.equals(Settings.ManageExternalStorageActivity.class.getName())) {
+            screenTitle = R.string.manage_external_storage_title;
+        }  else if (className.equals(Settings.MediaManagementAppsActivity.class.getName())) {
+            screenTitle = R.string.media_management_apps_title;
+        } else if (className.equals(Settings.AlarmsAndRemindersActivity.class.getName())) {
+            screenTitle = R.string.alarms_and_reminders_title;
+        } else if (className.equals(Settings.NotificationAppListActivity.class.getName())) {
+            screenTitle = R.string.app_notifications_title;
+        } else {
+            if (screenTitle == -1) {
+                screenTitle = R.string.all_apps;
+            }
+        }
+        return screenTitle;
+    }
+
     static class FilterSpinnerAdapter extends SettingsSpinnerAdapter<CharSequence> {
 
         private final ManageApplications mManageApplications;
diff --git a/src/com/android/settings/applications/managedomainurls/DomainAppPreference.java b/src/com/android/settings/applications/managedomainurls/DomainAppPreference.java
index be53fab..559c2ab 100644
--- a/src/com/android/settings/applications/managedomainurls/DomainAppPreference.java
+++ b/src/com/android/settings/applications/managedomainurls/DomainAppPreference.java
@@ -17,27 +17,26 @@
 package com.android.settings.applications.managedomainurls;
 
 import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.UserHandle;
-import android.util.ArraySet;
+import android.content.pm.verify.domain.DomainVerificationManager;
+import android.content.pm.verify.domain.DomainVerificationUserState;
 import android.util.IconDrawableFactory;
 
 import com.android.settings.R;
-import com.android.settings.Utils;
+import com.android.settings.applications.intentpicker.IntentPickerUtils;
 import com.android.settingslib.applications.ApplicationsState.AppEntry;
 import com.android.settingslib.widget.AppPreference;
 
 public class DomainAppPreference extends AppPreference {
 
     private final AppEntry mEntry;
-    private final PackageManager mPm;
+    private final DomainVerificationManager mDomainVerificationManager;
     private final IconDrawableFactory mIconDrawableFactory;
 
     public DomainAppPreference(final Context context, IconDrawableFactory iconFactory,
             AppEntry entry) {
         super(context);
         mIconDrawableFactory = iconFactory;
-        mPm = context.getPackageManager();
+        mDomainVerificationManager = context.getSystemService(DomainVerificationManager.class);
         mEntry = entry;
         mEntry.ensureLabel(getContext());
 
@@ -60,22 +59,14 @@
     }
 
     private CharSequence getDomainsSummary(String packageName) {
-        // If the user has explicitly said "no" for this package, that's the
-        // string we should show.
-        int domainStatus =
-                mPm.getIntentVerificationStatusAsUser(packageName, UserHandle.myUserId());
-        if (domainStatus == PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) {
-            return getContext().getText(R.string.domain_urls_summary_none);
-        }
-        // Otherwise, ask package manager for the domains for this package,
-        // and show the first one (or none if there aren't any).
-        final ArraySet<String> result = Utils.getHandledDomains(mPm, packageName);
-        if (result.isEmpty()) {
-            return getContext().getText(R.string.domain_urls_summary_none);
-        } else if (result.size() == 1) {
-            return getContext().getString(R.string.domain_urls_summary_one, result.valueAt(0));
-        } else {
-            return getContext().getString(R.string.domain_urls_summary_some, result.valueAt(0));
-        }
+        return getContext().getText(isLinkHandlingAllowed(packageName)
+                ? R.string.app_link_open_always : R.string.app_link_open_never);
+    }
+
+    private boolean isLinkHandlingAllowed(String packageName) {
+        final DomainVerificationUserState userState =
+                IntentPickerUtils.getDomainVerificationUserState(mDomainVerificationManager,
+                        packageName);
+        return userState == null ? false : userState.isLinkHandlingAllowed();
     }
 }
diff --git a/src/com/android/settings/applications/managedomainurls/InstantAppWebActionPreferenceController.java b/src/com/android/settings/applications/managedomainurls/InstantAppWebActionPreferenceController.java
index 77abfe7..1d395ee 100644
--- a/src/com/android/settings/applications/managedomainurls/InstantAppWebActionPreferenceController.java
+++ b/src/com/android/settings/applications/managedomainurls/InstantAppWebActionPreferenceController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.provider.Settings;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 public class InstantAppWebActionPreferenceController extends TogglePreferenceController {
@@ -43,4 +44,9 @@
         return Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.INSTANT_APPS_ENABLED, isChecked ? 1 : 0);
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_apps;
+    }
 }
diff --git a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceController.java b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceController.java
index 874f707..b189435 100644
--- a/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceController.java
+++ b/src/com/android/settings/applications/specialaccess/pictureinpicture/PictureInPictureDetailPreferenceController.java
@@ -67,7 +67,9 @@
         try {
             packageInfoWithActivities = mPackageManager.getPackageInfoAsUser(mPackageName,
                     PackageManager.GET_ACTIVITIES, UserHandle.myUserId());
-        } catch (PackageManager.NameNotFoundException e) {
+        } catch (Exception e) {
+            // Catch Exception to avoid DeadObjectException thrown with binder transaction
+            // failures, since the explicit request of DeadObjectException has compiler errors.
             Log.e(TAG, "Exception while retrieving the package info of " + mPackageName, e);
         }
 
diff --git a/src/com/android/settings/backup/AutoRestorePreferenceController.java b/src/com/android/settings/backup/AutoRestorePreferenceController.java
index 4dd2eb6..bf63e25 100644
--- a/src/com/android/settings/backup/AutoRestorePreferenceController.java
+++ b/src/com/android/settings/backup/AutoRestorePreferenceController.java
@@ -27,6 +27,7 @@
 import androidx.preference.Preference;
 import androidx.preference.SwitchPreference;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 public class AutoRestorePreferenceController extends TogglePreferenceController {
@@ -84,4 +85,9 @@
 
         return result;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
\ No newline at end of file
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/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
index 44a874b..c74e85e 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
@@ -32,6 +32,7 @@
 import android.hardware.biometrics.BiometricManager;
 import android.hardware.biometrics.BiometricManager.Authenticators;
 import android.hardware.biometrics.BiometricManager.BiometricError;
+import android.hardware.biometrics.SensorProperties;
 import android.hardware.face.FaceManager;
 import android.hardware.face.FaceSensorPropertiesInternal;
 import android.hardware.fingerprint.FingerprintManager;
@@ -175,39 +176,64 @@
         mHasFeatureFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
         mHasFeatureFace = pm.hasSystemFeature(PackageManager.FEATURE_FACE);
 
+        // Default behavior is to enroll BIOMETRIC_WEAK or above. See ACTION_BIOMETRIC_ENROLL.
+        final int authenticators = getIntent().getIntExtra(
+                EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, Authenticators.BIOMETRIC_WEAK);
+        Log.d(TAG, "Authenticators: " + authenticators);
+
+        mParentalOptionsRequired = intent.getBooleanExtra(EXTRA_REQUIRE_PARENTAL_CONSENT, false);
+        mSkipReturnToParent = intent.getBooleanExtra(EXTRA_SKIP_RETURN_TO_PARENT, false);
+
         // determine what can be enrolled
         final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
+        final boolean isMultiSensor = mHasFeatureFace && mHasFeatureFingerprint;
+
+        Log.d(TAG, "parentalOptionsRequired: " + mParentalOptionsRequired
+                + ", skipReturnToParent: " + mSkipReturnToParent
+                + ", isSetupWizard: " + isSetupWizard
+                + ", isMultiSensor: " + isMultiSensor);
 
         if (mHasFeatureFace) {
             final FaceManager faceManager = getSystemService(FaceManager.class);
             final List<FaceSensorPropertiesInternal> faceProperties =
                     faceManager.getSensorPropertiesInternal();
+            final int maxFacesEnrollableIfSUW = getApplicationContext().getResources()
+                    .getInteger(R.integer.suw_max_faces_enrollable);
             if (!faceProperties.isEmpty()) {
+                final FaceSensorPropertiesInternal props = faceProperties.get(0);
                 final int maxEnrolls =
-                        isSetupWizard ? 1 : faceProperties.get(0).maxEnrollmentsPerUser;
+                        isSetupWizard ? maxFacesEnrollableIfSUW : props.maxEnrollmentsPerUser;
                 mIsFaceEnrollable =
                         faceManager.getEnrolledFaces(mUserId).size() < maxEnrolls;
+
+                // exclude face enrollment from setup wizard if configured as a convenience
+                // isSetupWizard is always false for unicorn enrollment, so if consent is
+                // required check if setup has completed instead.
+                final boolean isSettingUp = isSetupWizard || (mParentalOptionsRequired
+                        && !WizardManagerHelper.isUserSetupComplete(this));
+                if (isSettingUp && isMultiSensor && mIsFaceEnrollable) {
+                    if (props.sensorStrength == SensorProperties.STRENGTH_CONVENIENCE) {
+                        Log.i(TAG, "Excluding face from SuW enrollment (STRENGTH_CONVENIENCE)");
+                        mIsFaceEnrollable = false;
+                    }
+                }
             }
         }
         if (mHasFeatureFingerprint) {
             final FingerprintManager fpManager = getSystemService(FingerprintManager.class);
             final List<FingerprintSensorPropertiesInternal> fpProperties =
                     fpManager.getSensorPropertiesInternal();
+            final int maxFingerprintsEnrollableIfSUW = getApplicationContext().getResources()
+                    .getInteger(R.integer.suw_max_fingerprints_enrollable);
             if (!fpProperties.isEmpty()) {
                 final int maxEnrolls =
-                        isSetupWizard ? 1 : fpProperties.get(0).maxEnrollmentsPerUser;
+                        isSetupWizard ? maxFingerprintsEnrollableIfSUW
+                                : fpProperties.get(0).maxEnrollmentsPerUser;
                 mIsFingerprintEnrollable =
                         fpManager.getEnrolledFingerprints(mUserId).size() < maxEnrolls;
             }
         }
 
-        mParentalOptionsRequired = intent.getBooleanExtra(EXTRA_REQUIRE_PARENTAL_CONSENT, false);
-        mSkipReturnToParent = intent.getBooleanExtra(EXTRA_SKIP_RETURN_TO_PARENT, false);
-
-        Log.d(TAG, "parentalOptionsRequired: " + mParentalOptionsRequired
-                + ", skipReturnToParent: " + mSkipReturnToParent
-                + ", isSetupWizard: " + isSetupWizard);
-
         // TODO(b/195128094): remove this restriction
         // Consent can only be recorded when this activity is launched directly from the kids
         // module. This can be removed when there is a way to notify consent status out of band.
@@ -236,28 +262,21 @@
             }
         }
 
-        // start enrollment process if we haven't bailed out yet
         if (mParentalOptionsRequired && mParentalOptions == null) {
-            mParentalConsentHelper = new ParentalConsentHelper(
-                    mIsFaceEnrollable, mIsFingerprintEnrollable, mGkPwHandle);
+            mParentalConsentHelper = new ParentalConsentHelper(mGkPwHandle);
             setOrConfirmCredentialsNow();
         } else {
-            startEnroll();
+            // Start enrollment process if we haven't bailed out yet
+            startEnrollWith(authenticators, isSetupWizard);
         }
     }
 
-    private void startEnroll() {
-        // Default behavior is to enroll BIOMETRIC_WEAK or above. See ACTION_BIOMETRIC_ENROLL.
-        final int authenticators = getIntent().getIntExtra(
-                EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, Authenticators.BIOMETRIC_WEAK);
-        Log.d(TAG, "Authenticators: " + authenticators);
-
-        startEnrollWith(authenticators, WizardManagerHelper.isAnySetupWizard(getIntent()));
-    }
-
     private void startEnrollWith(@Authenticators.Types int authenticators, boolean setupWizard) {
         // If the caller is not setup wizard, and the user has something enrolled, finish.
-        if (!setupWizard) {
+        // Allow parental consent flow to skip this check, since one modality could be consented
+        // and another non-consented. This can also happen if the restriction is applied when
+        // enrollments already exists.
+        if (!setupWizard && !mParentalOptionsRequired) {
             final BiometricManager bm = getSystemService(BiometricManager.class);
             final @BiometricError int result = bm.canAuthenticate(authenticators);
             if (result != BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED) {
@@ -324,6 +343,27 @@
         // single enrollment is handled entirely by the launched activity
         // this handles multi enroll or if parental consent is required
         if (mParentalConsentHelper != null) {
+            // Lazily retrieve the values from ParentalControlUtils, since the value may not be
+            // ready in onCreate.
+            final boolean faceConsentRequired = ParentalControlsUtils
+                    .parentConsentRequired(this, BiometricAuthenticator.TYPE_FACE) != null;
+            final boolean fpConsentRequired = ParentalControlsUtils
+                    .parentConsentRequired(this, BiometricAuthenticator.TYPE_FINGERPRINT) != null;
+
+            final boolean requestFaceConsent = faceConsentRequired
+                    && mHasFeatureFace
+                    && mIsFaceEnrollable;
+            final boolean requestFpConsent = fpConsentRequired && mHasFeatureFingerprint;
+
+            Log.d(TAG, "faceConsentRequired: " + faceConsentRequired
+                    + ", fpConsentRequired: " + fpConsentRequired
+                    + ", hasFeatureFace: " + mHasFeatureFace
+                    + ", hasFeatureFingerprint: " + mHasFeatureFingerprint
+                    + ", faceEnrollable: " + mIsFaceEnrollable
+                    + ", fpEnrollable: " + mIsFingerprintEnrollable);
+
+            mParentalConsentHelper.setConsentRequirement(requestFaceConsent, requestFpConsent);
+
             handleOnActivityResultWhileConsenting(requestCode, resultCode, data);
         } else {
             handleOnActivityResultWhileEnrolling(requestCode, resultCode, data);
@@ -356,10 +396,18 @@
                     final boolean isStillPrompting = mParentalConsentHelper.launchNext(
                             this, REQUEST_CHOOSE_OPTIONS, resultCode, data);
                     if (!isStillPrompting) {
-                        Log.d(TAG, "Enrollment consent options set, starting enrollment");
                         mParentalOptions = mParentalConsentHelper.getConsentResult();
                         mParentalConsentHelper = null;
-                        startEnroll();
+                        Log.d(TAG, "Enrollment consent options set, starting enrollment: "
+                                + mParentalOptions);
+                        // Note that we start enrollment with CONVENIENCE instead of the default
+                        // of WEAK in startEnroll(), since we want to allow enrollment for any
+                        // sensor as long as it has been consented for. We should eventually
+                        // clean up this logic and do something like pass in the parental consent
+                        // result, so that we can request enrollment for specific sensors, but
+                        // that's quite a large and risky change to the startEnrollWith() logic.
+                        startEnrollWith(Authenticators.BIOMETRIC_CONVENIENCE,
+                                WizardManagerHelper.isAnySetupWizard(getIntent()));
                     }
                 } else {
                     Log.d(TAG, "Unknown or cancelled parental consent");
diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
index 89b4350..7f3bc87 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
@@ -203,11 +203,15 @@
                 getMoreButtonTextRes(), this::onNextButtonClick);
         requireScrollMixin.setOnRequireScrollStateChangedListener(
                 scrollNeeded -> {
-                    // Update text of primary button from "More" to "Agree".
-                    final int primaryButtonTextRes = scrollNeeded
-                            ? getMoreButtonTextRes()
-                            : getAgreeButtonTextRes();
-                    getPrimaryFooterButton().setText(this, primaryButtonTextRes);
+
+                    boolean enrollmentCompleted = checkMaxEnrolled() != 0;
+                    if (!enrollmentCompleted) {
+                        // Update text of primary button from "More" to "Agree".
+                        final int primaryButtonTextRes = scrollNeeded
+                                ? getMoreButtonTextRes()
+                                : getAgreeButtonTextRes();
+                        getPrimaryFooterButton().setText(this, primaryButtonTextRes);
+                    }
 
                     // Show secondary button once scroll is completed.
                     if (!scrollNeeded) {
@@ -257,8 +261,12 @@
             // Lock thingy is already set up, launch directly to the next page
             launchNextEnrollingActivity(mToken);
         } else {
-            setResult(RESULT_FINISHED);
-            finish();
+            boolean couldStartNextBiometric = BiometricUtils.tryStartingNextBiometricEnroll(this,
+                    ENROLL_NEXT_BIOMETRIC_REQUEST, "enrollIntroduction#onNextButtonClicked");
+            if (!couldStartNextBiometric) {
+                setResult(RESULT_FINISHED);
+                finish();
+            }
         }
     }
 
diff --git a/src/com/android/settings/biometrics/BiometricUtils.java b/src/com/android/settings/biometrics/BiometricUtils.java
index 7dd6385..5ee7880 100644
--- a/src/com/android/settings/biometrics/BiometricUtils.java
+++ b/src/com/android/settings/biometrics/BiometricUtils.java
@@ -22,6 +22,9 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentSender;
+import android.hardware.biometrics.SensorProperties;
+import android.hardware.face.FaceManager;
+import android.hardware.face.FaceSensorPropertiesInternal;
 import android.os.storage.StorageManager;
 import android.util.Log;
 import android.view.Surface;
@@ -273,4 +276,17 @@
     public static boolean isReverseLandscape(@NonNull Context context) {
         return context.getDisplay().getRotation() == Surface.ROTATION_270;
     }
+
+    /**
+     * @param faceManager
+     * @return True if at least one sensor is set as a convenience.
+     */
+    public static boolean isConvenience(@NonNull FaceManager faceManager) {
+        for (FaceSensorPropertiesInternal props : faceManager.getSensorPropertiesInternal()) {
+            if (props.sensorStrength == SensorProperties.STRENGTH_CONVENIENCE) {
+                return true;
+            }
+        }
+        return false;
+    }
 }
diff --git a/src/com/android/settings/biometrics/ParentalConsentHelper.java b/src/com/android/settings/biometrics/ParentalConsentHelper.java
index e0e082b..40ff8ea 100644
--- a/src/com/android/settings/biometrics/ParentalConsentHelper.java
+++ b/src/com/android/settings/biometrics/ParentalConsentHelper.java
@@ -52,8 +52,8 @@
     private static final String KEY_FINGERPRINT_CONSENT_STRINGS = "fingerprint_strings";
     private static final String KEY_IRIS_CONSENT_STRINGS = "iris_strings";
 
-    private final boolean mRequireFace;
-    private final boolean mRequireFingerprint;
+    private boolean mRequireFace;
+    private boolean mRequireFingerprint;
 
     private long mGkPwHandle;
     @Nullable
@@ -64,15 +64,19 @@
     /**
      * Helper for aggregating user consent.
      *
-     * @param requireFace if face consent should be shown
-     * @param requireFingerprint if fingerprint consent should be shown
      * @param gkPwHandle for launched intents
      */
-    public ParentalConsentHelper(boolean requireFace, boolean requireFingerprint,
-            @Nullable Long gkPwHandle) {
+    public ParentalConsentHelper(@Nullable Long gkPwHandle) {
+        mGkPwHandle = gkPwHandle != null ? gkPwHandle : 0L;
+    }
+
+    /**
+     * @param requireFace if face consent should be shown
+     * @param requireFingerprint if fingerprint consent should be shown
+     */
+    public void setConsentRequirement(boolean requireFace, boolean requireFingerprint) {
         mRequireFace = requireFace;
         mRequireFingerprint = requireFingerprint;
-        mGkPwHandle = gkPwHandle != null ? gkPwHandle : 0L;
     }
 
     /**
diff --git a/src/com/android/settings/biometrics/combination/BiometricSettingsAppPreferenceController.java b/src/com/android/settings/biometrics/combination/BiometricSettingsAppPreferenceController.java
index 2da8164..a46ae7a 100644
--- a/src/com/android/settings/biometrics/combination/BiometricSettingsAppPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/BiometricSettingsAppPreferenceController.java
@@ -91,4 +91,10 @@
     public final boolean isSliceable() {
         return false;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        // not needed since it's not sliceable
+        return NO_RES;
+    }
 }
diff --git a/src/com/android/settings/biometrics/combination/BiometricSettingsKeyguardPreferenceController.java b/src/com/android/settings/biometrics/combination/BiometricSettingsKeyguardPreferenceController.java
index f6f2d5f..2d22558 100644
--- a/src/com/android/settings/biometrics/combination/BiometricSettingsKeyguardPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/BiometricSettingsKeyguardPreferenceController.java
@@ -73,4 +73,10 @@
     public final boolean isSliceable() {
         return false;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        // not needed since it's not sliceable
+        return NO_RES;
+    }
 }
diff --git a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
index 6847367..bd79cc2 100644
--- a/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
+++ b/src/com/android/settings/biometrics/combination/BiometricsSettingsBase.java
@@ -21,13 +21,18 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.hardware.biometrics.SensorProperties;
 import android.hardware.face.FaceManager;
+import android.hardware.face.FaceSensorPropertiesInternal;
 import android.hardware.fingerprint.FingerprintManager;
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
+import androidx.annotation.StringRes;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
@@ -90,6 +95,16 @@
             mConfirmCredential = true;
             launchChooseOrConfirmLock();
         }
+
+        final Preference unlockPhonePreference = findPreference(getUnlockPhonePreferenceKey());
+        if (unlockPhonePreference != null) {
+            unlockPhonePreference.setSummary(getUseAnyBiometricSummary());
+        }
+
+        final Preference useInAppsPreference = findPreference(getUseInAppsPreferenceKey());
+        if (useInAppsPreference != null) {
+            useInAppsPreference.setSummary(getUseClass2BiometricSummary());
+        }
     }
 
     @Override
@@ -185,6 +200,16 @@
      */
     public abstract String getFingerprintPreferenceKey();
 
+    /**
+     * @return The preference key of the "Unlock your phone" setting toggle.
+     */
+    public abstract String getUnlockPhonePreferenceKey();
+
+    /**
+     * @return The preference key of the "Verify it's you in apps" setting toggle.
+     */
+    public abstract String getUseInAppsPreferenceKey();
+
     private void launchChooseOrConfirmLock() {
         final ChooseLockSettingsHelper.Builder builder =
                 new ChooseLockSettingsHelper.Builder(getActivity(), this)
@@ -214,4 +239,59 @@
             startActivityForResult(intent, CHOOSE_LOCK_REQUEST);
         }
     }
+
+    @NonNull
+    private String getUseAnyBiometricSummary() {
+        boolean isFaceAllowed = mFaceManager != null && mFaceManager.isHardwareDetected();
+        boolean isFingerprintAllowed =
+                mFingerprintManager != null && mFingerprintManager.isHardwareDetected();
+
+        @StringRes final int resId = getUseBiometricSummaryRes(isFaceAllowed, isFingerprintAllowed);
+        return resId == 0 ? "" : getString(resId);
+    }
+
+    @NonNull
+    private String getUseClass2BiometricSummary() {
+        boolean isFaceAllowed = false;
+        if (mFaceManager != null) {
+            for (final FaceSensorPropertiesInternal sensorProps
+                    : mFaceManager.getSensorPropertiesInternal()) {
+                if (sensorProps.sensorStrength == SensorProperties.STRENGTH_WEAK
+                        || sensorProps.sensorStrength == SensorProperties.STRENGTH_STRONG) {
+                    isFaceAllowed = true;
+                    break;
+                }
+            }
+        }
+
+        boolean isFingerprintAllowed = false;
+        if (mFingerprintManager != null) {
+            for (final FingerprintSensorPropertiesInternal sensorProps
+                    : mFingerprintManager.getSensorPropertiesInternal()) {
+                if (sensorProps.sensorStrength == SensorProperties.STRENGTH_WEAK
+                        || sensorProps.sensorStrength == SensorProperties.STRENGTH_STRONG) {
+                    isFingerprintAllowed = true;
+                    break;
+                }
+            }
+        }
+
+        @StringRes final int resId = getUseBiometricSummaryRes(isFaceAllowed, isFingerprintAllowed);
+        return resId == 0 ? "" : getString(resId);
+    }
+
+    @StringRes
+    private static int getUseBiometricSummaryRes(boolean isFaceAllowed,
+            boolean isFingerprintAllowed) {
+
+        if (isFaceAllowed && isFingerprintAllowed) {
+            return R.string.biometric_settings_use_face_or_fingerprint_preference_summary;
+        } else if (isFaceAllowed) {
+            return R.string.biometric_settings_use_face_preference_summary;
+        } else if (isFingerprintAllowed) {
+            return R.string.biometric_settings_use_fingerprint_preference_summary;
+        } else {
+            return 0;
+        }
+    }
 }
diff --git a/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettings.java b/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettings.java
index 246fea2..c50e693 100644
--- a/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettings.java
+++ b/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettings.java
@@ -28,6 +28,8 @@
     private static final String TAG = "BiometricProfileSetting";
     private static final String KEY_FACE_SETTINGS = "biometric_face_settings_profile";
     private static final String KEY_FINGERPRINT_SETTINGS = "biometric_fingerprint_settings_profile";
+    private static final String KEY_UNLOCK_PHONE = "biometric_settings_biometric_keyguard_profile";
+    private static final String KEY_USE_IN_APPS = "biometric_settings_biometric_app_profile";
 
     @Override
     public void onAttach(Context context) {
@@ -51,6 +53,16 @@
     }
 
     @Override
+    public String getUnlockPhonePreferenceKey() {
+        return KEY_UNLOCK_PHONE;
+    }
+
+    @Override
+    public String getUseInAppsPreferenceKey() {
+        return KEY_USE_IN_APPS;
+    }
+
+    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/biometrics/combination/CombinedBiometricSettings.java b/src/com/android/settings/biometrics/combination/CombinedBiometricSettings.java
index ec0c0a5..7e76ceb 100644
--- a/src/com/android/settings/biometrics/combination/CombinedBiometricSettings.java
+++ b/src/com/android/settings/biometrics/combination/CombinedBiometricSettings.java
@@ -30,6 +30,8 @@
     private static final String TAG = "BiometricSettings";
     private static final String KEY_FACE_SETTINGS = "biometric_face_settings";
     private static final String KEY_FINGERPRINT_SETTINGS = "biometric_fingerprint_settings";
+    private static final String KEY_UNLOCK_PHONE = "biometric_settings_biometric_keyguard";
+    private static final String KEY_USE_IN_APPS = "biometric_settings_biometric_app";
 
     @Override
     public void onAttach(Context context) {
@@ -54,6 +56,16 @@
     }
 
     @Override
+    public String getUnlockPhonePreferenceKey() {
+        return KEY_UNLOCK_PHONE;
+    }
+
+    @Override
+    public String getUseInAppsPreferenceKey() {
+        return KEY_USE_IN_APPS;
+    }
+
+    @Override
     protected String getLogTag() {
         return TAG;
     }
diff --git a/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceController.java b/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceController.java
index 6f24215..32fb3a0 100644
--- a/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceController.java
@@ -104,12 +104,34 @@
     private void updateStateInternal() {
         // This controller currently is shown if fingerprint&face exist on the device. If this
         // changes in the future, the modalities passed into the below will need to be updated.
-        updateStateInternal(ParentalControlsUtils.parentConsentRequired(mContext,
-                BiometricAuthenticator.TYPE_FACE | BiometricAuthenticator.TYPE_FINGERPRINT));
+
+        final RestrictedLockUtils.EnforcedAdmin faceAdmin = ParentalControlsUtils
+                .parentConsentRequired(mContext, BiometricAuthenticator.TYPE_FACE);
+        final RestrictedLockUtils.EnforcedAdmin fpAdmin = ParentalControlsUtils
+                .parentConsentRequired(mContext, BiometricAuthenticator.TYPE_FINGERPRINT);
+
+        // If the admins are non-null, they are actually always the same. Just the helper class
+        // we create above always return the admin, instead of a boolean.
+        final boolean faceConsentRequired = faceAdmin != null;
+        final boolean fpConsentRequired = fpAdmin != null;
+        final RestrictedLockUtils.EnforcedAdmin admin = faceAdmin != null ? faceAdmin : fpAdmin;
+
+        updateStateInternal(admin, faceConsentRequired, fpConsentRequired);
     }
 
     @VisibleForTesting
-    void updateStateInternal(@Nullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
+    void updateStateInternal(@Nullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin,
+            boolean faceConsentRequired, boolean fpConsentRequired) {
+        // Disable the preference (and show the consent flow) only if consent is required for all
+        // modalities. Otherwise, users will not be able to enter and modify settings for modalities
+        // which have already been consented. In any case, the controllers for the modalities which
+        // have not yet been consented will be disabled in the combined page anyway - users can
+        // go through the consent+enrollment flow from there.
+        final boolean disablePreference = faceConsentRequired && fpConsentRequired;
+        if (!disablePreference) {
+            enforcedAdmin = null;
+        }
+
         if (mPreference != null) {
             mPreference.setDisabledByAdmin(enforcedAdmin);
         }
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
index ae21177..eadb5b8 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollIntroduction.java
@@ -19,10 +19,12 @@
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Intent;
+import android.hardware.SensorPrivacyManager;
 import android.hardware.biometrics.BiometricAuthenticator;
 import android.hardware.face.FaceManager;
 import android.hardware.face.FaceSensorPropertiesInternal;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -34,10 +36,12 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.biometrics.BiometricEnrollActivity;
 import com.android.settings.biometrics.BiometricEnrollIntroduction;
 import com.android.settings.biometrics.BiometricUtils;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ChooseLockSettingsHelper;
+import com.android.settings.utils.SensorPrivacyManagerHelper;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 
 import com.google.android.setupcompat.template.FooterButton;
@@ -57,6 +61,7 @@
     private FaceFeatureProvider mFaceFeatureProvider;
     @Nullable private FooterButton mPrimaryFooterButton;
     @Nullable private FooterButton mSecondaryFooterButton;
+    @Nullable private SensorPrivacyManager mSensorPrivacyManager;
 
     @Override
     protected void onCancelButtonClick(View view) {
@@ -112,6 +117,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);
@@ -142,6 +155,14 @@
                 });
             }
         }
+
+        mSensorPrivacyManager = getApplicationContext()
+                .getSystemService(SensorPrivacyManager.class);
+        final SensorPrivacyManagerHelper helper = SensorPrivacyManagerHelper
+                .getInstance(getApplicationContext());
+        final boolean cameraPrivacyEnabled = helper
+                .isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA, mUserId);
+        Log.v(TAG, "cameraPrivacyEnabled : " + cameraPrivacyEnabled);
     }
 
     protected boolean generateChallengeOnCreate() {
@@ -226,13 +247,20 @@
     }
 
     private boolean maxFacesEnrolled() {
+        final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
         if (mFaceManager != null) {
             final List<FaceSensorPropertiesInternal> props =
                     mFaceManager.getSensorPropertiesInternal();
             // This will need to be updated for devices with multiple face sensors.
             final int max = props.get(0).maxEnrollmentsPerUser;
             final int numEnrolledFaces = mFaceManager.getEnrolledFaces(mUserId).size();
-            return numEnrolledFaces >= max;
+            final int maxFacesEnrollableIfSUW = getApplicationContext().getResources()
+                    .getInteger(R.integer.suw_max_faces_enrollable);
+            if (isSetupWizard) {
+                return numEnrolledFaces >= maxFacesEnrollableIfSUW;
+            } else {
+                return numEnrolledFaces >= max;
+            }
         } else {
             return false;
         }
@@ -294,6 +322,28 @@
     }
 
     @Override
+    protected void onNextButtonClick(View view) {
+        final boolean parentelConsentRequired =
+                getIntent()
+                .getBooleanExtra(BiometricEnrollActivity.EXTRA_REQUIRE_PARENTAL_CONSENT, false);
+        final boolean cameraPrivacyEnabled = SensorPrivacyManagerHelper
+                .getInstance(getApplicationContext())
+                .isSensorBlocked(SensorPrivacyManager.Sensors.CAMERA, mUserId);
+        final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
+        final boolean isSettingUp = isSetupWizard || (parentelConsentRequired
+                && !WizardManagerHelper.isUserSetupComplete(this));
+        if (cameraPrivacyEnabled && !isSettingUp) {
+            if (mSensorPrivacyManager == null) {
+                mSensorPrivacyManager = getApplicationContext()
+                        .getSystemService(SensorPrivacyManager.class);
+            }
+            mSensorPrivacyManager.showSensorUseDialog(SensorPrivacyManager.Sensors.CAMERA);
+        } else {
+            super.onNextButtonClick(view);
+        }
+    }
+
+    @Override
     @NonNull
     protected FooterButton getPrimaryFooterButton() {
         if (mPrimaryFooterButton == null) {
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
index c515742..60f8b21 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsConfirmPreferenceController.java
@@ -19,13 +19,17 @@
 import static android.provider.Settings.Secure.FACE_UNLOCK_ALWAYS_REQUIRE_CONFIRMATION;
 
 import android.content.Context;
+import android.hardware.biometrics.SensorProperties;
 import android.hardware.face.FaceManager;
+import android.hardware.face.FaceSensorProperties;
 import android.provider.Settings;
 
 import androidx.preference.Preference;
 
 import com.android.settings.Utils;
 
+import java.util.List;
+
 /**
  * Preference controller giving the user an option to always require confirmation.
  */
@@ -75,6 +79,14 @@
 
     @Override
     public int getAvailabilityStatus() {
-        return AVAILABLE;
+        List<FaceSensorProperties> properties = mFaceManager.getSensorProperties();
+        // If a sensor is convenience, it is possible that it becomes weak or strong with
+        // an update. For this reason, the sensor is conditionally unavailable.
+        if (!properties.isEmpty()
+                && properties.get(0).getSensorStrength() == SensorProperties.STRENGTH_CONVENIENCE) {
+            return CONDITIONALLY_UNAVAILABLE;
+        } else {
+            return AVAILABLE;
+        }
     }
 }
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java
index 36984a2..bda078f 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsPreferenceController.java
@@ -51,4 +51,10 @@
     public final boolean isSliceable() {
         return false;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        // not needed since it's not sliceable
+        return NO_RES;
+    }
 }
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
index d8ff482..616b736 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsRemoveButtonPreferenceController.java
@@ -33,6 +33,7 @@
 
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
+import com.android.settings.biometrics.BiometricUtils;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.overlay.FeatureFactory;
@@ -56,6 +57,7 @@
 
     public static class ConfirmRemoveDialog extends InstrumentedDialogFragment {
 
+        private boolean mIsConvenience;
         private DialogInterface.OnClickListener mOnClickListener;
 
         @Override
@@ -68,7 +70,9 @@
             AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
 
             builder.setTitle(R.string.security_settings_face_settings_remove_dialog_title)
-                    .setMessage(R.string.security_settings_face_settings_remove_dialog_details)
+                    .setMessage(mIsConvenience
+                            ? R.string.security_settings_face_settings_remove_dialog_details_convenience
+                            : R.string.security_settings_face_settings_remove_dialog_details)
                     .setPositiveButton(R.string.delete, mOnClickListener)
                     .setNegativeButton(R.string.cancel, mOnClickListener);
             AlertDialog dialog = builder.create();
@@ -76,6 +80,10 @@
             return dialog;
         }
 
+        public void setIsConvenience(boolean isConvenience) {
+            mIsConvenience = isConvenience;
+        }
+
         public void setOnClickListener(DialogInterface.OnClickListener listener) {
             mOnClickListener = listener;
         }
@@ -197,6 +205,7 @@
             mRemoving = true;
             ConfirmRemoveDialog dialog = new ConfirmRemoveDialog();
             dialog.setOnClickListener(mOnClickListener);
+            dialog.setIsConvenience(BiometricUtils.isConvenience(mFaceManager));
             dialog.show(mActivity.getSupportFragmentManager(), ConfirmRemoveDialog.class.getName());
         }
     }
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..405c090 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
@@ -21,7 +21,11 @@
 import android.hardware.fingerprint.FingerprintManager;
 import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
 import android.os.Bundle;
+import android.view.OrientationEventListener;
+import android.view.Surface;
 import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.accessibility.AccessibilityManager;
 
 import androidx.annotation.Nullable;
 
@@ -32,6 +36,7 @@
 import com.android.settings.biometrics.BiometricUtils;
 import com.android.settings.password.ChooseLockSettingsHelper;
 
+import com.airbnb.lottie.LottieAnimationView;
 import com.google.android.setupcompat.template.FooterBarMixin;
 import com.google.android.setupcompat.template.FooterButton;
 
@@ -49,6 +54,10 @@
     private FingerprintEnrollSidecar mSidecar;
     private boolean mNextClicked;
     private boolean mCanAssumeUdfps;
+    private boolean mCanAssumeSidefps;
+
+    private OrientationEventListener mOrientationEventListener;
+    private int mPreviousRotation = 0;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -58,6 +67,7 @@
         final List<FingerprintSensorPropertiesInternal> props =
                 fingerprintManager.getSensorPropertiesInternal();
         mCanAssumeUdfps = props != null && props.size() == 1 && props.get(0).isAnyUdfpsType();
+        mCanAssumeSidefps = props != null && props.size() == 1 && props.get(0).isAnySidefpsType();
         setContentView(getContentView());
         mFooterBarMixin = getLayout().getMixin(FooterBarMixin.class);
         mFooterBarMixin.setSecondaryButton(
@@ -69,6 +79,8 @@
                         .build()
         );
 
+        listenOrientationEvent();
+
         if (mCanAssumeUdfps) {
             setHeaderText(R.string.security_settings_udfps_enroll_find_sensor_title);
             setDescriptionText(R.string.security_settings_udfps_enroll_find_sensor_message);
@@ -80,6 +92,35 @@
                     .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 if (mCanAssumeSidefps) {
+            setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
+            setDescriptionText(R.string.security_settings_fingerprint_enroll_find_sensor_message);
+            final LottieAnimationView lottieAnimationView = findViewById(R.id.illustration_lottie);
+            final LottieAnimationView lottieAnimationViewPortrait =
+                    findViewById(R.id.illustration_lottie_portrait);
+            final int rotation = getApplicationContext().getDisplay().getRotation();
+            switch(rotation) {
+                case Surface.ROTATION_90:
+                    lottieAnimationView.setVisibility(View.GONE);
+                    lottieAnimationViewPortrait.setVisibility(View.VISIBLE);
+                    break;
+                case Surface.ROTATION_270:
+                    lottieAnimationView.setVisibility(View.GONE);
+                    lottieAnimationViewPortrait.setVisibility(View.VISIBLE);
+                    lottieAnimationViewPortrait.setRotation(180);
+                    break;
+                default:
+                    lottieAnimationView.setVisibility(View.VISIBLE);
+                    lottieAnimationViewPortrait.setVisibility(View.GONE);
+                    break;
+            }
         } else {
             setHeaderText(R.string.security_settings_fingerprint_enroll_find_sensor_title);
             setDescriptionText(R.string.security_settings_fingerprint_enroll_find_sensor_message);
@@ -110,7 +151,15 @@
         }
 
         mAnimation = null;
-        if (!mCanAssumeUdfps) {
+        if (mCanAssumeUdfps) {
+            LottieAnimationView lottieAnimationView = findViewById(R.id.illustration_lottie);
+            lottieAnimationView.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    onStartButtonClick(v);
+                }
+            });
+        } else {
             View animationView = findViewById(R.id.fingerprint_sensor_location_animation);
             if (animationView instanceof FingerprintFindSensorAnimation) {
                 mAnimation = (FingerprintFindSensorAnimation) animationView;
@@ -127,6 +176,8 @@
     protected int getContentView() {
         if (mCanAssumeUdfps) {
             return R.layout.udfps_enroll_find_sensor_layout;
+        } else if (mCanAssumeSidefps) {
+            return R.layout.sfps_enroll_find_sensor_layout;
         }
         return R.layout.fingerprint_enroll_find_sensor;
     }
@@ -202,6 +253,7 @@
 
     @Override
     protected void onDestroy() {
+        stopListenOrientationEvent();
         super.onDestroy();
         if (mAnimation != null) {
             mAnimation.stopAnimation();
@@ -279,4 +331,37 @@
     public int getMetricsCategory() {
         return SettingsEnums.FINGERPRINT_FIND_SENSOR;
     }
+
+    private void listenOrientationEvent() {
+        if (!mCanAssumeSidefps) {
+            // Do nothing if the device doesn't support SideFPS.
+            return;
+        }
+        mOrientationEventListener = new OrientationEventListener(this) {
+            @Override
+            public void onOrientationChanged(int orientation) {
+                final int currentRotation = getDisplay().getRotation();
+                if ((mPreviousRotation == Surface.ROTATION_90
+                        && currentRotation == Surface.ROTATION_270) || (
+                        mPreviousRotation == Surface.ROTATION_270
+                                && currentRotation == Surface.ROTATION_90)) {
+                    mPreviousRotation = currentRotation;
+                    recreate();
+                }
+            }
+        };
+        mOrientationEventListener.enable();
+        mPreviousRotation = getDisplay().getRotation();
+    }
+
+    private void stopListenOrientationEvent() {
+        if (!mCanAssumeSidefps) {
+            // Do nothing if the device doesn't support SideFPS.
+            return;
+        }
+        if (mOrientationEventListener != null) {
+            mOrientationEventListener.disable();
+        }
+        mOrientationEventListener = null;
+    }
 }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
index 3ab77b6..f70a663 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
@@ -44,6 +44,7 @@
 import com.android.settingslib.RestrictedLockUtilsInternal;
 
 import com.google.android.setupcompat.template.FooterButton;
+import com.google.android.setupcompat.util.WizardManagerHelper;
 import com.google.android.setupdesign.span.LinkSpan;
 
 import java.util.List;
@@ -203,6 +204,7 @@
 
     @Override
     protected int checkMaxEnrolled() {
+        final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
         if (mFingerprintManager != null) {
             final List<FingerprintSensorPropertiesInternal> props =
                     mFingerprintManager.getSensorPropertiesInternal();
@@ -210,13 +212,22 @@
             final int max = props.get(0).maxEnrollmentsPerUser;
             final int numEnrolledFingerprints =
                     mFingerprintManager.getEnrolledFingerprints(mUserId).size();
-            if (numEnrolledFingerprints >= max) {
+            final int maxFingerprintsEnrollableIfSUW = getApplicationContext().getResources()
+                    .getInteger(R.integer.suw_max_fingerprints_enrollable);
+            if (isSetupWizard) {
+                if (numEnrolledFingerprints >= maxFingerprintsEnrollableIfSUW) {
+                    return R.string.fingerprint_intro_error_max;
+                } else {
+                    return 0;
+                }
+            } else if (numEnrolledFingerprints >= max) {
                 return R.string.fingerprint_intro_error_max;
+            } else {
+                return 0;
             }
         } else {
             return R.string.fingerprint_intro_error_unknown;
         }
-        return 0;
     }
 
     @Override
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/bluetooth/BluetoothFilesPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothFilesPreferenceController.java
deleted file mode 100644
index e96fba3..0000000
--- a/src/com/android/settings/bluetooth/BluetoothFilesPreferenceController.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-
-import com.android.settings.core.BasePreferenceController;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-
-/**
- * Controller that shows received files
- */
-public class BluetoothFilesPreferenceController extends BasePreferenceController
-        implements PreferenceControllerMixin {
-    private static final String TAG = "BluetoothFilesPrefCtrl";
-
-    public static final String KEY_RECEIVED_FILES = "bt_received_files";
-
-    /* Private intent to show the list of received files */
-    @VisibleForTesting
-    static final String ACTION_OPEN_FILES = "com.android.bluetooth.action.TransferHistory";
-    @VisibleForTesting
-    static final String EXTRA_SHOW_ALL_FILES = "android.btopp.intent.extra.SHOW_ALL";
-    @VisibleForTesting
-    static final String EXTRA_DIRECTION = "direction";
-
-    private MetricsFeatureProvider mMetricsFeatureProvider;
-
-    public BluetoothFilesPreferenceController(Context context) {
-        super(context, KEY_RECEIVED_FILES);
-        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
-    }
-
-    @Override
-    public int getAvailabilityStatus() {
-        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)
-                ? AVAILABLE
-                : UNSUPPORTED_ON_DEVICE;
-    }
-
-    @Override
-    public String getPreferenceKey() {
-        return KEY_RECEIVED_FILES;
-    }
-
-    @Override
-    public boolean handlePreferenceTreeClick(Preference preference) {
-        if (KEY_RECEIVED_FILES.equals(preference.getKey())) {
-            mMetricsFeatureProvider.action(mContext,
-                    SettingsEnums.ACTION_BLUETOOTH_FILES);
-            Intent intent = new Intent(ACTION_OPEN_FILES);
-            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
-            intent.putExtra(EXTRA_DIRECTION, 1 /* DIRECTION_INBOUND */);
-            intent.putExtra(EXTRA_SHOW_ALL_FILES, true);
-            mContext.startActivity(intent);
-            return true;
-        }
-
-        return false;
-    }
-
-
-}
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingService.java b/src/com/android/settings/bluetooth/BluetoothPairingService.java
index 4c3c9a9..bc5dc66 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingService.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingService.java
@@ -188,7 +188,8 @@
         }
 
         PendingIntent pairIntent = PendingIntent.getService(this, 0, pairingDialogIntent,
-                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
+                PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT
+                        | PendingIntent.FLAG_IMMUTABLE);
 
         Intent serviceIntent = new Intent(ACTION_DISMISS_PAIRING);
         serviceIntent.setClass(this, BluetoothPairingService.class);
diff --git a/src/com/android/settings/bluetooth/BluetoothSliceBuilder.java b/src/com/android/settings/bluetooth/BluetoothSliceBuilder.java
index b09d180..508084d 100644
--- a/src/com/android/settings/bluetooth/BluetoothSliceBuilder.java
+++ b/src/com/android/settings/bluetooth/BluetoothSliceBuilder.java
@@ -98,7 +98,8 @@
                 SettingsSlicesContract.KEY_BLUETOOTH).build();
         return SliceBuilderUtils.buildSearchResultPageIntent(context,
                 BluetoothDashboardFragment.class.getName(), null /* key */, screenTitle,
-                SettingsEnums.SETTINGS_CONNECTED_DEVICE_CATEGORY)
+                SettingsEnums.SETTINGS_CONNECTED_DEVICE_CATEGORY,
+                R.string.menu_key_connected_devices)
                 .setClassName(context.getPackageName(), SubSettings.class.getName())
                 .setData(contentUri);
     }
diff --git a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
index 6d8fb33..1da8672 100644
--- a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
+++ b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
@@ -29,7 +29,6 @@
 
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settingslib.bluetooth.BluetoothUtils;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
@@ -73,8 +72,6 @@
         };
         Context context = getContext();
         mDevice = getDevice(context);
-        final boolean untetheredHeadset = BluetoothUtils.getBooleanMetaData(
-                mDevice.getDevice(), BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET);
 
         AlertDialog dialog = new AlertDialog.Builder(context)
                 .setPositiveButton(R.string.bluetooth_unpair_dialog_forget_confirm_button,
@@ -82,9 +79,7 @@
                 .setNegativeButton(android.R.string.cancel, null)
                 .create();
         dialog.setTitle(R.string.bluetooth_unpair_dialog_title);
-        dialog.setMessage(context.getString(untetheredHeadset
-                        ? R.string.bluetooth_untethered_unpair_dialog_body
-                        : R.string.bluetooth_unpair_dialog_body,
+        dialog.setMessage(context.getString(R.string.bluetooth_unpair_dialog_body,
                 mDevice.getName()));
         return dialog;
     }
diff --git a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
index bcd47bc..b58d9c3 100644
--- a/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/AdvancedConnectedDeviceDashboardFragment.java
@@ -21,7 +21,6 @@
 import android.provider.SearchIndexableResource;
 
 import com.android.settings.R;
-import com.android.settings.bluetooth.BluetoothFilesPreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.nfc.AndroidBeamPreferenceController;
 import com.android.settings.print.PrintSettingPreferenceController;
@@ -84,8 +83,6 @@
             Lifecycle lifecycle) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
 
-        controllers.add(new BluetoothFilesPreferenceController(context));
-
         final PrintSettingPreferenceController printerController =
                 new PrintSettingPreferenceController(context);
 
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/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index ceb502a..72770be 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -36,6 +36,7 @@
 import androidx.fragment.app.FragmentActivity;
 
 import com.android.settings.R;
+import com.android.settings.SetupWizardUtils;
 import com.android.settings.SubSettings;
 import com.android.settings.core.CategoryMixin.CategoryHandler;
 import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
@@ -73,6 +74,9 @@
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (isFinishing()) {
+            return;
+        }
         if (isLockTaskModePinned() && !isSettingsRunOnTop()) {
             Log.w(TAG, "Devices lock task mode pinned.");
             finish();
@@ -91,17 +95,14 @@
         // Apply SetupWizard light theme during setup flow. This is for SubSettings pages.
         final boolean isAnySetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
         if (isAnySetupWizard && this instanceof SubSettings) {
-            int appliedTheme;
             if (ThemeHelper.trySetDynamicColor(this)) {
-                appliedTheme = ThemeHelper.isSetupWizardDayNightEnabled(this)
+                final int appliedTheme = ThemeHelper.isSetupWizardDayNightEnabled(this)
                         ? R.style.SudDynamicColorThemeSettings_SetupWizard_DayNight
                         : R.style.SudDynamicColorThemeSettings_SetupWizard;
+                setTheme(appliedTheme);
             } else {
-                appliedTheme = ThemeHelper.isSetupWizardDayNightEnabled(this)
-                        ? R.style.SubSettings_SetupWizard
-                        : R.style.SudThemeGlifV3_Light;
+                setTheme(SetupWizardUtils.getTheme(this, getIntent()));
             }
-            setTheme(appliedTheme);
         }
 
         if (isToolbarEnabled() && !isAnySetupWizard) {
@@ -186,19 +187,17 @@
 
     @Override
     public void setTitle(CharSequence title) {
+        super.setTitle(title);
         if (mCollapsingToolbarLayout != null) {
             mCollapsingToolbarLayout.setTitle(title);
-        } else {
-            super.setTitle(title);
         }
     }
 
     @Override
     public void setTitle(int titleId) {
+        super.setTitle(getText(titleId));
         if (mCollapsingToolbarLayout != null) {
             mCollapsingToolbarLayout.setTitle(getText(titleId));
-        } else {
-            super.setTitle(titleId);
         }
     }
 
diff --git a/src/com/android/settings/core/TogglePreferenceController.java b/src/com/android/settings/core/TogglePreferenceController.java
index c958a93..8b4d6d9 100644
--- a/src/com/android/settings/core/TogglePreferenceController.java
+++ b/src/com/android/settings/core/TogglePreferenceController.java
@@ -89,4 +89,7 @@
     public boolean isPublicSlice() {
         return false;
     }
+
+    @Override
+    public abstract int getSliceHighlightMenuRes();
 }
\ No newline at end of file
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 70852fe..c16120d 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -29,6 +29,7 @@
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
 import com.android.settings.accessibility.CaptionPropertiesFragment;
+import com.android.settings.accessibility.ToggleColorInversionPreferenceFragment;
 import com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment;
 import com.android.settings.accessibility.ToggleReduceBrightColorsPreferenceFragment;
 import com.android.settings.accounts.AccountDashboardFragment;
@@ -67,6 +68,7 @@
 import com.android.settings.biometrics.face.FaceSettings;
 import com.android.settings.biometrics.fingerprint.FingerprintSettings;
 import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
+import com.android.settings.bluetooth.BluetoothPairingDetail;
 import com.android.settings.bugreporthandler.BugReportHandlerPicker;
 import com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment;
 import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
@@ -119,6 +121,7 @@
 import com.android.settings.network.NetworkProviderSettings;
 import com.android.settings.network.apn.ApnEditor;
 import com.android.settings.network.apn.ApnSettings;
+import com.android.settings.network.telephony.NetworkSelectSettings;
 import com.android.settings.nfc.AndroidBeam;
 import com.android.settings.nfc.PaymentSettings;
 import com.android.settings.notification.ConfigureNotificationSettings;
@@ -175,6 +178,7 @@
     public static final String[] ENTRY_FRAGMENTS = {
             AdvancedConnectedDeviceDashboardFragment.class.getName(),
             CreateShortcut.class.getName(),
+            BluetoothPairingDetail.class.getName(),
             WifiSettings.class.getName(),
             WifiNetworkDetailsFragment.class.getName(),
             ConfigureWifiSettings.class.getName(),
@@ -215,6 +219,7 @@
             AccessibilitySettingsForSetupWizard.class.getName(),
             CaptionPropertiesFragment.class.getName(),
             ToggleDaltonizerPreferenceFragment.class.getName(),
+            ToggleColorInversionPreferenceFragment.class.getName(),
             ToggleReduceBrightColorsPreferenceFragment.class.getName(),
             TextToSpeechSettings.class.getName(),
             PrivateVolumeForget.class.getName(),
@@ -317,6 +322,7 @@
             InteractAcrossProfilesDetails.class.getName(),
             MediaControlsSettings.class.getName(),
             NetworkProviderSettings.class.getName(),
+            NetworkSelectSettings.class.getName(),
             AlarmsAndRemindersDetails.class.getName(),
             MediaManagementAppsDetails.class.getName(),
             AutoBrightnessSettings.class.getName()
@@ -341,6 +347,7 @@
             Settings.WifiSettingsActivity.class.getName(),
             Settings.DataUsageSummaryActivity.class.getName(),
             Settings.NetworkProviderSettingsActivity.class.getName(),
+            Settings.NetworkSelectActivity.class.getName(),
             // Home page > Connected devices
             Settings.BluetoothSettingsActivity.class.getName(),
             Settings.WifiDisplaySettingsActivity.class.getName(),
diff --git a/src/com/android/settings/dashboard/CategoryManager.java b/src/com/android/settings/dashboard/CategoryManager.java
index 2a82abe..b6ec4ca 100644
--- a/src/com/android/settings/dashboard/CategoryManager.java
+++ b/src/com/android/settings/dashboard/CategoryManager.java
@@ -17,6 +17,7 @@
 
 import android.content.ComponentName;
 import android.content.Context;
+import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
@@ -24,6 +25,7 @@
 
 import androidx.annotation.VisibleForTesting;
 
+import com.android.settings.homepage.HighlightableMenu;
 import com.android.settingslib.applications.InterestingConfigChanges;
 import com.android.settingslib.drawer.CategoryKey;
 import com.android.settingslib.drawer.DashboardCategory;
@@ -153,6 +155,20 @@
             filterDuplicateTiles(mCategoryByKeyMap);
             if (firstLoading) {
                 logTiles(context);
+
+                final DashboardCategory homepageCategory = mCategoryByKeyMap.get(
+                        CategoryKey.CATEGORY_HOMEPAGE);
+                if (homepageCategory == null) {
+                    return;
+                }
+                for (Tile tile : homepageCategory.getTiles()) {
+                    final String key = tile.getKey(context);
+                    if (TextUtils.isEmpty(key)) {
+                        Log.w(TAG, "Key hint missing for homepage tile: " + tile.getTitle(context));
+                        continue;
+                    }
+                    HighlightableMenu.addMenuKey(key);
+                }
             }
         }
     }
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProvider.java b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
index 8c872f0..b88ecd4 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProvider.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProvider.java
@@ -47,9 +47,9 @@
      * Binds preference to data provided by tile and gets dynamic data observers.
      *
      * @param activity If tile contains intent to launch, it will be launched from this activity
+     * @param fragment The fragment that the preference will be bound to
      * @param forceRoundedIcon Whether or not injected tiles from other packages should be forced to
      * rounded icon.
-     * @param sourceMetricsCategory The context (source) from which an action is performed
      * @param pref The preference to bind data
      * @param tile The binding data
      * @param key They key for preference. If null, we will generate one from tile data
@@ -58,7 +58,7 @@
      * @return The list of dynamic data observers
      */
     List<DynamicDataObserver> bindPreferenceToTileAndGetObservers(FragmentActivity activity,
-            boolean forceRoundedIcon, int sourceMetricsCategory, Preference pref, Tile tile,
+            DashboardFragment fragment, boolean forceRoundedIcon, Preference pref, Tile tile,
             String key, int baseOrder);
 
     /**
diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
index a03a4f9..69fdc9e 100644
--- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java
@@ -59,7 +59,11 @@
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
 import com.android.settings.dashboard.profileselector.ProfileSelectDialog;
+import com.android.settings.homepage.TopLevelHighlightMixin;
+import com.android.settings.homepage.TopLevelSettings;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.PrimarySwitchPreference;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -123,7 +127,7 @@
 
     @Override
     public List<DynamicDataObserver> bindPreferenceToTileAndGetObservers(FragmentActivity activity,
-            boolean forceRoundedIcon, int sourceMetricsCategory, Preference pref, Tile tile,
+            DashboardFragment fragment, boolean forceRoundedIcon, Preference pref, Tile tile,
             String key, int baseOrder) {
         if (pref == null) {
             return null;
@@ -149,6 +153,7 @@
         bindIcon(pref, tile, forceRoundedIcon);
 
         if (tile instanceof ActivityTile) {
+            final int sourceMetricsCategory = fragment.getMetricsCategory();
             final Bundle metadata = tile.getMetaData();
             String clsName = null;
             String action = null;
@@ -165,8 +170,23 @@
                 if (action != null) {
                     intent.setAction(action);
                 }
+                // Register the rule for injected apps.
+                ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+                        mContext,
+                        new ComponentName(tile.getPackageName(), tile.getComponentName()),
+                        action,
+                        true /* clearTop */);
                 pref.setOnPreferenceClickListener(preference -> {
-                    launchIntentOrSelectProfile(activity, tile, intent, sourceMetricsCategory);
+                    TopLevelHighlightMixin highlightMixin = null;
+                    if (fragment instanceof TopLevelSettings
+                            && ActivityEmbeddingUtils.isEmbeddingActivityEnabled(mContext)) {
+                        // Highlight the preference whenever it's clicked
+                        final TopLevelSettings topLevelSettings = (TopLevelSettings) fragment;
+                        topLevelSettings.setHighlightPreferenceKey(key);
+                        highlightMixin = topLevelSettings.getHighlightMixin();
+                    }
+                    launchIntentOrSelectProfile(activity, tile, intent, sourceMetricsCategory,
+                            highlightMixin);
                     return true;
                 });
             }
@@ -198,7 +218,8 @@
                 .putExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY,
                         SettingsEnums.DASHBOARD_SUMMARY)
                 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
-        launchIntentOrSelectProfile(activity, tile, intent, SettingsEnums.DASHBOARD_SUMMARY);
+        launchIntentOrSelectProfile(activity, tile, intent, SettingsEnums.DASHBOARD_SUMMARY,
+                /* highlightMixin= */ null);
     }
 
     private DynamicDataObserver createDynamicDataObserver(String method, Uri uri, Preference pref) {
@@ -413,7 +434,7 @@
     }
 
     private void launchIntentOrSelectProfile(FragmentActivity activity, Tile tile, Intent intent,
-            int sourceMetricCategory) {
+            int sourceMetricCategory, TopLevelHighlightMixin highlightMixin) {
         if (!isIntentResolvable(intent)) {
             Log.w(TAG, "Cannot resolve intent, skipping. " + intent);
             return;
@@ -421,25 +442,32 @@
         ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile);
         mMetricsFeatureProvider.logStartedIntent(intent, sourceMetricCategory);
 
+        //TODO(b/201970810): Add test cases.
+        if (tile.isNewTask(mContext)) {
+            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        }
+
         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;
             }
 
             ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile,
-                    sourceMetricCategory);
+                    sourceMetricCategory, /* onShowListener= */ highlightMixin,
+                    /* onDismissListener= */ highlightMixin,
+                    /* onCancelListener= */ highlightMixin);
         }
     }
 
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index dfd931d..fd8a5a4 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -496,15 +496,15 @@
             if (mDashboardTilePrefKeys.containsKey(key)) {
                 // Have the key already, will rebind.
                 final Preference preference = screen.findPreference(key);
-                mDashboardFeatureProvider.bindPreferenceToTileAndGetObservers(getActivity(),
-                        forceRoundedIcons, getMetricsCategory(), preference, tile, key,
+                mDashboardFeatureProvider.bindPreferenceToTileAndGetObservers(getActivity(), this,
+                        forceRoundedIcons, preference, tile, key,
                         mPlaceholderPreferenceController.getOrder());
             } else {
                 // Don't have this key, add it.
                 final Preference pref = createPreference(tile);
                 final List<DynamicDataObserver> observers =
                         mDashboardFeatureProvider.bindPreferenceToTileAndGetObservers(getActivity(),
-                                forceRoundedIcons, getMetricsCategory(), pref, tile, key,
+                                this, forceRoundedIcons, pref, tile, key,
                                 mPlaceholderPreferenceController.getOrder());
                 screen.addPreference(pref);
                 registerDynamicDataObservers(observers);
@@ -529,8 +529,7 @@
         mBlockerController.countDown(controller.getPreferenceKey());
     }
 
-    @VisibleForTesting
-    Preference createPreference(Tile tile) {
+    protected Preference createPreference(Tile tile) {
         return tile instanceof ProviderTile
                 ? new SwitchPreference(getPrefContext())
                 : tile.hasSwitch()
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectAccountFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectAccountFragment.java
index ac67b58..cf91031 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectAccountFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectAccountFragment.java
@@ -17,6 +17,7 @@
 package com.android.settings.dashboard.profileselector;
 import androidx.fragment.app.Fragment;
 
+import com.android.settings.R;
 import com.android.settings.accounts.AccountPersonalDashboardFragment;
 import com.android.settings.accounts.AccountWorkProfileDashboardFragment;
 
@@ -32,4 +33,9 @@
                 new AccountWorkProfileDashboardFragment()
         };
     }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.accounts_dashboard_settings_header;
+    }
 }
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
index 36cdd42..e0ba378 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectDialog.java
@@ -19,7 +19,10 @@
 import android.app.Dialog;
 import android.content.Context;
 import android.content.DialogInterface;
+import android.content.DialogInterface.OnCancelListener;
 import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnDismissListener;
+import android.content.DialogInterface.OnShowListener;
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.UserHandle;
@@ -44,19 +47,30 @@
 
     private int mSourceMetricCategory;
     private Tile mSelectedTile;
+    private OnShowListener mOnShowListener;
+    private OnCancelListener mOnCancelListener;
+    private OnDismissListener mOnDismissListener;
 
     /**
      * Display the profile select dialog, adding the fragment to the given FragmentManager.
      * @param manager The FragmentManager this fragment will be added to.
      * @param tile The tile for this fragment.
      * @param sourceMetricCategory The source metric category.
+     * @param onShowListener The listener listens to the dialog showing event.
+     * @param onDismissListener The listener listens to the dialog dismissing event.
+     * @param onCancelListener The listener listens to the dialog cancelling event.
      */
-    public static void show(FragmentManager manager, Tile tile, int sourceMetricCategory) {
+    public static void show(FragmentManager manager, Tile tile, int sourceMetricCategory,
+            OnShowListener onShowListener, OnDismissListener onDismissListener,
+            OnCancelListener onCancelListener) {
         final ProfileSelectDialog dialog = new ProfileSelectDialog();
         final Bundle args = new Bundle();
         args.putParcelable(ARG_SELECTED_TILE, tile);
         args.putInt(ARG_SOURCE_METRIC_CATEGORY, sourceMetricCategory);
         dialog.setArguments(args);
+        dialog.mOnShowListener = onShowListener;
+        dialog.mOnDismissListener = onDismissListener;
+        dialog.mOnCancelListener = onCancelListener;
         dialog.show(manager, "select_profile");
     }
 
@@ -91,6 +105,31 @@
         getActivity().startActivityAsUser(intent, user);
     }
 
+    @Override
+    public void onStart() {
+        super.onStart();
+        // The fragment shows the dialog within onStart()
+        if (mOnShowListener != null) {
+            mOnShowListener.onShow(getDialog());
+        }
+    }
+
+    @Override
+    public void onCancel(DialogInterface dialog) {
+        super.onCancel(dialog);
+        if (mOnCancelListener != null) {
+            mOnCancelListener.onCancel(dialog);
+        }
+    }
+
+    @Override
+    public void onDismiss(DialogInterface dialog) {
+        super.onDismiss(dialog);
+        if (mOnDismissListener != null) {
+            mOnDismissListener.onDismiss(dialog);
+        }
+    }
+
     public static void updateUserHandlesIfNeeded(Context context, Tile tile) {
         final List<UserHandle> userHandles = tile.userHandle;
         if (tile.userHandle == null || tile.userHandle.size() <= 1) {
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
index 82d524d..79a4b87 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectFragment.java
@@ -107,6 +107,10 @@
             Bundle savedInstanceState) {
         mContentView = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState);
         final Activity activity = getActivity();
+        final int titleResId = getTitleResId();
+        if (titleResId > 0) {
+            activity.setTitle(titleResId);
+        }
         final int selectedTab = convertPosition(getTabId(activity, getArguments()));
 
         final View tabContainer = mContentView.findViewById(R.id.tab_container);
@@ -166,6 +170,14 @@
      */
     public abstract Fragment[] getFragments();
 
+    /**
+     * Returns a resource ID of the title
+     * Override this if the title needs to be updated dynamically.
+     */
+    int getTitleResId() {
+        return 0;
+    }
+
     @Override
     protected int getPreferenceScreenResId() {
         return R.xml.placeholder_preference_screen;
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
index e4cde8e..28fb97b 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationFragment.java
@@ -60,4 +60,9 @@
                 workFragment
         };
     }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.location_settings_header;
+    }
 }
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java
index b6f03d6..5f25f59 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectLocationServicesFragment.java
@@ -20,6 +20,7 @@
 
 import androidx.fragment.app.Fragment;
 
+import com.android.settings.R;
 import com.android.settings.location.LocationServices;
 import com.android.settings.location.LocationServicesForWork;
 
@@ -44,4 +45,9 @@
                 workFragment
         };
     }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.location_services_header;
+    }
 }
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectManageApplications.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectManageApplications.java
index 17fed11..cbd1fe3 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectManageApplications.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectManageApplications.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.dashboard.profileselector;
 
+import android.app.Activity;
+import android.content.Intent;
 import android.os.Bundle;
 
 import androidx.fragment.app.Fragment;
@@ -43,4 +45,12 @@
                 workFragment
         };
     }
+
+    @Override
+    int getTitleResId() {
+        final Activity activity = getActivity();
+        final Intent intent = activity.getIntent();
+        final Bundle args = getArguments();
+        return ManageApplications.getTitleResId(intent, args);
+    }
 }
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationAccessFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationAccessFragment.java
index 3cb77c5..d9b9ba4 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationAccessFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationAccessFragment.java
@@ -20,6 +20,7 @@
 
 import androidx.fragment.app.Fragment;
 
+import com.android.settings.R;
 import com.android.settings.location.RecentLocationAccessSeeAllFragment;
 
 /**
@@ -43,4 +44,9 @@
                 workFragment
         };
     }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.location_recent_location_access_header;
+    }
 }
diff --git a/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationRequestFragment.java b/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationRequestFragment.java
index 058ffe4..16cb43c 100644
--- a/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationRequestFragment.java
+++ b/src/com/android/settings/dashboard/profileselector/ProfileSelectRecentLocationRequestFragment.java
@@ -20,6 +20,7 @@
 
 import androidx.fragment.app.Fragment;
 
+import com.android.settings.R;
 import com.android.settings.location.RecentLocationRequestSeeAllFragment;
 
 /**
@@ -43,4 +44,9 @@
                 workFragment
         };
     }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.location_recent_requests_header;
+    }
 }
diff --git a/src/com/android/settings/datausage/BillingCycleSettings.java b/src/com/android/settings/datausage/BillingCycleSettings.java
index 8c433a0..57931c1 100644
--- a/src/com/android/settings/datausage/BillingCycleSettings.java
+++ b/src/com/android/settings/datausage/BillingCycleSettings.java
@@ -271,12 +271,14 @@
             mView = dialogInflater.inflate(R.layout.data_usage_bytes_editor, null, false);
             setupPicker((EditText) mView.findViewById(R.id.bytes),
                     (Spinner) mView.findViewById(R.id.size_spinner));
-            return new AlertDialog.Builder(context)
+            Dialog dialog = new AlertDialog.Builder(context)
                     .setTitle(isLimit ? R.string.data_usage_limit_editor_title
                             : R.string.data_usage_warning_editor_title)
                     .setView(mView)
                     .setPositiveButton(R.string.data_usage_cycle_editor_positive, this)
                     .create();
+            dialog.setCanceledOnTouchOutside(false);
+            return dialog;
         }
 
         private void setupPicker(EditText bytesPicker, Spinner type) {
@@ -402,10 +404,12 @@
             mCycleDayPicker.setValue(cycleDay);
             mCycleDayPicker.setWrapSelectorWheel(true);
 
-            return builder.setTitle(R.string.data_usage_cycle_editor_title)
+            Dialog dialog = builder.setTitle(R.string.data_usage_cycle_editor_title)
                     .setView(view)
                     .setPositiveButton(R.string.data_usage_cycle_editor_positive, this)
                     .create();
+            dialog.setCanceledOnTouchOutside(false);
+            return dialog;
         }
 
         @Override
@@ -466,12 +470,14 @@
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             final Context context = getActivity();
 
-            return new AlertDialog.Builder(context)
+            Dialog dialog = new AlertDialog.Builder(context)
                     .setTitle(R.string.data_usage_limit_dialog_title)
                     .setMessage(R.string.data_usage_limit_dialog_mobile)
                     .setPositiveButton(android.R.string.ok, this)
                     .setNegativeButton(android.R.string.cancel, null)
                     .create();
+            dialog.setCanceledOnTouchOutside(false);
+            return dialog;
         }
 
         @Override
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index f72a006..cd033e3 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -142,12 +142,7 @@
         mChart = findPreference(KEY_CHART_DATA);
         mApps = findPreference(KEY_APPS_GROUP);
 
-        // TODO(b/167474581): This is a temporary solution to hide unnecessary warning
-        //  preference, when the provider model is completed, the following code should be removed.
-        final Preference unnecessaryWarningPreference =
-                FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)
-                        ? findPreference("operator_warning")
-                        : findPreference("non_carrier_data_usage_warning");
+        final Preference unnecessaryWarningPreference = findPreference("operator_warning");
         if (unnecessaryWarningPreference != null) {
             unnecessaryWarningPreference.setVisible(false);
         }
diff --git a/src/com/android/settings/datetime/LocationTimeZoneDetectionPreferenceController.java b/src/com/android/settings/datetime/LocationTimeZoneDetectionPreferenceController.java
index e25422f..93e6d0a 100644
--- a/src/com/android/settings/datetime/LocationTimeZoneDetectionPreferenceController.java
+++ b/src/com/android/settings/datetime/LocationTimeZoneDetectionPreferenceController.java
@@ -118,6 +118,12 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        // not needed since it's not sliceable
+        return NO_RES;
+    }
+
+    @Override
     public int getAvailabilityStatus() {
         TimeZoneCapabilities timeZoneCapabilities =
                 getTimeZoneCapabilitiesAndConfig(/* forceRefresh= */ false).getCapabilities();
diff --git a/src/com/android/settings/development/transcode/TranscodeDefaultOptionPreferenceController.java b/src/com/android/settings/development/transcode/TranscodeDefaultOptionPreferenceController.java
index 3cbf3cb..1c2fcd9 100644
--- a/src/com/android/settings/development/transcode/TranscodeDefaultOptionPreferenceController.java
+++ b/src/com/android/settings/development/transcode/TranscodeDefaultOptionPreferenceController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.os.SystemProperties;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -48,4 +49,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
diff --git a/src/com/android/settings/development/transcode/TranscodeDisableCachePreferenceController.java b/src/com/android/settings/development/transcode/TranscodeDisableCachePreferenceController.java
index 38c3208..c3b0624 100644
--- a/src/com/android/settings/development/transcode/TranscodeDisableCachePreferenceController.java
+++ b/src/com/android/settings/development/transcode/TranscodeDisableCachePreferenceController.java
@@ -20,6 +20,7 @@
 import android.os.SystemProperties;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -50,4 +51,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
diff --git a/src/com/android/settings/development/transcode/TranscodeGlobalTogglePreferenceController.java b/src/com/android/settings/development/transcode/TranscodeGlobalTogglePreferenceController.java
index c15806d..b2d446e 100644
--- a/src/com/android/settings/development/transcode/TranscodeGlobalTogglePreferenceController.java
+++ b/src/com/android/settings/development/transcode/TranscodeGlobalTogglePreferenceController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.os.SystemProperties;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -49,4 +50,9 @@
         SystemProperties.set(TRANSCODE_ENABLED_PROP_KEY, String.valueOf(isChecked));
         return true;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
diff --git a/src/com/android/settings/development/transcode/TranscodeNotificationPreferenceController.java b/src/com/android/settings/development/transcode/TranscodeNotificationPreferenceController.java
index fd5ec5a..6b6692e 100644
--- a/src/com/android/settings/development/transcode/TranscodeNotificationPreferenceController.java
+++ b/src/com/android/settings/development/transcode/TranscodeNotificationPreferenceController.java
@@ -20,6 +20,7 @@
 import android.os.SystemProperties;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -50,4 +51,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
diff --git a/src/com/android/settings/development/transcode/TranscodeUserControlPreferenceController.java b/src/com/android/settings/development/transcode/TranscodeUserControlPreferenceController.java
index 49456ff..ce82293 100644
--- a/src/com/android/settings/development/transcode/TranscodeUserControlPreferenceController.java
+++ b/src/com/android/settings/development/transcode/TranscodeUserControlPreferenceController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.os.SystemProperties;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -48,4 +49,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
index 404a5f5..2547dbd 100644
--- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
@@ -158,7 +158,7 @@
     }
 
     @VisibleForTesting
-    Preference createNewPreference(Context context) {
-        return new Preference(context);
+    protected Preference createNewPreference(Context context) {
+        return new PhoneNumberSummaryPreference(context);
     }
 }
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberSummaryPreference.java b/src/com/android/settings/deviceinfo/PhoneNumberSummaryPreference.java
new file mode 100644
index 0000000..2e31084
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/PhoneNumberSummaryPreference.java
@@ -0,0 +1,57 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
+
+/**
+ * Preference which support phone number talkback in summary part.
+ */
+public class PhoneNumberSummaryPreference extends Preference {
+
+    /**
+     * Constructor
+     * @param context
+     */
+    public PhoneNumberSummaryPreference(Context context) {
+        this(context, null);
+    }
+
+    /**
+     * Constructor
+     * @param context
+     * @param attrs
+     */
+    public PhoneNumberSummaryPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder) {
+        super.onBindViewHolder(holder);
+
+        // Expand text to support phone number talkback.
+        TextView summaryView = (TextView) holder.findViewById(android.R.id.summary);
+        if (summaryView != null) {
+            summaryView.setText(PhoneNumberUtil.expandByTts(summaryView.getText()));
+        }
+    }
+}
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberUtil.java b/src/com/android/settings/deviceinfo/PhoneNumberUtil.java
new file mode 100644
index 0000000..77e02b4
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/PhoneNumberUtil.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.deviceinfo;
+
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.TextUtils;
+import android.text.style.TtsSpan;
+
+import java.util.Arrays;
+import java.util.stream.IntStream;
+
+/**
+ * Helper class to detect format of phone number.
+ */
+public class PhoneNumberUtil {
+
+    /**
+     * Convert given text to support phone number talkback.
+     * @param text given
+     * @return converted text
+     */
+    public static CharSequence expandByTts(CharSequence text) {
+        if ((text == null) || (text.length() <= 0)
+            || (!isPhoneNumberDigits(text))) {
+            return text;
+        }
+        Spannable spannable = new SpannableStringBuilder(text);
+        TtsSpan span = new TtsSpan.DigitsBuilder(text.toString()).build();
+        spannable.setSpan(span, 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        return spannable;
+    }
+
+    /**
+     * Check if given text may contains a phone id related numbers.
+     * (ex: phone number, IMEI, ICCID)
+     * @param text given
+     * @return true when given text is a phone id related number.
+     */
+    private static boolean isPhoneNumberDigits(CharSequence text) {
+        long textLength = (long)text.length();
+        return (textLength == text.chars()
+                .filter(c -> isPhoneNumberDigit(c)).count());
+    }
+
+    private static boolean isPhoneNumberDigit(int c) {
+        return ((c >= (int)'0') && (c <= (int)'9'))
+            || (c == (int)'-') || (c == (int)'+')
+            || (c == (int)'(') || (c == (int)')');
+    }
+}
diff --git a/src/com/android/settings/deviceinfo/SafetyInfoPreferenceController.java b/src/com/android/settings/deviceinfo/SafetyInfoPreferenceController.java
index 10dbd19..92e4576 100644
--- a/src/com/android/settings/deviceinfo/SafetyInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SafetyInfoPreferenceController.java
@@ -18,6 +18,9 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.text.TextUtils;
+
+import androidx.preference.Preference;
 
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.AbstractPreferenceController;
@@ -44,4 +47,16 @@
     public String getPreferenceKey() {
         return "safety_info";
     }
+
+    @Override
+    public boolean handlePreferenceTreeClick(Preference preference) {
+        if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
+            return false;
+        }
+
+        final Intent intent = new Intent(INTENT_PROBE);
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        mContext.startActivity(intent);
+        return true;
+    }
 }
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/deviceinfo/imei/ImeiInfoDialogController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
index a10b9f1..1ae6b40 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogController.java
@@ -21,11 +21,6 @@
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
-import android.text.Spannable;
-import android.text.SpannableStringBuilder;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.style.TtsSpan;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
@@ -53,19 +48,6 @@
     @VisibleForTesting
     static final int ID_GSM_SETTINGS = R.id.gsm_settings;
 
-    private static CharSequence getTextAsDigits(CharSequence text) {
-        if (TextUtils.isEmpty(text)) {
-            return "";
-        }
-        if (TextUtils.isDigitsOnly(text)) {
-            final Spannable spannable = new SpannableStringBuilder(text);
-            final TtsSpan span = new TtsSpan.DigitsBuilder(text.toString()).build();
-            spannable.setSpan(span, 0, spannable.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
-            text = spannable;
-        }
-        return text;
-    }
-
     private final ImeiInfoDialogFragment mDialog;
     private final TelephonyManager mTelephonyManager;
     private final SubscriptionInfo mSubscriptionInfo;
@@ -121,10 +103,9 @@
         if ((mSubscriptionInfo != null && isCdmaLteEnabled()) ||
                     (mSubscriptionInfo == null && isSimPresent(mSlotId))) {
             // Show IMEI for LTE device
-            mDialog.setText(ID_IMEI_VALUE,
-                    getTextAsDigits(mTelephonyManager.getImei(mSlotId)));
+            mDialog.setText(ID_IMEI_VALUE, mTelephonyManager.getImei(mSlotId));
             mDialog.setText(ID_IMEI_SV_VALUE,
-                    getTextAsDigits(mTelephonyManager.getDeviceSoftwareVersion(mSlotId)));
+                    mTelephonyManager.getDeviceSoftwareVersion(mSlotId));
         } else {
             // device is not GSM/UMTS, do not display GSM/UMTS features
             mDialog.removeViewFromScreen(ID_GSM_SETTINGS);
@@ -132,9 +113,9 @@
     }
 
     private void updateDialogForGsmPhone() {
-        mDialog.setText(ID_IMEI_VALUE, getTextAsDigits(mTelephonyManager.getImei(mSlotId)));
+        mDialog.setText(ID_IMEI_VALUE, mTelephonyManager.getImei(mSlotId));
         mDialog.setText(ID_IMEI_SV_VALUE,
-                getTextAsDigits(mTelephonyManager.getDeviceSoftwareVersion(mSlotId)));
+                mTelephonyManager.getDeviceSoftwareVersion(mSlotId));
         // device is not CDMA, do not display CDMA features
         mDialog.removeViewFromScreen(ID_CDMA_SETTINGS);
     }
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
index b2f083f..c8d78da 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoDialogFragment.java
@@ -31,8 +31,12 @@
 import androidx.fragment.app.FragmentManager;
 
 import com.android.settings.R;
+import com.android.settings.deviceinfo.PhoneNumberUtil;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 
+import java.util.Arrays;
+import java.util.stream.IntStream;
+
 public class ImeiInfoDialogFragment extends InstrumentedDialogFragment {
 
     @VisibleForTesting
@@ -83,13 +87,27 @@
         }
     }
 
+    /**
+     * View ID(s) which is digit format (instead of decimal number) text.
+     **/
+    private static final int [] sViewIdsInDigitFormat = IntStream
+            .of(ImeiInfoDialogController.ID_MEID_NUMBER_VALUE,
+                    ImeiInfoDialogController.ID_MIN_NUMBER_VALUE,
+                    ImeiInfoDialogController.ID_IMEI_VALUE,
+                    ImeiInfoDialogController.ID_IMEI_SV_VALUE)
+            .sorted().toArray();
+
     public void setText(int viewId, CharSequence text) {
         final TextView textView = mRootView.findViewById(viewId);
+        if (textView == null) {
+            return;
+        }
         if (TextUtils.isEmpty(text)) {
             text = getResources().getString(R.string.device_info_default);
         }
-        if (textView != null) {
-            textView.setText(text);
+        else if (Arrays.binarySearch(sViewIdsInDigitFormat, viewId) >= 0) {
+            text = PhoneNumberUtil.expandByTts(text);
         }
+        textView.setText(text);
     }
 }
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
index 407e4e5..e0bff6d 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
@@ -32,6 +32,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.deviceinfo.PhoneNumberSummaryPreference;
 import com.android.settings.slices.Sliceable;
 import com.android.settingslib.Utils;
 
@@ -162,6 +163,6 @@
 
     @VisibleForTesting
     Preference createNewPreference(Context context) {
-        return new Preference(context);
+        return new PhoneNumberSummaryPreference(context);
     }
 }
diff --git a/src/com/android/settings/deviceinfo/legal/LegalPreferenceController.java b/src/com/android/settings/deviceinfo/legal/LegalPreferenceController.java
index 9465fff..fe45923 100644
--- a/src/com/android/settings/deviceinfo/legal/LegalPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/legal/LegalPreferenceController.java
@@ -87,9 +87,9 @@
         }
 
         // Replace the intent with this specific activity
-        mPreference.setIntent(new Intent().setClassName(
-                resolveInfo.activityInfo.packageName,
-                resolveInfo.activityInfo.name));
+        mPreference.setIntent(new Intent()
+                .setClassName(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.name)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
 
         mPreference.setTitle(resolveInfo.loadLabel(mPackageManager));
     }
diff --git a/src/com/android/settings/deviceinfo/legal/ModuleLicensePreference.java b/src/com/android/settings/deviceinfo/legal/ModuleLicensePreference.java
index e012275..8a3c9aa 100644
--- a/src/com/android/settings/deviceinfo/legal/ModuleLicensePreference.java
+++ b/src/com/android/settings/deviceinfo/legal/ModuleLicensePreference.java
@@ -51,6 +51,7 @@
                         ModuleLicenseProvider.LICENSE_FILE_MIME_TYPE)
                 .putExtra(Intent.EXTRA_TITLE, mModule.getName())
                 .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                 .addCategory(Intent.CATEGORY_DEFAULT)
                 .setPackage("com.android.htmlviewer");
         try {
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
index f2bce78..2cf523f 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
@@ -134,7 +134,7 @@
                         }
                         if (SubscriptionManager.isValidSubscriptionId(nextSubId)) {
                             mTelephonyManager =
-                                    mTelephonyManager.createForSubscriptionId(nextSubId);
+                                    getTelephonyManager().createForSubscriptionId(nextSubId);
                             registerImsRegistrationCallback(nextSubId);
                         }
                     }
@@ -228,6 +228,11 @@
         }
     }
 
+    @VisibleForTesting
+    public TelephonyManager getTelephonyManager() {
+        return mTelephonyManager;
+    }
+
     public void initialize() {
         requestForUpdateEid();
 
@@ -235,7 +240,7 @@
             return;
         }
         mTelephonyManager =
-            mTelephonyManager.createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
+            getTelephonyManager().createForSubscriptionId(mSubscriptionInfo.getSubscriptionId());
         mTelephonyCallback = new SimStatusDialogTelephonyCallback();
         updateLatestAreaInfo();
         updateSubscriptionStatus();
@@ -246,8 +251,8 @@
 
         // getServiceState() may return null when the subscription is inactive
         // or when there was an error communicating with the phone process.
-        final ServiceState serviceState = mTelephonyManager.getServiceState();
-        final SignalStrength signalStrength = mTelephonyManager.getSignalStrength();
+        final ServiceState serviceState = getTelephonyManager().getServiceState();
+        final SignalStrength signalStrength = getTelephonyManager().getSignalStrength();
 
         updatePhoneNumber();
         updateServiceState(serviceState);
@@ -279,9 +284,10 @@
         if (mSubscriptionInfo == null) {
             return;
         }
-        mTelephonyManager = mTelephonyManager.createForSubscriptionId(
+        mTelephonyManager = getTelephonyManager().createForSubscriptionId(
                 mSubscriptionInfo.getSubscriptionId());
-        mTelephonyManager.registerTelephonyCallback(mContext.getMainExecutor(), mTelephonyCallback);
+        getTelephonyManager()
+                .registerTelephonyCallback(mContext.getMainExecutor(), mTelephonyCallback);
         mSubscriptionManager.addOnSubscriptionsChangedListener(
                 mContext.getMainExecutor(), mOnSubscriptionsChangedListener);
         registerImsRegistrationCallback(mSubscriptionInfo.getSubscriptionId());
@@ -304,7 +310,7 @@
             if (mIsRegisteredListener) {
                 mSubscriptionManager.removeOnSubscriptionsChangedListener(
                         mOnSubscriptionsChangedListener);
-                mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
+                getTelephonyManager().unregisterTelephonyCallback(mTelephonyCallback);
                 if (mShowLatestAreaInfo) {
                     mContext.unregisterReceiver(mAreaInfoReceiver);
                 }
@@ -315,7 +321,7 @@
 
         unregisterImsRegistrationCallback(mSubscriptionInfo.getSubscriptionId());
         mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);
-        mTelephonyManager.unregisterTelephonyCallback(mTelephonyCallback);
+        getTelephonyManager().unregisterTelephonyCallback(mTelephonyCallback);
 
         if (mShowLatestAreaInfo) {
             mContext.unregisterReceiver(mAreaInfoReceiver);
@@ -329,7 +335,7 @@
     }
 
     @VisibleForTesting
-    protected void updatePhoneNumber() {
+    public void updatePhoneNumber() {
         // If formattedNumber is null or empty, it'll display as "Unknown".
         mDialog.setText(PHONE_NUMBER_VALUE_ID,
                 DeviceInfoUtils.getBidiFormattedPhoneNumber(mContext, mSubscriptionInfo));
@@ -433,7 +439,7 @@
     private void updateLatestAreaInfo() {
         mShowLatestAreaInfo = Resources.getSystem().getBoolean(
                 com.android.internal.R.bool.config_showAreaUpdateInfoSettings)
-                && mTelephonyManager.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA;
+                && getTelephonyManager().getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA;
 
         if (mShowLatestAreaInfo) {
             // Bind cell broadcast service to get the area info. The info will be updated once
@@ -451,7 +457,7 @@
             resetSignalStrength();
         } else if (!Utils.isInService(mPreviousServiceState)) {
             // If ServiceState changed from out of service -> in service, update signal strength.
-            updateSignalStrength(mTelephonyManager.getSignalStrength());
+            updateSignalStrength(getTelephonyManager().getSignalStrength());
         }
 
         String serviceStateValue;
@@ -498,7 +504,7 @@
             return;
         }
 
-        ServiceState serviceState = mTelephonyManager.getServiceState();
+        ServiceState serviceState = getTelephonyManager().getServiceState();
         if (!Utils.isInService(serviceState)) {
             return;
         }
@@ -536,8 +542,8 @@
         String dataNetworkTypeName = null;
         String voiceNetworkTypeName = null;
         final int subId = mSubscriptionInfo.getSubscriptionId();
-        final int actualDataNetworkType = mTelephonyManager.getDataNetworkType();
-        final int actualVoiceNetworkType = mTelephonyManager.getVoiceNetworkType();
+        final int actualDataNetworkType = getTelephonyManager().getDataNetworkType();
+        final int actualVoiceNetworkType = getTelephonyManager().getVoiceNetworkType();
         final int overrideNetworkType = mTelephonyDisplayInfo == null
                 ? TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE
                 : mTelephonyDisplayInfo.getOverrideNetworkType();
@@ -604,7 +610,7 @@
             mDialog.removeSettingFromScreen(ICCID_INFO_LABEL_ID);
             mDialog.removeSettingFromScreen(ICCID_INFO_VALUE_ID);
         } else {
-            mDialog.setText(ICCID_INFO_VALUE_ID, mTelephonyManager.getSimSerialNumber());
+            mDialog.setText(ICCID_INFO_VALUE_ID, getTelephonyManager().getSimSerialNumber());
         }
     }
 
@@ -617,10 +623,10 @@
     }
 
     @VisibleForTesting
-    protected AtomicReference<String> getEid(int slotIndex) {
+    public AtomicReference<String> getEid(int slotIndex) {
         boolean shouldHaveEid = false;
         String eid = null;
-        if (mTelephonyManager.getActiveModemCount() > MAX_PHONE_COUNT_SINGLE_SIM) {
+        if (getTelephonyManager().getActiveModemCount() > MAX_PHONE_COUNT_SINGLE_SIM) {
             // Get EID per-SIM in multi-SIM mode
             final Map<Integer, Integer> mapping = mTelephonyManager
                     .getLogicalToPhysicalSlotMapping();
@@ -628,7 +634,7 @@
                     SubscriptionManager.INVALID_SIM_SLOT_INDEX);
 
             if (pSlotId != SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
-                final List<UiccCardInfo> infos = mTelephonyManager.getUiccCardsInfo();
+                final List<UiccCardInfo> infos = getTelephonyManager().getUiccCardsInfo();
 
                 for (UiccCardInfo info : infos) {
                     if (info.getPhysicalSlotIndex() == pSlotId) {
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
index 93323b3..8eb71df 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogFragment.java
@@ -30,6 +30,10 @@
 
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.deviceinfo.PhoneNumberUtil;
+
+import java.util.Arrays;
+import java.util.stream.IntStream;
 
 public class SimStatusDialogFragment extends InstrumentedDialogFragment {
 
@@ -87,13 +91,26 @@
         }
     }
 
+    /**
+     * View ID(s) which is digit format (instead of decimal number) text.
+     **/
+    private static final int [] sViewIdsInDigitFormat = IntStream
+            .of(SimStatusDialogController.ICCID_INFO_VALUE_ID,
+                    SimStatusDialogController.PHONE_NUMBER_VALUE_ID,
+                    SimStatusDialogController.EID_INFO_VALUE_ID)
+            .sorted().toArray();
+
     public void setText(int viewId, CharSequence text) {
         final TextView textView = mRootView.findViewById(viewId);
+        if (textView == null) {
+            return;
+        }
         if (TextUtils.isEmpty(text)) {
             text = getResources().getString(R.string.device_info_default);
         }
-        if (textView != null) {
-            textView.setText(text);
+        else if (Arrays.binarySearch(sViewIdsInDigitFormat, viewId) >= 0) {
+            text = PhoneNumberUtil.expandByTts(text);
         }
+        textView.setText(text);
     }
 }
diff --git a/src/com/android/settings/display/AlwaysOnDisplaySlice.java b/src/com/android/settings/display/AlwaysOnDisplaySlice.java
index 27374ef..c66f4ed 100644
--- a/src/com/android/settings/display/AlwaysOnDisplaySlice.java
+++ b/src/com/android/settings/display/AlwaysOnDisplaySlice.java
@@ -106,4 +106,9 @@
     public Intent getIntent() {
         return null;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
 }
diff --git a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
index 7749c8f..bf81727 100644
--- a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
+++ b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
@@ -68,6 +68,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public boolean isChecked() {
         return getConfig().alwaysOnEnabled(MY_USER);
     }
diff --git a/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java b/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
index e143d73..a5b0aeb 100644
--- a/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
+++ b/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
@@ -25,6 +25,7 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -100,4 +101,9 @@
 
         return mConfig;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
 }
diff --git a/src/com/android/settings/display/AutoBrightnessPreferenceController.java b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
index 0018d84..d925de3 100644
--- a/src/com/android/settings/display/AutoBrightnessPreferenceController.java
+++ b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
@@ -61,4 +61,9 @@
                 ? R.string.auto_brightness_summary_on
                 : R.string.auto_brightness_summary_off);
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
 }
diff --git a/src/com/android/settings/display/AutoRotatePreferenceController.java b/src/com/android/settings/display/AutoRotatePreferenceController.java
index 202a085..5dc2286 100644
--- a/src/com/android/settings/display/AutoRotatePreferenceController.java
+++ b/src/com/android/settings/display/AutoRotatePreferenceController.java
@@ -20,6 +20,7 @@
 import androidx.preference.Preference;
 
 import com.android.internal.view.RotationPolicy;
+import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
@@ -87,6 +88,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public boolean isChecked() {
         return !RotationPolicy.isRotationLocked(mContext);
     }
diff --git a/src/com/android/settings/display/ControlsPrivacyPreferenceController.java b/src/com/android/settings/display/ControlsPrivacyPreferenceController.java
index 65fd846..00573a7 100644
--- a/src/com/android/settings/display/ControlsPrivacyPreferenceController.java
+++ b/src/com/android/settings/display/ControlsPrivacyPreferenceController.java
@@ -70,6 +70,11 @@
         refreshSummary(preference);
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
     private boolean isEnabled() {
         return isControlsAvailable();
     }
diff --git a/src/com/android/settings/display/DarkUIPreferenceController.java b/src/com/android/settings/display/DarkUIPreferenceController.java
index 98d9a69..d07410e 100644
--- a/src/com/android/settings/display/DarkUIPreferenceController.java
+++ b/src/com/android/settings/display/DarkUIPreferenceController.java
@@ -95,6 +95,11 @@
         return mUiModeManager.setNightModeActivated(isChecked);
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
     private void showDarkModeDialog() {
         final DarkUIInfoDialogFragment frag = new DarkUIInfoDialogFragment();
         if (mFragment != null && mFragment.getFragmentManager() != null) {
diff --git a/src/com/android/settings/display/DisplayWhiteBalancePreferenceController.java b/src/com/android/settings/display/DisplayWhiteBalancePreferenceController.java
index 6fc0b0e..805cb08 100644
--- a/src/com/android/settings/display/DisplayWhiteBalancePreferenceController.java
+++ b/src/com/android/settings/display/DisplayWhiteBalancePreferenceController.java
@@ -21,19 +21,19 @@
 import android.net.Uri;
 import android.os.Handler;
 import android.os.Looper;
-import android.os.UserHandle;
 import android.provider.Settings.Secure;
 import android.provider.Settings.System;
+
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
 
-import com.android.settings.core.TogglePreferenceController;
-
 public class DisplayWhiteBalancePreferenceController extends TogglePreferenceController
     implements LifecycleObserver, OnStart, OnStop {
 
@@ -63,6 +63,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public void onStart() {
         if (!isAvailable()) {
             return;
diff --git a/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java b/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java
index 04b6dc3..5bfce18 100644
--- a/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/display/FontSizePreferenceFragmentForSetupWizard.java
@@ -17,16 +17,47 @@
 package com.android.settings.display;
 
 import android.app.settings.SettingsEnums;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import androidx.viewpager.widget.ViewPager;
+
+import com.android.settings.R;
 
 public class FontSizePreferenceFragmentForSetupWizard
         extends ToggleFontSizePreferenceFragment {
 
     @Override
+    protected int getActivityLayoutResId() {
+        return R.layout.suw_font_size_fragment;
+    }
+
+    @Override
     public int getMetricsCategory() {
         return SettingsEnums.SUW_ACCESSIBILITY_FONT_SIZE;
     }
 
     @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        final View root = super.onCreateView(inflater, container, savedInstanceState);
+        if (getResources().getBoolean(R.bool.config_supported_large_screen)) {
+            final ViewPager viewPager = root.findViewById(R.id.preview_pager);
+            final View view = (View) viewPager.getAdapter().instantiateItem(viewPager,
+                    viewPager.getCurrentItem());
+            final LinearLayout layout = view.findViewById(R.id.font_size_preview_text_group);
+            final int paddingStart = getResources().getDimensionPixelSize(
+                    R.dimen.font_size_preview_padding_start);
+            layout.setPaddingRelative(paddingStart, layout.getPaddingTop(),
+                    layout.getPaddingEnd(), layout.getPaddingBottom());
+        }
+        return root;
+    }
+
+    @Override
     public void onStop() {
         // Log the final choice in value if it's different from the previous value.
         if (mCurrentIndex != mInitialIndex) {
diff --git a/src/com/android/settings/display/LockscreenClockPreferenceController.java b/src/com/android/settings/display/LockscreenClockPreferenceController.java
new file mode 100644
index 0000000..70ae55e
--- /dev/null
+++ b/src/com/android/settings/display/LockscreenClockPreferenceController.java
@@ -0,0 +1,70 @@
+/*
+ * 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.display;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+/**
+ * Preference to enable/disable the large double-line clock on lockscreen
+ */
+public class LockscreenClockPreferenceController extends TogglePreferenceController {
+
+    private static final String SETTING_KEY = Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK;
+
+    public LockscreenClockPreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    @Override
+    public boolean isChecked() {
+        return Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1) != 0;
+    }
+
+    @Override
+    public boolean setChecked(boolean isChecked) {
+        return Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY,
+                isChecked ? 1 : 0);
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        return mContext.getText(R.string.lockscreen_double_line_clock_summary);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        return AVAILABLE;
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        super.updateState(preference);
+        preference.setEnabled(true);
+        refreshSummary(preference);
+    }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+}
diff --git a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
index e6217ff..d0d4822 100644
--- a/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
+++ b/src/com/android/settings/display/NightDisplayActivationPreferenceController.java
@@ -24,6 +24,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -66,6 +67,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
 
diff --git a/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java b/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java
index 0f8ecc5..700b601 100644
--- a/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java
+++ b/src/com/android/settings/display/NightDisplayIntensityPreferenceController.java
@@ -23,6 +23,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.SliderPreferenceController;
 import com.android.settings.widget.SeekBarPreference;
 
@@ -56,6 +57,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         final SeekBarPreference preference = screen.findPreference(getPreferenceKey());
diff --git a/src/com/android/settings/display/NightDisplayPreferenceController.java b/src/com/android/settings/display/NightDisplayPreferenceController.java
index 003373c..df9e849 100644
--- a/src/com/android/settings/display/NightDisplayPreferenceController.java
+++ b/src/com/android/settings/display/NightDisplayPreferenceController.java
@@ -96,6 +96,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public void onActivated(boolean activated) {
         updateState(mPreference);
     }
diff --git a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java
index 9b654dc..27ba340 100644
--- a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java
+++ b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java
@@ -120,6 +120,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public void onStart() {
         mDeviceConfigDisplaySettings.startListening();
     }
diff --git a/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java b/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java
index cfa7b5d..7185c63 100644
--- a/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/display/ScreenZoomPreferenceFragmentForSetupWizard.java
@@ -18,9 +18,16 @@
 
 import android.app.settings.SettingsEnums;
 
+import com.android.settings.R;
+
 public class ScreenZoomPreferenceFragmentForSetupWizard extends ScreenZoomSettings {
 
     @Override
+    protected int getActivityLayoutResId() {
+        return R.layout.suw_screen_zoom_fragment;
+    }
+
+    @Override
     public int getMetricsCategory() {
         return SettingsEnums.SUW_ACCESSIBILITY_DISPLAY_SIZE;
     }
diff --git a/src/com/android/settings/display/SmartAutoRotateController.java b/src/com/android/settings/display/SmartAutoRotateController.java
index 61bbd18..b88aa80 100644
--- a/src/com/android/settings/display/SmartAutoRotateController.java
+++ b/src/com/android/settings/display/SmartAutoRotateController.java
@@ -43,6 +43,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.view.RotationPolicy;
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -157,6 +158,11 @@
         return true;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
     static boolean isRotationResolverServiceAvailable(Context context) {
         final PackageManager packageManager = context.getPackageManager();
         final String resolvePackage = packageManager.getRotationResolverPackageName();
diff --git a/src/com/android/settings/display/SmartAutoRotatePreferenceController.java b/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
index 849fbe7..afeea80 100644
--- a/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
+++ b/src/com/android/settings/display/SmartAutoRotatePreferenceController.java
@@ -22,7 +22,6 @@
 import static com.android.settings.display.SmartAutoRotateController.hasSufficientPermission;
 import static com.android.settings.display.SmartAutoRotateController.isRotationResolverServiceAvailable;
 
-import android.text.TextUtils;
 import android.app.settings.SettingsEnums;
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -32,6 +31,7 @@
 import android.os.PowerManager;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.text.TextUtils;
 
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
@@ -91,6 +91,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         mPreference = screen.findPreference(getPreferenceKey());
diff --git a/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java b/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
index c84a15e..0136eac 100644
--- a/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
+++ b/src/com/android/settings/display/TopLevelWallpaperPreferenceController.java
@@ -31,6 +31,8 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.RestrictedTopLevelPreference;
@@ -61,6 +63,11 @@
         super.displayPreference(screen);
         Preference preference = screen.findPreference(getPreferenceKey());
         preference.setTitle(getTitle());
+        ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+                mContext,
+                getComponentName(),
+                null /* secondaryIntentAction */,
+                true /* clearTop */);
     }
 
     public String getTitle() {
@@ -97,7 +104,8 @@
         if (getPreferenceKey().equals(preference.getKey())) {
             final Intent intent = new Intent().setComponent(
                     getComponentName()).putExtra(mWallpaperLaunchExtra, LAUNCHED_SETTINGS);
-            if (areStylesAvailable()) {
+            if (areStylesAvailable() && !ActivityEmbeddingUtils.isEmbeddingActivityEnabled(
+                    mContext)) {
                 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
             }
             preference.getContext().startActivity(intent);
diff --git a/src/com/android/settings/display/WalletPrivacyPreferenceController.java b/src/com/android/settings/display/WalletPrivacyPreferenceController.java
index 2e78fe3..92580f3 100644
--- a/src/com/android/settings/display/WalletPrivacyPreferenceController.java
+++ b/src/com/android/settings/display/WalletPrivacyPreferenceController.java
@@ -72,6 +72,11 @@
         refreshSummary(preference);
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
     private boolean isEnabled() {
         return mClient.isWalletServiceAvailable();
     }
diff --git a/src/com/android/settings/dream/StartNowPreferenceController.java b/src/com/android/settings/dream/StartNowPreferenceController.java
index f6a79cc..f270496 100644
--- a/src/com/android/settings/dream/StartNowPreferenceController.java
+++ b/src/com/android/settings/dream/StartNowPreferenceController.java
@@ -17,19 +17,23 @@
 package com.android.settings.dream;
 
 import android.content.Context;
+import android.widget.Button;
 
 import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.widget.SettingsMainSwitchPreferenceController;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.dream.DreamBackend;
+import com.android.settingslib.widget.LayoutPreference;
 
 /**
  * Controller that used to enable screen saver
  */
-public class StartNowPreferenceController extends SettingsMainSwitchPreferenceController {
+public class StartNowPreferenceController extends BasePreferenceController {
 
     private final DreamBackend mBackend;
     private final MetricsFeatureProvider mMetricsFeatureProvider;
@@ -46,25 +50,23 @@
     }
 
     @Override
-    public void updateState(Preference preference) {
-        mSwitchPreference.setChecked(false);
-        mSwitchPreference.setEnabled(mBackend.getWhenToDreamSetting() != DreamBackend.NEVER);
-    }
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
 
-    @Override
-    public boolean isChecked() {
-        return false;
-    }
-
-    @Override
-    public boolean setChecked(boolean isChecked) {
-        if (isChecked) {
-            if (mSwitchPreference != null) {
-                mMetricsFeatureProvider.logClickedPreference(mSwitchPreference,
-                        mSwitchPreference.getExtras().getInt(DashboardFragment.CATEGORY));
-            }
+        final LayoutPreference pref = screen.findPreference(getPreferenceKey());
+        final Button startButton = pref.findViewById(R.id.dream_start_now_button);
+        startButton.setOnClickListener(v -> {
+            mMetricsFeatureProvider.logClickedPreference(pref,
+                    pref.getExtras().getInt(DashboardFragment.CATEGORY));
             mBackend.startDreaming();
-        }
-        return true;
+        });
+    }
+
+    @Override
+    public void updateState(Preference preference) {
+        super.updateState(preference);
+        final Button startButton = ((LayoutPreference) preference)
+                .findViewById(R.id.dream_start_now_button);
+        startButton.setEnabled(mBackend.getWhenToDreamSetting() != DreamBackend.NEVER);
     }
 }
diff --git a/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceController.java b/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceController.java
index f9fb647..52694af 100644
--- a/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceController.java
+++ b/src/com/android/settings/emergency/EmergencyGestureSoundPreferenceController.java
@@ -53,6 +53,12 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        // not needed since it's not sliceable
+        return NO_RES;
+    }
+
+    @Override
     public boolean isChecked() {
         return mEmergencyNumberUtils.getEmergencyGestureSoundEnabled();
     }
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/enterprise/EnterprisePrivacyFeatureProvider.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java
index 7d28d82..75d4517 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProvider.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.enterprise;
 
+import android.content.Context;
+
 import java.util.Date;
 
 public interface EnterprisePrivacyFeatureProvider {
@@ -131,7 +133,7 @@
      * Launches the Device Owner or Profile Owner's activity that displays the "Your work policy
      * info" page. Returns {@code true} if the activity has indeed been launched.
      */
-    boolean showWorkPolicyInfo();
+    boolean showWorkPolicyInfo(Context activityContext);
 
     /**
      * Launches the parental controls settings page. Returns {@code true} if the activity has
diff --git a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
index 7d722fc..35ce1f1 100644
--- a/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
+++ b/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImpl.java
@@ -227,17 +227,17 @@
     }
 
     @Override
-    public boolean showWorkPolicyInfo() {
+    public boolean showWorkPolicyInfo(Context activityContext) {
         Intent intent = getWorkPolicyInfoIntentDO();
         if (intent != null) {
-            mContext.startActivity(intent);
+            activityContext.startActivity(intent);
             return true;
         }
 
         intent = getWorkPolicyInfoIntentPO();
         final UserInfo userInfo = getManagedProfileUserInfo();
         if (intent != null && userInfo != null) {
-            mContext.startActivityAsUser(intent, userInfo.getUserHandle());
+            activityContext.startActivityAsUser(intent, userInfo.getUserHandle());
             return true;
         }
 
@@ -305,8 +305,7 @@
         // Only search for the required action in the Device Owner's package
         final Intent intent =
                 new Intent(Settings.ACTION_SHOW_WORK_POLICY_INFO)
-                        .setPackage(ownerComponent.getPackageName())
-                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                        .setPackage(ownerComponent.getPackageName());
         final List<ResolveInfo> activities = mPm.queryIntentActivities(intent, 0);
         if (activities.size() != 0) {
             return intent;
@@ -329,8 +328,7 @@
         // Only search for the required action in the Profile Owner's package
         final Intent intent =
                 new Intent(Settings.ACTION_SHOW_WORK_POLICY_INFO)
-                        .setPackage(ownerComponent.getPackageName())
-                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                        .setPackage(ownerComponent.getPackageName());
         final List<ResolveInfo> activities = mPm.queryIntentActivitiesAsUser(intent, 0, userId);
         if (activities.size() != 0) {
             return intent;
diff --git a/src/com/android/settings/flashlight/FlashlightSlice.java b/src/com/android/settings/flashlight/FlashlightSlice.java
index bd7f486..eaf059a 100644
--- a/src/com/android/settings/flashlight/FlashlightSlice.java
+++ b/src/com/android/settings/flashlight/FlashlightSlice.java
@@ -117,6 +117,12 @@
         return null;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        // no landing page in Settings
+        return NO_RES;
+    }
+
     private static String getCameraId(Context context) throws CameraAccessException {
         final CameraManager cameraManager = context.getSystemService(CameraManager.class);
         final String[] ids = cameraManager.getCameraIdList();
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 3319e1b..3741bfe 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;
@@ -28,7 +29,6 @@
 import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.util.Log;
-import android.util.Pair;
 import android.view.View;
 
 import androidx.annotation.VisibleForTesting;
@@ -86,6 +86,7 @@
     private static final String KEY_PREF_OPTIMIZED = "optimized_pref";
     private static final String KEY_PREF_RESTRICTED = "restricted_pref";
     private static final String KEY_FOOTER_PREFERENCE = "app_usage_footer_preference";
+    private static final String PACKAGE_NAME_NONE = "none";
 
     private static final int REQUEST_UNINSTALL = 0;
     private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1;
@@ -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,8 @@
         super.onResume();
 
         initHeader();
-        if (enableTriState) {
+        if (mEnableTriState) {
+            mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
             initPreferenceForTriState(getContext());
             final String packageName = mBatteryOptimizeUtils.getPackageName();
             FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
@@ -276,6 +283,28 @@
         }
     }
 
+    @Override
+    public void onPause() {
+        super.onPause();
+        if (mEnableTriState) {
+            final int selectedPreference = getSelectedPreference();
+
+            notifyBackupManager();
+            logMetricCategory(selectedPreference);
+            mBatteryOptimizeUtils.setAppUsageState(selectedPreference);
+            Log.d(TAG, "Leave with mode: " + selectedPreference);
+        }
+    }
+
+    @VisibleForTesting
+    void notifyBackupManager() {
+        if (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,11 +332,8 @@
             controller.setIsInstantApp(AppUtils.isInstant(mAppEntry.info));
         }
 
-        if (enableTriState) {
-            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);
-            controller.setSummary(getAppActiveTime(foregroundTimeMs, backgroundTimeMs, slotTime));
+        if (mEnableTriState) {
+            controller.setSummary(getAppActiveTime(bundle));
         }
 
         controller.done(context, true /* rebindActions */);
@@ -340,26 +366,29 @@
         final String footerString;
 
         if (!mBatteryOptimizeUtils.isValidPackageName()) {
-            //Present optimized only string when the package name is invalid.
+            // 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);
-        mFooterPreference.setLearnMoreAction(v ->
-                startActivityForResult(HelpUtils.getHelpIntent(context,
-                        context.getString(R.string.help_url_app_usage_settings),
-                        /*backupContext=*/ ""), /*requestCode=*/ 0));
-        mFooterPreference.setLearnMoreContentDescription(
-                context.getString(R.string.manager_battery_usage_link_a11y));
+        final Intent helpIntent = HelpUtils.getHelpIntent(context, context.getString(
+                R.string.help_url_app_usage_settings), /*backupContext=*/ "");
+        if (helpIntent != null) {
+            mFooterPreference.setLearnMoreAction(v ->
+                    startActivityForResult(helpIntent, /*requestCode=*/ 0));
+            mFooterPreference.setLearnMoreContentDescription(
+                    context.getString(R.string.manager_battery_usage_link_a11y));
+        }
     }
 
     @Override
@@ -374,7 +403,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 +417,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));
@@ -430,32 +459,42 @@
         updatePreferenceState(mUnrestrictedPreference, selectedKey);
         updatePreferenceState(mOptimizePreference, selectedKey);
         updatePreferenceState(mRestrictedPreference, selectedKey);
-
-        // Logs metric.
-        int metricCategory = 0;
-        if (selectedKey.equals(mUnrestrictedPreference.getKey())) {
-            metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_UNRESTRICTED;
-        } else if (selectedKey.equals(mOptimizePreference.getKey())) {
-            metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED;
-        } else if (selectedKey.equals(mRestrictedPreference.getKey())) {
-            metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_RESTRICTED;
-        }
-        if (metricCategory != 0) {
-            FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
-                .action(
-                    getContext(),
-                    metricCategory,
-                    new Pair(ConvertUtils.METRIC_KEY_PACKAGE,
-                            mBatteryOptimizeUtils.getPackageName()),
-                    new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE,
-                            getArguments().getString(EXTRA_POWER_USAGE_PERCENT)));
-        }
     }
 
     private void updatePreferenceState(RadioButtonPreference preference, String selectedKey) {
         preference.setChecked(selectedKey.equals(preference.getKey()));
     }
 
+    private void logMetricCategory(int selectedKey) {
+        if (selectedKey == mOptimizationMode) {
+            return;
+        }
+
+        int metricCategory = 0;
+        switch (selectedKey) {
+            case BatteryOptimizeUtils.MODE_UNRESTRICTED:
+                metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_UNRESTRICTED;
+                break;
+            case BatteryOptimizeUtils.MODE_OPTIMIZED:
+                metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED;
+                break;
+            case BatteryOptimizeUtils.MODE_RESTRICTED:
+                metricCategory = SettingsEnums.ACTION_APP_BATTERY_USAGE_RESTRICTED;
+                break;
+        }
+
+        if (metricCategory != 0) {
+            final String packageName = mBatteryOptimizeUtils.getPackageName();
+            FeatureFactory.getFactory(getContext()).getMetricsFeatureProvider()
+                    .action(
+                            /* attribution */ SettingsEnums.OPEN_APP_BATTERY_USAGE,
+                            /* action */ metricCategory,
+                            /* pageId */ SettingsEnums.OPEN_APP_BATTERY_USAGE,
+                            TextUtils.isEmpty(packageName) ? PACKAGE_NAME_NONE : packageName,
+                            getArguments().getInt(EXTRA_POWER_USAGE_AMOUNT));
+        }
+    }
+
     private void onCreateForTriState(String packageName) {
         mUnrestrictedPreference = findPreference(KEY_PREF_UNRESTRICTED);
         mOptimizePreference = findPreference(KEY_PREF_OPTIMIZED);
@@ -469,16 +508,33 @@
                 getContext(), getArguments().getInt(EXTRA_UID), packageName);
     }
 
-    private CharSequence getAppActiveTime(
-            long foregroundTimeMs, long backgroundTimeMs, String slotTime) {
+    private int getSelectedPreference() {
+        if (mRestrictedPreference.isChecked()) {
+            return BatteryOptimizeUtils.MODE_RESTRICTED;
+        } else if (mUnrestrictedPreference.isChecked()) {
+            return BatteryOptimizeUtils.MODE_UNRESTRICTED;
+        } else if (mOptimizePreference.isChecked()) {
+            return BatteryOptimizeUtils.MODE_OPTIMIZED;
+        } else {
+            return BatteryOptimizeUtils.MODE_UNKNOWN;
+        }
+    }
+
+    private CharSequence getAppActiveTime(Bundle bundle) {
+        final long foregroundTimeMs = bundle.getLong(EXTRA_FOREGROUND_TIME);
+        final long backgroundTimeMs = bundle.getLong(EXTRA_BACKGROUND_TIME);
+        final int consumedPower = bundle.getInt(EXTRA_POWER_USAGE_AMOUNT);
+        final String slotTime = bundle.getString(EXTRA_SLOT_TIME, null);
         final long totalTimeMs = foregroundTimeMs + backgroundTimeMs;
         final CharSequence usageTimeSummary;
         final PowerUsageFeatureProvider powerFeatureProvider =
                 FeatureFactory.getFactory(getContext()).getPowerUsageFeatureProvider(getContext());
 
         if (totalTimeMs == 0) {
+            final int batteryWithoutUsageTime = consumedPower > 0
+                    ? R.string.battery_usage_without_time : R.string.battery_not_usage_24hr;
             usageTimeSummary = getText(powerFeatureProvider.isChartGraphEnabled(getContext())
-                    ? R.string.battery_not_usage_24hr : R.string.battery_not_usage);
+                    ? batteryWithoutUsageTime : R.string.battery_not_usage);
         } else if (slotTime == null) {
             // Shows summary text with past 24 hr or full charge if slot time is null.
             usageTimeSummary = powerFeatureProvider.isChartGraphEnabled(getContext())
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
index 29872ac..35af405 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;
@@ -101,7 +102,9 @@
             }
 
             PowerProfile powerProfile = new PowerProfile(context);
-            return powerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL)
+            // Cheap hack to try to figure out if the power_profile.xml was populated.
+            return powerProfile.getAveragePowerForOrdinal(
+                    PowerProfile.POWER_GROUP_DISPLAY_SCREEN_FULL, 0)
                     >= MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP;
         }
     };
@@ -440,8 +443,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..fdbd12a
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -0,0 +1,316 @@
+/*
+ * 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.ParcelFileDescriptor;
+import android.os.RemoteException;
+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.setAppUsageState(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);
+    }
+
+    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..90a86f1 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -28,7 +28,6 @@
 import android.text.format.DateFormat;
 import android.text.format.DateUtils;
 import android.util.Log;
-import android.util.Pair;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
@@ -65,6 +64,7 @@
                 ExpandDividerPreference.OnExpandListener {
     private static final String TAG = "BatteryChartPreferenceController";
     private static final String KEY_FOOTER_PREF = "battery_graph_footer";
+    private static final String PACKAGE_NAME_NONE = "none";
 
     /** Desired battery history size for timestamp slots. */
     public static final int DESIRED_HISTORY_SIZE = 25;
@@ -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);
         }
@@ -219,13 +223,13 @@
         final String packageName = histEntry.mPackageName;
         final boolean isAppEntry = histEntry.isAppEntry();
         mMetricsFeatureProvider.action(
-            mPrefContext,
-            isAppEntry
-                ? SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM
-                : SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
-            new Pair(ConvertUtils.METRIC_KEY_PACKAGE, packageName),
-            new Pair(ConvertUtils.METRIC_KEY_BATTERY_LEVEL, histEntry.mBatteryLevel),
-            new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, powerPref.getPercent()));
+                /* attribution */ SettingsEnums.OPEN_BATTERY_USAGE,
+                /* action */ isAppEntry
+                        ? SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM
+                        : SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
+                /* pageId */ SettingsEnums.OPEN_BATTERY_USAGE,
+                TextUtils.isEmpty(packageName) ? PACKAGE_NAME_NONE : packageName,
+                (int) Math.round(diffEntry.getPercentOfTotal()));
         Log.d(TAG, String.format("handleClick() label=%s key=%s package=%s",
                 diffEntry.getAppLabel(), histEntry.getKey(), histEntry.mPackageName));
         AdvancedPowerUsageDetail.startBatteryDetailPage(
@@ -346,7 +350,7 @@
     private void addAllPreferences() {
         final List<BatteryDiffEntry> entries =
             mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex));
-        addFooterPreferenceIfNeeded(!entries.isEmpty());
+        addFooterPreferenceIfNeeded(entries != null && !entries.isEmpty());
         if (entries == null) {
             Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex);
             return;
diff --git a/src/com/android/settings/fuelgauge/BatteryChartView.java b/src/com/android/settings/fuelgauge/BatteryChartView.java
index 7bc60b2..ff61fce 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartView.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartView.java
@@ -79,12 +79,14 @@
     private boolean mIsSlotsClickabled;
     private String[] mPercentages = getPercentages();
 
-    @VisibleForTesting int mSelectedIndex;
+    @VisibleForTesting int mHoveredIndex = SELECTED_INDEX_INVALID;
+    @VisibleForTesting int mSelectedIndex = SELECTED_INDEX_INVALID;
     @VisibleForTesting String[] mTimestamps;
 
     // Colors for drawing the trapezoid shape and dividers.
     private int mTrapezoidColor;
     private int mTrapezoidSolidColor;
+    private int mTrapezoidHoverColor;
     // For drawing the percentage information.
     private int mTextPadding;
     private final Rect mIndent = new Rect();
@@ -108,7 +110,7 @@
     Paint mTrapezoidCurvePaint = null;
     private TrapezoidSlot[] mTrapezoidSlots;
     // Records the location to calculate selected index.
-    private MotionEvent mTouchUpEvent;
+    private float mTouchUpEventX = Float.MIN_VALUE;
     private BatteryChartView.OnSelectListener mOnSelectListener;
 
     public BatteryChartView(Context context) {
@@ -254,21 +256,49 @@
     public boolean onTouchEvent(MotionEvent event) {
         // Caches the location to calculate selected trapezoid index.
         final int action = event.getAction();
-        if (action == MotionEvent.ACTION_UP) {
-            mTouchUpEvent = MotionEvent.obtain(event);
-        } else if (action == MotionEvent.ACTION_CANCEL) {
-            mTouchUpEvent = null; // reset
+        switch (action) {
+            case MotionEvent.ACTION_UP:
+                mTouchUpEventX = event.getX();
+                break;
+            case MotionEvent.ACTION_CANCEL:
+                mTouchUpEventX = Float.MIN_VALUE; // reset
+                break;
         }
         return super.onTouchEvent(event);
     }
 
     @Override
+    public boolean onHoverEvent(MotionEvent event) {
+        final int action = event.getAction();
+        switch (action) {
+            case MotionEvent.ACTION_HOVER_ENTER:
+            case MotionEvent.ACTION_HOVER_MOVE:
+                final int trapezoidIndex = getTrapezoidIndex(event.getX());
+                if (mHoveredIndex != trapezoidIndex) {
+                    mHoveredIndex = trapezoidIndex;
+                    invalidate();
+                }
+                break;
+        }
+        return super.onHoverEvent(event);
+    }
+
+    @Override
+    public void onHoverChanged(boolean hovered) {
+        super.onHoverChanged(hovered);
+        if (!hovered) {
+            mHoveredIndex = SELECTED_INDEX_INVALID; // reset
+            invalidate();
+        }
+    }
+
+    @Override
     public void onClick(View view) {
-        if (mTouchUpEvent == null) {
+        if (mTouchUpEventX == Float.MIN_VALUE) {
             Log.w(TAG, "invalid motion event for onClick() callback");
             return;
         }
-        final int trapezoidIndex = getTrapezoidIndex(mTouchUpEvent.getX());
+        final int trapezoidIndex = getTrapezoidIndex(mTouchUpEventX);
         // Ignores the click event if the level is zero.
         if (trapezoidIndex == SELECTED_INDEX_INVALID
                 || !isValidToDraw(trapezoidIndex)) {
@@ -347,6 +377,8 @@
         setBackgroundColor(Color.TRANSPARENT);
         mTrapezoidSolidColor = Utils.getColorAccentDefaultColor(context);
         mTrapezoidColor = Utils.getDisabled(context, mTrapezoidSolidColor);
+        mTrapezoidHoverColor = Utils.getColorAttrDefaultColor(context,
+            com.android.internal.R.attr.colorAccentSecondaryVariant);
         // Initializes the divider line paint.
         final Resources resources = getContext().getResources();
         mDividerWidth = resources.getDimensionPixelSize(R.dimen.chartview_divider_width);
@@ -494,7 +526,9 @@
                     ? mTrapezoidColor
                     : mSelectedIndex == index || mSelectedIndex == SELECTED_INDEX_ALL
                         ? mTrapezoidSolidColor : mTrapezoidColor;
-            mTrapezoidPaint.setColor(trapezoidColor);
+            final boolean isHoverState =
+                mIsSlotsClickabled && mHoveredIndex == index && isValidToDraw(mHoveredIndex);
+            mTrapezoidPaint.setColor(isHoverState ? mTrapezoidHoverColor : trapezoidColor);
 
             final float leftTop = round(trapezoidBottom - mLevels[index] * unitHeight);
             final float rightTop = round(trapezoidBottom - mLevels[index + 1] * unitHeight);
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/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 21d2023..9306a34 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -16,14 +16,19 @@
 
 package com.android.settings.fuelgauge;
 
+import android.annotation.IntDef;
 import android.app.AppOpsManager;
 import android.content.Context;
+import android.os.AsyncTask;
 import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
 
 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 +37,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,45 +69,49 @@
         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) {
-        try {
-            setAppUsageStateInternal(state);
-        } catch (Exception e) {
-            Log.e(TAG, "setAppUsageState() is failed for " + mPackageName, e);
-        }
+    /** Gets the {@link OptimizationMode} for associated app. */
+    @OptimizationMode
+    public int getAppOptimizationMode() {
+        refreshState();
+        return getAppOptimizationMode(mMode, mAllowListed);
     }
 
-    private void setAppUsageStateInternal(AppUsageState state) {
-        switch (state) {
-            case RESTRICTED:
-                mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_IGNORED);
-                mPowerAllowListBackend.removeApp(mPackageName);
-                break;
-            case UNRESTRICTED:
-                mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
-                mPowerAllowListBackend.addApp(mPackageName);
-                break;
-            case OPTIMIZED:
-                mBatteryUtils.setForceAppStandby(mUid, mPackageName, AppOpsManager.MODE_ALLOWED);
-                mPowerAllowListBackend.removeApp(mPackageName);
-                break;
-            default:
-                Log.d(TAG, "set unknown app usage state.");
+    /** Sets the {@link OptimizationMode} for associated app. */
+    public void setAppUsageState(@OptimizationMode int mode) {
+        if (getAppOptimizationMode(mMode, mAllowListed) == mode) {
+            Log.w(TAG, "set the same optimization mode for: " + mPackageName);
+            return;
         }
+
+        AsyncTask.execute(() -> {
+            switch (mode) {
+                case MODE_RESTRICTED:
+                    setAppOptimizationMode(AppOpsManager.MODE_IGNORED, /* allowListed */ false);
+                    break;
+                case MODE_UNRESTRICTED:
+                    setAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ true);
+                    break;
+                case MODE_OPTIMIZED:
+                    setAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
+                    break;
+                default:
+                    Log.d(TAG, "set unknown app optimization mode.");
+            }
+        });
     }
 
     /**
@@ -121,6 +135,19 @@
         return mPackageName == null ? UNKNOWN_PACKAGE : mPackageName;
     }
 
+    private void setAppOptimizationMode(int appStandbyMode, boolean allowListed) {
+        try {
+            mBatteryUtils.setForceAppStandby(mUid, mPackageName, appStandbyMode);
+            if (allowListed) {
+                mPowerAllowListBackend.addApp(mPackageName);
+            } else {
+                mPowerAllowListBackend.removeApp(mPackageName);
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "set OPTIMIZED failed for " + mPackageName, e);
+        }
+    }
+
     private void refreshState() {
         mPowerAllowListBackend.refreshList();
         mAllowListed = mPowerAllowListBackend.isAllowlisted(mPackageName);
diff --git a/src/com/android/settings/fuelgauge/BatterySaverController.java b/src/com/android/settings/fuelgauge/BatterySaverController.java
index 8fec9b4..c712ab0 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverController.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverController.java
@@ -15,7 +15,6 @@
  */
 package com.android.settings.fuelgauge;
 
-import android.app.settings.SettingsEnums;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.database.ContentObserver;
@@ -24,7 +23,6 @@
 import android.os.PowerManager;
 import android.provider.Settings;
 import android.provider.Settings.Global;
-import android.util.Pair;
 
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
@@ -32,8 +30,6 @@
 import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
@@ -48,7 +44,6 @@
     private final BatterySaverReceiver mBatteryStateChangeReceiver;
     private final PowerManager mPowerManager;
     private Preference mBatterySaverPref;
-    private final MetricsFeatureProvider mMetricsFeatureProvider;
     private final ContentObserver mObserver = new ContentObserver(
             new Handler(Looper.getMainLooper())) {
         @Override
@@ -61,7 +56,6 @@
         super(context, KEY_BATTERY_SAVER);
 
         mPowerManager = mContext.getSystemService(PowerManager.class);
-        mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
         mBatteryStateChangeReceiver = new BatterySaverReceiver(context);
         mBatteryStateChangeReceiver.setBatterySaverListener(this);
         BatterySaverUtils.revertScheduleToNoneIfNeeded(context);
@@ -69,7 +63,7 @@
 
     @Override
     public int getAvailabilityStatus() {
-        return AVAILABLE_UNSEARCHABLE;
+        return AVAILABLE;
     }
 
     @Override
@@ -127,43 +121,9 @@
         }
     }
 
-    private void logPowerSaver() {
-        if (!mPowerManager.isPowerSaveMode()) {
-            // Power saver is off, so don't do anything.
-            return;
-        }
-
-        final ContentResolver resolver = mContext.getContentResolver();
-        final int mode = Global.getInt(resolver, Global.AUTOMATIC_POWER_SAVE_MODE,
-                PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
-        int fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE;
-        switch (mode) {
-            case PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE:
-                fuelgaugeScheduleType =
-                        SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE;
-                final int powerLevelTriggerPercentage = Global.getInt(resolver,
-                        Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
-                mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
-                        Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
-                                fuelgaugeScheduleType),
-                        Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
-                                powerLevelTriggerPercentage));
-                break;
-            case PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC:
-                fuelgaugeScheduleType = SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE;
-                break;
-            default:
-                // empty
-        }
-        mMetricsFeatureProvider.action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
-                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
-                        fuelgaugeScheduleType));
-    }
-
     @Override
     public void onPowerSaveModeChanged() {
         updateSummary();
-        logPowerSaver();
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 1c458e1..b05e64a 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -373,7 +373,7 @@
             batteryUsageStats = systemService.getBatteryUsageStats(
                     new BatteryUsageStatsQuery.Builder().includeBatteryHistory().build());
         } catch (RuntimeException e) {
-            Log.e(TAG, "getBatteryInfo() error for getBatteryUsageStats()", e);
+            Log.e(TAG, "getBatteryInfo() error from getBatteryUsageStats()", e);
             // Use default BatteryUsageStats.
             batteryUsageStats =
                     new BatteryUsageStats.Builder(new String[0], /* includePowerModels */ false)
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/ExpandDividerPreference.java b/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
index b89f2d4..4517177 100644
--- a/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
+++ b/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
@@ -65,8 +65,7 @@
 
     @Override
     public void onClick() {
-        mIsExpanded = !mIsExpanded;
-        refreshState();
+        setIsExpanded(!mIsExpanded);
         if (mOnExpandListener != null) {
             mOnExpandListener.onExpand(mIsExpanded);
         }
@@ -74,10 +73,7 @@
 
     void setTitle(final String titleContent) {
         mTitleContent = titleContent;
-        if (mTextView != null) {
-            mTextView.postDelayed(
-                () -> mTextView.setText(titleContent), 50);
-        }
+        refreshState();
     }
 
     void setIsExpanded(boolean isExpanded) {
@@ -90,13 +86,13 @@
     }
 
     private void refreshState() {
-        final int iconId =
-            mIsExpanded
-                ? R.drawable.ic_settings_expand_less
-                : R.drawable.ic_settings_expand_more;
         if (mImageView != null) {
-            mImageView.setImageResource(iconId);
+            mImageView.setImageResource(mIsExpanded
+                    ? R.drawable.ic_settings_expand_less
+                    : R.drawable.ic_settings_expand_more);
         }
-        setTitle(mTitleContent);
+        if (mTextView != null) {
+            mTextView.setText(mTitleContent);
+        }
     }
 }
diff --git a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
index b2da356..4b1862a 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,8 @@
             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.getAppOptimizationMode()
+                == BatteryOptimizeUtils.MODE_OPTIMIZED) {
             Log.d(TAG, "is optimized states");
             ((RadioButtonPreference) preference).setChecked(true);
         } else {
@@ -74,12 +73,6 @@
 
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
-        if (!KEY_OPTIMIZED_PREF.equals(preference.getKey())) {
-            return false;
-        }
-
-        mBatteryOptimizeUtils.setAppUsageState(OPTIMIZED);
-        Log.d(TAG, "Set optimized");
-        return true;
+        return getPreferenceKey().equals(preference.getKey());
     }
 }
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..b6d7efe 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
@@ -139,6 +140,11 @@
     boolean isChartGraphSlotsEnabled(Context context);
 
     /**
+     * Checks whether adaptive charging feature is supported in this device
+     */
+    boolean isAdaptiveChargingSupported();
+
+    /**
      * Gets a intent for one time bypass charge limited to resume charging.
      */
     Intent getResumeChargeIntent();
@@ -149,7 +155,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..3f47af4 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 {
 
@@ -166,6 +167,11 @@
     }
 
     @Override
+    public boolean isAdaptiveChargingSupported() {
+        return false;
+    }
+
+    @Override
     public Intent getResumeChargeIntent() {
         return null;
     }
@@ -176,7 +182,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/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..5da439d 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,8 @@
             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.getAppOptimizationMode()
+                == BatteryOptimizeUtils.MODE_RESTRICTED) {
             Log.d(TAG, "is restricted states");
             ((RadioButtonPreference) preference).setChecked(true);
         } else {
@@ -77,12 +76,6 @@
 
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
-        if (!KEY_RESTRICTED_PREF.equals(preference.getKey())) {
-            return false;
-        }
-
-        mBatteryOptimizeUtils.setAppUsageState(RESTRICTED);
-        Log.d(TAG, "Set restricted");
-        return true;
+        return getPreferenceKey().equals(preference.getKey());
     }
 }
diff --git a/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java
index 27b70cb..26c0ab9 100644
--- a/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/SmartBatteryPreferenceController.java
@@ -24,6 +24,7 @@
 import androidx.preference.Preference;
 import androidx.preference.SwitchPreference;
 
+import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 
@@ -62,6 +63,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_battery;
+    }
+
+    @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
         final boolean smartBatteryOn = Settings.Global.getInt(mContext.getContentResolver(),
diff --git a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
index 2eb7cf4..cbfbd34 100644
--- a/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceController.java
@@ -18,7 +18,6 @@
 
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.Intent;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.Preference;
@@ -30,24 +29,20 @@
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
 import com.android.settingslib.core.lifecycle.events.OnStop;
-
-import java.util.HashMap;
+import com.android.settingslib.utils.ThreadUtils;
 
 public class TopLevelBatteryPreferenceController extends BasePreferenceController implements
         LifecycleObserver, OnStart, OnStop, BatteryPreferenceController {
 
     @VisibleForTesting
     protected boolean mIsBatteryPresent = true;
+    @VisibleForTesting
+    Preference mPreference;
     private final BatteryBroadcastReceiver mBatteryBroadcastReceiver;
-    private Preference mPreference;
     private BatteryInfo mBatteryInfo;
-    private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
     private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
     private String mBatteryStatusLabel;
 
-    @VisibleForTesting
-    protected static HashMap<String, ComponentName> sReplacingActivityMap = new HashMap<>();
-
     public TopLevelBatteryPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(mContext);
@@ -61,8 +56,6 @@
             }, true /* shortString */);
         });
 
-        mBatterySettingsFeatureProvider = FeatureFactory.getFactory(context)
-                .getBatterySettingsFeatureProvider(context);
         mBatteryStatusFeatureProvider = FeatureFactory.getFactory(context)
                 .getBatteryStatusFeatureProvider(context);
     }
@@ -80,37 +73,6 @@
     }
 
     @Override
-    public boolean handlePreferenceTreeClick(Preference preference) {
-        String prefFrag = preference.getFragment();
-        if (prefFrag == null || prefFrag.isEmpty()) {
-            // Not a redirect, so use the default.
-            return super.handlePreferenceTreeClick(preference);
-        }
-
-        ComponentName currentFragmentName = convertClassPathToComponentName(prefFrag);
-        if (currentFragmentName == null) {
-            return super.handlePreferenceTreeClick(preference);
-        }
-
-        ComponentName replacingActivity;
-        if (sReplacingActivityMap.containsKey(prefFrag)) {
-            replacingActivity = sReplacingActivityMap.get(prefFrag);
-        } else {
-            replacingActivity = mBatterySettingsFeatureProvider.getReplacingActivity(
-                    currentFragmentName);
-            sReplacingActivityMap.put(prefFrag, replacingActivity);
-        }
-
-        if (replacingActivity == null || currentFragmentName.compareTo(replacingActivity) == 0) {
-            return super.handlePreferenceTreeClick(preference);
-        }
-        Intent intent = new Intent();
-        intent.setComponent(currentFragmentName);
-        mContext.startActivity(intent);
-        return true;
-    }
-
-    @Override
     public void onStart() {
         mBatteryBroadcastReceiver.register();
     }
@@ -140,14 +102,26 @@
         }
 
         if (batteryStatusUpdate) {
-            if (!mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info)) {
-                mBatteryStatusLabel = null; // will generateLabel()
-            }
+            setSummaryAsync(info);
         }
 
         return (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel;
     }
 
+    private void setSummaryAsync(BatteryInfo info) {
+        ThreadUtils.postOnBackgroundThread(() -> {
+            final boolean triggerBatteryStatusUpdate =
+                    mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(this, info);
+            ThreadUtils.postOnMainThread(() -> {
+                if (!triggerBatteryStatusUpdate) {
+                    mBatteryStatusLabel = null; // will generateLabel()
+                }
+                mPreference.setSummary(
+                        (mBatteryStatusLabel == null) ? generateLabel(info) : mBatteryStatusLabel);
+            });
+        });
+    }
+
     private CharSequence generateLabel(BatteryInfo info) {
         if (!info.discharging && info.chargeLabel != null) {
             return info.chargeLabel;
diff --git a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
index 36141c5..40b2f8d 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,8 @@
         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.getAppOptimizationMode()
+                == BatteryOptimizeUtils.MODE_UNRESTRICTED) {
             Log.d(TAG, "is unrestricted states");
             ((RadioButtonPreference) preference).setChecked(true);
         } else {
@@ -75,12 +74,6 @@
 
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
-        if (!KEY_UNRESTRICTED_PREF.equals(preference.getKey())) {
-            return false;
-        }
-
-        mBatteryOptimizeUtils.setAppUsageState(UNRESTRICTED);
-        Log.d(TAG, "Set unrestricted");
-        return true;
+        return getPreferenceKey().equals(preference.getKey());
     }
 }
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
index 59a592c..2979151 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverButtonPreferenceController.java
@@ -19,6 +19,8 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
 import android.os.PowerManager;
 import android.provider.SettingsSlicesContract;
 import android.widget.Switch;
@@ -42,10 +44,12 @@
 public class BatterySaverButtonPreferenceController extends
         TogglePreferenceController implements OnMainSwitchChangeListener, LifecycleObserver,
         OnStart, OnStop, BatterySaverReceiver.BatterySaverListener {
+    private static final long SWITCH_ANIMATION_DURATION = 350L;
 
     private final BatterySaverReceiver mBatterySaverReceiver;
     private final PowerManager mPowerManager;
 
+    private Handler mHandler;
     private MainSwitchPreference mPreference;
 
     public BatterySaverButtonPreferenceController(Context context, String key) {
@@ -53,6 +57,7 @@
         mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
         mBatterySaverReceiver = new BatterySaverReceiver(context);
         mBatterySaverReceiver.setBatterySaverListener(this);
+        mHandler = new Handler(Looper.getMainLooper());
     }
 
     @Override
@@ -83,6 +88,7 @@
     @Override
     public void onStop() {
         mBatterySaverReceiver.setListening(false);
+        mHandler.removeCallbacksAndMessages(null /* token */);
     }
 
     @Override
@@ -113,7 +119,17 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_battery;
+    }
+
+    @Override
     public void onPowerSaveModeChanged() {
+        mHandler.postDelayed(() -> onPowerSaveModeChangedInternal(),
+                SWITCH_ANIMATION_DURATION);
+    }
+
+    private void onPowerSaveModeChangedInternal() {
         final boolean isChecked = isChecked();
         if (mPreference != null && mPreference.isChecked() != isChecked) {
             mPreference.setChecked(isChecked);
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
index 507c369..05a1e8f 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
@@ -16,12 +16,14 @@
 
 package com.android.settings.fuelgauge.batterysaver;
 
+import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.database.ContentObserver;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Handler;
 import android.provider.Settings;
@@ -34,6 +36,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.widget.RadioButtonPickerFragment;
 import com.android.settingslib.fuelgauge.BatterySaverUtils;
 import com.android.settingslib.widget.CandidateInfo;
@@ -58,6 +61,8 @@
     public BatterySaverScheduleRadioButtonsController mRadioButtonController;
     @VisibleForTesting
     Context mContext;
+    private int mSaverPercentage;
+    private String mSaverScheduleKey;
     private BatterySaverScheduleSeekBarController mSeekBarController;
 
     @VisibleForTesting
@@ -90,6 +95,8 @@
                 Settings.Secure.getUriFor(Settings.Secure.LOW_POWER_WARNING_ACKNOWLEDGED),
                 false,
                 mSettingsObserver);
+        mSaverScheduleKey = mRadioButtonController.getDefaultKey();
+        mSaverPercentage = getSaverPercentage();
     }
 
     @Override
@@ -107,6 +114,7 @@
     @Override
     public void onPause() {
         mContext.getContentResolver().unregisterContentObserver(mSettingsObserver);
+        AsyncTask.execute(() -> logPowerSaver());
         super.onPause();
     }
 
@@ -174,6 +182,26 @@
         return 0;
     }
 
+    private void logPowerSaver() {
+        final int currentSaverPercentage = getSaverPercentage();
+        final String currentSaverScheduleKey = mRadioButtonController.getDefaultKey();
+        if (mSaverScheduleKey.equals(currentSaverScheduleKey)
+                && mSaverPercentage == currentSaverPercentage) {
+            return;
+        }
+        FeatureFactory.getFactory(mContext).getMetricsFeatureProvider()
+                .action(SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                        SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                        SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
+                        currentSaverScheduleKey,
+                        currentSaverPercentage);
+    }
+
+    private int getSaverPercentage() {
+        return Settings.Global.getInt(mContext.getContentResolver(),
+                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1);
+    }
+
     static class BatterySaverScheduleCandidateInfo extends CandidateInfo {
 
         private final CharSequence mLabel;
@@ -207,4 +235,4 @@
             return mSummary;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java
index 6754245..ce2cbb0 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverStickyPreferenceController.java
@@ -8,6 +8,7 @@
 
 import androidx.preference.Preference;
 import androidx.preference.SwitchPreference;
+
 import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.TogglePreferenceController;
@@ -59,4 +60,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_battery;
+    }
 }
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
index 790264c..d920a8e 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryManagerPreferenceController.java
@@ -64,7 +64,10 @@
             preference.setSummary(mContext.getResources().getQuantityString(
                     R.plurals.battery_manager_app_restricted, num, num));
         } else {
-            preference.setSummary(R.string.battery_manager_summary);
+            preference.setSummary(
+                    mPowerUsageFeatureProvider.isAdaptiveChargingSupported()
+                            ? R.string.battery_manager_summary
+                            : R.string.battery_manager_summary_unsupported);
         }
     }
 }
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
index 7d11ba5..4b98587 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
@@ -73,10 +73,6 @@
                 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/fuelgauge/batterytip/detectors/HighUsageDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java
index 4b3f2df..8126dcc 100644
--- a/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java
+++ b/src/com/android/settings/fuelgauge/batterytip/detectors/HighUsageDetector.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.os.BatteryUsageStats;
 import android.os.UidBatteryConsumer;
+import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
 
@@ -41,6 +42,8 @@
  * {@link BatteryTipDetector} since it need the most up-to-date {@code visibleTips}
  */
 public class HighUsageDetector implements BatteryTipDetector {
+    private static final String TAG = "HighUsageDetector";
+
     private BatteryTipPolicy mPolicy;
     private BatteryUsageStats mBatteryUsageStats;
     private final BatteryInfo mBatteryInfo;
@@ -113,6 +116,10 @@
 
     @VisibleForTesting
     void parseBatteryData() {
-        mBatteryInfo.parseBatteryHistory(mDataParser);
+        try {
+            mBatteryInfo.parseBatteryHistory(mDataParser);
+        } catch (IllegalStateException e) {
+            Log.e(TAG, "parseBatteryData() failed", e);
+        }
     }
 }
diff --git a/src/com/android/settings/gestures/GestureNavigationSettingsAssistController.java b/src/com/android/settings/gestures/GestureNavigationSettingsAssistController.java
index 95fd9f1..159f479 100644
--- a/src/com/android/settings/gestures/GestureNavigationSettingsAssistController.java
+++ b/src/com/android/settings/gestures/GestureNavigationSettingsAssistController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.provider.Settings;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -50,4 +51,9 @@
         return SystemNavigationPreferenceController.isGestureAvailable(mContext) ? AVAILABLE
                 : UNSUPPORTED_ON_DEVICE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
diff --git a/src/com/android/settings/gestures/GesturePreferenceController.java b/src/com/android/settings/gestures/GesturePreferenceController.java
index c771abd..71c3c9a 100644
--- a/src/com/android/settings/gestures/GesturePreferenceController.java
+++ b/src/com/android/settings/gestures/GesturePreferenceController.java
@@ -78,6 +78,11 @@
         }
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
+
     protected abstract String getVideoPrefKey();
 
     protected boolean canHandleClicks() {
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index 76964e5..d82cb10 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -25,10 +25,13 @@
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.search.SearchIndexable;
 
+import java.util.List;
+
 @SearchIndexable
 public class GestureSettings extends DashboardFragment {
 
     private static final String TAG = "GestureSettings";
+    private static final String PREF_KEY_PREVENT_RINGING = "gesture_prevent_ringing_summary";
 
     private AmbientDisplayConfiguration mAmbientDisplayConfig;
 
@@ -63,5 +66,13 @@
     }
 
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider(R.xml.gestures);
+            new BaseSearchIndexProvider(R.xml.gestures) {
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    final List<String> keys = super.getNonIndexableKeys(context);
+                    // de-duplicated due to another same entry in Sound page
+                    keys.add(PREF_KEY_PREVENT_RINGING);
+                    return keys;
+                }
+            };
 }
diff --git a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
index 44494ee..82766db 100644
--- a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
+++ b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
@@ -120,6 +120,11 @@
         return false;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
+
     private void refreshStateDisplay() {
         if (mAssistSwitch != null) {
             mAssistSwitch.setSummary(getSummary());
diff --git a/src/com/android/settings/gestures/OneHandedMainSwitchPreferenceController.java b/src/com/android/settings/gestures/OneHandedMainSwitchPreferenceController.java
index 2b7d7a0..3f84aba 100644
--- a/src/com/android/settings/gestures/OneHandedMainSwitchPreferenceController.java
+++ b/src/com/android/settings/gestures/OneHandedMainSwitchPreferenceController.java
@@ -21,6 +21,7 @@
 
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.widget.SettingsMainSwitchPreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -92,4 +93,9 @@
             mPreference.setChecked(isChecked());
         }
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
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/PreventRingingParentPreferenceController.java b/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
index b3b39fb..5f880f7 100644
--- a/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
+++ b/src/com/android/settings/gestures/PreventRingingParentPreferenceController.java
@@ -138,6 +138,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_sound;
+    }
+
+    @Override
     public void onStart() {
         if (mSettingObserver != null) {
             mSettingObserver.register(mContext.getContentResolver());
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/DeepLinkHomepageActivity.java b/src/com/android/settings/homepage/DeepLinkHomepageActivity.java
new file mode 100644
index 0000000..59cfc3c
--- /dev/null
+++ b/src/com/android/settings/homepage/DeepLinkHomepageActivity.java
@@ -0,0 +1,21 @@
+/*
+ * 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.homepage;
+
+/** Activity for other apps to launch Settings deep link page */
+public class DeepLinkHomepageActivity extends SettingsHomepageActivity {
+}
diff --git a/src/com/android/settings/homepage/HighlightableMenu.java b/src/com/android/settings/homepage/HighlightableMenu.java
new file mode 100644
index 0000000..6a10e66
--- /dev/null
+++ b/src/com/android/settings/homepage/HighlightableMenu.java
@@ -0,0 +1,117 @@
+/*
+ * 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.homepage;
+
+import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_HIGHLIGHTABLE_MENU_KEY;
+import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEY;
+
+import android.annotation.XmlRes;
+import android.content.Context;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import com.android.settings.core.PreferenceXmlParserUtils;
+import com.android.settings.core.PreferenceXmlParserUtils.MetadataFlag;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *  Class for mapping highlightable menu keys and preference keys
+ */
+public class HighlightableMenu {
+    private static final String TAG = "HighlightableMenu";
+
+    /**
+     * Map from highlightable menu key to preference key.
+     */
+    private static final Map<String, String> MENU_TO_PREFERENCE_KEY_MAP;
+
+    /**
+     * Map from old menu key to current key string id.
+     */
+    private static final Map<String, Integer> MENU_KEY_COMPAT_MAP;
+
+    private static boolean sXmlParsed;
+
+    static {
+        MENU_TO_PREFERENCE_KEY_MAP = new ArrayMap<>();
+        MENU_KEY_COMPAT_MAP = new ArrayMap<>();
+
+        // Manual mapping for platform compatibility, e.g.
+        //  MENU_KEY_COMPAT_MAP.put("top_level_apps_and_notifs", R.string.menu_key_apps);
+    }
+
+    /** Parses the highlightable menu keys from xml */
+    public static synchronized void fromXml(Context context, @XmlRes int xmlResId) {
+        if (sXmlParsed) {
+            return;
+        }
+
+        Log.d(TAG, "parsing highlightable menu from xml");
+        final List<Bundle> preferenceMetadata;
+        try {
+            preferenceMetadata = PreferenceXmlParserUtils.extractMetadata(context, xmlResId,
+                    MetadataFlag.FLAG_NEED_KEY | MetadataFlag.FLAG_NEED_HIGHLIGHTABLE_MENU_KEY);
+        } catch (IOException | XmlPullParserException e) {
+            Log.e(TAG, "Failed to parse preference xml for getting highlightable menu keys", e);
+            return;
+        }
+
+        for (Bundle metadata : preferenceMetadata) {
+            final String menuKey = metadata.getString(METADATA_HIGHLIGHTABLE_MENU_KEY);
+            if (TextUtils.isEmpty(menuKey)) {
+                continue;
+            }
+            final String prefKey = metadata.getString(METADATA_KEY);
+            if (TextUtils.isEmpty(prefKey)) {
+                Log.w(TAG, "Highlightable menu requires android:key but it's missing in xml: "
+                        + menuKey);
+                continue;
+            }
+            MENU_TO_PREFERENCE_KEY_MAP.put(menuKey, prefKey);
+        }
+
+        if (MENU_TO_PREFERENCE_KEY_MAP.isEmpty()) {
+            return;
+        }
+
+        sXmlParsed = true;
+        MENU_KEY_COMPAT_MAP.forEach((compatMenuKey, keyId) -> {
+            final String prefKey = lookupPreferenceKey(context.getString(keyId));
+            if (prefKey != null) {
+                MENU_TO_PREFERENCE_KEY_MAP.put(compatMenuKey, prefKey);
+            }
+        });
+    }
+
+    /** Manually adds a preference as the menu key for Injection */
+    public static synchronized void addMenuKey(String key) {
+        Log.d(TAG, "add menu key: " + key);
+        MENU_TO_PREFERENCE_KEY_MAP.put(key, key);
+    }
+
+    /** Looks up the preference key by a specified menu key */
+    public static String lookupPreferenceKey(String menuKey) {
+        return MENU_TO_PREFERENCE_KEY_MAP.get(menuKey);
+    }
+}
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 1d7b5dc..183a2fb 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -16,13 +16,24 @@
 
 package com.android.settings.homepage;
 
+import static android.provider.Settings.ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY;
+import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY;
+import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI;
+
 import android.animation.LayoutTransition;
 import android.app.ActivityManager;
 import android.app.settings.SettingsEnums;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.res.Configuration;
 import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.ArraySet;
 import android.util.FeatureFlagUtils;
 import android.util.Log;
 import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.Toolbar;
@@ -31,30 +42,77 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
+import androidx.window.embedding.SplitRule;
 
 import com.android.settings.R;
+import com.android.settings.Settings;
+import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsApplication;
 import com.android.settings.accounts.AvatarViewMixin;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
 import com.android.settings.core.CategoryMixin;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.homepage.contextualcards.ContextualCardsFragment;
 import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.Utils;
 import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
 
+import java.net.URISyntaxException;
+import java.util.Set;
+
 /** Settings homepage activity */
 public class SettingsHomepageActivity extends FragmentActivity implements
         CategoryMixin.CategoryHandler {
 
     private static final String TAG = "SettingsHomepageActivity";
 
+    // Additional extra of Settings#ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK.
+    // 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";
+
+    // Additional extra of Settings#ACTION_SETTINGS_LARGE_SCREEN_DEEP_LINK.
+    // Set & get Uri of the Intent separately to prevent failure of Intent#ParseUri.
+    public static final String EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_DATA =
+            "settings_large_screen_deep_link_intent_data";
+
+    static final int DEFAULT_HIGHLIGHT_MENU_KEY = R.string.menu_key_network;
     private static final long HOMEPAGE_LOADING_TIMEOUT_MS = 300;
 
+    private TopLevelSettings mMainFragment;
     private View mHomepageView;
     private View mSuggestionView;
+    private View mTwoPaneSuggestionView;
     private CategoryMixin mCategoryMixin;
+    private Set<HomepageLoadedListener> mLoadedListeners;
+    private boolean mIsEmbeddingActivityEnabled;
+    private boolean mIsTwoPaneLastTime;
 
-    @Override
-    public CategoryMixin getCategoryMixin() {
-        return mCategoryMixin;
+    /** A listener receiving homepage loaded events. */
+    public interface HomepageLoadedListener {
+        /** Called when the homepage is loaded. */
+        void onHomepageLoaded();
+    }
+
+    private interface FragmentBuilder<T extends Fragment>  {
+        T build();
+    }
+
+    /**
+     * Try to add a {@link HomepageLoadedListener}. If homepage is already loaded, the listener
+     * will not be notified.
+     *
+     * @return Whether the listener is added.
+     */
+    public boolean addHomepageLoadedListener(HomepageLoadedListener listener) {
+        if (mHomepageView == null) {
+            return false;
+        } else {
+            if (!mLoadedListeners.contains(listener)) {
+                mLoadedListeners.add(listener);
+            }
+            return true;
+        }
     }
 
     /**
@@ -66,79 +124,285 @@
             return;
         }
         Log.i(TAG, "showHomepageWithSuggestion: " + showSuggestion);
+        final View homepageView = mHomepageView;
         mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
-        mHomepageView.setVisibility(View.VISIBLE);
+        mTwoPaneSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
         mHomepageView = null;
+
+        mLoadedListeners.forEach(listener -> listener.onHomepageLoaded());
+        mLoadedListeners.clear();
+        homepageView.setVisibility(View.VISIBLE);
+    }
+
+    /** Returns the main content fragment */
+    public TopLevelSettings getMainFragment() {
+        return mMainFragment;
+    }
+
+    @Override
+    public CategoryMixin getCategoryMixin() {
+        return mCategoryMixin;
     }
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.settings_homepage_container);
+        mIsEmbeddingActivityEnabled = ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this);
+        mIsTwoPaneLastTime = ActivityEmbeddingUtils.isTwoPaneResolution(this);
 
         final View appBar = findViewById(R.id.app_bar_container);
         appBar.setMinimumHeight(getSearchBoxHeight());
         initHomepageContainer();
+        updateHomepageAppBar();
+        updateHomepageBackground();
+        mLoadedListeners = new ArraySet<>();
 
-        final Toolbar toolbar = findViewById(R.id.search_action_bar);
-        FeatureFactory.getFactory(this).getSearchFeatureProvider()
-                .initSearchToolbar(this /* activity */, toolbar, SettingsEnums.SETTINGS_HOMEPAGE);
+        initSearchBarView();
 
         getLifecycle().addObserver(new HideNonSystemOverlayMixin(this));
         mCategoryMixin = new CategoryMixin(this);
         getLifecycle().addObserver(mCategoryMixin);
 
+        final String highlightMenuKey = getHighlightMenuKey();
+        // Only allow features on high ram devices.
         if (!getSystemService(ActivityManager.class).isLowRamDevice()) {
-            // Only allow features on high ram devices.
-            final ImageView avatarView = findViewById(R.id.account_avatar);
-            if (AvatarViewMixin.isAvatarSupported(this)) {
-                avatarView.setVisibility(View.VISIBLE);
-                getLifecycle().addObserver(new AvatarViewMixin(this, avatarView));
-            }
-
-            showSuggestionFragment();
-
+            initAvatarView();
+            final boolean scrollNeeded = mIsEmbeddingActivityEnabled
+                    && !TextUtils.equals(getString(DEFAULT_HIGHLIGHT_MENU_KEY), highlightMenuKey);
+            showSuggestionFragment(scrollNeeded);
             if (FeatureFlagUtils.isEnabled(this, FeatureFlags.CONTEXTUAL_HOME)) {
-                showFragment(new ContextualCardsFragment(), R.id.contextual_cards_content);
+                showFragment(() -> new ContextualCardsFragment(), R.id.contextual_cards_content);
             }
         }
-        showFragment(new TopLevelSettings(), R.id.main_content);
+        mMainFragment = showFragment(() -> {
+            final TopLevelSettings fragment = new TopLevelSettings();
+            fragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
+                    highlightMenuKey);
+            return fragment;
+        }, 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();
     }
 
-    private void showSuggestionFragment() {
-        final Class<? extends Fragment> fragment = FeatureFactory.getFactory(this)
+    @Override
+    protected void onStart() {
+        ((SettingsApplication) getApplication()).setHomeActivity(this);
+        super.onStart();
+    }
+
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+
+        // When it's large screen 2-pane and Settings app is in the background, receiving an Intent
+        // will not recreate this activity. Update the intent for this case.
+        setIntent(intent);
+        reloadHighlightMenuKey();
+        if (isFinishing()) {
+            return;
+        }
+        // Launch the intent from deep link for large screen devices.
+        launchDeepLinkIntentToRight();
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        final boolean isTwoPane = ActivityEmbeddingUtils.isTwoPaneResolution(this);
+        if (mIsTwoPaneLastTime != isTwoPane) {
+            mIsTwoPaneLastTime = isTwoPane;
+            updateHomepageAppBar();
+            updateHomepageBackground();
+        }
+    }
+
+    private void initSearchBarView() {
+        final Toolbar toolbar = findViewById(R.id.search_action_bar);
+        FeatureFactory.getFactory(this).getSearchFeatureProvider()
+                .initSearchToolbar(this /* activity */, toolbar, SettingsEnums.SETTINGS_HOMEPAGE);
+
+        if (mIsEmbeddingActivityEnabled) {
+            final Toolbar toolbarTwoPaneVersion = findViewById(R.id.search_action_bar_two_pane);
+            FeatureFactory.getFactory(this).getSearchFeatureProvider()
+                    .initSearchToolbar(this /* activity */, toolbarTwoPaneVersion,
+                            SettingsEnums.SETTINGS_HOMEPAGE);
+        }
+    }
+
+    private void initAvatarView() {
+        final ImageView avatarView = findViewById(R.id.account_avatar);
+        final ImageView avatarTwoPaneView = findViewById(R.id.account_avatar_two_pane_version);
+        if (AvatarViewMixin.isAvatarSupported(this)) {
+            avatarView.setVisibility(View.VISIBLE);
+            getLifecycle().addObserver(new AvatarViewMixin(this, avatarView));
+
+            if (mIsEmbeddingActivityEnabled) {
+                avatarTwoPaneView.setVisibility(View.VISIBLE);
+                getLifecycle().addObserver(new AvatarViewMixin(this, avatarTwoPaneView));
+            }
+        }
+    }
+
+    private void updateHomepageBackground() {
+        if (!mIsEmbeddingActivityEnabled) {
+            return;
+        }
+
+        final Window window = getWindow();
+        final int color = ActivityEmbeddingUtils.isTwoPaneResolution(this)
+                ? Utils.getColorAttrDefaultColor(this, com.android.internal.R.attr.colorSurface)
+                : Utils.getColorAttrDefaultColor(this, android.R.attr.colorBackground);
+
+        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+        // Update status bar color
+        window.setStatusBarColor(color);
+        // Update content background.
+        findViewById(R.id.settings_homepage_container).setBackgroundColor(color);
+    }
+
+    private void showSuggestionFragment(boolean scrollNeeded) {
+        final Class<? extends Fragment> fragmentClass = FeatureFactory.getFactory(this)
                 .getSuggestionFeatureProvider(this).getContextualSuggestionFragment();
-        if (fragment == null) {
+        if (fragmentClass == null) {
             return;
         }
 
         mSuggestionView = findViewById(R.id.suggestion_content);
+        mTwoPaneSuggestionView = findViewById(R.id.two_pane_suggestion_content);
         mHomepageView = findViewById(R.id.settings_homepage_container);
-        // Hide the homepage for preparing the suggestion.
-        mHomepageView.setVisibility(View.GONE);
+        // Hide the homepage for preparing the suggestion. If scrolling is needed, the list views
+        // should be initialized in the invisible homepage view to prevent a scroll flicker.
+        mHomepageView.setVisibility(scrollNeeded ? View.INVISIBLE : View.GONE);
         // Schedule a timer to show the homepage and hide the suggestion on timeout.
         mHomepageView.postDelayed(() -> showHomepageWithSuggestion(false),
                 HOMEPAGE_LOADING_TIMEOUT_MS);
-        try {
-            showFragment(fragment.getConstructor().newInstance(), R.id.suggestion_content);
-        } catch (Exception e) {
-            Log.w(TAG, "Cannot show fragment", e);
+        final FragmentBuilder<?> fragmentBuilder = () -> {
+            try {
+                return fragmentClass.getConstructor().newInstance();
+            } catch (Exception e) {
+                Log.w(TAG, "Cannot show fragment", e);
+            }
+            return null;
+        };
+        showFragment(fragmentBuilder, R.id.suggestion_content);
+        if (mIsEmbeddingActivityEnabled) {
+            showFragment(fragmentBuilder, R.id.two_pane_suggestion_content);
         }
     }
 
-    private void showFragment(Fragment fragment, int id) {
+    private <T extends Fragment> T showFragment(FragmentBuilder<T> fragmentBuilder, int id) {
         final FragmentManager fragmentManager = getSupportFragmentManager();
         final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
-        final Fragment showFragment = fragmentManager.findFragmentById(id);
+        T showFragment = (T) fragmentManager.findFragmentById(id);
 
         if (showFragment == null) {
-            fragmentTransaction.add(id, fragment);
+            showFragment = fragmentBuilder.build();
+            fragmentTransaction.add(id, showFragment);
         } else {
             fragmentTransaction.show(showFragment);
         }
         fragmentTransaction.commit();
+        return showFragment;
+    }
+
+    private void launchDeepLinkIntentToRight() {
+        if (!mIsEmbeddingActivityEnabled) {
+            return;
+        }
+
+        final Intent intent = getIntent();
+        if (intent == null || !TextUtils.equals(intent.getAction(),
+                ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)) {
+            return;
+        }
+
+        if (!(this instanceof DeepLinkHomepageActivity
+                || this instanceof SliceDeepLinkHomepageActivity)) {
+            Log.e(TAG, "Not a deep link component");
+            finish();
+            return;
+        }
+
+        final String intentUriString = intent.getStringExtra(
+                EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI);
+        if (TextUtils.isEmpty(intentUriString)) {
+            Log.e(TAG, "No EXTRA_SETTINGS_EMBEDDED_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;
+        }
+        targetIntent.setComponent(targetComponentName);
+
+        // 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);
+        targetIntent.putExtra(SettingsActivity.EXTRA_IS_FROM_SLICE, false);
+
+        targetIntent.setData(intent.getParcelableExtra(
+                SettingsHomepageActivity.EXTRA_SETTINGS_LARGE_SCREEN_DEEP_LINK_INTENT_DATA));
+
+        // Set 2-pane pair rule for the deep link page.
+        ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
+                new ComponentName(getApplicationContext(), getClass()),
+                targetComponentName,
+                targetIntent.getAction(),
+                SplitRule.FINISH_ALWAYS,
+                SplitRule.FINISH_ALWAYS,
+                true /* clearTop */);
+        ActivityEmbeddingRulesController.registerTwoPanePairRule(this,
+                new ComponentName(getApplicationContext(), Settings.class),
+                targetComponentName,
+                targetIntent.getAction(),
+                SplitRule.FINISH_ALWAYS,
+                SplitRule.FINISH_ALWAYS,
+                true /* clearTop */);
+        startActivity(targetIntent);
+    }
+
+    private String getHighlightMenuKey() {
+        final Intent intent = getIntent();
+        if (intent != null && TextUtils.equals(intent.getAction(),
+                ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)) {
+            final String menuKey = intent.getStringExtra(
+                    EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY);
+            if (!TextUtils.isEmpty(menuKey)) {
+                return menuKey;
+            }
+        }
+        return getString(DEFAULT_HIGHLIGHT_MENU_KEY);
+    }
+
+    private void reloadHighlightMenuKey() {
+        mMainFragment.getArguments().putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY,
+                getHighlightMenuKey());
+        mMainFragment.reloadHighlightMenuKey();
     }
 
     private void initHomepageContainer() {
@@ -148,6 +412,19 @@
         view.requestFocus();
     }
 
+    private void updateHomepageAppBar() {
+        if (!mIsEmbeddingActivityEnabled) {
+            return;
+        }
+        if (ActivityEmbeddingUtils.isTwoPaneResolution(this)) {
+            findViewById(R.id.homepage_app_bar_regular_phone_view).setVisibility(View.GONE);
+            findViewById(R.id.homepage_app_bar_two_pane_view).setVisibility(View.VISIBLE);
+        } else {
+            findViewById(R.id.homepage_app_bar_regular_phone_view).setVisibility(View.VISIBLE);
+            findViewById(R.id.homepage_app_bar_two_pane_view).setVisibility(View.GONE);
+        }
+    }
+
     private int getSearchBoxHeight() {
         final int searchBarHeight = getResources().getDimensionPixelSize(R.dimen.search_bar_height);
         final int searchBarMargin = getResources().getDimensionPixelSize(R.dimen.search_bar_margin);
diff --git a/src/com/android/settings/homepage/SliceDeepLinkHomepageActivity.java b/src/com/android/settings/homepage/SliceDeepLinkHomepageActivity.java
new file mode 100644
index 0000000..2ea8a83
--- /dev/null
+++ b/src/com/android/settings/homepage/SliceDeepLinkHomepageActivity.java
@@ -0,0 +1,21 @@
+/*
+ * 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.homepage;
+
+/** Activity for Slices to launch Settings deep link page */
+public class SliceDeepLinkHomepageActivity extends SettingsHomepageActivity {
+}
diff --git a/src/com/android/settings/homepage/TopLevelHighlightMixin.java b/src/com/android/settings/homepage/TopLevelHighlightMixin.java
new file mode 100644
index 0000000..ebfe7f2
--- /dev/null
+++ b/src/com/android/settings/homepage/TopLevelHighlightMixin.java
@@ -0,0 +1,189 @@
+/*
+ * 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.homepage;
+
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.PreferenceScreen;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.widget.HighlightableTopLevelPreferenceAdapter;
+
+/** A highlight mixin for the top level settings fragment. */
+public class TopLevelHighlightMixin implements Parcelable, DialogInterface.OnShowListener,
+        DialogInterface.OnCancelListener, DialogInterface.OnDismissListener {
+
+    private static final String TAG = "TopLevelHighlightMixin";
+
+    private String mCurrentKey;
+    // Stores the previous key for the profile select dialog cancel event
+    private String mPreviousKey;
+    // Stores the key hidden for the search page presence
+    private String mHiddenKey;
+    private DialogInterface mDialog;
+    private HighlightableTopLevelPreferenceAdapter mTopLevelAdapter;
+
+    public TopLevelHighlightMixin() {
+    }
+
+    public TopLevelHighlightMixin(Parcel source) {
+        mCurrentKey = source.readString();
+        mPreviousKey = source.readString();
+        mHiddenKey = source.readString();
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mCurrentKey);
+        dest.writeString(mPreviousKey);
+        dest.writeString(mHiddenKey);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public static final Creator<TopLevelHighlightMixin> CREATOR = new Creator<>() {
+        @Override
+        public TopLevelHighlightMixin createFromParcel(Parcel source) {
+            return new TopLevelHighlightMixin(source);
+        }
+
+        @Override
+        public TopLevelHighlightMixin[] newArray(int size) {
+            return new TopLevelHighlightMixin[size];
+        }
+    };
+
+    @Override
+    public void onShow(DialogInterface dialog) {
+        mDialog = dialog;
+    }
+
+    @Override
+    public void onDismiss(DialogInterface dialog) {
+        mDialog = null;
+    }
+
+    @Override
+    public void onCancel(DialogInterface dialog) {
+        if (mTopLevelAdapter != null) {
+            mCurrentKey = mPreviousKey;
+            mPreviousKey = null;
+            mTopLevelAdapter.highlightPreference(mCurrentKey, /* scrollNeeded= */ false);
+        }
+    }
+
+    RecyclerView.Adapter onCreateAdapter(TopLevelSettings topLevelSettings,
+            PreferenceScreen preferenceScreen) {
+        if (TextUtils.isEmpty(mCurrentKey)) {
+            mCurrentKey = getHighlightPrefKeyFromArguments(topLevelSettings.getArguments());
+        }
+
+        Log.d(TAG, "onCreateAdapter, pref key: " + mCurrentKey);
+        mTopLevelAdapter = new HighlightableTopLevelPreferenceAdapter(
+                (SettingsHomepageActivity) topLevelSettings.getActivity(), preferenceScreen,
+                topLevelSettings.getListView(), mCurrentKey);
+        return mTopLevelAdapter;
+    }
+
+    void reloadHighlightMenuKey(Bundle arguments) {
+        if (mTopLevelAdapter == null) {
+            return;
+        }
+        ensureDialogDismissed();
+
+        mCurrentKey = getHighlightPrefKeyFromArguments(arguments);
+        Log.d(TAG, "reloadHighlightMenuKey, pref key: " + mCurrentKey);
+        mTopLevelAdapter.highlightPreference(mCurrentKey, /* scrollNeeded= */ true);
+    }
+
+    void setHighlightPreferenceKey(String prefKey) {
+        if (mTopLevelAdapter != null) {
+            ensureDialogDismissed();
+            mPreviousKey = mCurrentKey;
+            mCurrentKey = prefKey;
+            mTopLevelAdapter.highlightPreference(prefKey, /* scrollNeeded= */ false);
+        }
+    }
+
+    void highlightPreferenceIfNeeded(FragmentActivity activity) {
+        if (mTopLevelAdapter != null) {
+            mTopLevelAdapter.requestHighlight();
+        }
+    }
+
+    void setMenuHighlightShowed(boolean show) {
+        if (mTopLevelAdapter == null) {
+            return;
+        }
+        ensureDialogDismissed();
+
+        if (show) {
+            mCurrentKey = mHiddenKey;
+            mHiddenKey = null;
+        } else {
+            if (mHiddenKey == null) {
+                mHiddenKey = mCurrentKey;
+            }
+            mCurrentKey = null;
+        }
+        mTopLevelAdapter.highlightPreference(mCurrentKey, /* scrollNeeded= */ show);
+    }
+
+    void setHighlightMenuKey(String menuKey, boolean scrollNeeded) {
+        if (mTopLevelAdapter == null) {
+            return;
+        }
+        ensureDialogDismissed();
+
+        final String prefKey = HighlightableMenu.lookupPreferenceKey(menuKey);
+        if (TextUtils.isEmpty(prefKey)) {
+            Log.e(TAG, "Invalid highlight menu key: " + menuKey);
+        } else {
+            Log.d(TAG, "Menu key: " + menuKey);
+            mCurrentKey = prefKey;
+            mTopLevelAdapter.highlightPreference(prefKey, scrollNeeded);
+        }
+    }
+
+    private static String getHighlightPrefKeyFromArguments(Bundle arguments) {
+        final String menuKey = arguments.getString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY);
+        final String prefKey = HighlightableMenu.lookupPreferenceKey(menuKey);
+        if (TextUtils.isEmpty(prefKey)) {
+            Log.e(TAG, "Invalid highlight menu key: " + menuKey);
+        } else {
+            Log.d(TAG, "Menu key: " + menuKey);
+        }
+        return prefKey;
+    }
+
+    private void ensureDialogDismissed() {
+        if (mDialog != null) {
+            onCancel(mDialog);
+            mDialog.dismiss();
+        }
+    }
+}
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index 681ea51..f76a3de 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -19,23 +19,32 @@
 import static com.android.settings.search.actionbar.SearchMenuController.NEED_SEARCH_ICON_IN_ACTION_BAR;
 import static com.android.settingslib.search.SearchIndexable.MOBILE;
 
+import android.app.ActivityManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.content.res.Configuration;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
 
 import androidx.fragment.app.Fragment;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceFragmentCompat;
 import androidx.preference.PreferenceScreen;
+import androidx.recyclerview.widget.RecyclerView;
 
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.support.SupportPreferenceController;
+import com.android.settings.widget.HomepagePreference;
 import com.android.settingslib.core.instrumentation.Instrumentable;
+import com.android.settingslib.drawer.Tile;
 import com.android.settingslib.search.SearchIndexable;
 
 @SearchIndexable(forTarget = MOBILE)
@@ -43,6 +52,12 @@
         PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
 
     private static final String TAG = "TopLevelSettings";
+    private static final String SAVED_HIGHLIGHT_MIXIN = "highlight_mixin";
+    private static final String PREF_KEY_SUPPORT = "top_level_support";
+
+    private boolean mIsEmbeddingActivityEnabled;
+    private TopLevelHighlightMixin mHighlightMixin;
+    private boolean mFirstStarted = true;
 
     public TopLevelSettings() {
         final Bundle args = new Bundle();
@@ -69,6 +84,7 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
+        HighlightableMenu.fromXml(context, getPreferenceScreenResId());
         use(SupportPreferenceController.class).setActivity(getActivity());
     }
 
@@ -84,6 +100,16 @@
     }
 
     @Override
+    public boolean onPreferenceTreeClick(Preference preference) {
+        // Register SplitPairRule for SubSettings.
+        ActivityEmbeddingRulesController.registerSubSettingsPairRule(getContext(),
+                true /* clearTop */);
+
+        setHighlightPreferenceKey(preference.getKey());
+        return super.onPreferenceTreeClick(preference);
+    }
+
+    @Override
     public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
         new SubSettingLauncher(getActivity())
                 .setDestination(pref.getFragment())
@@ -97,6 +123,52 @@
     }
 
     @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        mIsEmbeddingActivityEnabled =
+                ActivityEmbeddingUtils.isEmbeddingActivityEnabled(getContext());
+        if (!mIsEmbeddingActivityEnabled) {
+            return;
+        }
+
+        if (icicle != null) {
+            mHighlightMixin = icicle.getParcelable(SAVED_HIGHLIGHT_MIXIN);
+        }
+        if (mHighlightMixin == null) {
+            mHighlightMixin = new TopLevelHighlightMixin();
+        }
+    }
+
+    @Override
+    public void onStart() {
+        if (mFirstStarted) {
+            mFirstStarted = false;
+        } else if (mIsEmbeddingActivityEnabled && isOnlyOneActivityInTask()
+                && !ActivityEmbeddingUtils.isTwoPaneResolution(getActivity())) {
+            // Set default highlight menu key for 1-pane homepage since it will show the placeholder
+            // page once changing back to 2-pane.
+            Log.i(TAG, "Set default menu key");
+            setHighlightMenuKey(getString(SettingsHomepageActivity.DEFAULT_HIGHLIGHT_MENU_KEY),
+                    /* scrollNeeded= */ false);
+        }
+        super.onStart();
+    }
+
+    private boolean isOnlyOneActivityInTask() {
+        final ActivityManager.RunningTaskInfo taskInfo = getSystemService(ActivityManager.class)
+                .getRunningTasks(1).get(0);
+        return taskInfo.numActivities == 1;
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        if (mHighlightMixin != null) {
+            outState.putParcelable(SAVED_HIGHLIGHT_MIXIN, mHighlightMixin);
+        }
+    }
+
+    @Override
     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
         super.onCreatePreferences(savedInstanceState, rootKey);
         final PreferenceScreen screen = getPreferenceScreen();
@@ -119,11 +191,70 @@
     }
 
     @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        highlightPreferenceIfNeeded();
+    }
+
+    @Override
+    public void highlightPreferenceIfNeeded() {
+        if (mHighlightMixin != null) {
+            mHighlightMixin.highlightPreferenceIfNeeded(getActivity());
+        }
+    }
+
+    /** Returns a {@link TopLevelHighlightMixin} that performs highlighting */
+    public TopLevelHighlightMixin getHighlightMixin() {
+        return mHighlightMixin;
+    }
+
+    /** Highlight a preference with specified preference key */
+    public void setHighlightPreferenceKey(String prefKey) {
+        // Skip Tips & support since it's full screen
+        if (mHighlightMixin != null && !TextUtils.equals(prefKey, PREF_KEY_SUPPORT)) {
+            mHighlightMixin.setHighlightPreferenceKey(prefKey);
+        }
+    }
+
+    /** Show/hide the highlight on the menu entry for the search page presence */
+    public void setMenuHighlightShowed(boolean show) {
+        if (mHighlightMixin != null) {
+            mHighlightMixin.setMenuHighlightShowed(show);
+        }
+    }
+
+    /** Highlight and scroll to a preference with specified menu key */
+    public void setHighlightMenuKey(String menuKey, boolean scrollNeeded) {
+        if (mHighlightMixin != null) {
+            mHighlightMixin.setHighlightMenuKey(menuKey, scrollNeeded);
+        }
+    }
+
+    @Override
     protected boolean shouldForceRoundedIcon() {
         return getContext().getResources()
                 .getBoolean(R.bool.config_force_rounded_icon_TopLevelSettings);
     }
 
+    @Override
+    protected RecyclerView.Adapter onCreateAdapter(PreferenceScreen preferenceScreen) {
+        if (!mIsEmbeddingActivityEnabled || !(getActivity() instanceof SettingsHomepageActivity)) {
+            return super.onCreateAdapter(preferenceScreen);
+        }
+        return mHighlightMixin.onCreateAdapter(this, preferenceScreen);
+    }
+
+    @Override
+    protected Preference createPreference(Tile tile) {
+        return new HomepagePreference(getPrefContext());
+    }
+
+    void reloadHighlightMenuKey() {
+        if (mHighlightMixin != null) {
+            mHighlightMixin.reloadHighlightMenuKey(getArguments());
+        }
+    }
+
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.top_level_settings) {
 
diff --git a/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
index 94d3f69..f10a2d7 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
@@ -147,12 +147,18 @@
         return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 PowerUsageSummary.class.getName(), BatteryTipPreferenceController.PREF_NAME,
                 screenTitle,
-                SettingsEnums.SLICE)
+                SettingsEnums.SLICE,
+                this)
                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                 .setData(contentUri);
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_battery;
+    }
+
+    @Override
     public void onNotifyChange(Intent intent) {
     }
 
diff --git a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
index bfdd13a..7e4730c 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/BluetoothDevicesSlice.java
@@ -130,12 +130,18 @@
         return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 ConnectedDeviceDashboardFragment.class.getName(), "" /* key */,
                 screenTitle,
-                SettingsEnums.SLICE)
+                SettingsEnums.SLICE,
+                this)
                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                 .setData(getUri());
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_connected_devices;
+    }
+
+    @Override
     public void onNotifyChange(Intent intent) {
         final boolean enableBluetooth = intent.getBooleanExtra(EXTRA_ENABLE_BLUETOOTH, false);
         if (enableBluetooth) {
diff --git a/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSlice.java b/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSlice.java
index f11b0e3..2291bd7 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/ContextualAdaptiveSleepSlice.java
@@ -117,8 +117,14 @@
         final Uri contentUri = new Uri.Builder().appendPath(PREF_NAME).build();
         return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 ScreenTimeoutSettings.class.getName(), PREF_NAME, screenTitle.toString(),
-                SettingsEnums.SLICE).setClassName(mContext.getPackageName(),
-                SubSettings.class.getName()).setData(contentUri);
+                SettingsEnums.SLICE, this)
+                .setClassName(mContext.getPackageName(),
+                        SubSettings.class.getName()).setData(contentUri);
+    }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
     }
 
     private PendingIntent getPrimaryAction() {
diff --git a/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSlice.java b/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSlice.java
index f934d58..96924e4 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/DarkThemeSlice.java
@@ -149,6 +149,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_display;
+    }
+
+    @Override
     public Class getBackgroundWorkerClass() {
         return DarkThemeWorker.class;
     }
diff --git a/src/com/android/settings/homepage/contextualcards/slices/FaceSetupSlice.java b/src/com/android/settings/homepage/contextualcards/slices/FaceSetupSlice.java
index 1b3ee10..7cf7d86 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/FaceSetupSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/FaceSetupSlice.java
@@ -133,13 +133,18 @@
                     SecuritySettings.class.getName(),
                     FaceStatusPreferenceController.KEY_FACE_SETTINGS,
                     mContext.getText(R.string.security_settings_face_settings_enroll).toString(),
-                    SettingsEnums.SLICE)
+                    SettingsEnums.SLICE, this)
                     .setClassName(mContext.getPackageName(), SubSettings.class.getName());
         } else {
             return new Intent(mContext, FaceReEnrollDialog.class);
         }
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_security;
+    }
+
     private static RowBuilder buildRowBuilder(CharSequence title, CharSequence subTitle,
             IconCompat icon, Context context, Intent intent) {
         final SliceAction primarySliceAction = SliceAction.createDeeplink(
diff --git a/src/com/android/settings/homepage/contextualcards/slices/LowStorageSlice.java b/src/com/android/settings/homepage/contextualcards/slices/LowStorageSlice.java
index 3812534..22e3431 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/LowStorageSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/LowStorageSlice.java
@@ -109,11 +109,17 @@
         return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 StorageDashboardFragment.class.getName(), "" /* key */,
                 screenTitle,
-                SettingsEnums.SLICE)
+                SettingsEnums.SLICE,
+                this)
                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                 .setData(CustomSliceRegistry.LOW_STORAGE_SLICE_URI);
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_storage;
+    }
+
     private RowBuilder buildRowBuilder(CharSequence title, String summary, IconCompat icon) {
         final SliceAction primarySliceAction = SliceAction.createDeeplink(
                 PendingIntent.getActivity(mContext, 0, getIntent(), PendingIntent.FLAG_IMMUTABLE),
diff --git a/src/com/android/settings/inputmethod/GameControllerPreferenceController.java b/src/com/android/settings/inputmethod/GameControllerPreferenceController.java
index 80f6680..751dac7 100644
--- a/src/com/android/settings/inputmethod/GameControllerPreferenceController.java
+++ b/src/com/android/settings/inputmethod/GameControllerPreferenceController.java
@@ -101,6 +101,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
+
+    @Override
     public void onInputDeviceAdded(int deviceId) {
         updateState(mPreference);
     }
diff --git a/src/com/android/settings/inputmethod/OWNERS b/src/com/android/settings/inputmethod/OWNERS
index 556de5f..7c7d792 100644
--- a/src/com/android/settings/inputmethod/OWNERS
+++ b/src/com/android/settings/inputmethod/OWNERS
@@ -1,5 +1,6 @@
 # Bug component: 34867
 include platform/frameworks/base:/services/core/java/com/android/server/inputmethod/OWNERS
+include /OWNERS
 
 # Settings for physical keyboard and game pad are better to be reviewed by the input team
 per-file GameControllerPreferenceController.java = file: platform/frameworks/base:/services/core/java/com/android/server/input/OWNERS
diff --git a/src/com/android/settings/localepicker/LocalePickerWithRegionActivity.java b/src/com/android/settings/localepicker/LocalePickerWithRegionActivity.java
index 6ddcf23..bcc55e3 100644
--- a/src/com/android/settings/localepicker/LocalePickerWithRegionActivity.java
+++ b/src/com/android/settings/localepicker/LocalePickerWithRegionActivity.java
@@ -16,7 +16,6 @@
 
 package com.android.settings.localepicker;
 
-import android.app.Activity;
 import android.app.FragmentTransaction;
 import android.content.Intent;
 import android.os.Bundle;
@@ -24,8 +23,11 @@
 
 import com.android.internal.app.LocalePickerWithRegion;
 import com.android.internal.app.LocaleStore;
+import com.android.settings.R;
+import com.android.settings.core.SettingsBaseActivity;
 
-public class LocalePickerWithRegionActivity extends Activity
+/** A activity to show the locale picker page. */
+public class LocalePickerWithRegionActivity extends SettingsBaseActivity
         implements LocalePickerWithRegion.LocaleSelectedListener {
 
     private static final String PARENT_FRAGMENT_NAME = "localeListEditor";
@@ -40,7 +42,7 @@
         getFragmentManager()
                 .beginTransaction()
                 .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
-                .replace(android.R.id.content, selector)
+                .replace(R.id.content_frame, selector)
                 .addToBackStack(PARENT_FRAGMENT_NAME)
                 .commit();
     }
diff --git a/src/com/android/settings/location/BluetoothScanningMainSwitchPreferenceController.java b/src/com/android/settings/location/BluetoothScanningMainSwitchPreferenceController.java
index 051fd8d..b491ec9 100644
--- a/src/com/android/settings/location/BluetoothScanningMainSwitchPreferenceController.java
+++ b/src/com/android/settings/location/BluetoothScanningMainSwitchPreferenceController.java
@@ -68,6 +68,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_location;
+    }
+
+    @Override
     public void onSwitchChanged(Switch switchView, boolean isChecked) {
         if (isChecked != isChecked()) {
             setChecked(isChecked);
diff --git a/src/com/android/settings/location/LocationIndicatorsPreferenceController.java b/src/com/android/settings/location/LocationIndicatorsPreferenceController.java
index d39c280..75ffb3a 100644
--- a/src/com/android/settings/location/LocationIndicatorsPreferenceController.java
+++ b/src/com/android/settings/location/LocationIndicatorsPreferenceController.java
@@ -20,6 +20,7 @@
 import android.content.pm.PackageManager;
 import android.provider.DeviceConfig;
 
+import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.TogglePreferenceController;
 
@@ -54,4 +55,9 @@
         return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LOCATION)
                 ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_location;
+    }
 }
diff --git a/src/com/android/settings/location/LocationSlice.java b/src/com/android/settings/location/LocationSlice.java
index f8add12..291e5e4 100644
--- a/src/com/android/settings/location/LocationSlice.java
+++ b/src/com/android/settings/location/LocationSlice.java
@@ -88,11 +88,16 @@
         final Uri contentUri = new Uri.Builder().appendPath(KEY_LOCATION).build();
         return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 LocationSettings.class.getName(), KEY_LOCATION, screenTitle,
-                SettingsEnums.LOCATION)
+                SettingsEnums.LOCATION, this)
                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                 .setData(contentUri);
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_location;
+    }
+
     private PendingIntent getPrimaryAction() {
         final Intent intent = getIntent();
         return PendingIntent.getActivity(mContext, 0 /* requestCode */,
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/location/WifiScanningMainSwitchPreferenceController.java b/src/com/android/settings/location/WifiScanningMainSwitchPreferenceController.java
index a69fdb8..546f1e1 100644
--- a/src/com/android/settings/location/WifiScanningMainSwitchPreferenceController.java
+++ b/src/com/android/settings/location/WifiScanningMainSwitchPreferenceController.java
@@ -69,6 +69,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_location;
+    }
+
+    @Override
     public void onSwitchChanged(Switch switchView, boolean isChecked) {
         if (isChecked != isChecked()) {
             setChecked(isChecked);
diff --git a/src/com/android/settings/media/MediaOutputIndicatorSlice.java b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
index 10a8b79..e2232e7 100644
--- a/src/com/android/settings/media/MediaOutputIndicatorSlice.java
+++ b/src/com/android/settings/media/MediaOutputIndicatorSlice.java
@@ -93,6 +93,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_connected_devices;
+    }
+
+    @Override
     public Class getBackgroundWorkerClass() {
         return MediaOutputIndicatorWorker.class;
     }
diff --git a/src/com/android/settings/media/RemoteMediaSlice.java b/src/com/android/settings/media/RemoteMediaSlice.java
index 3d81c44..f856188 100644
--- a/src/com/android/settings/media/RemoteMediaSlice.java
+++ b/src/com/android/settings/media/RemoteMediaSlice.java
@@ -181,7 +181,9 @@
         final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 SoundSettings.class.getName(),
                 id,
-                mContext.getText(R.string.sound_settings).toString(), 0);
+                mContext.getText(R.string.sound_settings).toString(),
+                0 /* sourceMetricsCategory */,
+                R.string.menu_key_sound);
         intent.setClassName(mContext.getPackageName(), SubSettings.class.getName());
         intent.setData(contentUri);
         final PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent,
@@ -222,6 +224,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_connected_devices;
+    }
+
+    @Override
     public Class getBackgroundWorkerClass() {
         return MediaDeviceUpdateWorker.class;
     }
diff --git a/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceController.java b/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceController.java
index e3d779c..ea849f6 100644
--- a/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceController.java
+++ b/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceController.java
@@ -22,6 +22,7 @@
 
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.widget.SettingsMainSwitchPreferenceController;
 
 /**
@@ -62,4 +63,9 @@
         mWifiManager.setWifiScoringEnabled(isChecked);
         return true;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
 }
diff --git a/src/com/android/settings/network/AirplaneModePreferenceController.java b/src/com/android/settings/network/AirplaneModePreferenceController.java
index 6839037..e74f3ae 100644
--- a/src/com/android/settings/network/AirplaneModePreferenceController.java
+++ b/src/com/android/settings/network/AirplaneModePreferenceController.java
@@ -121,6 +121,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
+
+    @Override
     public void onStart() {
         if (isAvailable()) {
             mAirplaneModeEnabler.start();
diff --git a/src/com/android/settings/network/CarrierWifiTogglePreferenceController.java b/src/com/android/settings/network/CarrierWifiTogglePreferenceController.java
index c5d8b97..af2c0a5 100644
--- a/src/com/android/settings/network/CarrierWifiTogglePreferenceController.java
+++ b/src/com/android/settings/network/CarrierWifiTogglePreferenceController.java
@@ -22,6 +22,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.wifi.WifiPickerTrackerHelper;
@@ -38,7 +39,6 @@
     protected static final String CARRIER_WIFI_NETWORK_PREF_KEY = "carrier_wifi_network";
 
     protected final Context mContext;
-    protected boolean mIsProviderModelEnabled;
     protected int mSubId;
     protected WifiPickerTrackerHelper mWifiPickerTrackerHelper;
     protected boolean mIsCarrierProvisionWifiEnabled;
@@ -48,7 +48,6 @@
             String preferenceKey) {
         super(context, preferenceKey);
         mContext = context;
-        mIsProviderModelEnabled = Utils.isProviderModelEnabled(context);
     }
 
     /** Initialize related properties */
@@ -61,9 +60,6 @@
 
     @Override
     public int getAvailabilityStatus() {
-        if (!mIsProviderModelEnabled) {
-            return CONDITIONALLY_UNAVAILABLE;
-        }
         return mIsCarrierProvisionWifiEnabled ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
@@ -89,6 +85,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
+
+    @Override
     public void onWifiStateChanged() {
         updateCarrierNetworkPreference();
     }
diff --git a/src/com/android/settings/network/MobileNetworkListController.java b/src/com/android/settings/network/MobileNetworkListController.java
index cd7375c..d7fc8b4 100644
--- a/src/com/android/settings/network/MobileNetworkListController.java
+++ b/src/com/android/settings/network/MobileNetworkListController.java
@@ -45,7 +45,12 @@
  * This populates the entries on a page which lists all available mobile subscriptions. Each entry
  * has the name of the subscription with some subtext giving additional detail, and clicking on the
  * entry brings you to a details page for that network.
+ *
+ * @deprecated This class will be removed in Android U, use
+ * {@link NetworkProviderSimsCategoryController} and
+ * {@link NetworkProviderDownloadedSimsCategoryController} instead.
  */
+@Deprecated
 public class MobileNetworkListController extends AbstractPreferenceController implements
         LifecycleObserver, SubscriptionsChangeListener.SubscriptionsChangeListenerClient {
     private static final String TAG = "MobileNetworkListCtlr";
diff --git a/src/com/android/settings/network/MobileNetworkListFragment.java b/src/com/android/settings/network/MobileNetworkListFragment.java
index 03e5a01..7881690 100644
--- a/src/com/android/settings/network/MobileNetworkListFragment.java
+++ b/src/com/android/settings/network/MobileNetworkListFragment.java
@@ -44,9 +44,7 @@
 
     @Override
     protected int getPreferenceScreenResId() {
-        return Utils.isProviderModelEnabled(getContext())
-                ? R.xml.network_provider_sims_list
-                : R.xml.mobile_network_list;
+        return R.xml.network_provider_sims_list;
     }
 
     @Override
@@ -63,18 +61,14 @@
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
 
-        if (Utils.isProviderModelEnabled(getContext())) {
-            NetworkProviderSimsCategoryController simCategoryPrefCtrl =
-                    new NetworkProviderSimsCategoryController(context, KEY_PREFERENCE_CATEGORY_SIM,
-                            getSettingsLifecycle());
-            controllers.add(simCategoryPrefCtrl);
-            NetworkProviderDownloadedSimsCategoryController downloadedSimsCategoryCtrl =
-                    new NetworkProviderDownloadedSimsCategoryController(context,
-                            KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM, getSettingsLifecycle());
-            controllers.add(downloadedSimsCategoryCtrl);
-        } else {
-            controllers.add(new MobileNetworkListController(getContext(), getLifecycle()));
-        }
+        NetworkProviderSimsCategoryController simCategoryPrefCtrl =
+                new NetworkProviderSimsCategoryController(context, KEY_PREFERENCE_CATEGORY_SIM,
+                        getSettingsLifecycle());
+        controllers.add(simCategoryPrefCtrl);
+        NetworkProviderDownloadedSimsCategoryController downloadedSimsCategoryCtrl =
+                new NetworkProviderDownloadedSimsCategoryController(context,
+                        KEY_PREFERENCE_CATEGORY_DOWNLOADED_SIM, getSettingsLifecycle());
+        controllers.add(downloadedSimsCategoryCtrl);
 
         return controllers;
     }
@@ -87,9 +81,7 @@
                         boolean enabled) {
                     final ArrayList<SearchIndexableResource> result = new ArrayList<>();
                     final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = Utils.isProviderModelEnabled(context)
-                            ? R.xml.network_provider_sims_list
-                            : R.xml.mobile_network_list;
+                    sir.xmlResId = R.xml.network_provider_sims_list;
                     result.add(sir);
                     return result;
                 }
diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java
index f2e28a3..94d1ff5 100644
--- a/src/com/android/settings/network/MobileNetworkSummaryController.java
+++ b/src/com/android/settings/network/MobileNetworkSummaryController.java
@@ -35,7 +35,6 @@
 import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.network.helper.SelectableSubscriptions;
 import com.android.settings.network.helper.SubscriptionAnnotation;
 import com.android.settings.network.telephony.MobileNetworkActivity;
 import com.android.settings.overlay.FeatureFactory;
@@ -127,22 +126,13 @@
             }
             return mContext.getString(R.string.mobile_network_tap_to_activate, displayName);
         } else {
-            if (com.android.settings.Utils.isProviderModelEnabled(mContext)) {
-                return getSummaryForProviderModel(subs);
-            }
-            final int count = subs.size();
-            return mContext.getResources().getQuantityString(R.plurals.mobile_network_summary_count,
-                    count, count);
+            return subs.stream()
+                    .mapToInt(SubscriptionAnnotation::getSubscriptionId)
+                    .mapToObj(subId -> mStatusCache.getDisplayName(subId))
+                    .collect(Collectors.joining(", "));
         }
     }
 
-    private CharSequence getSummaryForProviderModel(List<SubscriptionAnnotation> subs) {
-        return subs.stream()
-                .mapToInt(SubscriptionAnnotation::getSubscriptionId)
-                .mapToObj(subId -> mStatusCache.getDisplayName(subId))
-                .collect(Collectors.joining(", "));
-    }
-
     private void logPreferenceClick(Preference preference) {
         mMetricsFeatureProvider.logClickedPreference(preference,
                 preference.getExtras().getInt(DashboardFragment.CATEGORY));
@@ -202,6 +192,9 @@
                         || mStatusCache.isPhysicalSimDisableSupport()) {
                     final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
                     intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
+                    // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
+                    MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(mContext, intent,
+                            null);
                     mContext.startActivity(intent);
                     return true;
                 }
diff --git a/src/com/android/settings/network/MobileNetworkTwoPaneUtils.java b/src/com/android/settings/network/MobileNetworkTwoPaneUtils.java
new file mode 100644
index 0000000..8b3503e
--- /dev/null
+++ b/src/com/android/settings/network/MobileNetworkTwoPaneUtils.java
@@ -0,0 +1,29 @@
+package com.android.settings.network;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+
+public class MobileNetworkTwoPaneUtils {
+
+    private static final String TAG = "MobileNetworkTwoPaneUtils";
+
+    /**
+     * TODO: b/206061070, the problem of multi-instance should be fixed in Android T to apply the
+     * Settings' architecture and 2 panes mode instead of registering the rule.
+     *
+     * The launchMode of MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
+     */
+    public static void registerTwoPaneForMobileNetwork(Context context, Intent intent,
+            @Nullable String secondaryIntentAction) {
+        Log.d(TAG, "registerTwoPaneForMobileNetwork");
+        ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+                context,
+                intent.getComponent(),
+                secondaryIntentAction /* secondaryIntentAction */,
+                false /* clearTop */);
+    }
+}
diff --git a/src/com/android/settings/network/MultiNetworkHeaderController.java b/src/com/android/settings/network/MultiNetworkHeaderController.java
index 1143546..2be4d62 100644
--- a/src/com/android/settings/network/MultiNetworkHeaderController.java
+++ b/src/com/android/settings/network/MultiNetworkHeaderController.java
@@ -32,9 +32,9 @@
  * are two or more active mobile subscriptions. It shows an overview of available network
  * connections with an entry for wifi (if connected) and an entry for each subscription.
  *
- * TODO(tomhsu) when provider model is completed, this class will be replaced
- * by {@link NetworkMobileProviderController}
+ * @deprecated This class will be removed in Android U, there is no networks header anymore.
  */
+@Deprecated
 public class MultiNetworkHeaderController extends BasePreferenceController implements
         WifiConnectionPreferenceController.UpdateListener,
         SubscriptionsPreferenceController.UpdateListener {
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index c53b4f6..286e4e3 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -60,20 +60,13 @@
 
     @Override
     protected int getPreferenceScreenResId() {
-        if (Utils.isProviderModelEnabled(getContext())) {
-            return R.xml.network_provider_internet;
-        } else {
-            return R.xml.network_and_internet;
-        }
+        return R.xml.network_provider_internet;
     }
 
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
 
-        if (!Utils.isProviderModelEnabled(context)) {
-            use(MultiNetworkHeaderController.class).init(getSettingsLifecycle());
-        }
         use(AirplaneModePreferenceController.class).setFragment(this);
         getSettingsLifecycle().addObserver(use(AllInOneTetherPreferenceController.class));
     }
@@ -100,16 +93,8 @@
             MobilePlanPreferenceHost mobilePlanHost) {
         final MobilePlanPreferenceController mobilePlanPreferenceController =
                 new MobilePlanPreferenceController(context, mobilePlanHost);
-        final WifiPrimarySwitchPreferenceController wifiPreferenceController =
-                Utils.isProviderModelEnabled(context)
-                        ? null
-                        : new WifiPrimarySwitchPreferenceController(
-                                context,
-                                metricsFeatureProvider);
         final InternetPreferenceController internetPreferenceController =
-                Utils.isProviderModelEnabled(context)
-                        ? new InternetPreferenceController(context, lifecycle)
-                        : null;
+                new InternetPreferenceController(context, lifecycle);
 
         final VpnPreferenceController vpnPreferenceController =
                 new VpnPreferenceController(context);
@@ -118,9 +103,6 @@
 
         if (lifecycle != null) {
             lifecycle.addObserver(mobilePlanPreferenceController);
-            if (wifiPreferenceController != null) {
-                lifecycle.addObserver(wifiPreferenceController);
-            }
             lifecycle.addObserver(vpnPreferenceController);
             lifecycle.addObserver(privateDnsPreferenceController);
         }
@@ -132,16 +114,11 @@
         controllers.add(vpnPreferenceController);
         controllers.add(new ProxyPreferenceController(context));
         controllers.add(mobilePlanPreferenceController);
-        if (wifiPreferenceController != null) {
-            controllers.add(wifiPreferenceController);
-        }
         if (internetPreferenceController != null) {
             controllers.add(internetPreferenceController);
         }
         controllers.add(privateDnsPreferenceController);
-        if (Utils.isProviderModelEnabled(context)) {
-            controllers.add(new NetworkProviderCallsSmsController(context, lifecycle));
-        }
+        controllers.add(new NetworkProviderCallsSmsController(context, lifecycle));
         return controllers;
     }
 
@@ -176,20 +153,7 @@
     }
 
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
-            new BaseSearchIndexProvider(R.xml.network_and_internet) {
-
-                @Override
-                // TODO(b/167474581): Should remove this method when Provider Model finished.
-                public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
-                        boolean enabled) {
-                    if (Utils.isProviderModelEnabled(context)) {
-                        final SearchIndexableResource sir = new SearchIndexableResource(context);
-                        sir.xmlResId = R.xml.network_provider_internet;
-                        return Arrays.asList(sir);
-                    }
-                    return super.getXmlResourcesToIndex(context, enabled);
-                }
-
+            new BaseSearchIndexProvider(R.xml.network_provider_internet) {
                 @Override
                 public List<AbstractPreferenceController> createPreferenceControllers(Context
                         context) {
diff --git a/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java b/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java
index fcb8345..aad9b10 100644
--- a/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java
+++ b/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java
@@ -100,8 +100,7 @@
 
                 @Override
                 protected boolean isPageSearchEnabled(Context context) {
-                    return Utils.isProviderModelEnabled(context) &&
-                            context.getSystemService(UserManager.class).isAdminUser();
+                    return context.getSystemService(UserManager.class).isAdminUser();
                 }
             };
 }
diff --git a/src/com/android/settings/network/NetworkProviderDownloadedSimListController.java b/src/com/android/settings/network/NetworkProviderDownloadedSimListController.java
index 43bdd80..1bb50cb 100644
--- a/src/com/android/settings/network/NetworkProviderDownloadedSimListController.java
+++ b/src/com/android/settings/network/NetworkProviderDownloadedSimListController.java
@@ -130,6 +130,8 @@
             pref.setOnPreferenceClickListener(clickedPref -> {
                 final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
                 intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
+                // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
+                MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(mContext, intent, null);
                 mContext.startActivity(intent);
                 return true;
             });
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index 1e660b0..c03238c 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -19,6 +19,8 @@
 import static android.net.wifi.WifiConfiguration.NetworkSelectionStatus.NETWORK_SELECTION_ENABLED;
 import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
 
+import static com.android.settings.Settings.WifiSettingsActivity;
+
 import android.app.Activity;
 import android.app.Dialog;
 import android.app.settings.SettingsEnums;
@@ -131,7 +133,7 @@
     @VisibleForTesting
     static final String PREF_KEY_FIRST_ACCESS_POINTS = "first_access_points";
     private static final String PREF_KEY_ACCESS_POINTS = "access_points";
-    private static final String PREF_KEY_CONFIGURE_WIFI_SETTINGS = "configure_wifi_settings";
+    private static final String PREF_KEY_CONFIGURE_NETWORK_SETTINGS = "configure_network_settings";
     private static final String PREF_KEY_SAVED_NETWORKS = "saved_networks";
     @VisibleForTesting
     static final String PREF_KEY_DATA_USAGE = "non_carrier_data_usage";
@@ -270,8 +272,6 @@
         if (mWifiManager != null) {
             setLoading(true, false);
             mIsViewLoading = true;
-            getView().postDelayed(mRemoveLoadingRunnable,
-                    mWifiManager.isWifiEnabled() ? 1000 : 100);
         }
     }
 
@@ -297,7 +297,7 @@
         mConnectedWifiEntryPreferenceCategory = findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS);
         mFirstWifiEntryPreferenceCategory = findPreference(PREF_KEY_FIRST_ACCESS_POINTS);
         mWifiEntryPreferenceCategory = findPreference(PREF_KEY_ACCESS_POINTS);
-        mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_WIFI_SETTINGS);
+        mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_NETWORK_SETTINGS);
         mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);
         mAddWifiNetworkPreference = new AddWifiNetworkPreference(getPrefContext());
         mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE);
@@ -417,6 +417,10 @@
     @Override
     public void onStart() {
         super.onStart();
+        if (mIsViewLoading) {
+            final long delayMillis = mWifiManager.isWifiEnabled() ? 1000 : 100;
+            getView().postDelayed(mRemoveLoadingRunnable, delayMillis);
+        }
         if (mIsRestricted) {
             restrictUi();
             return;
@@ -464,7 +468,9 @@
 
     @Override
     public void onDestroy() {
-        mAirplaneModeEnabler.close();
+        if (mAirplaneModeEnabler != null) {
+            mAirplaneModeEnabler.close();
+        }
         super.onDestroy();
     }
 
@@ -1130,7 +1136,8 @@
     @Override
     public void onScan(WifiDialog2 dialog, String ssid) {
         // Launch QR code scanner to join a network.
-        startActivityForResult(WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid),
+        startActivityForResult(
+                WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid),
                 REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
     }
 
@@ -1168,6 +1175,7 @@
 
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.network_provider_settings) {
+
                 @Override
                 public List<String> getNonIndexableKeys(Context context) {
                     final List<String> keys = super.getNonIndexableKeys(context);
diff --git a/src/com/android/settings/network/NetworkProviderSimListController.java b/src/com/android/settings/network/NetworkProviderSimListController.java
index 8fb6cb6..d6eaab8 100644
--- a/src/com/android/settings/network/NetworkProviderSimListController.java
+++ b/src/com/android/settings/network/NetworkProviderSimListController.java
@@ -128,6 +128,9 @@
                 } else {
                     final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
                     intent.putExtra(Settings.EXTRA_SUB_ID, info.getSubscriptionId());
+                    // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
+                    MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(mContext, intent,
+                            null);
                     mContext.startActivity(intent);
                 }
                 return true;
diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java
index 146b11a..0aae349 100644
--- a/src/com/android/settings/network/ProviderModelSlice.java
+++ b/src/com/android/settings/network/ProviderModelSlice.java
@@ -290,7 +290,7 @@
         final String screenTitle = mContext.getText(R.string.provider_internet_settings).toString();
         return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
                 NetworkProviderSettings.class.getName(), "" /* key */, screenTitle,
-                SettingsEnums.SLICE)
+                SettingsEnums.SLICE, this)
                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                 .setData(getUri());
     }
diff --git a/src/com/android/settings/network/SubscriptionsPreferenceController.java b/src/com/android/settings/network/SubscriptionsPreferenceController.java
index 36c55e2..5541888 100644
--- a/src/com/android/settings/network/SubscriptionsPreferenceController.java
+++ b/src/com/android/settings/network/SubscriptionsPreferenceController.java
@@ -74,15 +74,8 @@
 import java.util.Set;
 
 /**
- * If the provider model is not enabled, this controller manages a set of Preferences it places into
- * a PreferenceGroup owned by some parent
- * controller class - one for each available subscription. This controller is only considered
- * available if there are 2 or more subscriptions.
- *
- * If the provider model is enabled, this controller manages preference with data subscription
- * information and make its state display on preference.
- * TODO this class will clean up the multiple subscriptions functionality after the provider
- * model is released.
+ * This controller manages preference with data subscription information and make its state
+ * display on preference.
  */
 public class SubscriptionsPreferenceController extends AbstractPreferenceController implements
         LifecycleObserver, SubscriptionsChangeListener.SubscriptionsChangeListenerClient,
@@ -101,6 +94,7 @@
     private SignalStrengthListener mSignalStrengthListener;
     private TelephonyDisplayInfoListener mTelephonyDisplayInfoListener;
     private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
+    private final WifiManager mWifiManager;
 
     @VisibleForTesting
     final BroadcastReceiver mConnectionChangeReceiver = new BroadcastReceiver() {
@@ -157,6 +151,7 @@
         mStartOrder = startOrder;
         mTelephonyManager = context.getSystemService(TelephonyManager.class);
         mSubscriptionManager = context.getSystemService(SubscriptionManager.class);
+        mWifiManager = context.getSystemService(WifiManager.class);
         mSubscriptionPreferences = new ArrayMap<>();
         mSubscriptionsListener = new SubscriptionsChangeListener(context, this);
         mDataEnabledListener = new MobileDataEnabledListener(context, this);
@@ -228,14 +223,6 @@
             return;
         }
 
-        if (mSubsPrefCtrlInjector.isProviderModelEnabled(mContext)) {
-            updateForProvider();
-        } else {
-            updateForBase();
-        }
-    }
-
-    private void updateForProvider() {
         SubscriptionInfo subInfo = mSubscriptionManager.getDefaultDataSubscriptionInfo();
         if (subInfo == null) {
             mPreferenceGroup.removeAll();
@@ -286,9 +273,7 @@
         final boolean isDataInService = (regInfo == null)
                 ? false
                 : regInfo.isRegistered();
-        final boolean isCarrierNetworkActive =
-                (mWifiPickerTrackerHelper != null)
-                        && mWifiPickerTrackerHelper.isCarrierNetworkActive();
+        final boolean isCarrierNetworkActive = isCarrierNetworkActive();
         String result = mSubsPrefCtrlInjector.getNetworkType(
                 mContext, mConfig, mTelephonyDisplayInfo, subId, isCarrierNetworkActive);
         if (mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext) || isCarrierNetworkActive) {
@@ -306,20 +291,15 @@
         final SignalStrength strength = tmForSubId.getSignalStrength();
         int level = (strength == null) ? 0 : strength.getLevel();
         int numLevels = SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
-        if (shouldInflateSignalStrength(subId)) {
-            level += 1;
+        boolean isCarrierNetworkActive = isCarrierNetworkActive();
+        if (shouldInflateSignalStrength(subId) || isCarrierNetworkActive) {
+            level = isCarrierNetworkActive
+                    ? SignalStrength.NUM_SIGNAL_STRENGTH_BINS
+                    : (level + 1);
             numLevels += 1;
         }
 
-        Drawable icon = mSubsPrefCtrlInjector.getIcon(mContext, level, numLevels,
-                !mTelephonyManager.isDataEnabled());
-        final boolean isActiveCellularNetwork =
-                mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext);
-        if (isActiveCellularNetwork || (mWifiPickerTrackerHelper != null)
-                        && mWifiPickerTrackerHelper.isCarrierNetworkActive()) {
-            icon.setTint(Utils.getColorAccentDefaultColor(mContext));
-            return icon;
-        }
+        Drawable icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet);
 
         final ServiceState serviceState = tmForSubId.getServiceState();
         final NetworkRegistrationInfo regInfo = (serviceState == null)
@@ -334,11 +314,17 @@
         final boolean isVoiceInService = (serviceState == null)
                 ? false
                 : (serviceState.getState() == ServiceState.STATE_IN_SERVICE);
-        if (isDataInService || isVoiceInService) {
-            return icon;
+        if (isDataInService || isVoiceInService || isCarrierNetworkActive) {
+            icon = mSubsPrefCtrlInjector.getIcon(mContext, level, numLevels,
+                    !tmForSubId.isDataEnabled());
         }
 
-        icon = mContext.getDrawable(R.drawable.ic_signal_strength_zero_bar_no_internet);
+        final boolean isActiveCellularNetwork =
+                mSubsPrefCtrlInjector.isActiveCellularNetwork(mContext);
+        if (isActiveCellularNetwork || isCarrierNetworkActive) {
+            icon.setTint(Utils.getColorAccentDefaultColor(mContext));
+        }
+
         return icon;
     }
 
@@ -349,53 +335,11 @@
         mSubsGearPref.setSummary("");
     }
 
-    private void updateForBase() {
-        final Map<Integer, Preference> existingPrefs = mSubscriptionPreferences;
-        mSubscriptionPreferences = new ArrayMap<>();
-
-        int order = mStartOrder;
-        final Set<Integer> activeSubIds = new ArraySet<>();
-        final int dataDefaultSubId = mSubsPrefCtrlInjector.getDefaultDataSubscriptionId();
-        for (SubscriptionInfo info :
-                SubscriptionUtil.getActiveSubscriptions(mSubscriptionManager)) {
-            final int subId = info.getSubscriptionId();
-            // Avoid from showing subscription(SIM)s which has been marked as hidden
-            // For example, only one subscription will be shown when there're multiple
-            // subscriptions with same group UUID.
-            if (!mSubsPrefCtrlInjector.canSubscriptionBeDisplayed(mContext, subId)) {
-                continue;
-            }
-            activeSubIds.add(subId);
-            Preference pref = existingPrefs.remove(subId);
-            if (pref == null) {
-                pref = new Preference(mPreferenceGroup.getContext());
-                mPreferenceGroup.addPreference(pref);
-            }
-            pref.setTitle(SubscriptionUtil.getUniqueSubscriptionDisplayName(info, mContext));
-            final boolean isDefaultForData = (subId == dataDefaultSubId);
-            pref.setSummary(getSummary(subId, isDefaultForData));
-            setIcon(pref, subId, isDefaultForData);
-            pref.setOrder(order++);
-
-            pref.setOnPreferenceClickListener(clickedPref -> {
-                startMobileNetworkActivity(mContext, subId);
-                return true;
-            });
-
-            mSubscriptionPreferences.put(subId, pref);
-        }
-        mSignalStrengthListener.updateSubscriptionIds(activeSubIds);
-
-        // Remove any old preferences that no longer map to a subscription.
-        for (Preference pref : existingPrefs.values()) {
-            mPreferenceGroup.removePreference(pref);
-        }
-        mUpdateListener.onChildrenUpdated();
-    }
-
     private static void startMobileNetworkActivity(Context context, int subId) {
         final Intent intent = new Intent(context, MobileNetworkActivity.class);
         intent.putExtra(Settings.EXTRA_SUB_ID, subId);
+        // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
+        MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(context, intent, null);
         context.startActivity(intent);
     }
 
@@ -470,12 +414,12 @@
     }
 
     /**
-     * @return true if there are at least 2 available subscriptions,
-     * or if there is at least 1 available subscription for provider model.
+     * @return true if there is at least 1 available subscription.
      */
     @Override
     public boolean isAvailable() {
-        if (mSubscriptionsListener.isAirplaneModeOn()) {
+        if (mSubscriptionsListener.isAirplaneModeOn()
+                && (!mWifiManager.isWifiEnabled() || !isCarrierNetworkActive())) {
             return false;
         }
         List<SubscriptionInfo> subInfoList =
@@ -483,6 +427,7 @@
         if (subInfoList == null) {
             return false;
         }
+
         return subInfoList.stream()
                 // Avoid from showing subscription(SIM)s which has been marked as hidden
                 // For example, only one subscription will be shown when there're multiple
@@ -490,7 +435,7 @@
                 .filter(subInfo ->
                         mSubsPrefCtrlInjector.canSubscriptionBeDisplayed(mContext,
                                 subInfo.getSubscriptionId()))
-                .count() >= (mSubsPrefCtrlInjector.isProviderModelEnabled(mContext) ? 1 : 2);
+                .count() >= 1;
     }
 
     @Override
@@ -535,12 +480,6 @@
         update();
     }
 
-    @VisibleForTesting
-    boolean canSubscriptionBeDisplayed(Context context, int subId) {
-        return (SubscriptionUtil.getAvailableSubscription(context,
-                ProxySubscriptionManager.getInstance(context), subId) != null);
-    }
-
     public void setWifiPickerTrackerHelper(WifiPickerTrackerHelper helper) {
         mWifiPickerTrackerHelper = helper;
     }
@@ -559,6 +498,11 @@
         return new SubsPrefCtrlInjector();
     }
 
+    boolean isCarrierNetworkActive() {
+        return mWifiPickerTrackerHelper != null
+                && mWifiPickerTrackerHelper.isCarrierNetworkActive();
+    }
+
     /**
      * To inject necessary data from each static api.
      */
@@ -601,13 +545,6 @@
         }
 
         /**
-         * Confirms the flag of Provider Model switch is turned on or not.
-         */
-        public boolean isProviderModelEnabled(Context context) {
-            return Utils.isProviderModelEnabled(context);
-        }
-
-        /**
          * Gets config for carrier customization.
          */
         public Config getConfig(Context context) {
diff --git a/src/com/android/settings/network/TetherBasePreferenceController.java b/src/com/android/settings/network/TetherBasePreferenceController.java
index 822aa72..b1627f2 100644
--- a/src/com/android/settings/network/TetherBasePreferenceController.java
+++ b/src/com/android/settings/network/TetherBasePreferenceController.java
@@ -25,6 +25,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.datausage.DataSaverBackend;
 
@@ -118,6 +119,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
+
+    @Override
     public void onTetherStateUpdated(@TetherEnabler.TetheringState int state) {
         mTetheringState = state;
         updateState(mPreference);
diff --git a/src/com/android/settings/network/VpnPreferenceController.java b/src/com/android/settings/network/VpnPreferenceController.java
index 4944f43..96931e6 100644
--- a/src/com/android/settings/network/VpnPreferenceController.java
+++ b/src/com/android/settings/network/VpnPreferenceController.java
@@ -156,7 +156,7 @@
             summary = getNameForVpnConfig(vpn, UserHandle.of(uid));
         }
         // Optionally add warning icon if an insecure VPN is present.
-        if (Utils.isProviderModelEnabled(mContext) && mPreference instanceof VpnInfoPreference) {
+        if (mPreference instanceof VpnInfoPreference) {
             final int insecureVpnCount = getInsecureVpnCount();
             boolean isInsecureVPN = insecureVpnCount > 0;
             ((VpnInfoPreference) mPreference).setInsecureVpn(isInsecureVPN);
diff --git a/src/com/android/settings/network/apn/ApnEditor.java b/src/com/android/settings/network/apn/ApnEditor.java
index 0b75162..03db1b8 100644
--- a/src/com/android/settings/network/apn/ApnEditor.java
+++ b/src/com/android/settings/network/apn/ApnEditor.java
@@ -1256,7 +1256,8 @@
             if (!readOnlyApnTypes.contains(apnType)
                     && !apnType.equals(APN_TYPE_IA)
                     && !apnType.equals(APN_TYPE_EMERGENCY)
-                    && !apnType.equals(APN_TYPE_MCX)) {
+                    && !apnType.equals(APN_TYPE_MCX)
+                    && !apnType.equals(APN_TYPE_IMS)) {
                 if (first) {
                     first = false;
                 } else {
diff --git a/src/com/android/settings/network/telephony/CallsDefaultSubscriptionController.java b/src/com/android/settings/network/telephony/CallsDefaultSubscriptionController.java
index 16ac8f7..b8e2911 100644
--- a/src/com/android/settings/network/telephony/CallsDefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/CallsDefaultSubscriptionController.java
@@ -45,10 +45,6 @@
 
     @Override
     public CharSequence getSummary() {
-        if (Utils.isProviderModelEnabled(mContext)) {
-            return MobileNetworkUtils.getPreferredStatus(isRtlMode(), mContext, mManager, true);
-        } else {
-            return super.getSummary();
-        }
+        return MobileNetworkUtils.getPreferredStatus(isRtlMode(), mContext, mManager, true);
     }
 }
diff --git a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
index d21d584..168e69d 100644
--- a/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/DefaultSubscriptionController.java
@@ -94,12 +94,7 @@
 
     @Override
     public int getAvailabilityStatus(int subId) {
-        final List<SubscriptionInfo> subs = SubscriptionUtil.getActiveSubscriptions(mManager);
-        if (subs.size() > 1 || Utils.isProviderModelEnabled(mContext)) {
-            return AVAILABLE;
-        } else {
-            return CONDITIONALLY_UNAVAILABLE;
-        }
+        return AVAILABLE;
     }
 
     @OnLifecycleEvent(ON_RESUME)
@@ -162,7 +157,7 @@
         final ArrayList<CharSequence> displayNames = new ArrayList<>();
         final ArrayList<CharSequence> subscriptionIds = new ArrayList<>();
 
-        if (Utils.isProviderModelEnabled(mContext) && subs.size() == 1) {
+        if (subs.size() == 1) {
             mPreference.setEnabled(false);
             mPreference.setSummary(SubscriptionUtil.getUniqueSubscriptionDisplayName(
                     subs.get(0), mContext));
@@ -190,6 +185,7 @@
             subscriptionIds.add(Integer.toString(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
         }
 
+        mPreference.setEnabled(true);
         mPreference.setEntries(displayNames.toArray(new CharSequence[0]));
         mPreference.setEntryValues(subscriptionIds.toArray(new CharSequence[0]));
 
diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java
index 7ec31be..22bb581 100644
--- a/src/com/android/settings/network/telephony/MobileDataSlice.java
+++ b/src/com/android/settings/network/telephony/MobileDataSlice.java
@@ -146,6 +146,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
+
+    @Override
     public Class<? extends SliceBackgroundWorker> getBackgroundWorkerClass() {
         return MobileDataWorker.class;
     }
diff --git a/src/com/android/settings/network/telephony/MobileNetworkActivity.java b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
index efb5f8c..bbff57d 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkActivity.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
@@ -207,6 +207,7 @@
     protected void runSubscriptionUpdate(Runnable onUpdateRemaining) {
         SubscriptionInfo subInfo = getSubscription(mCurSubscriptionId, null);
         if (subInfo == null) {
+            onUpdateRemaining.run();
             tryToFinishActivity();
             return;
         }
diff --git a/src/com/android/settings/network/telephony/NetworkScanHelper.java b/src/com/android/settings/network/telephony/NetworkScanHelper.java
index e0a9c5e..740b6bb 100644
--- a/src/com/android/settings/network/telephony/NetworkScanHelper.java
+++ b/src/com/android/settings/network/telephony/NetworkScanHelper.java
@@ -227,6 +227,7 @@
                     mExecutor,
                     mInternalNetworkScanCallback);
             if (mNetworkScanRequester == null) {
+                Log.d(TAG, "mNetworkScanRequester == null");
                 onError(NetworkScan.ERROR_RADIO_INTERFACE_ERROR);
             }
         }
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index 813cc74..9faecbb 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
+import android.content.Intent;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -50,6 +51,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -97,7 +99,11 @@
 
         mUseNewApi = getContext().getResources().getBoolean(
                 com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
-        mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);
+        Intent intent = getActivity().getIntent();
+        if (intent != null) {
+            mSubId = intent.getIntExtra(Settings.EXTRA_SUB_ID,
+                    SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        }
 
         mPreferenceCategory = findPreference(PREF_KEY_NETWORK_OPERATORS);
         mStatusMessagePreference = new Preference(getContext());
@@ -120,13 +126,12 @@
         mIsAggregationEnabled = getContext().getResources().getBoolean(
                 R.bool.config_network_selection_list_aggregation_enabled);
         Log.d(TAG, "init: mUseNewApi:" + mUseNewApi
-                + " ,mIsAggregationEnabled:" + mIsAggregationEnabled);
+                + " ,mIsAggregationEnabled:" + mIsAggregationEnabled + " ,mSubId:" + mSubId);
     }
 
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
         final Activity activity = getActivity();
         if (activity != null) {
             mProgressHeader = setPinnedHeaderView(R.layout.progress_header)
@@ -326,12 +331,19 @@
                     CellInfoUtil.getCellIdentityMccMnc(cellInfo.getCellIdentity()));
             Class className = cellInfo.getClass();
 
-            if (aggregatedList.stream().anyMatch(
+            Optional<CellInfo> itemInTheList = aggregatedList.stream().filter(
                     item -> {
                         String itemPlmn = CellInfoUtil.getNetworkTitle(item.getCellIdentity(),
                                 CellInfoUtil.getCellIdentityMccMnc(item.getCellIdentity()));
                         return itemPlmn.equals(plmn) && item.getClass().equals(className);
-                    })) {
+                    })
+                    .findFirst();
+            if (itemInTheList.isPresent()) {
+                if (cellInfo.isRegistered() && !itemInTheList.get().isRegistered()) {
+                    // Adding the registered cellinfo item into list. If there are two registered
+                    // cellinfo items, then select first one from source list.
+                    aggregatedList.set(aggregatedList.indexOf(itemInTheList.get()), cellInfo);
+                }
                 continue;
             }
             aggregatedList.add(cellInfo);
diff --git a/src/com/android/settings/network/telephony/NrAdvancedCallingPreferenceController.java b/src/com/android/settings/network/telephony/NrAdvancedCallingPreferenceController.java
index 7615fe3..b585ece 100644
--- a/src/com/android/settings/network/telephony/NrAdvancedCallingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/NrAdvancedCallingPreferenceController.java
@@ -46,6 +46,7 @@
     Preference mPreference;
     private TelephonyManager mTelephonyManager;
     private PhoneCallStateTelephonyCallback mTelephonyCallback;
+    private boolean mIsVonrEnabledFromCarrierConfig = false;
     private boolean mIsVonrVisibleFromCarrierConfig = false;
     private boolean mIsNrEnableFromCarrierConfig = false;
     private boolean mHas5gCapability = false;
@@ -83,6 +84,9 @@
         if (carrierConfig == null) {
             return this;
         }
+        mIsVonrEnabledFromCarrierConfig = carrierConfig.getBoolean(
+            CarrierConfigManager.KEY_VONR_ENABLED_BOOL);
+
         mIsVonrVisibleFromCarrierConfig = carrierConfig.getBoolean(
                 CarrierConfigManager.KEY_VONR_SETTING_VISIBILITY_BOOL);
 
@@ -92,6 +96,7 @@
 
         Log.d(TAG, "mHas5gCapability: " + mHas5gCapability
                 + ",mIsNrEnabledFromCarrierConfig: " + mIsNrEnableFromCarrierConfig
+                + ",mIsVonrEnabledFromCarrierConfig: " + mIsVonrEnabledFromCarrierConfig
                 + ",mIsVonrVisibleFromCarrierConfig: " + mIsVonrVisibleFromCarrierConfig);
         return this;
     }
@@ -100,7 +105,10 @@
     public int getAvailabilityStatus(int subId) {
         init(subId);
 
-        if (mHas5gCapability && mIsNrEnableFromCarrierConfig && mIsVonrVisibleFromCarrierConfig) {
+        if (mHas5gCapability
+                && mIsNrEnableFromCarrierConfig
+                && mIsVonrEnabledFromCarrierConfig
+                && mIsVonrVisibleFromCarrierConfig) {
             return AVAILABLE;
         }
         return CONDITIONALLY_UNAVAILABLE;
diff --git a/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java b/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
index a73c621..68ebe84 100644
--- a/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
+++ b/src/com/android/settings/network/telephony/SmsDefaultSubscriptionController.java
@@ -61,10 +61,6 @@
 
     @Override
     public CharSequence getSummary() {
-        if (Utils.isProviderModelEnabled(mContext)) {
-            return MobileNetworkUtils.getPreferredStatus(isRtlMode(), mContext, mManager, false);
-        } else {
-            return super.getSummary();
-        }
+        return MobileNetworkUtils.getPreferredStatus(isRtlMode(), mContext, mManager, false);
     }
 }
diff --git a/src/com/android/settings/network/telephony/TelephonyTogglePreferenceController.java b/src/com/android/settings/network/telephony/TelephonyTogglePreferenceController.java
index 7fe5f1d..e3609cb 100644
--- a/src/com/android/settings/network/telephony/TelephonyTogglePreferenceController.java
+++ b/src/com/android/settings/network/telephony/TelephonyTogglePreferenceController.java
@@ -65,6 +65,12 @@
         return false;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        // not needed since it's not sliceable
+        return NO_RES;
+    }
+
     /**
      * Get carrier config based on specific subscription id.
      *
diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
index 997235c..028c4e7 100644
--- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
@@ -20,9 +20,8 @@
 import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
 
 import android.app.ProgressDialog;
-import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.os.Bundle;
+import android.content.Intent;
 import android.os.Handler;
 import android.os.HandlerExecutor;
 import android.os.Looper;
@@ -43,10 +42,8 @@
 import androidx.preference.SwitchPreference;
 
 import com.android.settings.R;
-import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.network.AllowedNetworkTypesListener;
 import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.network.telephony.NetworkSelectSettings;
 import com.android.settings.network.telephony.TelephonyTogglePreferenceController;
 import com.android.settingslib.utils.ThreadUtils;
 
@@ -151,25 +148,26 @@
     public boolean setChecked(boolean isChecked) {
         if (isChecked) {
             setAutomaticSelectionMode();
-            return false;
         } else {
-            final Bundle bundle = new Bundle();
-            bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
-            new SubSettingLauncher(mContext)
-                    .setDestination(NetworkSelectSettings.class.getName())
-                    .setSourceMetricsCategory(SettingsEnums.MOBILE_NETWORK_SELECT)
-                    .setTitleRes(R.string.choose_network_title)
-                    .setArguments(bundle)
-                    .launch();
-            return false;
+            if (mSwitchPreference != null) {
+                Intent intent = new Intent();
+                intent.setClassName("com.android.settings",
+                        "com.android.settings.Settings$NetworkSelectActivity");
+                intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
+                mSwitchPreference.setIntent(intent);
+            }
         }
+        return false;
     }
 
     @VisibleForTesting
     Future setAutomaticSelectionMode() {
         final long startMillis = SystemClock.elapsedRealtime();
         showAutoSelectProgressBar();
-        mSwitchPreference.setEnabled(false);
+        if (mSwitchPreference != null) {
+            mSwitchPreference.setIntent(null);
+            mSwitchPreference.setEnabled(false);
+        }
         return ThreadUtils.postOnBackgroundThread(() -> {
             // set network selection mode in background
             mTelephonyManager.setNetworkSelectionModeAutomatic();
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
index 4047009..54f5ce1 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
@@ -19,14 +19,12 @@
 import static androidx.lifecycle.Lifecycle.Event.ON_START;
 import static androidx.lifecycle.Lifecycle.Event.ON_STOP;
 
-import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.os.Bundle;
+import android.content.Intent;
 import android.provider.Settings;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
-import android.text.TextUtils;
 
 import androidx.lifecycle.Lifecycle;
 import androidx.lifecycle.LifecycleObserver;
@@ -35,10 +33,8 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
-import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.network.AllowedNetworkTypesListener;
 import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.network.telephony.NetworkSelectSettings;
 import com.android.settings.network.telephony.TelephonyBasePreferenceController;
 
 /**
@@ -102,6 +98,12 @@
         super.updateState(preference);
         preference.setEnabled(mTelephonyManager.getNetworkSelectionMode()
                 != TelephonyManager.NETWORK_SELECTION_MODE_AUTO);
+
+        Intent intent = new Intent();
+        intent.setClassName("com.android.settings",
+                "com.android.settings.Settings$NetworkSelectActivity");
+        intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
+        preference.setIntent(intent);
     }
 
     @Override
@@ -114,23 +116,6 @@
         }
     }
 
-    @Override
-    public boolean handlePreferenceTreeClick(Preference preference) {
-        if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
-            final Bundle bundle = new Bundle();
-            bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
-            new SubSettingLauncher(mContext)
-                    .setDestination(NetworkSelectSettings.class.getName())
-                    .setSourceMetricsCategory(SettingsEnums.MOBILE_NETWORK_SELECT)
-                    .setTitleRes(R.string.choose_network_title)
-                    .setArguments(bundle)
-                    .launch();
-            return true;
-        }
-
-        return false;
-    }
-
     public OpenNetworkSelectPagePreferenceController init(Lifecycle lifecycle, int subId) {
         mSubId = subId;
         mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
diff --git a/src/com/android/settings/nfc/NfcPreferenceController.java b/src/com/android/settings/nfc/NfcPreferenceController.java
index b30e7c3..483fead 100644
--- a/src/com/android/settings/nfc/NfcPreferenceController.java
+++ b/src/com/android/settings/nfc/NfcPreferenceController.java
@@ -27,6 +27,7 @@
 
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.slices.SliceBackgroundWorker;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -58,7 +59,7 @@
             return;
         }
 
-        mPreference = (MainSwitchPreference) screen.findPreference(getPreferenceKey());
+        mPreference = screen.findPreference(getPreferenceKey());
         mPreference.addOnSwitchChangeListener(this);
         mNfcEnabler = new NfcEnabler(mContext, mPreference);
     }
@@ -104,6 +105,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_connected_devices;
+    }
+
+    @Override
     public Class<? extends SliceBackgroundWorker> getBackgroundWorkerClass() {
         return NfcSliceWorker.class;
     }
diff --git a/src/com/android/settings/nfc/SecureNfcPreferenceController.java b/src/com/android/settings/nfc/SecureNfcPreferenceController.java
index 4e548d1..e1d27d0 100644
--- a/src/com/android/settings/nfc/SecureNfcPreferenceController.java
+++ b/src/com/android/settings/nfc/SecureNfcPreferenceController.java
@@ -21,6 +21,7 @@
 import androidx.preference.PreferenceScreen;
 import androidx.preference.SwitchPreference;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnPause;
@@ -82,6 +83,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_connected_devices;
+    }
+
+    @Override
     public void onResume() {
         if (mSecureNfcEnabler != null) {
             mSecureNfcEnabler.resume();
diff --git a/src/com/android/settings/notification/BadgingNotificationPreferenceController.java b/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
index 613204b..69d95a8 100644
--- a/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
@@ -30,6 +30,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -88,6 +89,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_notifications;
+    }
+
+    @Override
     public boolean isChecked() {
         return Settings.Secure.getInt(mContext.getContentResolver(),
                 NOTIFICATION_BADGING, ON) == ON;
diff --git a/src/com/android/settings/notification/BubbleNotificationPreferenceController.java b/src/com/android/settings/notification/BubbleNotificationPreferenceController.java
index 37723b1..eeb9924 100644
--- a/src/com/android/settings/notification/BubbleNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/BubbleNotificationPreferenceController.java
@@ -89,6 +89,12 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        // not needed since it's not sliceable
+        return NO_RES;
+    }
+
+    @Override
     public boolean isChecked() {
         return Settings.Global.getInt(mContext.getContentResolver(),
                 NOTIFICATION_BUBBLES, ON) == ON;
diff --git a/src/com/android/settings/notification/NotificationAssistantPreferenceController.java b/src/com/android/settings/notification/NotificationAssistantPreferenceController.java
index bdbc478..91031c8 100644
--- a/src/com/android/settings/notification/NotificationAssistantPreferenceController.java
+++ b/src/com/android/settings/notification/NotificationAssistantPreferenceController.java
@@ -24,6 +24,7 @@
 
 import androidx.fragment.app.Fragment;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -73,6 +74,11 @@
         }
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_notifications;
+    }
+
     protected void setNotificationAssistantGranted(ComponentName cn) {
         if (Settings.Secure.getIntForUser(mContext.getContentResolver(),
                 Settings.Secure.NAS_SETTINGS_UPDATED, 0, mUserId) == 0) {
diff --git a/src/com/android/settings/notification/PulseNotificationPreferenceController.java b/src/com/android/settings/notification/PulseNotificationPreferenceController.java
index 7885520..ad53fc3 100644
--- a/src/com/android/settings/notification/PulseNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/PulseNotificationPreferenceController.java
@@ -28,6 +28,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
 import com.android.settingslib.core.lifecycle.events.OnPause;
@@ -86,6 +87,11 @@
                 isChecked ? ON : OFF);
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_notifications;
+    }
+
     class SettingObserver extends ContentObserver {
 
         private final Uri NOTIFICATION_LIGHT_PULSE_URI =
diff --git a/src/com/android/settings/notification/RedactNotificationPreferenceController.java b/src/com/android/settings/notification/RedactNotificationPreferenceController.java
index d0326bb..2d27184 100644
--- a/src/com/android/settings/notification/RedactNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/RedactNotificationPreferenceController.java
@@ -32,6 +32,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.RestrictedLockUtils;
@@ -147,6 +148,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_notifications;
+    }
+
+    @Override
     public void onStart() {
         mContext.getContentResolver().registerContentObserver(
                 Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS),
@@ -172,7 +178,8 @@
 
     private boolean getAllowPrivateNotifications(int userId) {
         return Settings.Secure.getIntForUser(mContext.getContentResolver(),
-                LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 1, userId) != 0;
+                LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 1, userId) != 0
+                && getEnforcedAdmin(userId) == null;
     }
 
     private boolean getLockscreenNotificationsEnabled(int userId) {
diff --git a/src/com/android/settings/notification/SilentStatusBarPreferenceController.java b/src/com/android/settings/notification/SilentStatusBarPreferenceController.java
index 0585382..4c4c99d 100644
--- a/src/com/android/settings/notification/SilentStatusBarPreferenceController.java
+++ b/src/com/android/settings/notification/SilentStatusBarPreferenceController.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -52,4 +53,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_notifications;
+    }
 }
diff --git a/src/com/android/settings/notification/SnoozeNotificationPreferenceController.java b/src/com/android/settings/notification/SnoozeNotificationPreferenceController.java
index 03170e4..2c89f74 100644
--- a/src/com/android/settings/notification/SnoozeNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/SnoozeNotificationPreferenceController.java
@@ -21,10 +21,11 @@
 import android.content.Context;
 import android.provider.Settings;
 
-import com.android.settings.core.TogglePreferenceController;
-
 import androidx.annotation.VisibleForTesting;
 
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
 public class SnoozeNotificationPreferenceController extends TogglePreferenceController {
 
     private static final String TAG = "SnoozeNotifPrefContr";
@@ -53,4 +54,9 @@
         return Settings.Secure.putInt(mContext.getContentResolver(),
                 SHOW_NOTIFICATION_SNOOZE, isChecked ? ON : OFF);
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_notifications;
+    }
 }
diff --git a/src/com/android/settings/notification/SpatialAudioPreferenceController.java b/src/com/android/settings/notification/SpatialAudioPreferenceController.java
new file mode 100644
index 0000000..7bca516
--- /dev/null
+++ b/src/com/android/settings/notification/SpatialAudioPreferenceController.java
@@ -0,0 +1,62 @@
+/*
+ * 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.R;
+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();
+    }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_notifications;
+    }
+}
diff --git a/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java b/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java
index b32f922..d170159 100644
--- a/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java
+++ b/src/com/android/settings/notification/VolumeSeekBarPreferenceController.java
@@ -23,6 +23,7 @@
 import androidx.lifecycle.OnLifecycleEvent;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.notification.VolumeSeekBarPreference.Callback;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
@@ -76,6 +77,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_sound;
+    }
+
+    @Override
     public int getSliderPosition() {
         if (mPreference != null) {
             return mPreference.getProgress();
diff --git a/src/com/android/settings/notification/app/NotificationSettings.java b/src/com/android/settings/notification/app/NotificationSettings.java
index 99f067d..426625d 100644
--- a/src/com/android/settings/notification/app/NotificationSettings.java
+++ b/src/com/android/settings/notification/app/NotificationSettings.java
@@ -334,10 +334,10 @@
                 }
                 continue;
             }
-            // TODO(78660939): This should actually start a new task
             mAppRow.settingsIntent = intent
                     .setPackage(null)
-                    .setClassName(activityInfo.packageName, activityInfo.name);
+                    .setClassName(activityInfo.packageName, activityInfo.name)
+                    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
             if (mChannel != null) {
                 mAppRow.settingsIntent.putExtra(Notification.EXTRA_CHANNEL_ID, mChannel.getId());
             }
diff --git a/src/com/android/settings/notification/history/NotificationStation.java b/src/com/android/settings/notification/history/NotificationStation.java
index bd5b83a..3ed8cdf 100644
--- a/src/com/android/settings/notification/history/NotificationStation.java
+++ b/src/com/android/settings/notification/history/NotificationStation.java
@@ -436,7 +436,7 @@
         }
         mRanking.getRanking(info.key, rank);
         info.alerted = rank.getLastAudiblyAlertedMillis() > 0;
-        info.visuallyInterruptive = rank.visuallyInterruptive();
+        info.visuallyInterruptive = rank.isTextChanged();
         info.channel = rank.getChannel();
         info.rankingExtra = generateRankingExtraText(info);
     }
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/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
index 170c699..5ce8b48 100644
--- a/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
+++ b/src/com/android/settings/notification/zen/ZenModeRuleSettingsBase.java
@@ -59,6 +59,7 @@
 
     @Override
     public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
         mContext = getActivity();
 
         final Intent intent = getActivity().getIntent();
@@ -81,7 +82,6 @@
             return;
         }
 
-        super.onCreate(icicle);
         mCustomBehaviorPreference = getPreferenceScreen().findPreference(CUSTOM_BEHAVIOR_KEY);
         mCustomBehaviorPreference.setOnPreferenceClickListener(
                 new Preference.OnPreferenceClickListener() {
diff --git a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
index 5ea01ea..1f553a2 100644
--- a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
+++ b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java
@@ -120,7 +120,7 @@
         final String screenTitle = context.getText(R.string.zen_mode_settings_title).toString();
         return SliceBuilderUtils.buildSearchResultPageIntent(context,
                 ZenModeSettings.class.getName(), ZEN_MODE_SLICE_KEY, screenTitle,
-                SettingsEnums.NOTIFICATION_ZEN_MODE)
+                SettingsEnums.NOTIFICATION_ZEN_MODE, R.string.menu_key_notifications)
                 .setClassName(context.getPackageName(), SubSettings.class.getName())
                 .setData(contentUri);
     }
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/panel/NfcPanel.java b/src/com/android/settings/panel/NfcPanel.java
index c1e15e8..6b1e435 100644
--- a/src/com/android/settings/panel/NfcPanel.java
+++ b/src/com/android/settings/panel/NfcPanel.java
@@ -62,7 +62,8 @@
                 AdvancedConnectedDeviceDashboardFragment.class.getName(),
                 null /* key */,
                 screenTitle,
-                SettingsEnums.SETTINGS_CONNECTED_DEVICE_CATEGORY);
+                SettingsEnums.SETTINGS_CONNECTED_DEVICE_CATEGORY,
+                R.string.menu_key_connected_devices);
         intent.setClassName(mContext.getPackageName(), SubSettings.class.getName());
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         return intent;
diff --git a/src/com/android/settings/panel/PanelFragment.java b/src/com/android/settings/panel/PanelFragment.java
index cd2bb50..04ae311 100644
--- a/src/com/android/settings/panel/PanelFragment.java
+++ b/src/com/android/settings/panel/PanelFragment.java
@@ -100,10 +100,8 @@
     private TextView mHeaderTitle;
     private TextView mHeaderSubtitle;
     private int mMaxHeight;
-    private View mFooterDivider;
     private boolean mPanelCreating;
     private ProgressBar mProgressBar;
-    private View mHeaderDivider;
 
     private final Map<Uri, LiveData<Slice>> mSliceLiveData = new LinkedHashMap<>();
 
@@ -210,9 +208,7 @@
         mHeaderLayout = mLayoutView.findViewById(R.id.header_layout);
         mHeaderTitle = mLayoutView.findViewById(R.id.header_title);
         mHeaderSubtitle = mLayoutView.findViewById(R.id.header_subtitle);
-        mFooterDivider = mLayoutView.findViewById(R.id.footer_divider);
         mProgressBar = mLayoutView.findViewById(R.id.progress_bar);
-        mHeaderDivider = mLayoutView.findViewById(R.id.header_divider);
 
         // Make the panel layout gone here, to avoid janky animation when updating from old panel.
         // We will make it visible once the panel is ready to load.
@@ -257,8 +253,6 @@
             enableTitle(title);
         }
 
-        mFooterDivider.setVisibility(View.GONE);
-
         mSeeMoreButton.setOnClickListener(getSeeMoreListener());
         mDoneButton.setOnClickListener(getCloseListener());
 
@@ -324,10 +318,8 @@
     private void updateProgressBar() {
         if (mPanel.isProgressBarVisible()) {
             mProgressBar.setVisibility(View.VISIBLE);
-            mHeaderDivider.setVisibility(View.GONE);
         } else {
             mProgressBar.setVisibility(View.GONE);
-            mHeaderDivider.setVisibility(View.VISIBLE);
         }
     }
 
diff --git a/src/com/android/settings/panel/PanelSlicesAdapter.java b/src/com/android/settings/panel/PanelSlicesAdapter.java
index d398074..2486361 100644
--- a/src/com/android/settings/panel/PanelSlicesAdapter.java
+++ b/src/com/android/settings/panel/PanelSlicesAdapter.java
@@ -16,7 +16,8 @@
 
 package com.android.settings.panel;
 
-import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI;
+import static android.app.slice.Slice.HINT_ERROR;
+import static android.app.slice.SliceItem.FORMAT_SLICE;
 
 import android.app.settings.SettingsEnums;
 import android.content.Context;
@@ -31,6 +32,7 @@
 import androidx.lifecycle.LiveData;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.slice.Slice;
+import androidx.slice.SliceItem;
 import androidx.slice.widget.SliceView;
 
 import com.android.settings.R;
@@ -113,8 +115,6 @@
     public class SliceRowViewHolder extends RecyclerView.ViewHolder
             implements DividerItemDecoration.DividedViewHolder {
 
-        private boolean mDividerAllowedAbove = true;
-
         @VisibleForTesting
         final SliceView sliceView;
         @VisibleForTesting
@@ -137,8 +137,10 @@
 
             // Do not show the divider above media devices switcher slice per request
             final Slice slice = sliceLiveData.getValue();
-            if (slice == null || slice.getUri().equals(MEDIA_OUTPUT_INDICATOR_SLICE_URI)) {
-                mDividerAllowedAbove = false;
+
+            // Hides slice which reports with error hint or not contain any slice sub-item.
+            if (slice == null || !isValidSlice(slice)) {
+                sliceView.setVisibility(View.GONE);
             }
 
             // Log Panel interaction
@@ -156,14 +158,26 @@
             );
         }
 
+        private boolean isValidSlice(Slice slice) {
+            if (slice.getHints().contains(HINT_ERROR)) {
+                return false;
+            }
+            for (SliceItem item : slice.getItems()) {
+                if (item.getFormat().equals(FORMAT_SLICE)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
         @Override
         public boolean isDividerAllowedAbove() {
-            return mDividerAllowedAbove;
+            return false;
         }
 
         @Override
         public boolean isDividerAllowedBelow() {
-            return true;
+            return false;
         }
     }
 }
diff --git a/src/com/android/settings/panel/WifiPanel.java b/src/com/android/settings/panel/WifiPanel.java
index 3b36a57..95ebb33 100644
--- a/src/com/android/settings/panel/WifiPanel.java
+++ b/src/com/android/settings/panel/WifiPanel.java
@@ -62,10 +62,11 @@
         final String screenTitle =
                 mContext.getText(R.string.wifi_settings).toString();
         final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
-                    WifiSettings.class.getName(),
-                    null /* key */,
-                    screenTitle,
-                    SettingsEnums.WIFI);
+                WifiSettings.class.getName(),
+                null /* key */,
+                screenTitle,
+                SettingsEnums.WIFI,
+                R.string.menu_key_network);
         intent.setClassName(mContext.getPackageName(), SubSettings.class.getName());
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         return intent;
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 8464a2f..016906a 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -21,6 +21,7 @@
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_CREDENTIAL;
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_UNIFICATION_PROFILE_ID;
 
+import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
@@ -35,6 +36,7 @@
 import android.util.TypedValue;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
@@ -491,11 +493,18 @@
             getActivity().setTitle(msg);
         }
 
+        @SuppressLint("ClickableViewAccessibility")
         @Override
         public View onCreateView(LayoutInflater inflater, ViewGroup container,
                 Bundle savedInstanceState) {
             final GlifLayout layout = (GlifLayout) inflater.inflate(
                     R.layout.choose_lock_pattern, container, false);
+            layout.findViewById(R.id.lockPattern).setOnTouchListener((v, event) -> {
+                if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                    v.getParent().requestDisallowInterceptTouchEvent(true);
+                }
+                return false;
+            });
             updateActivityTitle();
             layout.setHeaderText(getActivity().getTitle());
             layout.getHeaderTextView().setAccessibilityLiveRegion(ACCESSIBILITY_LIVE_REGION_POLITE);
diff --git a/src/com/android/settings/password/ConfirmLockPattern.java b/src/com/android/settings/password/ConfirmLockPattern.java
index a1a7ea7..ec5efcf 100644
--- a/src/com/android/settings/password/ConfirmLockPattern.java
+++ b/src/com/android/settings/password/ConfirmLockPattern.java
@@ -17,6 +17,7 @@
 package com.android.settings.password;
 
 import android.annotation.Nullable;
+import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.settings.SettingsEnums;
 import android.content.Intent;
@@ -28,6 +29,7 @@
 import android.os.storage.StorageManager;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.animation.AnimationUtils;
@@ -108,6 +110,7 @@
 
         }
 
+        @SuppressLint("ClickableViewAccessibility")
         @Override
         public View onCreateView(LayoutInflater inflater, ViewGroup container,
                 Bundle savedInstanceState) {
@@ -146,6 +149,12 @@
             mLockPatternView.setInStealthMode(!mLockPatternUtils.isVisiblePatternEnabled(
                     mEffectiveUserId));
             mLockPatternView.setOnPatternListener(mConfirmExistingLockPatternListener);
+            mLockPatternView.setOnTouchListener((v, event) -> {
+                if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                    v.getParent().requestDisallowInterceptTouchEvent(true);
+                }
+                return false;
+            });
             updateStage(Stage.NeedToUnlock);
 
             if (savedInstanceState == null) {
diff --git a/src/com/android/settings/password/PasswordUtils.java b/src/com/android/settings/password/PasswordUtils.java
index 5b75033..e8e309c 100644
--- a/src/com/android/settings/password/PasswordUtils.java
+++ b/src/com/android/settings/password/PasswordUtils.java
@@ -79,18 +79,20 @@
     }
 
     /** Crashes the calling application and provides it with {@code message}. */
-    public static void crashCallingApplication(IBinder activityToken, String message) {
+    public static void crashCallingApplication(IBinder activityToken, String message,
+            int exceptionTypeId) {
         IActivityManager am = ActivityManager.getService();
         try {
             int uid = am.getLaunchedFromUid(activityToken);
             int userId = UserHandle.getUserId(uid);
-            am.crashApplication(
+            am.crashApplicationWithType(
                     uid,
                     /* initialPid= */ -1,
                     getCallingAppPackageName(activityToken),
                     userId,
                     message,
-                    false);
+                    false,
+                    exceptionTypeId);
         } catch (RemoteException e) {
             Log.v(TAG, "Could not talk to activity manager.", e);
         }
diff --git a/src/com/android/settings/password/SetNewPasswordActivity.java b/src/com/android/settings/password/SetNewPasswordActivity.java
index 2282587..fc664ec 100644
--- a/src/com/android/settings/password/SetNewPasswordActivity.java
+++ b/src/com/android/settings/password/SetNewPasswordActivity.java
@@ -29,6 +29,7 @@
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
 
 import android.app.Activity;
+import android.app.RemoteServiceException.MissingRequestPasswordComplexityPermissionException;
 import android.app.admin.DevicePolicyManager;
 import android.app.admin.DevicePolicyManager.PasswordComplexity;
 import android.app.admin.PasswordMetrics;
@@ -101,7 +102,8 @@
                 PasswordUtils.crashCallingApplication(activityToken,
                         "Must have permission "
                                 + REQUEST_PASSWORD_COMPLEXITY + " to use extra "
-                                + EXTRA_PASSWORD_COMPLEXITY);
+                                + EXTRA_PASSWORD_COMPLEXITY,
+                        MissingRequestPasswordComplexityPermissionException.TYPE_ID);
                 finish();
                 return;
             }
diff --git a/src/com/android/settings/password/SetupChooseLockGeneric.java b/src/com/android/settings/password/SetupChooseLockGeneric.java
index 3261b81..968af32 100644
--- a/src/com/android/settings/password/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/password/SetupChooseLockGeneric.java
@@ -21,6 +21,7 @@
 
 import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;
 
+import android.app.RemoteServiceException.MissingRequestPasswordComplexityPermissionException;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
@@ -79,7 +80,8 @@
             if (!hasPermission) {
                 PasswordUtils.crashCallingApplication(activityToken,
                         "Must have permission " + REQUEST_PASSWORD_COMPLEXITY
-                                + " to use extra " + EXTRA_PASSWORD_COMPLEXITY);
+                                + " to use extra " + EXTRA_PASSWORD_COMPLEXITY,
+                        MissingRequestPasswordComplexityPermissionException.TYPE_ID);
                 finish();
                 return;
             }
diff --git a/src/com/android/settings/privacy/EnableContentCapturePreferenceController.java b/src/com/android/settings/privacy/EnableContentCapturePreferenceController.java
index 47610aa..3cf72b2 100644
--- a/src/com/android/settings/privacy/EnableContentCapturePreferenceController.java
+++ b/src/com/android/settings/privacy/EnableContentCapturePreferenceController.java
@@ -18,8 +18,8 @@
 
 import android.annotation.NonNull;
 import android.content.Context;
-import android.provider.Settings;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.utils.ContentCaptureUtils;
 
@@ -46,4 +46,9 @@
                 && ContentCaptureUtils.getServiceSettingsComponentName() == null;
         return available ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_privacy;
+    }
 }
diff --git a/src/com/android/settings/privacy/EnableContentCaptureWithServiceSettingsPreferenceController.java b/src/com/android/settings/privacy/EnableContentCaptureWithServiceSettingsPreferenceController.java
index 77aab34..c3878d5 100644
--- a/src/com/android/settings/privacy/EnableContentCaptureWithServiceSettingsPreferenceController.java
+++ b/src/com/android/settings/privacy/EnableContentCaptureWithServiceSettingsPreferenceController.java
@@ -28,8 +28,8 @@
 
 import androidx.appcompat.app.AlertDialog;
 import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.dashboard.profileselector.UserAdapter;
 import com.android.settings.utils.ContentCaptureUtils;
@@ -88,6 +88,11 @@
         return available ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_privacy;
+    }
+
     private static final class ProfileSelectDialog {
         public static void show(Context context, Preference pref) {
             final UserManager userManager = UserManager.get(context);
diff --git a/src/com/android/settings/privacy/SensorToggleController.java b/src/com/android/settings/privacy/SensorToggleController.java
index 50b023b..53b1a2f 100644
--- a/src/com/android/settings/privacy/SensorToggleController.java
+++ b/src/com/android/settings/privacy/SensorToggleController.java
@@ -22,6 +22,7 @@
 
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.utils.SensorPrivacyManagerHelper;
 import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -80,4 +81,9 @@
                 (sensor, blocked) -> updateState(screen.findPreference(mPreferenceKey)),
                 mCallbackExecutor);
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_privacy;
+    }
 }
diff --git a/src/com/android/settings/privacy/ShowClipAccessNotificationPreferenceController.java b/src/com/android/settings/privacy/ShowClipAccessNotificationPreferenceController.java
index cf05ff4..ad57073 100644
--- a/src/com/android/settings/privacy/ShowClipAccessNotificationPreferenceController.java
+++ b/src/com/android/settings/privacy/ShowClipAccessNotificationPreferenceController.java
@@ -27,6 +27,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -72,6 +73,11 @@
         mPreference = screen.findPreference(getPreferenceKey());
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_privacy;
+    }
+
     /**
      * Registers a DeviceConfig listener on start.
      */
diff --git a/src/com/android/settings/privacy/WorkPolicyInfoPreferenceController.java b/src/com/android/settings/privacy/WorkPolicyInfoPreferenceController.java
index 45c2c21..977d1bf 100644
--- a/src/com/android/settings/privacy/WorkPolicyInfoPreferenceController.java
+++ b/src/com/android/settings/privacy/WorkPolicyInfoPreferenceController.java
@@ -45,7 +45,7 @@
     @Override
     public boolean handlePreferenceTreeClick(Preference preference) {
         if (TextUtils.equals(getPreferenceKey(), preference.getKey())) {
-            mEnterpriseProvider.showWorkPolicyInfo();
+            mEnterpriseProvider.showWorkPolicyInfo(preference.getContext());
             return true;
         }
         return false;
diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java
index 4c39b9c..1785361 100644
--- a/src/com/android/settings/search/SearchFeatureProvider.java
+++ b/src/com/android/settings/search/SearchFeatureProvider.java
@@ -19,24 +19,29 @@
 import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_NO;
 
 import android.annotation.NonNull;
-import android.app.Activity;
 import android.app.ActivityOptions;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.os.Bundle;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Toolbar;
 
+import androidx.fragment.app.FragmentActivity;
+
 import com.android.settings.R;
 import com.android.settings.Utils;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settingslib.search.SearchIndexableResources;
 
 import com.google.android.setupcompat.util.WizardManagerHelper;
 
+import java.util.List;
+
 /**
  * FeatureProvider for Settings Search
  */
@@ -59,6 +64,9 @@
      */
     SearchIndexableResources getSearchIndexableResources();
 
+    /**
+     * @return a package name of settings intelligence.
+     */
     default String getSettingsIntelligencePkgName(Context context) {
         return context.getString(R.string.config_settingsintelligence_package_name);
     }
@@ -66,7 +74,7 @@
     /**
      * Initializes the search toolbar.
      */
-    default void initSearchToolbar(Activity activity, Toolbar toolbar, int pageId) {
+    default void initSearchToolbar(FragmentActivity activity, Toolbar toolbar, int pageId) {
         if (activity == null || toolbar == null) {
             return;
         }
@@ -89,22 +97,38 @@
         navView.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
         navView.setBackground(null);
 
+        final Context context = activity.getApplicationContext();
+        final Intent intent = buildSearchIntent(context, pageId)
+                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        final List<ResolveInfo> resolveInfos =
+                activity.getPackageManager().queryIntentActivities(intent,
+                        PackageManager.MATCH_DEFAULT_ONLY);
+        if (resolveInfos.isEmpty()) {
+            return;
+        }
+
+        final ComponentName searchComponentName = resolveInfos.get(0)
+                .getComponentInfo().getComponentName();
+        // Set a component name since activity embedding requires a component name for
+        // registering a rule.
+        intent.setComponent(searchComponentName);
+        ActivityEmbeddingRulesController.registerTwoPanePairRuleForSettingsHome(
+                context,
+                searchComponentName,
+                intent.getAction(),
+                false /* finishPrimaryWithSecondary */,
+                true /* finishSecondaryWithPrimary */,
+                false /* clearTop */);
+
         toolbar.setOnClickListener(tb -> {
-            final Context context = activity.getApplicationContext();
-            final Intent intent = buildSearchIntent(context, pageId);
-
-            if (activity.getPackageManager().queryIntentActivities(intent,
-                    PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
-                return;
-            }
-
             FeatureFactory.getFactory(context).getSlicesFeatureProvider()
                     .indexSliceDataAsync(context);
 
             FeatureFactory.getFactory(context).getMetricsFeatureProvider()
                     .logSettingsTileClick(KEY_HOMEPAGE_SEARCH_BAR, pageId);
+
             final Bundle bundle = ActivityOptions.makeSceneTransitionAnimation(activity).toBundle();
-            activity.startActivityForResult(intent, REQUEST_CODE, bundle);
+            activity.startActivity(intent, bundle);
         });
     }
 
diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java
index 508d37d..6f90970 100644
--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java
+++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java
@@ -50,7 +50,7 @@
         if (isSettingsPackage || isAllowlistedPackage) {
             return;
         }
-        throw new SecurityException("Search result intents must be called with from a "
+        throw new SecurityException("Search result intents must be called with from an "
                 + "allowlisted package.");
     }
 
diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java
index e930473..8b041b6 100644
--- a/src/com/android/settings/search/SearchResultTrampoline.java
+++ b/src/com/android/settings/search/SearchResultTrampoline.java
@@ -20,46 +20,112 @@
 import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TAB;
 
 import android.app.Activity;
+import android.content.ComponentName;
 import android.content.Intent;
 import android.os.Bundle;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.Log;
 
 import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsApplication;
 import com.android.settings.SubSettings;
+import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
+import com.android.settings.homepage.SettingsHomepageActivity;
 import com.android.settings.overlay.FeatureFactory;
 
+import java.net.URISyntaxException;
+
 /**
  * A trampoline activity that launches setting result page.
  */
 public class SearchResultTrampoline extends Activity {
 
+    private static final String TAG = "SearchResultTrampoline";
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        final ComponentName callingActivity = getCallingActivity();
         // First make sure caller has privilege to launch a search result page.
         FeatureFactory.getFactory(this)
                 .getSearchFeatureProvider()
-                .verifyLaunchSearchResultPageCaller(this, getCallingActivity());
+                .verifyLaunchSearchResultPageCaller(this, callingActivity);
         // Didn't crash, proceed and launch the result as a subsetting.
-        final Intent intent = getIntent();
+        Intent intent = getIntent();
+        final String highlightMenuKey = intent.getStringExtra(
+                Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY);
 
-        // Hack to take EXTRA_FRAGMENT_ARG_KEY from intent and set into
-        // EXTRA_SHOW_FRAGMENT_ARGUMENTS. This is necessary because intent could be from external
-        // caller and args may not persisted.
-        final String settingKey = intent.getStringExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY);
-        final int tab = intent.getIntExtra(EXTRA_SHOW_FRAGMENT_TAB, 0);
-        final Bundle args = new Bundle();
-        args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, settingKey);
-        args.putInt(EXTRA_SHOW_FRAGMENT_TAB, tab);
-        intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
+        final String fragment = intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT);
+        if (!TextUtils.isEmpty(fragment)) {
+            // Hack to take EXTRA_FRAGMENT_ARG_KEY from intent and set into
+            // EXTRA_SHOW_FRAGMENT_ARGUMENTS. This is necessary because intent could be from
+            // external caller and args may not persisted.
+            final String settingKey = intent.getStringExtra(
+                    SettingsActivity.EXTRA_FRAGMENT_ARG_KEY);
+            final int tab = intent.getIntExtra(EXTRA_SHOW_FRAGMENT_TAB, 0);
+            final Bundle args = new Bundle();
+            args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, settingKey);
+            args.putInt(EXTRA_SHOW_FRAGMENT_TAB, tab);
+            intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
 
-        // Reroute request to SubSetting.
-        intent.setClass(this /* context */, SubSettings.class)
-                .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
-        startActivity(intent);
+            // Reroute request to SubSetting.
+            intent.setClass(this /* context */, SubSettings.class);
+        } else {
+            // Direct link case
+            final String intentUriString = intent.getStringExtra(
+                    Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI);
+            if (TextUtils.isEmpty(intentUriString)) {
+                Log.e(TAG, "No EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI for deep link");
+                finish();
+                return;
+            }
+
+            try {
+                intent = Intent.parseUri(intentUriString, Intent.URI_INTENT_SCHEME);
+            } catch (URISyntaxException e) {
+                Log.e(TAG, "Failed to parse deep link intent: " + e);
+                finish();
+                return;
+            }
+        }
+
+        intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+        if (!ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this)) {
+            startActivity(intent);
+        } else if (isSettingsIntelligence(callingActivity)) {
+            // Register SplitPairRule for SubSettings, set clearTop false to prevent unexpected back
+            // navigation behavior.
+            ActivityEmbeddingRulesController.registerSubSettingsPairRule(this,
+                    false /* clearTop */);
+
+            intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK);
+            startActivity(intent);
+
+            // Pass menu key to homepage
+            final SettingsHomepageActivity homeActivity =
+                    ((SettingsApplication) getApplicationContext()).getHomeActivity();
+            if (homeActivity != null) {
+                homeActivity.getMainFragment().setHighlightMenuKey(highlightMenuKey,
+                        /* scrollNeeded= */ true);
+            }
+        } else {
+            // Two-pane case
+            startActivity(SettingsActivity.getTrampolineIntent(intent, highlightMenuKey)
+                    .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+        }
 
         // Done.
         finish();
     }
 
+    private boolean isSettingsIntelligence(ComponentName callingActivity) {
+        return callingActivity != null && TextUtils.equals(
+                callingActivity.getPackageName(),
+                FeatureFactory.getFactory(this).getSearchFeatureProvider()
+                        .getSettingsIntelligencePkgName(this));
+    }
 }
diff --git a/src/com/android/settings/search/SearchStateReceiver.java b/src/com/android/settings/search/SearchStateReceiver.java
new file mode 100644
index 0000000..d1f6f16
--- /dev/null
+++ b/src/com/android/settings/search/SearchStateReceiver.java
@@ -0,0 +1,58 @@
+/*
+ * 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.search;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.settings.SettingsApplication;
+import com.android.settings.homepage.SettingsHomepageActivity;
+
+/**
+ * A broadcast receiver that monitors the search state to show/hide the menu highlight
+ */
+public class SearchStateReceiver extends BroadcastReceiver {
+
+    private static final String TAG = "SearchStateReceiver";
+    private static final String ACTION_SEARCH_START = "com.android.settings.SEARCH_START";
+    private static final String ACTION_SEARCH_EXIT = "com.android.settings.SEARCH_EXIT";
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        if (intent == null) {
+            Log.w(TAG, "Null intent");
+            return;
+        }
+
+        final SettingsHomepageActivity homeActivity =
+                ((SettingsApplication) context.getApplicationContext()).getHomeActivity();
+        if (homeActivity == null) {
+            return;
+        }
+
+        final String action = intent.getAction();
+        Log.d(TAG, "action: " + action);
+        if (TextUtils.equals(ACTION_SEARCH_START, action)) {
+            homeActivity.getMainFragment().setMenuHighlightShowed(false);
+        } else if (TextUtils.equals(ACTION_SEARCH_EXIT, action)) {
+            homeActivity.getMainFragment().setMenuHighlightShowed(true);
+        }
+    }
+}
diff --git a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
index feb9510..d6635a1 100644
--- a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
+++ b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
@@ -365,7 +365,6 @@
                 // The classname and intent information comes from the PreIndexData
                 // This will be more clear when provider conversion is done at PreIndex time.
                 raw.className = bundle.getTargetClass().getName();
-
             }
             rawList.addAll(providerRaws);
         }
diff --git a/src/com/android/settings/security/ShowPasswordPreferenceController.java b/src/com/android/settings/security/ShowPasswordPreferenceController.java
index 472101b..696854a 100644
--- a/src/com/android/settings/security/ShowPasswordPreferenceController.java
+++ b/src/com/android/settings/security/ShowPasswordPreferenceController.java
@@ -58,5 +58,9 @@
                 ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_security;
+    }
 }
 
diff --git a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
index 64ca853..9e82e78 100644
--- a/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
+++ b/src/com/android/settings/security/VisiblePatternProfilePreferenceController.java
@@ -28,6 +28,7 @@
 import androidx.preference.PreferenceScreen;
 
 import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.R;
 import com.android.settings.Utils;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.overlay.FeatureFactory;
@@ -119,6 +120,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_security;
+    }
+
+    @Override
     public void onResume() {
         mPreference.setVisible(isAvailable());
     }
diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java
index 7dab4c0..84b7523 100644
--- a/src/com/android/settings/sim/SimSelectNotification.java
+++ b/src/com/android/settings/sim/SimSelectNotification.java
@@ -52,6 +52,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.HelpTrampoline;
 import com.android.settings.R;
+import com.android.settings.network.MobileNetworkTwoPaneUtils;
 import com.android.settings.network.SubscriptionUtil;
 import com.android.settings.network.telephony.MobileNetworkActivity;
 
@@ -263,7 +264,9 @@
         Intent resultIntent = new Intent(Settings.ACTION_MMS_MESSAGE_SETTING);
         resultIntent.setClass(context, MobileNetworkActivity.class);
         resultIntent.putExtra(Settings.EXTRA_SUB_ID, subId);
-        resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        // MobileNetworkActivity is singleTask, set SplitPairRule to show in 2-pane.
+        MobileNetworkTwoPaneUtils.registerTwoPaneForMobileNetwork(context, resultIntent,
+                Settings.ACTION_MMS_MESSAGE_SETTING);
         PendingIntent resultPendingIntent = PendingIntent.getActivity(context, 0, resultIntent,
                 PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
         builder.setContentIntent(resultPendingIntent);
diff --git a/src/com/android/settings/slices/CustomSliceable.java b/src/com/android/settings/slices/CustomSliceable.java
index d06ad1e..2c807c4 100644
--- a/src/com/android/settings/slices/CustomSliceable.java
+++ b/src/com/android/settings/slices/CustomSliceable.java
@@ -103,6 +103,9 @@
         return true;
     }
 
+    @Override
+    int getSliceHighlightMenuRes();
+
     /**
      * Build an instance of a {@link CustomSliceable} which has a {@link Context}-only constructor.
      */
diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java
index 402e044..4cefa4e 100644
--- a/src/com/android/settings/slices/SliceBuilderUtils.java
+++ b/src/com/android/settings/slices/SliceBuilderUtils.java
@@ -16,6 +16,9 @@
 
 package com.android.settings.slices;
 
+import static android.provider.Settings.EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY;
+
+import static com.android.settings.SettingsActivity.EXTRA_IS_FROM_SLICE;
 import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
 import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_KEY;
 
@@ -202,8 +205,15 @@
     }
 
     public static Intent buildSearchResultPageIntent(Context context, String className, String key,
-            String screenTitle, int sourceMetricsCategory) {
+            String screenTitle, int sourceMetricsCategory, int highlightMenuRes) {
         final Bundle args = new Bundle();
+        String highlightMenuKey = null;
+        if (highlightMenuRes != 0) {
+            highlightMenuKey = context.getString(highlightMenuRes);
+            if (TextUtils.isEmpty(highlightMenuKey)) {
+                Log.w(TAG, "Invalid menu key res from: " + screenTitle);
+            }
+        }
         args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
         final Intent searchDestination = new SubSettingLauncher(context)
                 .setDestination(className)
@@ -211,7 +221,10 @@
                 .setTitleText(screenTitle)
                 .setSourceMetricsCategory(sourceMetricsCategory)
                 .toIntent();
-        searchDestination.putExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key)
+        searchDestination
+                .putExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key)
+                .putExtra(EXTRA_IS_FROM_SLICE, true)
+                .putExtra(EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY, highlightMenuKey)
                 .setAction("com.android.settings.SEARCH_RESULT_TRAMPOLINE")
                 .setComponent(null);
         searchDestination.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -219,13 +232,22 @@
         return searchDestination;
     }
 
+    /**
+     * Build a search result page intent for {@link CustomSliceable}
+     */
+    public static Intent buildSearchResultPageIntent(Context context, String className, String key,
+            String screenTitle, int sourceMetricsCategory, CustomSliceable sliceable) {
+        return buildSearchResultPageIntent(context, className, key, screenTitle,
+                sourceMetricsCategory, sliceable.getSliceHighlightMenuRes());
+    }
+
     public static Intent getContentIntent(Context context, SliceData sliceData) {
         final Uri contentUri = new Uri.Builder().appendPath(sliceData.getKey()).build();
         final String screenTitle = TextUtils.isEmpty(sliceData.getScreenTitle()) ? null
                 : sliceData.getScreenTitle().toString();
         final Intent intent = buildSearchResultPageIntent(context,
                 sliceData.getFragmentClassName(), sliceData.getKey(),
-                screenTitle, 0 /* TODO */);
+                screenTitle, 0 /* TODO */, sliceData.getHighlightMenuRes());
         intent.setClassName(context.getPackageName(), SubSettings.class.getName());
         intent.setData(contentUri);
         return intent;
diff --git a/src/com/android/settings/slices/SliceData.java b/src/com/android/settings/slices/SliceData.java
index 60f5e3f..01b29b2 100644
--- a/src/com/android/settings/slices/SliceData.java
+++ b/src/com/android/settings/slices/SliceData.java
@@ -19,6 +19,7 @@
 import android.annotation.IntDef;
 import android.net.Uri;
 import android.text.TextUtils;
+import android.util.Log;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -50,6 +51,8 @@
         int SLIDER = 2;
     }
 
+    private static final String TAG = "SliceData";
+
     private final String mKey;
 
     private final String mTitle;
@@ -68,6 +71,8 @@
 
     private final String mPreferenceController;
 
+    private final int mHighlightMenuRes;
+
     @SliceType
     private final int mSliceType;
 
@@ -119,6 +124,10 @@
         return mUnavailableSliceSubtitle;
     }
 
+    public int getHighlightMenuRes() {
+        return mHighlightMenuRes;
+    }
+
     public boolean isPublicSlice() {
         return mIsPublicSlice;
     }
@@ -136,6 +145,7 @@
         mSliceType = builder.mSliceType;
         mUnavailableSliceSubtitle = builder.mUnavailableSliceSubtitle;
         mIsPublicSlice = builder.mIsPublicSlice;
+        mHighlightMenuRes = builder.mHighlightMenuRes;
     }
 
     @Override
@@ -175,6 +185,8 @@
 
         private String mUnavailableSliceSubtitle;
 
+        private int mHighlightMenuRes;
+
         private boolean mIsPublicSlice;
 
         public Builder setKey(String key) {
@@ -233,6 +245,11 @@
             return this;
         }
 
+        public Builder setHighlightMenuRes(int highlightMenuRes) {
+            mHighlightMenuRes = highlightMenuRes;
+            return this;
+        }
+
         public Builder setIsPublicSlice(boolean isPublicSlice) {
             mIsPublicSlice = isPublicSlice;
             return this;
@@ -255,6 +272,10 @@
                 throw new InvalidSliceDataException("Preference Controller cannot be empty");
             }
 
+            if (mHighlightMenuRes == 0) {
+                Log.w(TAG, "Highlight menu key res is empty: " + mPrefControllerClassName);
+            }
+
             return new SliceData(this);
         }
 
diff --git a/src/com/android/settings/slices/SliceDataConverter.java b/src/com/android/settings/slices/SliceDataConverter.java
index 5608169..eb08c5f 100644
--- a/src/com/android/settings/slices/SliceDataConverter.java
+++ b/src/com/android/settings/slices/SliceDataConverter.java
@@ -213,6 +213,7 @@
                 final String unavailableSliceSubtitle = bundle.getString(
                         METADATA_UNAVAILABLE_SLICE_SUBTITLE);
                 final boolean isPublicSlice = controller.isPublicSlice();
+                final int highlightMenuRes = controller.getSliceHighlightMenuRes();
 
                 final SliceData xmlSlice = new SliceData.Builder()
                         .setKey(key)
@@ -226,6 +227,7 @@
                         .setSliceType(sliceType)
                         .setUnavailableSliceSubtitle(unavailableSliceSubtitle)
                         .setIsPublicSlice(isPublicSlice)
+                        .setHighlightMenuRes(highlightMenuRes)
                         .build();
 
                 xmlSliceData.add(xmlSlice);
diff --git a/src/com/android/settings/slices/Sliceable.java b/src/com/android/settings/slices/Sliceable.java
index ad27b7c..406cb3a 100644
--- a/src/com/android/settings/slices/Sliceable.java
+++ b/src/com/android/settings/slices/Sliceable.java
@@ -25,6 +25,7 @@
 import android.net.Uri;
 import android.widget.Toast;
 
+import androidx.annotation.StringRes;
 import androidx.slice.Slice;
 
 import com.android.settings.R;
@@ -50,6 +51,8 @@
      * - Must be understandable as a stand-alone Setting.
      * <p>
      * This does not guarantee the setting is available.
+     * <p>
+     * {@link #getSliceHighlightMenuRes} should also be overridden when returning true.
      *
      * @return {@code true} if the controller should be used as a Slice.
      */
@@ -131,4 +134,18 @@
     default Class<? extends SliceBackgroundWorker> getBackgroundWorkerClass() {
         return null;
     }
+
+    /**
+     * Used to mark a {@link Sliceable} that has no highlight menu string resource.
+     */
+    int NO_RES = 0;
+
+    /**
+     * @return a string resource declared in res/values/menu_keys.xml that indicates which menu
+     * entry should be highlighted in two-pane mode, or {@link #NO_RES} representing highlighting is
+     * not applicable.
+     */
+    @StringRes default int getSliceHighlightMenuRes() {
+        return NO_RES;
+    }
 }
diff --git a/src/com/android/settings/slices/SlicesDatabaseAccessor.java b/src/com/android/settings/slices/SlicesDatabaseAccessor.java
index c0bb8de..75f0220 100644
--- a/src/com/android/settings/slices/SlicesDatabaseAccessor.java
+++ b/src/com/android/settings/slices/SlicesDatabaseAccessor.java
@@ -50,6 +50,7 @@
             IndexColumns.CONTROLLER,
             IndexColumns.SLICE_TYPE,
             IndexColumns.UNAVAILABLE_SLICE_SUBTITLE,
+            IndexColumns.HIGHLIGHT_MENU_RESOURCE,
     };
 
     private final Context mContext;
@@ -163,6 +164,8 @@
                 cursor.getColumnIndex(IndexColumns.SLICE_TYPE));
         final String unavailableSliceSubtitle = cursor.getString(
                 cursor.getColumnIndex(IndexColumns.UNAVAILABLE_SLICE_SUBTITLE));
+        final int highlightMenuRes = cursor.getInt(
+                cursor.getColumnIndex(IndexColumns.HIGHLIGHT_MENU_RESOURCE));
 
         if (isIntentOnly) {
             sliceType = SliceData.SliceType.INTENT;
@@ -180,6 +183,7 @@
                 .setUri(uri)
                 .setSliceType(sliceType)
                 .setUnavailableSliceSubtitle(unavailableSliceSubtitle)
+                .setHighlightMenuRes(highlightMenuRes)
                 .build();
     }
 
diff --git a/src/com/android/settings/slices/SlicesDatabaseHelper.java b/src/com/android/settings/slices/SlicesDatabaseHelper.java
index fe4420b..69ad702 100644
--- a/src/com/android/settings/slices/SlicesDatabaseHelper.java
+++ b/src/com/android/settings/slices/SlicesDatabaseHelper.java
@@ -36,7 +36,7 @@
     private static final String DATABASE_NAME = "slices_index.db";
     private static final String SHARED_PREFS_TAG = "slices_shared_prefs";
 
-    private static final int DATABASE_VERSION = 8;
+    private static final int DATABASE_VERSION = 9;
 
     public interface Tables {
         String TABLE_SLICES_INDEX = "slices_index";
@@ -103,39 +103,43 @@
          * Whether the slice should be exposed publicly.
          */
         String PUBLIC_SLICE = "public_slice";
+
+        /**
+         * Resource ID for the menu entry of the setting.
+         */
+        String HIGHLIGHT_MENU_RESOURCE = "highlight_menu";
     }
 
     private static final String CREATE_SLICES_TABLE =
-            "CREATE VIRTUAL TABLE " + Tables.TABLE_SLICES_INDEX + " USING fts4" +
-                    "(" +
-                    IndexColumns.KEY +
-                    ", " +
-                    IndexColumns.SLICE_URI +
-                    ", " +
-                    IndexColumns.TITLE +
-                    ", " +
-                    IndexColumns.SUMMARY +
-                    ", " +
-                    IndexColumns.SCREENTITLE +
-                    ", " +
-                    IndexColumns.KEYWORDS +
-                    ", " +
-                    IndexColumns.ICON_RESOURCE +
-                    ", " +
-                    IndexColumns.FRAGMENT +
-                    ", " +
-                    IndexColumns.CONTROLLER +
-                    ", " +
-                    IndexColumns.SLICE_TYPE +
-                    ", " +
-                    IndexColumns.UNAVAILABLE_SLICE_SUBTITLE +
-                    ", "
-                    +
-                    IndexColumns.PUBLIC_SLICE
-                    +
-                    " INTEGER DEFAULT 0 "
-                    +
-                    ");";
+            "CREATE VIRTUAL TABLE " + Tables.TABLE_SLICES_INDEX + " USING fts4"
+                    + "("
+                    + IndexColumns.KEY
+                    + ", "
+                    + IndexColumns.SLICE_URI
+                    + ", "
+                    + IndexColumns.TITLE
+                    + ", "
+                    + IndexColumns.SUMMARY
+                    + ", "
+                    + IndexColumns.SCREENTITLE
+                    + ", "
+                    + IndexColumns.KEYWORDS
+                    + ", "
+                    + IndexColumns.ICON_RESOURCE
+                    + ", "
+                    + IndexColumns.FRAGMENT
+                    + ", "
+                    + IndexColumns.CONTROLLER
+                    + ", "
+                    + IndexColumns.SLICE_TYPE
+                    + ", "
+                    + IndexColumns.UNAVAILABLE_SLICE_SUBTITLE
+                    + ", "
+                    + IndexColumns.PUBLIC_SLICE
+                    + ", "
+                    + IndexColumns.HIGHLIGHT_MENU_RESOURCE
+                    + " INTEGER DEFAULT 0 "
+                    + ");";
 
     private final Context mContext;
 
diff --git a/src/com/android/settings/slices/SlicesIndexer.java b/src/com/android/settings/slices/SlicesIndexer.java
index e527fd6..ac30c6c 100644
--- a/src/com/android/settings/slices/SlicesIndexer.java
+++ b/src/com/android/settings/slices/SlicesIndexer.java
@@ -116,6 +116,7 @@
             values.put(IndexColumns.UNAVAILABLE_SLICE_SUBTITLE,
                     dataRow.getUnavailableSliceSubtitle());
             values.put(IndexColumns.PUBLIC_SLICE, dataRow.isPublicSlice());
+            values.put(IndexColumns.HIGHLIGHT_MENU_RESOURCE, dataRow.getHighlightMenuRes());
 
             database.replaceOrThrow(Tables.TABLE_SLICES_INDEX, null /* nullColumnHack */,
                     values);
diff --git a/src/com/android/settings/sound/MediaControlsPreferenceController.java b/src/com/android/settings/sound/MediaControlsPreferenceController.java
index ad09e2a..e180b34 100644
--- a/src/com/android/settings/sound/MediaControlsPreferenceController.java
+++ b/src/com/android/settings/sound/MediaControlsPreferenceController.java
@@ -23,6 +23,7 @@
 
 import androidx.annotation.VisibleForTesting;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -50,4 +51,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_sound;
+    }
 }
diff --git a/src/com/android/settings/sound/MediaControlsRecommendationController.java b/src/com/android/settings/sound/MediaControlsRecommendationController.java
index 682cb5b..842a141 100644
--- a/src/com/android/settings/sound/MediaControlsRecommendationController.java
+++ b/src/com/android/settings/sound/MediaControlsRecommendationController.java
@@ -21,6 +21,7 @@
 import android.content.Context;
 import android.provider.Settings;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -50,4 +51,9 @@
     public int getAvailabilityStatus() {
         return AVAILABLE;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_sound;
+    }
 }
diff --git a/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java b/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
index f931fa4..ce5533e 100644
--- a/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
+++ b/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
@@ -20,6 +20,7 @@
 
 import androidx.preference.Preference;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.RestrictedSwitchPreference;
 
@@ -69,4 +70,9 @@
         return Settings.Global.putInt(mContext.getContentResolver(),
                 Settings.Global.ADD_USERS_WHEN_LOCKED, isChecked ? 1 : 0);
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_system;
+    }
 }
diff --git a/src/com/android/settings/uwb/UwbPreferenceController.java b/src/com/android/settings/uwb/UwbPreferenceController.java
index 8b330a9..ad040ed 100644
--- a/src/com/android/settings/uwb/UwbPreferenceController.java
+++ b/src/com/android/settings/uwb/UwbPreferenceController.java
@@ -162,5 +162,10 @@
             return mContext.getResources().getString(R.string.uwb_settings_summary);
         }
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_connected_devices;
+    }
 }
 
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index 0543fee..d4ee5b9 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -34,11 +34,13 @@
 import android.os.UserManager;
 import android.text.TextUtils;
 import android.util.Log;
+import android.widget.TextView;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.DialogFragment;
 import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
 
 import com.android.internal.net.VpnConfig;
 import com.android.internal.util.ArrayUtils;
@@ -77,7 +79,6 @@
     private String mVpnLabel;
 
     // UI preference
-    private Preference mPreferenceVersion;
     private RestrictedSwitchPreference mPreferenceAlwaysOn;
     private RestrictedSwitchPreference mPreferenceLockdown;
     private RestrictedPreference mPreferenceForget;
@@ -122,7 +123,6 @@
         mDevicePolicyManager = getContext().getSystemService(DevicePolicyManager.class);
         mVpnManager = getContext().getSystemService(VpnManager.class);
 
-        mPreferenceVersion = findPreference(KEY_VERSION);
         mPreferenceAlwaysOn = (RestrictedSwitchPreference) findPreference(KEY_ALWAYS_ON_VPN);
         mPreferenceLockdown = (RestrictedSwitchPreference) findPreference(KEY_LOCKDOWN_VPN);
         mPreferenceForget = (RestrictedPreference) findPreference(KEY_FORGET_VPN);
@@ -138,9 +138,52 @@
 
         boolean isInfoLoaded = loadInfo();
         if (isInfoLoaded) {
-            mPreferenceVersion.setTitle(
-                    getPrefContext().getString(R.string.vpn_version, mPackageInfo.versionName));
             updateUI();
+
+            Preference version = getPreferenceScreen().findPreference(KEY_VERSION);
+            if (version != null) {
+                // Version field has been added.
+                return;
+            }
+
+            /**
+             * Create version field at runtime, and set max height on the display area.
+             *
+             * When long length of text given within version field, a large text area
+             * might be created and inconvenient to the user (User need to scroll
+             * for a long time in order to get to the Preferences after this field.)
+             */
+            version = new Preference(getPrefContext()) {
+                @Override
+                public void onBindViewHolder(PreferenceViewHolder holder) {
+                    super.onBindViewHolder(holder);
+
+                    TextView titleView =
+                            (TextView) holder.findViewById(android.R.id.title);
+                    if (titleView != null) {
+                        titleView.setTextAppearance(R.style.vpn_app_management_version_title);
+                    }
+
+                    TextView summaryView =
+                            (TextView) holder.findViewById(android.R.id.summary);
+                    if (summaryView != null) {
+                        summaryView.setTextAppearance(R.style.vpn_app_management_version_summary);
+
+                        // Set max height in summary area.
+                        int versionMaxHeight = getListView().getHeight();
+                        summaryView.setMaxHeight(versionMaxHeight);
+                        summaryView.setVerticalScrollBarEnabled(false);
+                        summaryView.setHorizontallyScrolling(false);
+                    }
+                }
+            };
+            version.setOrder(0);            // Set order to 0 in order to be placed
+                                            // in front of other Preference(s).
+            version.setKey(KEY_VERSION);    // Set key to avoid from creating multi instance.
+            version.setTitle(R.string.vpn_version);
+            version.setSummary(mPackageInfo.versionName);
+            version.setSelectable(false);
+            getPreferenceScreen().addPreference(version);
         } else {
             finish();
         }
diff --git a/src/com/android/settings/vpn2/ConfigDialog.java b/src/com/android/settings/vpn2/ConfigDialog.java
index cd6b4ff..bf0dfc9 100644
--- a/src/com/android/settings/vpn2/ConfigDialog.java
+++ b/src/com/android/settings/vpn2/ConfigDialog.java
@@ -41,7 +41,6 @@
 import com.android.internal.net.VpnProfile;
 import com.android.net.module.util.ProxyUtils;
 import com.android.settings.R;
-import com.android.settings.Utils;
 import com.android.settings.utils.AndroidKeystoreAliasLoader;
 
 import java.net.InetAddress;
@@ -518,36 +517,31 @@
         String[] types = getContext().getResources().getStringArray(R.array.vpn_types);
         mTotalTypes = new ArrayList<>(Arrays.asList(types));
         mAllowedTypes = new ArrayList<>(Arrays.asList(types));
+
+        // Although FEATURE_IPSEC_TUNNELS should always be present in android S and beyond,
+        // keep this check here just to be safe.
         if (!getContext().getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_IPSEC_TUNNELS)) {
-            final List<String> typesList = new ArrayList<>(Arrays.asList(types));
+            Log.wtf(TAG, "FEATURE_IPSEC_TUNNELS missing from system");
+        }
+        // If the vpn is new or is not already a legacy type,
+        // don't allow the user to set the type to a legacy option.
 
-            // This must be removed from back to front in order to ensure index consistency
-            typesList.remove(VpnProfile.TYPE_IKEV2_IPSEC_RSA);
-            typesList.remove(VpnProfile.TYPE_IKEV2_IPSEC_PSK);
-            typesList.remove(VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS);
+        // Set the mProfile.type to TYPE_IKEV2_IPSEC_USER_PASS if the VPN not exist
+        if (!mExists) {
+            mProfile.type = VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS;
+        }
 
-            types = typesList.toArray(new String[0]);
-        } else if (Utils.isProviderModelEnabled(getContext())) {
-            // If the provider mode is enabled and the vpn is new or is not already a legacy type,
-            // don't allow the user to set the type to a legacy option.
-
-            // Set the mProfile.type to TYPE_IKEV2_IPSEC_USER_PASS if the VPN not exist
-            if (!mExists) {
-                mProfile.type = VpnProfile.TYPE_IKEV2_IPSEC_USER_PASS;
-            }
-
-            // Remove all types which are legacy types from the typesList
-            if (!VpnProfile.isLegacyType(mProfile.type)) {
-                for (int i = mAllowedTypes.size() - 1; i >= 0; i--) {
-                    // This must be removed from back to front in order to ensure index consistency
-                    if (VpnProfile.isLegacyType(i)) {
-                        mAllowedTypes.remove(i);
-                    }
+        // Remove all types which are legacy types from the typesList
+        if (!VpnProfile.isLegacyType(mProfile.type)) {
+            for (int i = mAllowedTypes.size() - 1; i >= 0; i--) {
+                // This must be removed from back to front in order to ensure index consistency
+                if (VpnProfile.isLegacyType(i)) {
+                    mAllowedTypes.remove(i);
                 }
-
-                types = mAllowedTypes.toArray(new String[0]);
             }
+
+            types = mAllowedTypes.toArray(new String[0]);
         }
         final ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                 getContext(), android.R.layout.simple_spinner_item, types);
diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java
index cf0e4fa..e89785f 100644
--- a/src/com/android/settings/vpn2/VpnSettings.java
+++ b/src/com/android/settings/vpn2/VpnSettings.java
@@ -59,7 +59,6 @@
 import com.android.internal.net.VpnProfile;
 import com.android.settings.R;
 import com.android.settings.RestrictedSettingsFragment;
-import com.android.settings.Utils;
 import com.android.settings.widget.GearPreference;
 import com.android.settings.widget.GearPreference.OnGearClickListener;
 import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -130,12 +129,11 @@
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         super.onCreateOptionsMenu(menu, inflater);
-        // Although FEATURE_IPSEC_TUNNELS should always be present in android S,
+        // Although FEATURE_IPSEC_TUNNELS should always be present in android S and beyond,
         // keep this check here just to be safe.
-        if (Utils.isProviderModelEnabled(getContext())
-                && !getContext().getPackageManager().hasSystemFeature(
-                        PackageManager.FEATURE_IPSEC_TUNNELS)) {
-            Log.w(LOG_TAG, "FEATURE_IPSEC_TUNNELS missing from system, cannot create new VPNs");
+        if (!getContext().getPackageManager().hasSystemFeature(
+                PackageManager.FEATURE_IPSEC_TUNNELS)) {
+            Log.wtf(LOG_TAG, "FEATURE_IPSEC_TUNNELS missing from system, cannot create new VPNs");
             return;
         } else {
             // By default, we should inflate this menu.
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/widget/HighlightableTopLevelPreferenceAdapter.java b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
new file mode 100644
index 0000000..ff8f805
--- /dev/null
+++ b/src/com/android/settings/widget/HighlightableTopLevelPreferenceAdapter.java
@@ -0,0 +1,260 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.TypedValue;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceGroupAdapter;
+import androidx.preference.PreferenceViewHolder;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.settings.R;
+import com.android.settings.Utils;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
+import com.android.settings.homepage.SettingsHomepageActivity;
+
+/**
+ *  Adapter for highlighting top level preferences
+ */
+public class HighlightableTopLevelPreferenceAdapter extends PreferenceGroupAdapter implements
+        SettingsHomepageActivity.HomepageLoadedListener {
+
+    private static final String TAG = "HighlightableTopLevelAdapter";
+
+    static final long DELAY_HIGHLIGHT_DURATION_MILLIS = 100L;
+
+    private final int mTitleColorNormal;
+    private final int mTitleColorHighlight;
+    private final int mSummaryColorNormal;
+    private final int mSummaryColorHighlight;
+    private final int mIconColorNormal;
+    private final int mIconColorHighlight;
+
+    private final Context mContext;
+    private final SettingsHomepageActivity mHomepageActivity;
+    private final RecyclerView mRecyclerView;
+    private final int mNormalBackgroundRes;
+    private final int mHighlightBackgroundRes;
+    private String mHighlightKey;
+    private int mHighlightPosition = RecyclerView.NO_POSITION;
+    private int mScrollPosition = RecyclerView.NO_POSITION;
+    private boolean mHighlightNeeded;
+    private boolean mScrolled;
+    private SparseArray<PreferenceViewHolder> mViewHolders;
+
+    public HighlightableTopLevelPreferenceAdapter(SettingsHomepageActivity homepageActivity,
+            PreferenceGroup preferenceGroup, RecyclerView recyclerView, String key) {
+        super(preferenceGroup);
+        mRecyclerView = recyclerView;
+        mHighlightKey = key;
+        mViewHolders = new SparseArray<>();
+        mContext = preferenceGroup.getContext();
+        mHomepageActivity = homepageActivity;
+        final TypedValue outValue = new TypedValue();
+        mContext.getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
+                outValue, true /* resolveRefs */);
+        mNormalBackgroundRes = outValue.resourceId;
+        mHighlightBackgroundRes = R.drawable.homepage_highlighted_item_background;
+        mTitleColorNormal = Utils.getColorAttrDefaultColor(mContext,
+                android.R.attr.textColorPrimary);
+        mTitleColorHighlight = Utils.getColorAttrDefaultColor(mContext,
+                android.R.attr.textColorPrimaryInverse);
+        mSummaryColorNormal = Utils.getColorAttrDefaultColor(mContext,
+                android.R.attr.textColorSecondary);
+        mSummaryColorHighlight = Utils.getColorAttrDefaultColor(mContext,
+                android.R.attr.textColorSecondaryInverse);
+        mIconColorNormal = Utils.getHomepageIconColor(mContext);
+        mIconColorHighlight = Utils.getHomepageIconColorHighlight(mContext);
+    }
+
+    @Override
+    public void onBindViewHolder(PreferenceViewHolder holder, int position) {
+        super.onBindViewHolder(holder, position);
+        mViewHolders.put(position, holder);
+        updateBackground(holder, position);
+    }
+
+    @VisibleForTesting
+    void updateBackground(PreferenceViewHolder holder, int position) {
+        if (!isHighlightNeeded()) {
+            removeHighlightBackground(holder);
+            return;
+        }
+
+        if (position == mHighlightPosition
+                && mHighlightKey != null
+                && TextUtils.equals(mHighlightKey, getItem(position).getKey())) {
+            // This position should be highlighted.
+            addHighlightBackground(holder);
+        } else {
+            removeHighlightBackground(holder);
+        }
+    }
+
+    /**
+     * A function can highlight a specific setting in recycler view.
+     */
+    public void requestHighlight() {
+        if (mRecyclerView == null) {
+            return;
+        }
+
+        final int previousPosition = mHighlightPosition;
+        if (TextUtils.isEmpty(mHighlightKey)) {
+            // De-highlight previous preference.
+            mHighlightPosition = RecyclerView.NO_POSITION;
+            mScrolled = true;
+            if (previousPosition >= 0) {
+                notifyItemChanged(previousPosition);
+            }
+            return;
+        }
+
+        final int position = getPreferenceAdapterPosition(mHighlightKey);
+        if (position < 0) {
+            return;
+        }
+
+        // Scroll before highlight if needed.
+        final boolean highlightNeeded = isHighlightNeeded();
+        if (highlightNeeded) {
+            mScrollPosition = position;
+            scroll();
+        }
+
+        // Turn on/off highlight when screen split mode is changed.
+        if (highlightNeeded != mHighlightNeeded) {
+            Log.d(TAG, "Highlight needed change: " + highlightNeeded);
+            mHighlightNeeded = highlightNeeded;
+            mHighlightPosition = position;
+            notifyItemChanged(position);
+            if (!highlightNeeded) {
+                // De-highlight to prevent a flicker
+                removeHighlightAt(previousPosition);
+            }
+            return;
+        }
+
+        if (position == mHighlightPosition) {
+            return;
+        }
+
+        mHighlightPosition = position;
+        Log.d(TAG, "Request highlight position " + position);
+        Log.d(TAG, "Is highlight needed: " + highlightNeeded);
+        if (!highlightNeeded) {
+            return;
+        }
+
+        // Highlight preference.
+        notifyItemChanged(position);
+
+        // De-highlight previous preference.
+        if (previousPosition >= 0) {
+            notifyItemChanged(previousPosition);
+        }
+    }
+
+    /**
+     * A function that highlights a setting by specifying a preference key. Usually used whenever a
+     * preference is clicked.
+     */
+    public void highlightPreference(String key, boolean scrollNeeded) {
+        mHighlightKey = key;
+        mScrolled = !scrollNeeded;
+        requestHighlight();
+    }
+
+    @Override
+    public void onHomepageLoaded() {
+        scroll();
+    }
+
+    private void scroll() {
+        if (mScrolled || mScrollPosition < 0) {
+            return;
+        }
+
+        if (mHomepageActivity.addHomepageLoadedListener(this)) {
+            return;
+        }
+
+        // Only when the recyclerView is loaded, it can be scrolled
+        final View view = mRecyclerView.getChildAt(mScrollPosition);
+        if (view == null) {
+            mRecyclerView.postDelayed(() -> scroll(), DELAY_HIGHLIGHT_DURATION_MILLIS);
+            return;
+        }
+
+        mScrolled = true;
+        Log.d(TAG, "Scroll to position " + mScrollPosition);
+        // Scroll to the top to reset the position.
+        mRecyclerView.nestedScrollBy(0, -mRecyclerView.getHeight());
+
+        final int scrollY = view.getTop();
+        if (scrollY > 0) {
+            mRecyclerView.nestedScrollBy(0, scrollY);
+        }
+    }
+
+    private void removeHighlightAt(int position) {
+        if (position >= 0) {
+            // De-highlight the existing preference view holder at an early stage
+            final PreferenceViewHolder holder = mViewHolders.get(position);
+            if (holder != null) {
+                removeHighlightBackground(holder);
+            }
+            notifyItemChanged(position);
+        }
+    }
+
+    private void addHighlightBackground(PreferenceViewHolder holder) {
+        final View v = holder.itemView;
+        v.setBackgroundResource(mHighlightBackgroundRes);
+        ((TextView) v.findViewById(android.R.id.title)).setTextColor(mTitleColorHighlight);
+        ((TextView) v.findViewById(android.R.id.summary)).setTextColor(mSummaryColorHighlight);
+        final Drawable drawable = ((ImageView) v.findViewById(android.R.id.icon)).getDrawable();
+        if (drawable != null) {
+            drawable.setTint(mIconColorHighlight);
+        }
+    }
+
+    private void removeHighlightBackground(PreferenceViewHolder holder) {
+        final View v = holder.itemView;
+        v.setBackgroundResource(mNormalBackgroundRes);
+        ((TextView) v.findViewById(android.R.id.title)).setTextColor(mTitleColorNormal);
+        ((TextView) v.findViewById(android.R.id.summary)).setTextColor(mSummaryColorNormal);
+        final Drawable drawable = ((ImageView) v.findViewById(android.R.id.icon)).getDrawable();
+        if (drawable != null) {
+            drawable.setTint(mIconColorNormal);
+        }
+    }
+
+    private boolean isHighlightNeeded() {
+        return ActivityEmbeddingUtils.isTwoPaneResolution(mHomepageActivity);
+    }
+}
diff --git a/src/com/android/settings/widget/HomepagePreference.java b/src/com/android/settings/widget/HomepagePreference.java
new file mode 100644
index 0000000..ff4055e
--- /dev/null
+++ b/src/com/android/settings/widget/HomepagePreference.java
@@ -0,0 +1,48 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import androidx.preference.Preference;
+
+import com.android.settings.R;
+
+/** A customized layout for homepage preference. */
+public class HomepagePreference extends Preference {
+    public HomepagePreference(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        setLayoutResource(R.layout.homepage_preference);
+    }
+
+    public HomepagePreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        setLayoutResource(R.layout.homepage_preference);
+    }
+
+    public HomepagePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setLayoutResource(R.layout.homepage_preference);
+    }
+
+    public HomepagePreference(Context context) {
+        super(context);
+        setLayoutResource(R.layout.homepage_preference);
+    }
+}
diff --git a/src/com/android/settings/widget/RestrictedHomepagePreference.java b/src/com/android/settings/widget/RestrictedHomepagePreference.java
new file mode 100644
index 0000000..4667e2c
--- /dev/null
+++ b/src/com/android/settings/widget/RestrictedHomepagePreference.java
@@ -0,0 +1,47 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import com.android.settings.R;
+import com.android.settingslib.RestrictedTopLevelPreference;
+
+/** Homepage preference that can be disabled by a device admin using a user restriction. */
+public class RestrictedHomepagePreference extends RestrictedTopLevelPreference {
+    public RestrictedHomepagePreference(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        setLayoutResource(R.layout.homepage_preference);
+    }
+
+    public RestrictedHomepagePreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        setLayoutResource(R.layout.homepage_preference);
+    }
+
+    public RestrictedHomepagePreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setLayoutResource(R.layout.homepage_preference);
+    }
+
+    public RestrictedHomepagePreference(Context context) {
+        super(context);
+        setLayoutResource(R.layout.homepage_preference);
+    }
+}
diff --git a/src/com/android/settings/wifi/AddNetworkFragment.java b/src/com/android/settings/wifi/AddNetworkFragment.java
index 4adc672..01d5ef1 100644
--- a/src/com/android/settings/wifi/AddNetworkFragment.java
+++ b/src/com/android/settings/wifi/AddNetworkFragment.java
@@ -109,7 +109,8 @@
             final String ssid = ssidEditText.getText().toString();
 
             // Launch QR code scanner to join a network.
-            startActivityForResult(WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid),
+            startActivityForResult(
+                    WifiDppUtils.getEnrolleeQrCodeScannerIntent(view.getContext(), ssid),
                     REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
         }
     }
diff --git a/src/com/android/settings/wifi/AddWifiNetworkPreference.java b/src/com/android/settings/wifi/AddWifiNetworkPreference.java
index 8216f86..ff4d38e 100644
--- a/src/com/android/settings/wifi/AddWifiNetworkPreference.java
+++ b/src/com/android/settings/wifi/AddWifiNetworkPreference.java
@@ -59,7 +59,7 @@
                 getContext().getString(R.string.wifi_dpp_scan_qr_code));
         scanButton.setOnClickListener(view -> {
             getContext().startActivity(
-                WifiDppUtils.getEnrolleeQrCodeScannerIntent(/* ssid */ null));
+                    WifiDppUtils.getEnrolleeQrCodeScannerIntent(getContext(), /* ssid */ null));
         });
     }
 
diff --git a/src/com/android/settings/wifi/CellularFallbackPreferenceController.java b/src/com/android/settings/wifi/CellularFallbackPreferenceController.java
index eab50a6..59ad440 100644
--- a/src/com/android/settings/wifi/CellularFallbackPreferenceController.java
+++ b/src/com/android/settings/wifi/CellularFallbackPreferenceController.java
@@ -22,6 +22,7 @@
 import android.telephony.SubscriptionManager;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 
 /**
@@ -51,6 +52,11 @@
                 Settings.Global.NETWORK_AVOID_BAD_WIFI, isChecked ? "1" : null);
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
+
     private boolean avoidBadWifiConfig() {
         final int activeDataSubscriptionId = getActiveDataSubscriptionId();
         if (activeDataSubscriptionId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 4ac2cfc..6bb4389 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -18,11 +18,16 @@
 import static android.content.Context.WIFI_SERVICE;
 
 import android.app.settings.SettingsEnums;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
 import android.util.FeatureFlagUtils;
+import android.util.Log;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
@@ -38,16 +43,37 @@
 public class ConfigureWifiSettings extends DashboardFragment {
 
     private static final String TAG = "ConfigureWifiSettings";
+    private static final String KEY_INSTALL_CREDENTIALS = "install_credentials";
+    private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL";
+    private static final String PACKAGE_INSTALL_CERTS = "com.android.certinstaller";
+    private static final String CLASS_INSTALL_CERTS = "com.android.certinstaller.CertInstallerMain";
+    private static final String KEY_INSTALL_CERTIFICATE = "certificate_install_usage";
+    private static final String INSTALL_CERTIFICATE_VALUE = "wifi";
 
     public static final int WIFI_WAKEUP_REQUEST_CODE = 600;
 
     private WifiWakeupPreferenceController mWifiWakeupPreferenceController;
+    private Preference mCertinstallerPreference;
 
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
-        if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
-            getActivity().setTitle(R.string.network_and_internet_preferences_title);
+        getActivity().setTitle(R.string.network_and_internet_preferences_title);
+
+        mCertinstallerPreference = findPreference(KEY_INSTALL_CREDENTIALS);
+        if (mCertinstallerPreference != null) {
+            mCertinstallerPreference.setOnPreferenceClickListener(preference -> {
+                Intent intent = new Intent(ACTION_INSTALL_CERTS);
+                intent.setFlags(
+                        Intent.FLAG_ACTIVITY_NEW_TASK);
+                intent.setComponent(
+                        new ComponentName(PACKAGE_INSTALL_CERTS, CLASS_INSTALL_CERTS));
+                intent.putExtra(KEY_INSTALL_CERTIFICATE, INSTALL_CERTIFICATE_VALUE);
+                getContext().startActivity(intent);
+                return true;
+            });
+        } else {
+            Log.d(TAG, "Can not find the preference.");
         }
     }
 
diff --git a/src/com/android/settings/wifi/NotifyOpenNetworksPreferenceController.java b/src/com/android/settings/wifi/NotifyOpenNetworksPreferenceController.java
index 6455f5b..4b7506d 100644
--- a/src/com/android/settings/wifi/NotifyOpenNetworksPreferenceController.java
+++ b/src/com/android/settings/wifi/NotifyOpenNetworksPreferenceController.java
@@ -26,6 +26,7 @@
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -85,6 +86,11 @@
         return true;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
+
     class SettingObserver extends ContentObserver {
         private final Uri NETWORKS_AVAILABLE_URI = Settings.Global.getUriFor(
                 Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON);
diff --git a/src/com/android/settings/wifi/RequestToggleWiFiActivity.java b/src/com/android/settings/wifi/RequestToggleWiFiActivity.java
index 34ef7cf..6887b78 100644
--- a/src/com/android/settings/wifi/RequestToggleWiFiActivity.java
+++ b/src/com/android/settings/wifi/RequestToggleWiFiActivity.java
@@ -19,6 +19,8 @@
 import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS;
 
 import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.IActivityManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -29,11 +31,13 @@
 import android.content.pm.PackageManager;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
+import android.os.RemoteException;
 import android.text.TextUtils;
 import android.util.Log;
 
 import androidx.annotation.NonNull;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.app.AlertActivity;
 import com.android.settings.R;
 
@@ -63,6 +67,8 @@
 
     private @NonNull WifiManager mWiFiManager;
     private @NonNull CharSequence mAppLabel;
+    @VisibleForTesting
+    protected IActivityManager mActivityManager = ActivityManager.getService();
 
     private int mState = STATE_UNKNOWN;
     private int mLastUpdateState = STATE_UNKNOWN;
@@ -75,20 +81,8 @@
 
         setResult(Activity.RESULT_CANCELED);
 
-        String packageName = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
-        if (TextUtils.isEmpty(packageName)) {
-            finish();
-            return;
-        }
-
-        try {
-            ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(
-                    packageName, 0);
-            mAppLabel = applicationInfo.loadSafeLabel(getPackageManager(),
-                    PackageItemInfo.DEFAULT_MAX_LABEL_SIZE_PX, PackageItemInfo.SAFE_LABEL_FLAG_TRIM
-                            | PackageItemInfo.SAFE_LABEL_FLAG_FIRST_LINE);
-        } catch (PackageManager.NameNotFoundException e) {
-            Log.e(LOG_TAG, "Couldn't find app with package name " + packageName);
+        mAppLabel = getAppLabel();
+        if (TextUtils.isEmpty(mAppLabel)) {
             finish();
             return;
         }
@@ -140,7 +134,6 @@
     @Override
     protected void onStart() {
         super.onStart();
-
         mReceiver.register();
 
         final int wifiState = mWiFiManager.getWifiState();
@@ -223,6 +216,32 @@
         super.onStop();
     }
 
+    @VisibleForTesting
+    protected CharSequence getAppLabel() {
+        String packageName;
+        try {
+            packageName = mActivityManager.getLaunchedFromPackage(getActivityToken());
+            if (TextUtils.isEmpty(packageName)) {
+                Log.d(LOG_TAG, "Package name is null");
+                return null;
+            }
+        } catch (RemoteException e) {
+            Log.e(LOG_TAG, "Can not get the package from activity manager");
+            return null;
+        }
+
+        try {
+            ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(
+                    packageName, 0);
+            return applicationInfo.loadSafeLabel(getPackageManager(),
+                    PackageItemInfo.DEFAULT_MAX_LABEL_SIZE_PX, PackageItemInfo.SAFE_LABEL_FLAG_TRIM
+                            | PackageItemInfo.SAFE_LABEL_FLAG_FIRST_LINE);
+        } catch (PackageManager.NameNotFoundException e) {
+            Log.e(LOG_TAG, "Couldn't find app with package name " + packageName);
+            return null;
+        }
+    }
+
     private void updateUi() {
         if (mLastUpdateState == mState) {
             return;
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 408ffbe..0c063db 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -1503,11 +1503,15 @@
         }
 
         // Shows display name of each active subscription.
-        final String[] displayNames = SubscriptionUtil.getUniqueSubscriptionDisplayNames(
-                mContext).values().stream().toArray(String[]::new);
-        mEapSimSpinner.setAdapter(getSpinnerAdapter(displayNames));
+        final ArrayList<CharSequence> displayNames = new ArrayList<>();
+        for (SubscriptionInfo activeSubInfo : mActiveSubscriptionInfos) {
+            displayNames.add(
+                SubscriptionUtil.getUniqueSubscriptionDisplayName(activeSubInfo, mContext));
+        }
+        mEapSimSpinner.setAdapter(
+            getSpinnerAdapter(displayNames.toArray(new String[displayNames.size()])));
         mEapSimSpinner.setSelection(0 /* position */);
-        if (displayNames.length == 1) {
+        if (displayNames.size() == 1) {
             mEapSimSpinner.setEnabled(false);
         }
     }
diff --git a/src/com/android/settings/wifi/WifiConfigController2.java b/src/com/android/settings/wifi/WifiConfigController2.java
index 011c970..127c882 100644
--- a/src/com/android/settings/wifi/WifiConfigController2.java
+++ b/src/com/android/settings/wifi/WifiConfigController2.java
@@ -1482,11 +1482,15 @@
         }
 
         // Shows display name of each active subscription.
-        final String[] displayNames = SubscriptionUtil.getUniqueSubscriptionDisplayNames(
-                mContext).values().stream().toArray(String[]::new);
-        mEapSimSpinner.setAdapter(getSpinnerAdapter(displayNames));
+        final ArrayList<CharSequence> displayNames = new ArrayList<>();
+        for (SubscriptionInfo activeSubInfo : mActiveSubscriptionInfos) {
+            displayNames.add(
+                    SubscriptionUtil.getUniqueSubscriptionDisplayName(activeSubInfo, mContext));
+        }
+        mEapSimSpinner.setAdapter(
+                getSpinnerAdapter(displayNames.toArray(new String[displayNames.size()])));
         mEapSimSpinner.setSelection(0 /* position */);
-        if (displayNames.length == 1) {
+        if (displayNames.size() == 1) {
             mEapSimSpinner.setEnabled(false);
         }
     }
diff --git a/src/com/android/settings/wifi/WifiDialogActivity.java b/src/com/android/settings/wifi/WifiDialogActivity.java
index 877933e..58e9a7b 100644
--- a/src/com/android/settings/wifi/WifiDialogActivity.java
+++ b/src/com/android/settings/wifi/WifiDialogActivity.java
@@ -190,13 +190,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;
             }
         }
@@ -311,7 +309,7 @@
 
     @Override
     public void onScan(WifiDialog2 dialog, String ssid) {
-        Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid);
+        Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid);
         WizardManagerHelper.copyWizardManagerExtras(mIntent, intent);
 
         // Launch QR code scanner to join a network.
@@ -320,7 +318,7 @@
 
     @Override
     public void onScan(WifiDialog dialog, String ssid) {
-        Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid);
+        Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid);
         WizardManagerHelper.copyWizardManagerExtras(mIntent, intent);
 
         // Launch QR code scanner to join a network.
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 0c3b1ae..f0ae90e 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -59,6 +59,7 @@
 import com.android.settings.R;
 import com.android.settings.RestrictedSettingsFragment;
 import com.android.settings.SettingsActivity;
+import com.android.settings.Utils;
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.datausage.DataUsagePreference;
@@ -88,9 +89,10 @@
 /**
  * UI for Wi-Fi settings screen
  *
- * TODO(b/167474581): This file will be deprecated at Android S, please merge your WifiSettings
+ * @deprecated This file will be deprecated at Android S, please merge your WifiSettings
  * in change in {@link NetworkProviderSettings}.
  */
+@Deprecated
 @SearchIndexable
 public class WifiSettings extends RestrictedSettingsFragment
         implements Indexable, WifiPickerTracker.WifiPickerTrackerCallback,
@@ -98,6 +100,10 @@
 
     private static final String TAG = "WifiSettings";
 
+    // Set the Provider Model is always enabled
+    @VisibleForTesting
+    static Boolean IS_ENABLED_PROVIDER_MODEL = true;
+
     // IDs of context menu
     static final int MENU_ID_CONNECT = Menu.FIRST + 1;
     @VisibleForTesting
@@ -231,7 +237,7 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
-        if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlagUtils.SETTINGS_PROVIDER_MODEL)) {
+        if (IS_ENABLED_PROVIDER_MODEL) {
             final Intent intent = new Intent("android.settings.NETWORK_PROVIDER_SETTINGS");
             // Add FLAG_ACTIVITY_NEW_TASK and FLAG_ACTIVITY_CLEAR_TASK to avoid multiple
             // instances issue. (e.g. b/191956700)
@@ -1028,7 +1034,8 @@
     @Override
     public void onScan(WifiDialog2 dialog, String ssid) {
         // Launch QR code scanner to join a network.
-        startActivityForResult(WifiDppUtils.getEnrolleeQrCodeScannerIntent(ssid),
+        startActivityForResult(
+                WifiDppUtils.getEnrolleeQrCodeScannerIntent(dialog.getContext(), ssid),
                 REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER);
     }
 
@@ -1067,6 +1074,11 @@
     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider(R.xml.wifi_settings) {
                 @Override
+                protected boolean isPageSearchEnabled(Context context) {
+                    return !IS_ENABLED_PROVIDER_MODEL;
+                }
+
+                @Override
                 public List<String> getNonIndexableKeys(Context context) {
                     final List<String> keys = super.getNonIndexableKeys(context);
 
diff --git a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
index e9fd350..2cc7f8e 100644
--- a/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
+++ b/src/com/android/settings/wifi/WifiWakeupPreferenceController.java
@@ -135,6 +135,11 @@
         }
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
+
     @VisibleForTesting
     CharSequence getNoLocationSummary() {
         AnnotationSpan.LinkInfo linkInfo = new AnnotationSpan.LinkInfo("link", null);
diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java
index 7b5eaa9..6bf9104 100644
--- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java
+++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java
@@ -16,9 +16,14 @@
 
 package com.android.settings.wifi.addappnetworks;
 
+import android.app.ActivityManager;
+import android.app.IActivityManager;
 import android.content.Intent;
 import android.os.Bundle;
+import android.os.RemoteException;
 import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.Log;
 import android.view.Gravity;
 import android.view.Window;
 import android.view.WindowManager;
@@ -48,12 +53,17 @@
 
     @VisibleForTesting
     final Bundle mBundle = new Bundle();
+    @VisibleForTesting
+    IActivityManager mActivityManager = ActivityManager.getService();
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.settings_panel);
-        showAddNetworksFragment();
+        if (!showAddNetworksFragment()) {
+            finish();
+            return;
+        }
         getLifecycle().addObserver(new HideNonSystemOverlayMixin(this));
 
         // Move the window to the bottom of screen, and make it take up the entire screen width.
@@ -67,13 +77,22 @@
     protected void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
         setIntent(intent);
-        showAddNetworksFragment();
+        if (!showAddNetworksFragment()) {
+            finish();
+            return;
+        }
     }
 
     @VisibleForTesting
-    void showAddNetworksFragment() {
+    protected boolean showAddNetworksFragment() {
+        String packageName = getCallingAppPackageName();
+        if (TextUtils.isEmpty(packageName)) {
+            Log.d(TAG, "Package name is null");
+            return false;
+        }
+
         // TODO: Check the new intent status.
-        mBundle.putString(KEY_CALLING_PACKAGE_NAME, getCallingPackage());
+        mBundle.putString(KEY_CALLING_PACKAGE_NAME, packageName);
         mBundle.putParcelableArrayList(Settings.EXTRA_WIFI_NETWORK_LIST,
                 getIntent().getParcelableArrayListExtra(Settings.EXTRA_WIFI_NETWORK_LIST));
 
@@ -86,5 +105,19 @@
         } else {
             ((AddAppNetworksFragment) fragment).createContent(mBundle);
         }
+
+        return true;
+    }
+
+    @VisibleForTesting
+    protected String getCallingAppPackageName() {
+        String packageName;
+        try {
+            packageName = mActivityManager.getLaunchedFromPackage(getActivityToken());
+        } catch (RemoteException e) {
+            Log.e(TAG, "Can not get the package from activity manager");
+            return null;
+        }
+        return packageName;
     }
 }
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
index 3636341..c73bffa 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSliceHelper.java
@@ -179,7 +179,8 @@
                         .setTitle(res.getText(R.string.wifi_calling_settings_title))
                         .addEndItem(
                                 SliceAction.createToggle(
-                                        getBroadcastIntent(ACTION_WIFI_CALLING_CHANGED),
+                                        getBroadcastIntent(ACTION_WIFI_CALLING_CHANGED,
+                                                isWifiCallingEnabled),
                                         null /* actionTitle */, isWifiCallingEnabled))
                         .setPrimaryAction(SliceAction.createDeeplink(
                                 getActivityIntent(ACTION_WIFI_CALLING_SETTINGS_ACTIVITY),
@@ -316,7 +317,7 @@
         final Resources res = getResourcesForSubId(subId);
         return new RowBuilder()
                 .setTitle(res.getText(preferenceTitleResId))
-                .setTitleItem(SliceAction.createToggle(getBroadcastIntent(action),
+                .setTitleItem(SliceAction.createToggle(getBroadcastIntent(action, checked),
                         icon, res.getText(preferenceTitleResId), checked));
     }
 
@@ -370,25 +371,31 @@
     public void handleWifiCallingChanged(Intent intent) {
         final int subId = getDefaultVoiceSubId();
 
-        if (SubscriptionManager.isValidSubscriptionId(subId)) {
+        if (SubscriptionManager.isValidSubscriptionId(subId)
+                && intent.hasExtra(EXTRA_TOGGLE_STATE)) {
             final WifiCallingQueryImsState queryState = queryImsState(subId);
             if (queryState.isWifiCallingProvisioned()) {
-                final boolean currentValue = queryState.isEnabledByUser()
-                        && queryState.isAllowUserControl();
+                final boolean currentValue = isWifiCallingEnabled();
                 final boolean newValue = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
                         currentValue);
                 final Intent activationAppIntent =
                         getWifiCallingCarrierActivityIntent(subId);
-                if (!newValue || activationAppIntent == null) {
+                if ((newValue == currentValue) && activationAppIntent == null) {
                     // If either the action is to turn off wifi calling setting
                     // or there is no activation involved - Update the setting
-                    if (newValue != currentValue) {
-                        final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
-                        imsMmTelManager.setVoWiFiSettingEnabled(newValue);
-                    }
+                    final ImsMmTelManager imsMmTelManager = getImsMmTelManager(subId);
+                    imsMmTelManager.setVoWiFiSettingEnabled(!newValue);
+                } else {
+                    Log.w(TAG, "action not taken: subId " + subId
+                            + " from " + currentValue + " to " + newValue);
                 }
+            } else {
+                Log.w(TAG, "action not taken: subId " + subId + " needs provision");
             }
+        } else {
+            Log.w(TAG, "action not taken: subId " + subId);
         }
+
         // notify change in slice in any case to get re-queried. This would result in displaying
         // appropriate message with the updated setting.
         mContext.getContentResolver().notifyChange(WIFI_CALLING_URI, null);
@@ -541,10 +548,20 @@
                 PendingIntent.FLAG_IMMUTABLE);
     }
 
-    private PendingIntent getBroadcastIntent(String action) {
+    /**
+     * Create PendingIntent for Slice.
+     * Note: SliceAction#createDeeplink() didn't support toggle status so far,
+     *       therefore, embedding toggle status within PendingIntent.
+     *
+     * @param action Slice action
+     * @param isChecked Status when Slice created.
+     * @return PendingIntent
+     */
+    private PendingIntent getBroadcastIntent(String action, boolean isChecked) {
         final Intent intent = new Intent(action);
         intent.setClass(mContext, SliceBroadcastReceiver.class);
         intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
+        intent.putExtra(EXTRA_TOGGLE_STATE, isChecked);
         return PendingIntent.getBroadcast(mContext, 0 /* requestCode */, intent,
                 PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
     }
diff --git a/src/com/android/settings/wifi/details2/WifiAutoConnectPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiAutoConnectPreferenceController2.java
index ffbb682..8226bc0 100644
--- a/src/com/android/settings/wifi/details2/WifiAutoConnectPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiAutoConnectPreferenceController2.java
@@ -18,6 +18,7 @@
 
 import android.content.Context;
 
+import com.android.settings.R;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.wifitrackerlib.WifiEntry;
 
@@ -54,4 +55,9 @@
         mWifiEntry.setAutoJoinEnabled(isChecked);
         return true;
     }
+
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
index c5f1e81..3ce244c 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
@@ -18,11 +18,14 @@
 
 import android.app.settings.SettingsEnums;
 import android.content.Intent;
+import android.util.EventLog;
 import android.util.Log;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.fragment.app.FragmentTransaction;
 
 import com.android.settings.R;
+import com.android.settingslib.wifi.WifiRestrictionsCache;
 
 /**
  * To provision "this" device with specified Wi-Fi network.
@@ -37,6 +40,9 @@
     static final String ACTION_ENROLLEE_QR_CODE_SCANNER =
             "android.settings.WIFI_DPP_ENROLLEE_QR_CODE_SCANNER";
 
+    @VisibleForTesting
+    protected WifiRestrictionsCache mWifiRestrictionsCache;
+
     @Override
     public int getMetricsCategory() {
         return SettingsEnums.SETTINGS_WIFI_DPP_ENROLLEE;
@@ -50,6 +56,14 @@
             return;
         }
 
+        if (!isWifiConfigAllowed()) {
+            Log.e(TAG, "The user is not allowed to configure Wi-Fi.");
+            finish();
+            EventLog.writeEvent(0x534e4554, "202017876", getApplicationContext().getUserId(),
+                    "The user is not allowed to configure Wi-Fi.");
+            return;
+        }
+
         switch (action) {
             case ACTION_ENROLLEE_QR_CODE_SCANNER:
                 String ssid = intent.getStringExtra(WifiDppUtils.EXTRA_WIFI_SSID);
@@ -61,7 +75,15 @@
         }
     }
 
-    private void showQrCodeScannerFragment(String ssid) {
+    private boolean isWifiConfigAllowed() {
+        if (mWifiRestrictionsCache == null) {
+            mWifiRestrictionsCache = WifiRestrictionsCache.getInstance(getApplicationContext());
+        }
+        return mWifiRestrictionsCache.isConfigWifiAllowed();
+    }
+
+    @VisibleForTesting
+    protected void showQrCodeScannerFragment(String ssid) {
         WifiDppQrCodeScannerFragment fragment =
                 (WifiDppQrCodeScannerFragment) mFragmentManager.findFragmentByTag(
                         WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER);
diff --git a/src/com/android/settings/wifi/dpp/WifiDppUtils.java b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
index abf5bec..39a5431 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppUtils.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppUtils.java
@@ -114,9 +114,9 @@
      * @param ssid The data corresponding to {@code WifiConfiguration} SSID
      * @return Intent for launching QR code scanner
      */
-    public static Intent getEnrolleeQrCodeScannerIntent(String ssid) {
-        final Intent intent = new Intent(
-                WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER);
+    public static Intent getEnrolleeQrCodeScannerIntent(Context context, String ssid) {
+        final Intent intent = new Intent(context, WifiDppEnrolleeActivity.class);
+        intent.setAction(WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER);
         if (!TextUtils.isEmpty(ssid)) {
             intent.putExtra(EXTRA_WIFI_SSID, ssid);
         }
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index f6604dd..743c7f9 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -44,6 +44,8 @@
 import com.android.settings.SubSettings;
 import com.android.settings.Utils;
 import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.network.NetworkProviderSettings;
+import com.android.settings.network.WifiSwitchPreferenceController;
 import com.android.settings.slices.CustomSliceable;
 import com.android.settings.slices.SliceBackgroundWorker;
 import com.android.settings.slices.SliceBuilderUtils;
@@ -269,15 +271,22 @@
     public Intent getIntent() {
         final String screenTitle = mContext.getText(R.string.wifi_settings).toString();
         final Uri contentUri = new Uri.Builder().appendPath(KEY_WIFI).build();
-        final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
-                WifiSettings.class.getName(), KEY_WIFI, screenTitle,
-                SettingsEnums.DIALOG_WIFI_AP_EDIT)
+        final String className = NetworkProviderSettings.class.getName();
+        final String key = WifiSwitchPreferenceController.KEY;
+
+        final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext, className,
+                key, screenTitle, SettingsEnums.DIALOG_WIFI_AP_EDIT, this)
                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
                 .setData(contentUri);
 
         return intent;
     }
 
+    @Override
+    public int getSliceHighlightMenuRes() {
+        return R.string.menu_key_network;
+    }
+
     private boolean isWifiEnabled() {
         switch (mWifiManager.getWifiState()) {
             case WifiManager.WIFI_STATE_ENABLED:
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 088356b..23601fa 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -54,7 +54,6 @@
     private static final String TAG = "WifiTetherSettings";
     private static final IntentFilter TETHER_STATE_CHANGE_FILTER;
     private static final String KEY_WIFI_TETHER_SCREEN = "wifi_tether_settings_screen";
-    private static final int EXPANDED_CHILD_COUNT_DEFAULT = 3;
 
     @VisibleForTesting
     static final String KEY_WIFI_TETHER_NETWORK_NAME = "wifi_tether_network_name";
@@ -204,10 +203,6 @@
             mSwitchBarController.stopTether();
         }
         mWifiManager.setSoftApConfiguration(config);
-
-        if (context instanceof WifiTetherSecurityPreferenceController) {
-            reConfigInitialExpandedChildCount();
-        }
     }
 
     private SoftApConfiguration buildNewConfig() {
@@ -287,11 +282,4 @@
             }
         }
     }
-
-    private void reConfigInitialExpandedChildCount() {
-        final PreferenceGroup screen = getPreferenceScreen();
-        if (screen != null) {
-            screen.setInitialExpandedChildrenCount(getInitialExpandedChildCount());
-        }
-    }
 }
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 9b2e97f..bc25377 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"],
@@ -59,6 +60,10 @@
         "ims-common",
     ],
     uses_libs: ["org.apache.http.legacy"],
+    optional_uses_libs: [
+        "androidx.window.extensions",
+        "androidx.window.sidecar",
+    ],
 }
 
 //############################################################
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/MainClearTest.java b/tests/robotests/src/com/android/settings/MainClearTest.java
index ec33fad..e2a7ca9 100644
--- a/tests/robotests/src/com/android/settings/MainClearTest.java
+++ b/tests/robotests/src/com/android/settings/MainClearTest.java
@@ -55,6 +55,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -208,6 +209,7 @@
     }
 
     @Test
+    @Ignore
     public void testShowWipeEuicc_euiccEnabled_unprovisioned() {
         prepareEuiccState(
                 true /* isEuiccEnabled */,
@@ -226,6 +228,7 @@
     }
 
     @Test
+    @Ignore
     public void testShowWipeEuicc_developerMode_unprovisioned() {
         prepareEuiccState(
                 true /* isEuiccEnabled */,
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/AccessibilityDialogUtilsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityDialogUtilsTest.java
new file mode 100644
index 0000000..83bba14
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityDialogUtilsTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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 android.content.Context;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link AccessibilityDialogUtils} */
+@RunWith(RobolectricTestRunner.class)
+public class AccessibilityDialogUtilsTest {
+
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+
+    @Before
+    public void setUp() {
+        mContext.setTheme(R.style.Theme_AppCompat);
+    }
+
+    @Test
+    public void updateSoftwareShortcutInDialog_correctDialogType_success() {
+        final AlertDialog dialog = AccessibilityDialogUtils.showEditShortcutDialog(
+                mContext, AccessibilityDialogUtils.DialogType.EDIT_SHORTCUT_GENERIC, "Title",
+                null);
+
+        assertThat(
+                AccessibilityDialogUtils.updateSoftwareShortcutInDialog(mContext, dialog)).isTrue();
+    }
+
+    @Test
+    public void updateSoftwareShortcutInDialog_useNotSupportedDialog_fail() {
+        final AlertDialog dialog = new AlertDialog.Builder(mContext).setTitle("Title").show();
+
+        assertThat(AccessibilityDialogUtils.updateSoftwareShortcutInDialog(mContext,
+                dialog)).isFalse();
+    }
+}
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/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java
new file mode 100644
index 0000000..4f1edba
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityScreenSizeForSetupWizardActivityTest.java
@@ -0,0 +1,140 @@
+/*
+ * 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.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO;
+import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.robolectric.Shadows.shadowOf;
+
+import android.content.Context;
+import android.content.Intent;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType;
+import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
+
+import com.google.android.setupcompat.template.FooterBarMixin;
+import com.google.android.setupdesign.GlifLayout;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link AccessibilityScreenSizeForSetupWizardActivity} */
+@RunWith(RobolectricTestRunner.class)
+public class AccessibilityScreenSizeForSetupWizardActivityTest {
+
+    private Context mContext = ApplicationProvider.getApplicationContext();
+
+    private AccessibilityScreenSizeForSetupWizardActivity setupActivity(int fragmentType) {
+        final Intent intent = new Intent();
+        intent.putExtra(VISION_FRAGMENT_NO, fragmentType);
+        return Robolectric.buildActivity(AccessibilityScreenSizeForSetupWizardActivity.class,
+                intent).create().get();
+    }
+
+    private AccessibilityScreenSizeForSetupWizardActivity setupActivity(int fragmentType,
+            int transitionType) {
+        final Intent intent = new Intent();
+        intent.putExtra(VISION_FRAGMENT_NO, fragmentType);
+        intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, transitionType);
+        return Robolectric.buildActivity(AccessibilityScreenSizeForSetupWizardActivity.class,
+                intent).create().get();
+    }
+
+    @Test
+    public void setupActivity_fontSizePage_returnFontSizeTitle() {
+        final AccessibilityScreenSizeForSetupWizardActivity activity =
+                setupActivity(FragmentType.FONT_SIZE, TransitionType.TRANSITION_FADE);
+
+        final GlifLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        assertThat(layout.getHeaderText()).isEqualTo(mContext.getText(R.string.title_font_size));
+    }
+
+    @Test
+    public void setupActivity_generateDoneButton() {
+        final AccessibilityScreenSizeForSetupWizardActivity activity =
+                setupActivity(FragmentType.FONT_SIZE, TransitionType.TRANSITION_FADE);
+
+        final GlifLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        final FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
+        assertThat(mixin.getPrimaryButton().getText()).isEqualTo(mContext.getText(R.string.done));
+    }
+
+    @Test
+    public void onPause_getPendingTransitionEnterAnimationResourceId_transitionFade_should() {
+        final AccessibilityScreenSizeForSetupWizardActivity activity =
+                setupActivity(FragmentType.FONT_SIZE, TransitionType.TRANSITION_FADE);
+
+        activity.onPause();
+
+        assertThat(shadowOf(activity).getPendingTransitionEnterAnimationResourceId())
+                .isEqualTo(R.anim.sud_stay);
+    }
+
+    @Test
+    public void onPause_getPendingTransitionExitAnimationResourceId_transitionFade_should() {
+        final AccessibilityScreenSizeForSetupWizardActivity activity =
+                setupActivity(FragmentType.FONT_SIZE, TransitionType.TRANSITION_FADE);
+
+        activity.onPause();
+
+        assertThat(shadowOf(activity).getPendingTransitionExitAnimationResourceId())
+                .isEqualTo(android.R.anim.fade_out);
+    }
+
+    @Test
+    public void onPause_getPendingTransitionEnterAnimationResourceId_transitionNone_should() {
+        final AccessibilityScreenSizeForSetupWizardActivity activity =
+                setupActivity(FragmentType.FONT_SIZE);
+
+        activity.onPause();
+
+        assertThat(shadowOf(activity).getPendingTransitionEnterAnimationResourceId())
+                .isNotEqualTo(R.anim.sud_stay);
+    }
+
+    @Test
+    public void onPause_getPendingTransitionExitAnimationResourceId_transitionNone_should() {
+        final AccessibilityScreenSizeForSetupWizardActivity activity =
+                setupActivity(FragmentType.FONT_SIZE);
+
+        activity.onPause();
+
+        assertThat(shadowOf(activity).getPendingTransitionExitAnimationResourceId())
+                .isNotEqualTo(android.R.anim.fade_out);
+    }
+
+    @Test
+    public void updateHeaderLayout_displaySizePage_returnDisplaySizeTitle() {
+        final Intent intent = new Intent();
+        intent.putExtra(VISION_FRAGMENT_NO, FragmentType.SCREEN_SIZE);
+        intent.putExtra(EXTRA_PAGE_TRANSITION_TYPE, TransitionType.TRANSITION_FADE);
+        final AccessibilityScreenSizeForSetupWizardActivity activity = Robolectric.buildActivity(
+                AccessibilityScreenSizeForSetupWizardActivity.class, intent).get();
+        activity.setContentView(R.layout.accessibility_screen_size_setup_wizard);
+        activity.updateHeaderLayout();
+        final GlifLayout layout = activity.findViewById(R.id.setup_wizard_layout);
+        assertThat(layout.getHeaderText()).isEqualTo(mContext.getText(R.string.screen_zoom_title));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
index c3a630b..0849eb2 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivityTest.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.accessibility;
 
+import static com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO;
 import static com.android.settings.accessibility.AccessibilitySettingsForSetupWizardActivity.CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -26,8 +27,7 @@
 import androidx.test.filters.SmallTest;
 
 import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.display.FontSizePreferenceFragmentForSetupWizard;
+import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType;
 
 import com.google.android.setupcompat.util.WizardManagerHelper;
 
@@ -42,45 +42,47 @@
 @SmallTest
 public class AccessibilitySettingsForSetupWizardActivityTest {
 
-  @Test
-  public void createSetupAccessibilityActivity_shouldBeSUWTheme() {
-    final Intent intent = new Intent();
-    AccessibilitySettingsForSetupWizardActivity activity =
-        Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class, intent).get();
+    @Test
+    public void createSetupAccessibilityActivity_shouldBeSUWTheme() {
+        final Intent intent = new Intent();
+        AccessibilitySettingsForSetupWizardActivity activity =
+                Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
+                        intent).get();
 
-    assertThat(activity.getThemeResId()).isEqualTo(R.style.GlifV3Theme_Light);
-  }
+        assertThat(activity.getThemeResId()).isEqualTo(R.style.GlifV3Theme_Light);
+    }
 
-  @Test
-  public void onCreate_hasFontSizeComponent_shouldGoToFontSizePreferenceDirectly() {
-    AccessibilitySettingsForSetupWizardActivity activity =
-            Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
-                    new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName(
-                            RuntimeEnvironment.application, CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW)).
-                            putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true).
-                            putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get();
+    @Test
+    public void onCreate_hasFontSizeComponent_shouldGoToFontSizePreferenceDirectly() {
+        AccessibilitySettingsForSetupWizardActivity activity =
+                Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
+                        new Intent(Intent.ACTION_MAIN).setComponent(new ComponentName(
+                                RuntimeEnvironment.application,
+                                CLASS_NAME_FONT_SIZE_SETTINGS_FOR_SUW))
+                                .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true)
+                                .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get();
 
-    activity.tryLaunchFontSizeSettings();
+        activity.tryLaunchFontSizeSettings();
 
-    final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity();
-    assertThat(launchIntent).isNotNull();
-    assertThat(launchIntent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)).isEqualTo(
-            FontSizePreferenceFragmentForSetupWizard.class.getName());
-    assertThat(activity.isFinishing()).isTrue();
-  }
+        final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity();
+        assertThat(launchIntent).isNotNull();
+        assertThat(launchIntent.getIntExtra(VISION_FRAGMENT_NO, -1)).isEqualTo(
+                FragmentType.FONT_SIZE);
+        assertThat(activity.isFinishing()).isTrue();
+    }
 
-  @Test
-  public void onCreate_noFontSizeComponent_shouldNotFinishCurrentActivity() {
-    AccessibilitySettingsForSetupWizardActivity activity =
-            Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
-                    new Intent(Intent.ACTION_MAIN).
-                            putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true).
-                            putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get();
+    @Test
+    public void onCreate_noFontSizeComponent_shouldNotFinishCurrentActivity() {
+        AccessibilitySettingsForSetupWizardActivity activity =
+                Robolectric.buildActivity(AccessibilitySettingsForSetupWizardActivity.class,
+                        new Intent(Intent.ACTION_MAIN)
+                                .putExtra(WizardManagerHelper.EXTRA_IS_FIRST_RUN, true)
+                                .putExtra(WizardManagerHelper.EXTRA_IS_SETUP_FLOW, true)).get();
 
-    activity.tryLaunchFontSizeSettings();
+        activity.tryLaunchFontSizeSettings();
 
-    final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity();
-    assertThat(launchIntent).isNull();
-    assertThat(activity.isFinishing()).isFalse();
-  }
+        final Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivity();
+        assertThat(launchIntent).isNull();
+        assertThat(activity.isFinishing()).isFalse();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySetupWizardUtilsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySetupWizardUtilsTest.java
new file mode 100644
index 0000000..e79b122
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySetupWizardUtilsTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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 org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.google.android.setupdesign.GlifPreferenceLayout;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link AccessibilitySetupWizardUtils} */
+@RunWith(RobolectricTestRunner.class)
+public class AccessibilitySetupWizardUtilsTest {
+
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+
+    @Test
+    public void setupGlifPreferenceLayout_assignValueToVariable() {
+        final String title = "title";
+        final String description = "description";
+        final Drawable icon = mock(Drawable.class);
+        GlifPreferenceLayout layout = mock(GlifPreferenceLayout.class);
+
+        AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(mContext, layout, title,
+                description, icon);
+
+        verify(layout).setHeaderText(title);
+        verify(layout).setDescriptionText(description);
+        verify(layout).setIcon(icon);
+        verify(layout).setHeaderText(title);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragmentTest.java
index 6d70bf7..48d344a 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragmentTest.java
@@ -180,8 +180,8 @@
         savedInstanceState.putInt(KEY_SAVED_USER_SHORTCUT_TYPE,
                 AccessibilityUtil.UserShortcutType.SOFTWARE
                         | AccessibilityUtil.UserShortcutType.HARDWARE);
-        mFragment.onCreate(savedInstanceState);
         mFragment.onAttach(mContext);
+        mFragment.onCreate(savedInstanceState);
         mFragment.setupEditShortcutDialog(dialog);
         final int value = mFragment.getShortcutTypeCheckBoxValue();
         mFragment.saveNonEmptyUserShortcutType(value);
@@ -195,9 +195,11 @@
     }
 
     @Test
+    @Config(shadows = ShadowFragment.class)
     public void showGeneralCategory_shouldInitCategory() {
         final Bundle savedInstanceState = new Bundle();
         when(mFragment.showGeneralCategory()).thenReturn(true);
+        mFragment.onAttach(mContext);
         mFragment.onCreate(savedInstanceState);
 
         verify(mFragment).initGeneralCategory();
diff --git a/tests/robotests/src/com/android/settings/accessibility/FontSizePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/FontSizePreferenceControllerTest.java
new file mode 100644
index 0000000..a52c0fe
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/FontSizePreferenceControllerTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO;
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.robolectric.Shadows.shadowOf;
+
+import android.app.Activity;
+import android.content.Intent;
+
+import androidx.preference.Preference;
+
+import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType;
+import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link FontSizePreferenceController}. */
+@RunWith(RobolectricTestRunner.class)
+public class FontSizePreferenceControllerTest {
+    private static final String TEST_KEY = "test_key";
+
+    private Activity mActivity;
+    private FontSizePreferenceController mController;
+    Preference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mActivity = Robolectric.setupActivity(Activity.class);
+        mController = new FontSizePreferenceController(mActivity, TEST_KEY);
+        mPreference = new Preference(mActivity);
+        mPreference.setKey(TEST_KEY);
+    }
+
+    @Test
+    public void getAvailabilityStatus_returnAvailable() {
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_launchActivityWithExpectedValues() {
+        mController.handlePreferenceTreeClick(mPreference);
+
+        final Intent nextActivity = shadowOf(mActivity).getNextStartedActivity();
+        assertThat(nextActivity.getIntExtra(VISION_FRAGMENT_NO, /* defaultValue= */-1))
+                .isEqualTo(FragmentType.FONT_SIZE);
+        assertThat(nextActivity.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, /* defaultValue= */-1))
+                .isEqualTo(TransitionType.TRANSITION_FADE);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ScreenSizePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/ScreenSizePreferenceControllerTest.java
new file mode 100644
index 0000000..1cbf78e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/ScreenSizePreferenceControllerTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.VISION_FRAGMENT_NO;
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.robolectric.Shadows.shadowOf;
+
+import android.app.Activity;
+import android.content.Intent;
+
+import androidx.preference.Preference;
+
+import com.android.settings.accessibility.AccessibilityScreenSizeForSetupWizardActivity.FragmentType;
+import com.android.settingslib.transition.SettingsTransitionHelper.TransitionType;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link ScreenSizePreferenceController}. */
+@RunWith(RobolectricTestRunner.class)
+public class ScreenSizePreferenceControllerTest {
+    private static final String TEST_KEY = "test_key";
+
+    private Activity mActivity;
+    private ScreenSizePreferenceController mController;
+    Preference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mActivity = Robolectric.setupActivity(Activity.class);
+        mController = new ScreenSizePreferenceController(mActivity, TEST_KEY);
+        mPreference = new Preference(mActivity);
+        mPreference.setKey(TEST_KEY);
+    }
+
+    @Test
+    public void getAvailabilityStatus_returnAvailable() {
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_launchActivityWithExpectedValues() {
+        mController.handlePreferenceTreeClick(mPreference);
+
+        final Intent nextActivity = shadowOf(mActivity).getNextStartedActivity();
+        assertThat(nextActivity.getIntExtra(VISION_FRAGMENT_NO, /* defaultValue= */-1))
+                .isEqualTo(FragmentType.SCREEN_SIZE);
+        assertThat(nextActivity.getIntExtra(EXTRA_PAGE_TRANSITION_TYPE, /* defaultValue= */-1))
+                .isEqualTo(TransitionType.TRANSITION_FADE);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
index a827284..cccca9c 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
@@ -43,7 +43,6 @@
 import androidx.fragment.app.FragmentActivity;
 import androidx.preference.Preference;
 
-import com.android.internal.logging.nano.MetricsProto;
 import com.android.settings.dashboard.DashboardFeatureProviderImpl;
 import com.android.settings.testutils.shadow.ShadowAccountManager;
 import com.android.settings.testutils.shadow.ShadowUserManager;
@@ -151,9 +150,9 @@
 
         final FragmentActivity activity = Robolectric.setupActivity(FragmentActivity.class);
         final Preference preference = new Preference(mContext);
-        dashboardFeatureProvider.bindPreferenceToTileAndGetObservers(activity,
-                false /* forceRoundedIcon */, MetricsProto.MetricsEvent.DASHBOARD_SUMMARY,
-                preference, tile, null /* key */, Preference.DEFAULT_ORDER);
+        dashboardFeatureProvider.bindPreferenceToTileAndGetObservers(activity, mFragment,
+                false /* forceRoundedIcon */, preference, tile, null /* key */,
+                Preference.DEFAULT_ORDER);
 
         assertThat(preference.getKey()).isEqualTo(tile.getKey(mContext));
         preference.performClick();
diff --git a/tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java
index 5e5239d..9db75a2 100644
--- a/tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java
@@ -18,8 +18,17 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.anyString;
+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.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.verify.domain.DomainVerificationManager;
+import android.content.pm.verify.domain.DomainVerificationUserState;
 import android.util.IconDrawableFactory;
 
 import com.android.settings.R;
@@ -28,6 +37,8 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
@@ -40,16 +51,30 @@
     private Context mContext;
     private IconDrawableFactory mIconDrawableFactory;
 
+    @Mock
+    private DomainVerificationManager mDomainVerificationManager;
+    @Mock
+    private DomainVerificationUserState mDomainVerificationUserState;
+
     @Before
     public void setUp() {
-        mContext = RuntimeEnvironment.application;
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
         mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
         mAppEntry = new ApplicationsState.AppEntry(
                 mContext, createApplicationInfo(mContext.getPackageName()), 0);
+        when(mContext.getSystemService(DomainVerificationManager.class)).thenReturn(
+                mDomainVerificationManager);
     }
 
     @Test
-    public void getLayoutResource_shouldUseAppPreferenceLayout() {
+    public void getLayoutResource_shouldUseAppPreferenceLayout()
+            throws PackageManager.NameNotFoundException {
+        final DomainVerificationUserState domainVerificationUserState = mock(
+                DomainVerificationUserState.class);
+        doReturn(domainVerificationUserState).when(
+                mDomainVerificationManager).getDomainVerificationUserState(anyString());
+        doReturn(true).when(domainVerificationUserState).isLinkHandlingAllowed();
         final DomainAppPreference pref = new DomainAppPreference(
                 mContext, mIconDrawableFactory, mAppEntry);
 
diff --git a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceControllerTest.java
index 3a97387..02bca3e 100644
--- a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceControllerTest.java
@@ -104,12 +104,16 @@
         RestrictedLockUtils.EnforcedAdmin admin = mock(RestrictedLockUtils.EnforcedAdmin.class);
 
         mController.mPreference = restrictedPreference;
-        mController.updateStateInternal(admin);
+        mController.updateStateInternal(admin, true, true);
         verify(restrictedPreference).setDisabledByAdmin(eq(admin));
 
-        reset(admin);
+        mController.updateStateInternal(admin, true, false);
+        verify(restrictedPreference).setDisabledByAdmin(eq(null));
 
-        mController.updateStateInternal(null /* enforcedAdmin */);
-        verify(restrictedPreference, never()).setDisabledByAdmin(any());
+        mController.updateStateInternal(admin, false, true);
+        verify(restrictedPreference).setDisabledByAdmin(eq(null));
+
+        mController.updateStateInternal(admin, false, false);
+        verify(restrictedPreference).setDisabledByAdmin(eq(null));
     }
 }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java
deleted file mode 100644
index 4048998..0000000
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-
-import androidx.preference.Preference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.shadows.ShadowApplication;
-
-@RunWith(RobolectricTestRunner.class)
-public class BluetoothFilesPreferenceControllerTest {
-
-    private Context mContext;
-    private BluetoothFilesPreferenceController mController;
-    private Preference mPreference;
-    @Mock
-    private PackageManager mPackageManager;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-        mController = new BluetoothFilesPreferenceController(mContext);
-        mPreference = new Preference(mContext);
-        mPreference.setKey(BluetoothFilesPreferenceController.KEY_RECEIVED_FILES);
-        doReturn(mPackageManager).when(mContext).getPackageManager();
-        doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
-    }
-
-    @Test
-    public void testHandlePreferenceTreeClick_sendBroadcast() {
-        mController.handlePreferenceTreeClick(mPreference);
-
-        final Intent intent = ShadowApplication.getInstance().getNextStartedActivity();
-        assertThat(intent).isNotNull();
-        assertThat(intent.getAction())
-            .isEqualTo(BluetoothFilesPreferenceController.ACTION_OPEN_FILES);
-
-        final Bundle bundle = intent.getExtras();
-        assertThat(bundle.getInt(BluetoothFilesPreferenceController.EXTRA_DIRECTION)).isEqualTo(1);
-        assertThat(bundle.getBoolean(BluetoothFilesPreferenceController.EXTRA_SHOW_ALL_FILES))
-            .isTrue();
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
index b4f4f97..5c23238 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
@@ -99,20 +99,6 @@
     }
 
     @Test
-    public void createDialog_untetheredDevice_showUntetheredMessage() {
-        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
-                .thenReturn("true".getBytes());
-
-        FragmentController.setupFragment(mFragment, FragmentActivity.class,
-                0 /* containerViewId */, null /* bundle */);
-        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
-        ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
-
-        assertThat(shadowDialog.getMessage()).isEqualTo(
-                mContext.getString(R.string.bluetooth_untethered_unpair_dialog_body, DEVICE_NAME));
-    }
-
-    @Test
     public void createDialog_normalDevice_showNormalMessage() {
         when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
                 .thenReturn("false".getBytes());
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..e7c99c8 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -114,6 +114,7 @@
     private Bundle mSwitchMetaData;
     private DashboardFeatureProviderImpl mImpl;
     private boolean mForceRoundedIcon;
+    private DashboardFragment mFragment;
 
     @Before
     public void setUp() {
@@ -144,6 +145,7 @@
                 .thenReturn(new ResolveInfo());
         mFeatureFactory = FakeFeatureFactory.setupForTest();
         mImpl = new DashboardFeatureProviderImpl(mContext);
+        mFragment = new TestFragment();
     }
 
     @Test
@@ -159,8 +161,8 @@
         doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)))
                 .when(tile).getIcon(any(Context.class));
         mActivityInfo.metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS, "HI");
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
 
         assertThat(preference.getTitle()).isEqualTo(mContext.getText(R.string.settings_label));
         assertThat(preference.getSummary())
@@ -180,8 +182,8 @@
         doReturn(Icon.createWithBitmap(Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565)))
                 .when(tile).getIcon(any(Context.class));
         final List<DynamicDataObserver> observers = mImpl.bindPreferenceToTileAndGetObservers(
-                mActivity, mForceRoundedIcon, MetricsEvent.SETTINGS_GESTURES, preference, tile,
-                null /* key*/, Preference.DEFAULT_ORDER);
+                mActivity, mFragment, mForceRoundedIcon, preference, tile, null /* key*/,
+                Preference.DEFAULT_ORDER);
 
         assertThat(preference.getTitle()).isEqualTo(mContext.getText(R.string.settings_label));
         assertThat(preference.getSummary())
@@ -198,8 +200,8 @@
         mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
         final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
 
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
 
         assertThat(preference.getFragment()).isNull();
         assertThat(preference.getOnPreferenceClickListener()).isNotNull();
@@ -214,8 +216,8 @@
         tile.userHandle.add(mock(UserHandle.class));
         tile.userHandle.add(mock(UserHandle.class));
 
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.getOnPreferenceClickListener().onPreferenceClick(null);
 
         verify(mActivity).getSupportFragmentManager();
@@ -231,15 +233,15 @@
         when(mActivity.getSystemService(Context.USER_SERVICE))
                 .thenReturn(mUserManager);
 
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.getOnPreferenceClickListener().onPreferenceClick(null);
 
         verify(mFeatureFactory.metricsFeatureProvider).logStartedIntent(
                 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
@@ -250,21 +252,21 @@
         tile.userHandle = new ArrayList<>();
         tile.userHandle.add(mock(UserHandle.class));
 
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.getOnPreferenceClickListener().onPreferenceClick(null);
         verify(mFeatureFactory.metricsFeatureProvider).logStartedIntent(
                 any(Intent.class),
                 anyInt());
         verify(mActivity)
-                .startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class));
+                .startActivityAsUser(any(Intent.class), any(UserHandle.class));
     }
 
     @Test
     public void bindPreference_nullPreference_shouldIgnore() {
         final Tile tile = mock(Tile.class);
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, null, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                null /* keys */, tile, "123", Preference.DEFAULT_ORDER);
 
         verifyZeroInteractions(tile);
     }
@@ -273,8 +275,8 @@
     public void bindPreference_withNullKeyNullPriority_shouldGenerateKeyAndPriority() {
         final Preference preference = new Preference(RuntimeEnvironment.application);
         final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, null /* key */,
                 Preference.DEFAULT_ORDER);
 
         assertThat(preference.getKey()).isNotNull();
@@ -288,9 +290,8 @@
 
         final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
 
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
-                Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, null /* key */, Preference.DEFAULT_ORDER);
 
         assertThat(preference.getSummary()).isNull();
     }
@@ -304,8 +305,8 @@
         mActivityInfo.metaData.putString(TileUtils.META_DATA_PREFERENCE_SUMMARY_URI, uriString);
 
         final List<DynamicDataObserver> observers = mImpl.bindPreferenceToTileAndGetObservers(
-                mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN, preference, tile,
-                null /*key */, Preference.DEFAULT_ORDER);
+                mActivity, mFragment, mForceRoundedIcon, preference, tile, null /* key */,
+                Preference.DEFAULT_ORDER);
 
         assertThat(preference.getSummary()).isEqualTo(ShadowTileUtils.MOCK_SUMMARY);
         assertThat(observers.get(0).getUri().toString()).isEqualTo(uriString);
@@ -320,8 +321,8 @@
         mActivityInfo.metaData.putString(TileUtils.META_DATA_PREFERENCE_TITLE_URI, uriString);
 
         final List<DynamicDataObserver> observers = mImpl.bindPreferenceToTileAndGetObservers(
-                mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN, preference, tile,
-                null /*key */, Preference.DEFAULT_ORDER);
+                mActivity, mFragment, mForceRoundedIcon, preference, tile, null /* key */,
+                Preference.DEFAULT_ORDER);
 
         assertThat(preference.getTitle()).isEqualTo(ShadowTileUtils.MOCK_SUMMARY);
         assertThat(observers.get(0).getUri().toString()).isEqualTo(uriString);
@@ -336,9 +337,8 @@
         final Bundle bundle = new Bundle();
         bundle.putBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR, false);
         ShadowTileUtils.setResultBundle(bundle);
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
-                Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, null /* key */, Preference.DEFAULT_ORDER);
 
         preference.callChangeListener(false);
 
@@ -358,9 +358,8 @@
         final Bundle bundle = new Bundle();
         bundle.putBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR, true);
         ShadowTileUtils.setResultBundle(bundle);
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, preference, tile, null /*key */,
-                Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, null /* key */, Preference.DEFAULT_ORDER);
 
         preference.callChangeListener(true);
 
@@ -378,8 +377,8 @@
         final Tile tile = new ProviderTile(mProviderInfo, CategoryKey.CATEGORY_HOMEPAGE,
                 mSwitchMetaData);
         final List<DynamicDataObserver> observers = mImpl.bindPreferenceToTileAndGetObservers(
-                mActivity, mForceRoundedIcon, MetricsEvent.VIEW_UNKNOWN, preference, tile,
-                null /*key */, Preference.DEFAULT_ORDER);
+                mActivity, mFragment, mForceRoundedIcon, preference, tile, null /* key */,
+                Preference.DEFAULT_ORDER);
 
         ShadowTileUtils.setProviderChecked(false);
         observers.get(0).onDataChanged();
@@ -397,9 +396,8 @@
         final Preference preference = new Preference(RuntimeEnvironment.application);
         mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
         final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, preference, tile, null /* key */,
-                Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, null /* key */, Preference.DEFAULT_ORDER);
 
         assertThat(preference.getKey()).isEqualTo(tile.getKey(mContext));
     }
@@ -483,8 +481,8 @@
         mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
         final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
 
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, preference, tile, "123", baseOrder);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", baseOrder);
 
         assertThat(preference.getOrder()).isEqualTo(tile.getOrder() + baseOrder);
     }
@@ -496,8 +494,8 @@
         mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 10);
         final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
         mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, testOrder);
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
 
         assertThat(preference.getOrder()).isEqualTo(testOrder);
     }
@@ -508,8 +506,8 @@
         final Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
         mActivityInfo.metaData.putString(META_DATA_KEY_ORDER, "hello");
 
-        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mForceRoundedIcon,
-                MetricsEvent.VIEW_UNKNOWN, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
 
         assertThat(preference.getOrder()).isEqualTo(Preference.DEFAULT_ORDER);
     }
@@ -522,8 +520,8 @@
         mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
         mActivityInfo.metaData.putString("com.android.settings.intent.action", "TestAction");
         tile.userHandle = null;
-        mImpl.bindPreferenceToTileAndGetObservers(activity, mForceRoundedIcon,
-                MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(activity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.performClick();
         ShadowActivity shadowActivity = Shadows.shadowOf(activity);
 
@@ -546,8 +544,8 @@
         mActivityInfo.metaData.putString("com.android.settings.intent.action", "TestAction");
         tile.userHandle = null;
 
-        mImpl.bindPreferenceToTileAndGetObservers(activity, mForceRoundedIcon,
-                MetricsEvent.SETTINGS_GESTURES, preference, tile, "123", Preference.DEFAULT_ORDER);
+        mImpl.bindPreferenceToTileAndGetObservers(activity, mFragment, mForceRoundedIcon,
+                preference, tile, "123", Preference.DEFAULT_ORDER);
         preference.performClick();
 
         final ShadowActivity.IntentForResult launchIntent =
@@ -568,7 +566,7 @@
         mImpl.openTileIntent(mActivity, tile);
 
         verify(mActivity, never())
-                .startActivityForResult(any(Intent.class), eq(0));
+                .startActivity(any(Intent.class));
         verify(mActivity).getSupportFragmentManager();
     }
 
@@ -585,7 +583,7 @@
         mImpl.openTileIntent(mActivity, tile);
 
         verify(mActivity, never())
-                .startActivityForResult(any(Intent.class), eq(0));
+                .startActivity(any(Intent.class));
         verify(mActivity).getSupportFragmentManager();
     }
 
@@ -602,7 +600,7 @@
         mImpl.openTileIntent(mActivity, tile);
 
         verify(mActivity)
-                .startActivityForResult(any(Intent.class), eq(0));
+                .startActivity(any(Intent.class));
         verify(mActivity, never()).getSupportFragmentManager();
     }
 
@@ -623,7 +621,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 +640,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,8 +663,26 @@
 
         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();
     }
+
+    private static class TestFragment extends DashboardFragment {
+
+        @Override
+        public int getMetricsCategory() {
+            return MetricsEvent.SETTINGS_GESTURES;
+        }
+
+        @Override
+        protected int getPreferenceScreenResId() {
+            return R.xml.gestures;
+        }
+
+        @Override
+        protected String getLogTag() {
+            return "TestFragment";
+        }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/display/LockscreenClockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/LockscreenClockPreferenceControllerTest.java
new file mode 100644
index 0000000..94f2dc6
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/LockscreenClockPreferenceControllerTest.java
@@ -0,0 +1,90 @@
+/*
+ * 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.display;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.preference.Preference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public class LockscreenClockPreferenceControllerTest {
+
+    private static final String TEST_KEY = "test_key";
+    private static final String SETTING_KEY = Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK;
+
+    private Context mContext;
+    private ContentResolver mContentResolver;
+    private LockscreenClockPreferenceController mController;
+
+    @Mock
+    private Preference mPreference;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mContentResolver = mContext.getContentResolver();
+        mController = new LockscreenClockPreferenceController(mContext, TEST_KEY);
+    }
+
+    @Test
+    public void isChecked_SettingIs1_returnTrue() {
+        Settings.Secure.putInt(mContentResolver, SETTING_KEY, 1);
+
+        assertThat(mController.isChecked()).isTrue();
+    }
+
+    @Test
+    public void isChecked_SettingIs0_returnFalse() {
+        Settings.Secure.putInt(mContentResolver, SETTING_KEY, 0);
+
+        assertThat(mController.isChecked()).isFalse();
+    }
+
+    @Test
+    public void isChecked_SettingIsNotSet_returnTrue() {
+        Settings.Secure.putString(mContentResolver, SETTING_KEY, null);
+
+        assertThat(mController.isChecked()).isTrue();
+    }
+
+    @Test
+    public void setChecked_true_SettingIsNot0() {
+        mController.setChecked(true);
+
+        assertThat(Settings.Secure.getInt(mContentResolver, SETTING_KEY, 0)).isNotEqualTo(0);
+    }
+
+    @Test
+    public void setChecked_false_SettingIs0() {
+        mController.setChecked(false);
+
+        assertThat(Settings.Secure.getInt(mContentResolver, SETTING_KEY, 0)).isEqualTo(0);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/display/TopLevelWallpaperPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/TopLevelWallpaperPreferenceControllerTest.java
index 6ad9974..62b34e2 100644
--- a/tests/robotests/src/com/android/settings/display/TopLevelWallpaperPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/TopLevelWallpaperPreferenceControllerTest.java
@@ -29,6 +29,7 @@
 
 import com.android.settings.R;
 import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.ShadowActivityEmbeddingUtils;
 
 import com.google.common.collect.Lists;
 
@@ -43,7 +44,7 @@
 import org.robolectric.shadows.ShadowPackageManager;
 
 @RunWith(RobolectricTestRunner.class)
-@Config(shadows = {SettingsShadowResources.class})
+@Config(shadows = {SettingsShadowResources.class, ShadowActivityEmbeddingUtils.class})
 public class TopLevelWallpaperPreferenceControllerTest {
     private static final String TEST_KEY = "test_key";
 
@@ -204,18 +205,32 @@
     }
 
     @Test
-    public void handlePreferenceTreeClick_launchClearTask() {
-        mShadowPackageManager.setResolveInfosForIntent(
-                mWallpaperIntent, Lists.newArrayList());
+    public void handlePreferenceTreeClick_embeddingActivityDisabled_launchWithTaskFlag() {
+        ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(false);
         mShadowPackageManager.setResolveInfosForIntent(
                 mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
-
         Preference preference = new Preference(mContext);
         preference.setKey(TEST_KEY);
 
         mController.handlePreferenceTreeClick(preference);
 
-        assertThat((Shadows.shadowOf(mContext).getNextStartedActivityForResult()
-                .intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_TASK) != 0).isTrue();
+        int flags = Shadows.shadowOf(mContext).getNextStartedActivityForResult().intent.getFlags();
+        assertThat((flags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0).isTrue();
+        assertThat((flags & Intent.FLAG_ACTIVITY_CLEAR_TASK) != 0).isTrue();
+    }
+
+    @Test
+    public void handlePreferenceTreeClick_embeddingActivityEnabled_launchWithoutTaskFlag() {
+        ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true);
+        mShadowPackageManager.setResolveInfosForIntent(
+                mStylesAndWallpaperIntent, Lists.newArrayList(mock(ResolveInfo.class)));
+        Preference preference = new Preference(mContext);
+        preference.setKey(TEST_KEY);
+
+        mController.handlePreferenceTreeClick(preference);
+
+        int flags = Shadows.shadowOf(mContext).getNextStartedActivityForResult().intent.getFlags();
+        assertThat((flags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0).isFalse();
+        assertThat((flags & Intent.FLAG_ACTIVITY_CLEAR_TASK) != 0).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/dream/StartNowPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dream/StartNowPreferenceControllerTest.java
index 6c8a8f6..98ba1ce 100644
--- a/tests/robotests/src/com/android/settings/dream/StartNowPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/dream/StartNowPreferenceControllerTest.java
@@ -16,17 +16,18 @@
 
 package com.android.settings.dream;
 
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
+import android.widget.Button;
 
 import androidx.preference.PreferenceScreen;
 
+import com.android.settings.R;
 import com.android.settingslib.dream.DreamBackend;
-import com.android.settingslib.widget.MainSwitchPreference;
+import com.android.settingslib.widget.LayoutPreference;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -46,7 +47,9 @@
     @Mock
     private PreferenceScreen mScreen;
     @Mock
-    private MainSwitchPreference mPref;
+    private LayoutPreference mLayoutPref;
+    @Mock
+    private Button mButton;
     @Mock
     private DreamBackend mBackend;
 
@@ -56,36 +59,29 @@
 
         mContext = spy(RuntimeEnvironment.application);
         mController = new StartNowPreferenceController(mContext, "key");
-        mPref = mock(MainSwitchPreference.class);
-        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPref);
+        when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mLayoutPref);
+        when(mLayoutPref.findViewById(R.id.dream_start_now_button)).thenReturn(mButton);
 
         ReflectionHelpers.setField(mController, "mBackend", mBackend);
     }
 
     @Test
-    public void displayPreference_shouldAddOnSwitchChangeListener() {
-        mController.displayPreference(mScreen);
-
-        verify(mPref).addOnSwitchChangeListener(mController);
-    }
-
-    @Test
-    public void updateState_neverDreaming_preferenceShouldDidabled() {
+    public void updateState_neverDreaming_buttonShouldDidabled() {
         when(mBackend.getWhenToDreamSetting()).thenReturn(DreamBackend.NEVER);
         mController.displayPreference(mScreen);
 
-        mController.updateState(mPref);
+        mController.updateState(mLayoutPref);
 
-        verify(mPref).setEnabled(false);
+        verify(mButton).setEnabled(false);
     }
 
     @Test
-    public void updateState_dreamIsAvailable_preferenceShouldEnabled() {
+    public void updateState_dreamIsAvailable_buttonShouldEnabled() {
         when(mBackend.getWhenToDreamSetting()).thenReturn(DreamBackend.EITHER);
         mController.displayPreference(mScreen);
 
-        mController.updateState(mPref);
+        mController.updateState(mLayoutPref);
 
-        verify(mPref).setEnabled(true);
+        verify(mButton).setEnabled(true);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java
index e3cd5d2..e3f58f4 100644
--- a/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/EnterprisePrivacyFeatureProviderImplTest.java
@@ -356,7 +356,7 @@
         addWorkPolicyInfoIntent(mOwner.getPackageName(), true, false);
         assertThat(mProvider.hasWorkPolicyInfo()).isFalse();
 
-        assertThat(mProvider.showWorkPolicyInfo()).isFalse();
+        assertThat(mProvider.showWorkPolicyInfo(mContext)).isFalse();
         verify(mContext, never()).startActivity(any());
     }
 
@@ -365,12 +365,12 @@
         // If the intent is not resolved, then there's no info to show for DO
         when(mDevicePolicyManager.getDeviceOwnerComponentOnAnyUser()).thenReturn(mOwner);
         assertThat(mProvider.hasWorkPolicyInfo()).isFalse();
-        assertThat(mProvider.showWorkPolicyInfo()).isFalse();
+        assertThat(mProvider.showWorkPolicyInfo(mContext)).isFalse();
 
         // If the intent is resolved, then we can use it to launch the activity
         Intent intent = addWorkPolicyInfoIntent(mOwner.getPackageName(), true, false);
         assertThat(mProvider.hasWorkPolicyInfo()).isTrue();
-        assertThat(mProvider.showWorkPolicyInfo()).isTrue();
+        assertThat(mProvider.showWorkPolicyInfo(mContext)).isTrue();
         verify(mContext).startActivity(intentEquals(intent));
     }
 
@@ -382,12 +382,12 @@
 
         // If the intent is not resolved, then there's no info to show for PO
         assertThat(mProvider.hasWorkPolicyInfo()).isFalse();
-        assertThat(mProvider.showWorkPolicyInfo()).isFalse();
+        assertThat(mProvider.showWorkPolicyInfo(mContext)).isFalse();
 
         // If the intent is resolved, then we can use it to launch the activity in managed profile
         Intent intent = addWorkPolicyInfoIntent(mOwner.getPackageName(), false, true);
         assertThat(mProvider.hasWorkPolicyInfo()).isTrue();
-        assertThat(mProvider.showWorkPolicyInfo()).isTrue();
+        assertThat(mProvider.showWorkPolicyInfo(mContext)).isTrue();
         verify(mContext)
                 .startActivityAsUser(
                         intentEquals(intent),
@@ -402,12 +402,12 @@
 
         // If the intent is not resolved, then there's no info to show for COMP
         assertThat(mProvider.hasWorkPolicyInfo()).isFalse();
-        assertThat(mProvider.showWorkPolicyInfo()).isFalse();
+        assertThat(mProvider.showWorkPolicyInfo(mContext)).isFalse();
 
         // If the intent is resolved, then we can use it to launch the activity for device owner
         Intent intent = addWorkPolicyInfoIntent(mOwner.getPackageName(), true, true);
         assertThat(mProvider.hasWorkPolicyInfo()).isTrue();
-        assertThat(mProvider.showWorkPolicyInfo()).isTrue();
+        assertThat(mProvider.showWorkPolicyInfo(mContext)).isTrue();
         verify(mContext).startActivity(intentEquals(intent));
     }
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index b50e083..0a48cd1 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);
     }
 
@@ -432,6 +438,21 @@
     }
 
     @Test
+    public void testInitHeader_noUsageTimeButConsumedPower_hasEmptySummary() {
+        Bundle bundle = new Bundle(3);
+        bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, /* value */ 0);
+        bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, /* value */ 0);
+        bundle.putInt(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_AMOUNT, /* value */ 10);
+        when(mFragment.getArguments()).thenReturn(bundle);
+
+        mFragment.initHeader();
+
+        ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
+        verify(mEntityHeaderController).setSummary(captor.capture());
+        assertThat(captor.getValue().toString()).isEmpty();
+    }
+
+    @Test
     public void testInitHeader_backgroundTwoMinForegroundZero_hasCorrectSummary() {
         final long backgroundTimeTwoMinutes = 120000;
         final long foregroundTimeZero = 0;
@@ -771,13 +792,71 @@
         assertThat(mOptimizePreference.isChecked()).isTrue();
         assertThat(mRestrictedPreference.isChecked()).isFalse();
         assertThat(mUnrestrictedPreference.isChecked()).isFalse();
+    }
+
+    @Test
+    public void testOnPause_optimizationModeChanged_logPreference() {
+        final int mode = BatteryOptimizeUtils.MODE_RESTRICTED;
+        mFragment.mOptimizationMode = mode;
+        when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode);
+        mOptimizePreference.setKey(KEY_PREF_OPTIMIZED);
+
+        mFragment.onRadioButtonClicked(mOptimizePreference);
+        mFragment.onPause();
+
         verify(mMetricsFeatureProvider)
-            .action(
-                mContext,
-                SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED,
-                (Pair<Integer, Object>[]) new Pair[] {
-                    new Pair(ConvertUtils.METRIC_KEY_PACKAGE, null),
-                    new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, "app label")
-                });
+                .action(
+                        SettingsEnums.OPEN_APP_BATTERY_USAGE,
+                        SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED,
+                        SettingsEnums.OPEN_APP_BATTERY_USAGE,
+                        /* package name*/ "none",
+                        /* consumed battery */ 0);
+    }
+
+    @Test
+    public void testOnPause_optimizationModeIsNotChanged_notInvokeLogging() {
+        final int mode = BatteryOptimizeUtils.MODE_OPTIMIZED;
+        mFragment.mOptimizationMode = mode;
+        when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode);
+        mOptimizePreference.setKey(KEY_PREF_OPTIMIZED);
+
+        mFragment.onRadioButtonClicked(mOptimizePreference);
+        mFragment.onPause();
+
+        verifyZeroInteractions(mMetricsFeatureProvider);
+    }
+
+    @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.onPause();
+
+        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..0f178e0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
@@ -0,0 +1,407 @@
+/*
+ * 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 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 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;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@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);
+    }
+
+    @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);
+        doReturn(false).when(mPowerAllowlistBackend).isDefaultActiveApp(anyString());
+
+        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);
+        doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(anyString());
+
+        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());
+        TimeUnit.SECONDS.sleep(1);
+
+        final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
+        inOrder.verify(mBatteryOptimizeUtils).setAppUsageState(MODE_RESTRICTED);
+        inOrder.verify(mBatteryOptimizeUtils, never()).setAppUsageState(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());
+        TimeUnit.SECONDS.sleep(1);
+
+        final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
+        inOrder.verify(mBatteryOptimizeUtils).setAppUsageState(MODE_RESTRICTED);
+        inOrder.verify(mBatteryOptimizeUtils).setAppUsageState(MODE_UNRESTRICTED);
+        inOrder.verify(mBatteryOptimizeUtils, never()).setAppUsageState(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..1d74491 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;
@@ -339,14 +343,12 @@
         assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
             mPowerGaugePreference)).isTrue();
         verify(mMetricsFeatureProvider)
-            .action(
-                mContext,
-                SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
-                (Pair<Integer, Object>[]) new Pair[] {
-                    new Pair(ConvertUtils.METRIC_KEY_PACKAGE, null),
-                    new Pair(ConvertUtils.METRIC_KEY_BATTERY_LEVEL, 0),
-                    new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, null)
-                });
+                .action(
+                        SettingsEnums.OPEN_BATTERY_USAGE,
+                        SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
+                        SettingsEnums.OPEN_BATTERY_USAGE,
+                        /* package name */ "none",
+                        /* percentage of total */ 0);
     }
 
     @Test
@@ -358,14 +360,12 @@
         assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
             mPowerGaugePreference)).isTrue();
         verify(mMetricsFeatureProvider)
-            .action(
-                mContext,
-                SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM,
-                (Pair<Integer, Object>[]) new Pair[] {
-                    new Pair(ConvertUtils.METRIC_KEY_PACKAGE, null),
-                    new Pair(ConvertUtils.METRIC_KEY_BATTERY_LEVEL, 0),
-                    new Pair(ConvertUtils.METRIC_KEY_BATTERY_USAGE, null)
-                });
+                .action(
+                        SettingsEnums.OPEN_BATTERY_USAGE,
+                        SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM,
+                        SettingsEnums.OPEN_BATTERY_USAGE,
+                        /* package name */ "none",
+                        /* percentage of total */ 0);
     }
 
     @Test
@@ -660,7 +660,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..c154f42 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;
@@ -41,15 +42,17 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
+import java.util.concurrent.TimeUnit;
+
 @RunWith(RobolectricTestRunner.class)
 public class BatteryOptimizeUtilsTest {
 
     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 +62,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 +127,49 @@
     }
 
     @Test
-    public void testSetAppUsageState_Restricted_verifyAction() {
-        mBatteryOptimizeUtils.setAppUsageState(RESTRICTED);
+    public void testSetAppUsageState_Restricted_verifyAction() throws Exception {
+        // Sets the current mode as MODE_UNRESTRICTED.
+        mBatteryOptimizeUtils.mAllowListed = false;
+        mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_ALLOWED;
 
-        verify(mockBatteryUtils).setForceAppStandby(UID,
+        mBatteryOptimizeUtils.setAppUsageState(MODE_RESTRICTED);
+        TimeUnit.SECONDS.sleep(1);
+
+        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 testSetAppUsageState_Unrestricted_verifyAction() throws Exception {
+        mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED);
+        TimeUnit.SECONDS.sleep(1);
 
-        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 testSetAppUsageState_Optimized_verifyAction() throws Exception {
+        mBatteryOptimizeUtils.setAppUsageState(MODE_OPTIMIZED);
+        TimeUnit.SECONDS.sleep(1);
 
-        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 testSetAppUsageState_sameUnrestrictedMode_verifyNoAction() throws Exception {
+        // Sets the current mode as MODE_UNRESTRICTED.
+        mBatteryOptimizeUtils.mAllowListed = true;
+        mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_ALLOWED;
+
+        mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED);
+        TimeUnit.SECONDS.sleep(1);
+
+        verifyZeroInteractions(mMockBackend);
+        verifyZeroInteractions(mMockBatteryUtils);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
index cee1160..ddb9860 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverControllerTest.java
@@ -29,9 +29,6 @@
 
 import androidx.preference.Preference;
 
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -51,16 +48,12 @@
 
     private BatterySaverController mBatterySaverController;
     private Context mContext;
-    private FakeFeatureFactory mFeatureFactory;
-    private MetricsFeatureProvider mMetricsFeatureProvider;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
 
         mContext = RuntimeEnvironment.application;
-        mFeatureFactory = FakeFeatureFactory.setupForTest();
-        mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
         mBatterySaverController = spy(new BatterySaverController(mContext));
         ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
         ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
@@ -82,49 +75,6 @@
     }
 
     @Test
-    public void onPreferenceChange_onPowerSaveModeChanged_manualTrigger_logsType() {
-        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
-        Settings.Global.putInt(mContext.getContentResolver(),
-                Settings.Global.AUTOMATIC_POWER_SAVE_MODE, -1);
-
-        mBatterySaverController.onPowerSaveModeChanged();
-        verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
-                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
-                        SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_NO_SCHEDULE));
-    }
-
-    @Test
-    public void onPreferenceChange_onPowerSaveModeChanged_triggerPercent_logsTypeAndPercentage() {
-        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
-        Settings.Global.putInt(mContext.getContentResolver(),
-                Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
-                PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
-        final int percentageVal = 15;
-        Settings.Global.putInt(mContext.getContentResolver(),
-                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, percentageVal);
-
-        mBatterySaverController.onPowerSaveModeChanged();
-        verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
-                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
-                        SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_PERCENTAGE),
-                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
-                        percentageVal));
-    }
-
-    @Test
-    public void onPreferenceChange_onPowerSaveModeChanged_triggerDynamic_logsType() {
-        when(mPowerManager.isPowerSaveMode()).thenReturn(true);
-        Settings.Global.putInt(mContext.getContentResolver(),
-                Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
-                PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
-
-        mBatterySaverController.onPowerSaveModeChanged();
-        verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.FUELGAUGE_BATTERY_SAVER,
-                Pair.create(SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
-                        SettingsEnums.BATTERY_SAVER_SCHEDULE_TYPE_BASED_ON_ROUTINE));
-    }
-
-    @Test
     public void getSummary_batterySaverOn_showSummaryOn() {
         when(mPowerManager.isPowerSaveMode()).thenReturn(true);
 
@@ -167,4 +117,10 @@
 
         assertThat(mBatterySaverController.getSummary()).isEqualTo("Off");
     }
+
+    @Test
+    public void getAvailabilityStatus_returnAvailable() {
+        assertThat(mBatterySaverController.getAvailabilityStatus())
+                .isEqualTo(BatterySaverController.AVAILABLE);
+    }
 }
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/ExpandDividerPreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
index 97af282..9e32da4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
@@ -18,11 +18,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;
-import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -36,8 +32,6 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.MockitoAnnotations;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 
@@ -52,7 +46,6 @@
 
     @Before
     public void setUp() {
-        MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
         mImageView = spy(new ImageView(mContext));
         mTextView = spy(new TextView(mContext));
@@ -64,9 +57,9 @@
     @Test
     public void testConstructor_returnExpectedResult() {
         assertThat(mExpandDividerPreference.getKey())
-            .isEqualTo(ExpandDividerPreference.PREFERENCE_KEY);
+                .isEqualTo(ExpandDividerPreference.PREFERENCE_KEY);
         assertThat(mExpandDividerPreference.getLayoutResource())
-            .isEqualTo(R.layout.preference_expand_divider);
+                .isEqualTo(R.layout.preference_expand_divider);
     }
 
     @Test
@@ -75,9 +68,7 @@
         mExpandDividerPreference.mTextView = mTextView;
 
         mExpandDividerPreference.setTitle(titleContent);
-        final ArgumentCaptor<Runnable> captor = ArgumentCaptor.forClass(Runnable.class);
-        verify(mTextView).postDelayed(captor.capture(), eq(50L));
-        captor.getValue().run();
+
         verify(mTextView).setText(titleContent);
     }
 
@@ -86,7 +77,7 @@
         final boolean[] isExpandedArray = new boolean[] {false};
         mExpandDividerPreference.mImageView = mImageView;
         mExpandDividerPreference.setOnExpandListener(
-            isExpanded -> isExpandedArray[0] = isExpanded);
+                isExpanded -> isExpandedArray[0] = isExpanded);
 
         // Click the item first time from false -> true.
         mExpandDividerPreference.onClick();
@@ -106,7 +97,7 @@
         final boolean[] isExpandedArray = new boolean[] {false};
         mExpandDividerPreference.mImageView = mImageView;
         mExpandDividerPreference.setOnExpandListener(
-            isExpanded -> isExpandedArray[0] = isExpanded);
+                isExpanded -> isExpandedArray[0] = isExpanded);
 
         mExpandDividerPreference.setIsExpanded(true);
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
index 874618d..c0b1394 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
@@ -18,8 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import com.android.settingslib.widget.RadioButtonPreference;
@@ -76,8 +74,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);
 
@@ -98,14 +96,11 @@
         mPreference.setKey(mController.KEY_OPTIMIZED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
 
-        verify(mockBatteryOptimizeUtils).setAppUsageState(
-                BatteryOptimizeUtils.AppUsageState.OPTIMIZED);
+        assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
     }
 
     @Test
     public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
-        mController.handlePreferenceTreeClick(mPreference);
-
-        verifyZeroInteractions(mockBatteryOptimizeUtils);
+        assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
index c0b566a..95cacbb 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
@@ -157,6 +157,11 @@
     }
 
     @Test
+    public void testIsAdaptiveChargingSupported_returnFalse() {
+        assertThat(mPowerFeatureProvider.isAdaptiveChargingSupported()).isFalse();
+    }
+
+    @Test
     public void testGetResumeChargeIntent_returnNull() {
         assertThat(mPowerFeatureProvider.getResumeChargeIntent()).isNull();
     }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
index 2e17404..d826c8d 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
@@ -18,8 +18,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import com.android.settingslib.widget.RadioButtonPreference;
@@ -84,8 +82,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);
 
@@ -106,14 +104,11 @@
         mPreference.setKey(mController.KEY_RESTRICTED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
 
-        verify(mockBatteryOptimizeUtils).setAppUsageState(
-                BatteryOptimizeUtils.AppUsageState.RESTRICTED);
+        assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
     }
 
     @Test
     public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
-        mController.handlePreferenceTreeClick(mPreference);
-
-        verifyZeroInteractions(mockBatteryOptimizeUtils);
+        assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
index 3201d82..9e563f2 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/TopLevelBatteryPreferenceControllerTest.java
@@ -21,11 +21,7 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -36,9 +32,7 @@
 import androidx.preference.Preference;
 
 import com.android.settings.R;
-import com.android.settings.testutils.FakeFeatureFactory;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -50,23 +44,13 @@
 @RunWith(RobolectricTestRunner.class)
 public class TopLevelBatteryPreferenceControllerTest {
     private Context mContext;
-    private FakeFeatureFactory mFeatureFactory;
     private TopLevelBatteryPreferenceController mController;
-    private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mFeatureFactory = FakeFeatureFactory.setupForTest();
         mContext = spy(Robolectric.setupActivity(Activity.class));
         mController = new TopLevelBatteryPreferenceController(mContext, "test_key");
-        mBatterySettingsFeatureProvider =
-                mFeatureFactory.batterySettingsFeatureProvider;
-    }
-
-    @After
-    public void cleanUp() {
-        TopLevelBatteryPreferenceController.sReplacingActivityMap.clear();
     }
 
     @Test
@@ -81,54 +65,6 @@
     }
 
     @Test
-    public void handlePreferenceTreeClick_noFragment_noCustomActivityCalled() {
-        Preference preference = new Preference(mContext);
-
-        assertThat(mController.handlePreferenceTreeClick(preference)).isFalse();
-    }
-
-    @Test
-    public void handlePreferenceTreeClick_sameActivityReturned_noCustomActivityCalled() {
-        String fragmentPath = "my.fragment.ClassName";
-        Preference preference = mock(Preference.class);
-        when(preference.getFragment()).thenReturn(fragmentPath);
-        ComponentName pathName = mController.convertClassPathToComponentName(fragmentPath);
-        when(mBatterySettingsFeatureProvider.getReplacingActivity(any())).thenReturn(pathName);
-
-        assertThat(mController.handlePreferenceTreeClick(preference)).isFalse();
-    }
-
-    @Test
-    public void handlePreferenceTreeClick_newActivityReturned_newActivityRedirected() {
-        String fragmentPath = "my.fragment.ClassName";
-        Preference preference = mock(Preference.class);
-        when(preference.getFragment()).thenReturn(fragmentPath);
-        String newFragmentPath = "my.fragment.NewClassName";
-        ComponentName newPathName = mController.convertClassPathToComponentName(newFragmentPath);
-        when(mBatterySettingsFeatureProvider.getReplacingActivity(any())).thenReturn(
-                newPathName);
-        doNothing().when(mContext).startActivity(any());
-
-        assertThat(mController.handlePreferenceTreeClick(preference)).isTrue();
-    }
-
-    @Test
-    public void handlePreferenceTreeClick_calledMultipleTimes_fetchedFromCache() {
-        String fragmentPath = "my.fragment.ClassName";
-        Preference preference = mock(Preference.class);
-        when(preference.getFragment()).thenReturn(fragmentPath);
-        String newFragmentPath = "my.fragment.NewClassName";
-        ComponentName newPathName = mController.convertClassPathToComponentName(newFragmentPath);
-        when(mBatterySettingsFeatureProvider.getReplacingActivity(any())).thenReturn(
-                newPathName);
-        doNothing().when(mContext).startActivity(any());
-
-        assertThat(mController.handlePreferenceTreeClick(preference)).isTrue();
-        assertThat(mController.handlePreferenceTreeClick(preference)).isTrue();
-        verify(mBatterySettingsFeatureProvider, times(1)).getReplacingActivity(any());
-    }
-
-    @Test
     public void convertClassPathToComponentName_nullInput_returnsNull() {
         assertThat(mController.convertClassPathToComponentName(null)).isNull();
     }
@@ -156,6 +92,7 @@
 
     @Test
     public void getDashboardLabel_returnsCorrectLabel() {
+        mController.mPreference = new Preference(mContext);
         BatteryInfo info = new BatteryInfo();
         info.batteryPercentString = "3%";
         assertThat(mController.getDashboardLabel(mContext, info, true))
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
index 63cf760..b0e9184 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
@@ -19,8 +19,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import com.android.settingslib.widget.RadioButtonPreference;
@@ -84,8 +82,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);
 
@@ -106,14 +104,11 @@
         mPreference.setKey(mController.KEY_UNRESTRICTED_PREF);
         mController.handlePreferenceTreeClick(mPreference);
 
-        verify(mockBatteryOptimizeUtils).setAppUsageState(
-                BatteryOptimizeUtils.AppUsageState.UNRESTRICTED);
+        assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
     }
 
     @Test
     public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
-        mController.handlePreferenceTreeClick(mPreference);
-
-        verifyZeroInteractions(mockBatteryOptimizeUtils);
+        assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
new file mode 100644
index 0000000..5c24da9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettingsTest.java
@@ -0,0 +1,116 @@
+package com.android.settings.fuelgauge.batterysaver;
+
+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.verifyNoMoreInteractions;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.os.PowerManager;
+import android.provider.Settings;
+import android.util.Pair;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+@RunWith(RobolectricTestRunner.class)
+public final class BatterySaverScheduleSettingsTest {
+
+    private Context mContext;
+    private FakeFeatureFactory mFeatureFactory;
+    private MetricsFeatureProvider mMetricsFeatureProvider;
+    private BatterySaverScheduleSettings mBatterySaverScheduleSettings;
+
+    @Before
+    public void setUp() {
+        mContext = spy(RuntimeEnvironment.application);
+        mBatterySaverScheduleSettings = new BatterySaverScheduleSettings();
+        mBatterySaverScheduleSettings.onAttach(mContext);
+        mFeatureFactory = FakeFeatureFactory.setupForTest();
+        mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
+
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, 1);
+        mBatterySaverScheduleSettings.onResume();
+    }
+
+    @Test
+    public void onPause_withNoScheduleType_logExpectedData() {
+        int expectedPercentage = 0;
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, expectedPercentage);
+
+        mBatterySaverScheduleSettings.onPause();
+
+        verifySchedule("key_battery_saver_no_schedule", expectedPercentage);
+    }
+
+    @Test
+    public void onPause_withRoutineScheduleType_logExpectedData() {
+        int expectedPercentage = 0;
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, expectedPercentage);
+
+        mBatterySaverScheduleSettings.onPause();
+
+        verifySchedule("key_battery_saver_routine", expectedPercentage);
+    }
+
+    @Test
+    public void onPause_withPercentageScheduleType_logExpectedData() {
+        int expectedPercentage = 10;
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, expectedPercentage);
+
+        mBatterySaverScheduleSettings.onPause();
+
+        verifySchedule("key_battery_saver_percentage", expectedPercentage);
+    }
+
+    @Test
+    public void onPause_scheduleTypeAndPercentageAreNotChanged_notLogAnyData() {
+        mBatterySaverScheduleSettings.onResume();
+        mBatterySaverScheduleSettings.onPause();
+
+        waitAWhile();
+        verifyNoMoreInteractions(mMetricsFeatureProvider);
+    }
+
+    @Test
+    public void onPause_multipleScheduleTypeChanges_logLastChangedData() {
+        int expectedPercentage = 10;
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, 0);
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC, 0);
+        setSchedule(PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE, expectedPercentage);
+
+        mBatterySaverScheduleSettings.onPause();
+
+        verifySchedule("key_battery_saver_percentage", expectedPercentage);
+    }
+
+    private void setSchedule(int scheduleType, int schedulePercentage) {
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.AUTOMATIC_POWER_SAVE_MODE, scheduleType);
+        Settings.Global.putInt(mContext.getContentResolver(),
+                Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, schedulePercentage);
+    }
+
+    private void verifySchedule(String scheduleTypeKey, int schedulePercentage) {
+        waitAWhile();
+        verify(mMetricsFeatureProvider).action(SettingsEnums.FUELGAUGE_BATTERY_SAVER,
+                SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
+                SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
+                scheduleTypeKey, schedulePercentage);
+    }
+
+    private void waitAWhile() {
+        try {
+            Thread.sleep(200);
+        } catch (Exception e) {
+        }
+    }
+}
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/network/MobileNetworkSummaryControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
index 1639bba..b6f14db 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkSummaryControllerTest.java
@@ -210,82 +210,6 @@
     }
 
     @Test
-    public void getSummary_twoSubscriptions_correctSummaryAndFragment() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
-        final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
-        final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
-        when(sub1.getSubscriptionId()).thenReturn(1);
-        when(sub2.getSubscriptionId()).thenReturn(2);
-
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
-        mController.displayPreference(mPreferenceScreen);
-        mController.onResume();
-        assertThat(mController.getSummary()).isEqualTo("2 SIMs");
-        assertThat(mPreference.getFragment()).isEqualTo(MobileNetworkListFragment.class.getName());
-    }
-
-    @Test
-    public void getSummaryAfterUpdate_twoSubscriptionsBecomesOne_correctSummaryAndFragment() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
-        final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
-        final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
-        when(sub1.getSubscriptionId()).thenReturn(1);
-        when(sub2.getSubscriptionId()).thenReturn(2);
-        when(sub1.getDisplayName()).thenReturn("sub1");
-        when(sub2.getDisplayName()).thenReturn("sub2");
-
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
-        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
-        mController.displayPreference(mPreferenceScreen);
-        mController.onResume();
-        assertThat(mController.getSummary()).isEqualTo("2 SIMs");
-        assertThat(mPreference.getFragment()).isEqualTo(MobileNetworkListFragment.class.getName());
-
-        // Simulate sub2 having disappeared - the end result should change to be the same as
-        // if there were just one subscription.
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1));
-        mController.onSubscriptionsChanged();
-        assertThat(mController.getSummary()).isEqualTo("sub1");
-        assertThat(mPreference.getFragment()).isNull();
-        final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
-        doNothing().when(mContext).startActivity(intentCaptor.capture());
-        mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
-        assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
-                MobileNetworkActivity.class.getName());
-    }
-
-    @Test
-    public void getSummaryAfterUpdate_oneSubscriptionBecomesTwo_correctSummaryAndFragment() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
-        final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
-        final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
-        when(sub1.getSubscriptionId()).thenReturn(1);
-        when(sub2.getSubscriptionId()).thenReturn(2);
-        when(sub1.getDisplayName()).thenReturn("sub1");
-        when(sub2.getDisplayName()).thenReturn("sub2");
-
-        when(mSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn(
-                Arrays.asList(sub1));
-        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1));
-        mController.displayPreference(mPreferenceScreen);
-        mController.onResume();
-        assertThat(mController.getSummary()).isEqualTo("sub1");
-        assertThat(mPreference.getFragment()).isNull();
-        final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
-        doNothing().when(mContext).startActivity(intentCaptor.capture());
-        mPreference.getOnPreferenceClickListener().onPreferenceClick(mPreference);
-        assertThat(intentCaptor.getValue().getComponent().getClassName()).isEqualTo(
-                MobileNetworkActivity.class.getName());
-
-        // Simulate sub2 appearing in the list of subscriptions and check the results.
-        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
-        mController.displayPreference(mPreferenceScreen);
-        mController.onResume();
-        assertThat(mController.getSummary()).isEqualTo("2 SIMs");
-        assertThat(mPreference.getFragment()).isEqualTo(MobileNetworkListFragment.class.getName());
-    }
-
-    @Test
     public void getSummary_providerModel_Enabled() {
         final SubscriptionInfo sub1 = mock(SubscriptionInfo.class);
         final SubscriptionInfo sub2 = mock(SubscriptionInfo.class);
@@ -296,15 +220,9 @@
 
         SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
         mController.displayPreference(mPreferenceScreen);
         mController.onResume();
         assertThat(mController.getSummary()).isEqualTo("sub1, sub2");
-
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
-        mController.displayPreference(mPreferenceScreen);
-        mController.onResume();
-        assertThat(mController.getSummary()).isEqualTo("2 SIMs");
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
index be8bf3a..31b6f27 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
@@ -158,7 +158,6 @@
                 .when(mFirstWifiEntryPreferenceCategory).getKey();
         mNetworkProviderSettings.mFirstWifiEntryPreferenceCategory =
                 mFirstWifiEntryPreferenceCategory;
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/notification/RedactNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/RedactNotificationPreferenceControllerTest.java
index ae25474..72a2c24 100644
--- a/tests/robotests/src/com/android/settings/notification/RedactNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/RedactNotificationPreferenceControllerTest.java
@@ -293,6 +293,18 @@
     }
 
     @Test
+    public void isChecked_admin() {
+        Settings.Secure.putIntForUser(mContext.getContentResolver(),
+                LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
+                1, 0);
+
+        ShadowRestrictedLockUtilsInternal.setKeyguardDisabledFeatures(
+                KEYGUARD_DISABLE_SECURE_NOTIFICATIONS);
+
+        assertThat(mController.isChecked()).isFalse();
+    }
+
+    @Test
     public void setChecked_false() throws Exception {
         Settings.Secure.putIntForUser(mContext.getContentResolver(),
                 LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
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/panel/PanelFragmentTest.java b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
index 1333d27..7d0bf99 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelFragmentTest.java
@@ -17,8 +17,6 @@
 
 package com.android.settings.panel;
 
-import static com.android.settings.panel.PanelContent.VIEW_TYPE_SLIDER;
-
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.any;
@@ -213,38 +211,6 @@
     }
 
     @Test
-    public void sliderPanelType_notDisplayFooterDivider() {
-        mFakePanelContent.setViewType(VIEW_TYPE_SLIDER);
-        final ActivityController<FakeSettingsPanelActivity> activityController =
-                Robolectric.buildActivity(FakeSettingsPanelActivity.class);
-        activityController.setup();
-        final PanelFragment panelFragment = (PanelFragment)
-                Objects.requireNonNull(activityController
-                        .get()
-                        .getSupportFragmentManager()
-                        .findFragmentById(R.id.main_content));
-        final View footerDivider = panelFragment.mLayoutView.findViewById(R.id.footer_divider);
-        // Check visibility
-        assertThat(footerDivider.getVisibility()).isEqualTo(View.GONE);
-    }
-
-    @Test
-    public void defaultPanelType_notDisplayFooterDivider() {
-        mFakePanelContent.setViewType(0 /* viewType */);
-        final ActivityController<FakeSettingsPanelActivity> activityController =
-                Robolectric.buildActivity(FakeSettingsPanelActivity.class);
-        activityController.setup();
-        final PanelFragment panelFragment = (PanelFragment)
-                Objects.requireNonNull(activityController
-                        .get()
-                        .getSupportFragmentManager()
-                        .findFragmentById(R.id.main_content));
-        final View footerDivider = panelFragment.mLayoutView.findViewById(R.id.footer_divider);
-        // Check visibility
-        assertThat(footerDivider.getVisibility()).isEqualTo(View.GONE);
-    }
-
-    @Test
     public void onHeaderChanged_updateHeader_verifyTitle() {
         mFakePanelContent.setIcon(IconCompat.createWithResource(mContext, R.drawable.ic_android));
         mFakePanelContent.setTitle(TITLE);
diff --git a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
index ac74fe5..cc5b2f8 100644
--- a/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/panel/PanelSlicesAdapterTest.java
@@ -19,7 +19,6 @@
 import static com.android.settings.panel.PanelContent.VIEW_TYPE_SLIDER;
 import static com.android.settings.panel.PanelSlicesAdapter.MAX_NUM_OF_SLICES;
 import static com.android.settings.slices.CustomSliceRegistry.MEDIA_OUTPUT_INDICATOR_SLICE_URI;
-import static com.android.settings.slices.CustomSliceRegistry.VOLUME_MEDIA_URI;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -125,53 +124,6 @@
     }
 
     @Test
-    public void mediaOutputIndicatorSlice_shouldNotAllowDividerAbove() {
-        addTestLiveData(MEDIA_OUTPUT_INDICATOR_SLICE_URI);
-
-        final PanelSlicesAdapter adapter =
-                new PanelSlicesAdapter(mPanelFragment, mData, 0 /* metrics category */);
-        final int position = 0;
-        final ViewGroup view = new FrameLayout(mContext);
-        final SliceRowViewHolder viewHolder =
-                adapter.onCreateViewHolder(view, 0 /* view type*/);
-
-        adapter.onBindViewHolder(viewHolder, position);
-
-        assertThat(viewHolder.isDividerAllowedAbove()).isFalse();
-    }
-
-    @Test
-    public void sliderPanelType_shouldAllowDividerBelow() {
-        addTestLiveData(VOLUME_MEDIA_URI);
-        mFakePanelContent.setViewType(PanelContent.VIEW_TYPE_SLIDER);
-
-        final PanelSlicesAdapter adapter =
-                new PanelSlicesAdapter(mPanelFragment, mData, 0 /* metrics category */);
-        final int position = 0;
-        final ViewGroup view = new FrameLayout(mContext);
-        final SliceRowViewHolder viewHolder =
-                adapter.onCreateViewHolder(view, PanelContent.VIEW_TYPE_SLIDER);
-        adapter.onBindViewHolder(viewHolder, position);
-
-        assertThat(viewHolder.isDividerAllowedBelow()).isTrue();
-    }
-
-    @Test
-    public void defaultPanelType_shouldAllowDividerBelow() {
-        addTestLiveData(VOLUME_MEDIA_URI);
-        mFakePanelContent.setViewType(0 /* viewType */);
-
-        final PanelSlicesAdapter adapter =
-                new PanelSlicesAdapter(mPanelFragment, mData, 0 /* metrics category */);
-        final int position = 0;
-        final ViewGroup view = new FrameLayout(mContext);
-        final SliceRowViewHolder viewHolder = adapter.onCreateViewHolder(view, 0/* viewType */);
-        adapter.onBindViewHolder(viewHolder, position);
-
-        assertThat(viewHolder.isDividerAllowedBelow()).isTrue();
-    }
-
-    @Test
     public void mediaOutputIndicatorSlice_notSliderPanel_noSliderLayout() {
         addTestLiveData(MEDIA_OUTPUT_INDICATOR_SLICE_URI);
 
diff --git a/tests/robotests/src/com/android/settings/privacy/WorkPolicyInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/privacy/WorkPolicyInfoPreferenceControllerTest.java
index a92e11e..79aec30 100644
--- a/tests/robotests/src/com/android/settings/privacy/WorkPolicyInfoPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/privacy/WorkPolicyInfoPreferenceControllerTest.java
@@ -80,7 +80,7 @@
 
         final Preference pref = new Preference(mContext);
         assertThat(controller.handlePreferenceTreeClick(pref)).isFalse();
-        verify(mEnterpriseProvider, never()).showWorkPolicyInfo();
+        verify(mEnterpriseProvider, never()).showWorkPolicyInfo(mContext);
     }
 
     @Test
@@ -92,6 +92,6 @@
         final Preference pref = new Preference(mContext);
         pref.setKey(controller.getPreferenceKey());
         assertThat(controller.handlePreferenceTreeClick(pref)).isTrue();
-        verify(mEnterpriseProvider).showWorkPolicyInfo();
+        verify(mEnterpriseProvider).showWorkPolicyInfo(mContext);
     }
 }
diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
index 444a813..5de57b6 100644
--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
@@ -19,7 +19,6 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import android.app.Activity;
 import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
 import android.content.Intent;
@@ -29,6 +28,8 @@
 import android.provider.Settings;
 import android.widget.Toolbar;
 
+import androidx.fragment.app.FragmentActivity;
+
 import com.android.settings.R;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.shadow.ShadowUtils;
@@ -46,13 +47,13 @@
 public class SearchFeatureProviderImplTest {
 
     private SearchFeatureProviderImpl mProvider;
-    private Activity mActivity;
+    private FragmentActivity mActivity;
     private ShadowPackageManager mPackageManager;
 
     @Before
     public void setUp() {
         FakeFeatureFactory.setupForTest();
-        mActivity = Robolectric.setupActivity(Activity.class);
+        mActivity = Robolectric.setupActivity(FragmentActivity.class);
         mProvider = new SearchFeatureProviderImpl();
         mPackageManager = Shadows.shadowOf(mActivity.getPackageManager());
         Settings.Global.putInt(mActivity.getContentResolver(),
diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
index c2c67e3..c7a4b2f 100644
--- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
@@ -707,6 +707,7 @@
                 .setIcon(SliceTestUtils.FAKE_ICON)
                 .setFragmentName(SliceTestUtils.FAKE_FRAGMENT_NAME)
                 .setPreferenceControllerClassName(SliceTestUtils.FAKE_CONTROLLER_NAME)
+                .setHighlightMenuRes(SliceTestUtils.FAKE_HIGHLIGHT_MENU_RES)
                 .build();
     }
 
diff --git a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java
index df3d84f..a880681 100644
--- a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java
@@ -322,6 +322,8 @@
         values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, SliceTestUtils.FAKE_FRAGMENT_NAME);
         values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, controllerClass);
         values.put(SlicesDatabaseHelper.IndexColumns.SLICE_URI, buildUri(key).toSafeString());
+        values.put(SlicesDatabaseHelper.IndexColumns.HIGHLIGHT_MENU_RESOURCE,
+                SliceTestUtils.FAKE_HIGHLIGHT_MENU_RES);
         mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
     }
 
diff --git a/tests/robotests/src/com/android/settings/slices/SliceTestUtils.java b/tests/robotests/src/com/android/settings/slices/SliceTestUtils.java
index 1c9164a..97beeb3 100644
--- a/tests/robotests/src/com/android/settings/slices/SliceTestUtils.java
+++ b/tests/robotests/src/com/android/settings/slices/SliceTestUtils.java
@@ -35,6 +35,7 @@
     public static final int FAKE_ICON = 1234;
     public static final String FAKE_FRAGMENT_NAME = FakeIndexProvider.class.getName();
     public static final String FAKE_CONTROLLER_NAME = FakeToggleController.class.getName();
+    public static final int FAKE_HIGHLIGHT_MENU_RES = FakeToggleController.HIGHLIGHT_MENU_RES;
 
 
     public static void insertSliceToDb(Context context, String key) {
@@ -75,6 +76,8 @@
         values.put(SlicesDatabaseHelper.IndexColumns.UNAVAILABLE_SLICE_SUBTITLE,
                 customizedUnavailableSliceSubtitle);
         values.put(SlicesDatabaseHelper.IndexColumns.PUBLIC_SLICE, isPublicSlice);
+        values.put(SlicesDatabaseHelper.IndexColumns.HIGHLIGHT_MENU_RESOURCE,
+                FAKE_HIGHLIGHT_MENU_RES);
 
         db.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
         db.close();
diff --git a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java
index b4385d8..cacd32c 100644
--- a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java
@@ -102,6 +102,7 @@
         assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME);
         assertThat(data.getUri()).isNull();
         assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME);
+        assertThat(data.getHighlightMenuRes()).isEqualTo(SliceTestUtils.FAKE_HIGHLIGHT_MENU_RES);
         assertThat(data.getUnavailableSliceSubtitle()).isNull();
     }
 
@@ -122,6 +123,7 @@
         assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME);
         assertThat(data.getUri()).isNull();
         assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME);
+        assertThat(data.getHighlightMenuRes()).isEqualTo(SliceTestUtils.FAKE_HIGHLIGHT_MENU_RES);
     }
 
     @Test(expected = IllegalStateException.class)
@@ -154,6 +156,7 @@
         assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME);
         assertThat(data.getUri()).isEqualTo(uri);
         assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME);
+        assertThat(data.getHighlightMenuRes()).isEqualTo(SliceTestUtils.FAKE_HIGHLIGHT_MENU_RES);
     }
 
     @Test(expected = IllegalStateException.class)
@@ -289,6 +292,7 @@
         assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME);
         assertThat(data.getUri()).isNull();
         assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME);
+        assertThat(data.getHighlightMenuRes()).isEqualTo(SliceTestUtils.FAKE_HIGHLIGHT_MENU_RES);
         assertThat(data.getUnavailableSliceSubtitle()).isNull();
     }
 
@@ -309,6 +313,7 @@
         assertThat(data.getFragmentClassName()).isEqualTo(SliceTestUtils.FAKE_FRAGMENT_NAME);
         assertThat(data.getUri()).isNull();
         assertThat(data.getPreferenceController()).isEqualTo(SliceTestUtils.FAKE_CONTROLLER_NAME);
+        assertThat(data.getHighlightMenuRes()).isEqualTo(SliceTestUtils.FAKE_HIGHLIGHT_MENU_RES);
         assertThat(data.getUnavailableSliceSubtitle()).isEqualTo(subtitle);
     }
 
diff --git a/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java b/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java
index a943ac0..f025d3d 100644
--- a/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java
@@ -43,17 +43,18 @@
 @RunWith(RobolectricTestRunner.class)
 public class SlicesIndexerTest {
 
-    private final String[] KEYS = new String[]{"key1", "key2", "key3"};
-    private final String[] TITLES = new String[]{"title1", "title2", "title3"};
-    private final String SUMMARY = "subtitle";
-    private final String SCREEN_TITLE = "screen title";
-    private final String KEYWORDS = "a, b, c";
-    private final String FRAGMENT_NAME = "fragment name";
-    private final int ICON = 1234; // I declare a thumb war
-    private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
-    private final String PREF_CONTROLLER = "com.android.settings.slices.tester";
-    private final int SLICE_TYPE = SliceData.SliceType.SLIDER;
-    private final String UNAVAILABLE_SLICE_SUBTITLE = "subtitleOfUnavailableSlice";
+    private static final String[] KEYS = new String[]{"key1", "key2", "key3"};
+    private static final String[] TITLES = new String[]{"title1", "title2", "title3"};
+    private static final String SUMMARY = "subtitle";
+    private static final String SCREEN_TITLE = "screen title";
+    private static final String KEYWORDS = "a, b, c";
+    private static final String FRAGMENT_NAME = "fragment name";
+    private static final int ICON = 1234; // I declare a thumb war
+    private static final Uri URI = Uri.parse("content://com.android.settings.slices/test");
+    private static final String PREF_CONTROLLER = "com.android.settings.slices.tester";
+    private static final int SLICE_TYPE = SliceData.SliceType.SLIDER;
+    private static final String UNAVAILABLE_SLICE_SUBTITLE = "subtitleOfUnavailableSlice";
+    private static final int HIGHLIGHT_MENU_KEY = 5678; // I declare a thumb war
 
     private Context mContext;
 
@@ -142,6 +143,9 @@
                         .isEqualTo(UNAVAILABLE_SLICE_SUBTITLE);
                 assertThat(cursor.getInt(
                         cursor.getColumnIndex(IndexColumns.PUBLIC_SLICE))).isEqualTo(0);
+                assertThat(cursor.getInt(
+                        cursor.getColumnIndex(IndexColumns.HIGHLIGHT_MENU_RESOURCE)))
+                        .isEqualTo(HIGHLIGHT_MENU_KEY);
                 cursor.moveToNext();
             }
         } finally {
@@ -187,6 +191,9 @@
                         .isEqualTo(UNAVAILABLE_SLICE_SUBTITLE);
                 assertThat(cursor.getInt(
                         cursor.getColumnIndex(IndexColumns.PUBLIC_SLICE))).isEqualTo(1);
+                assertThat(cursor.getInt(
+                        cursor.getColumnIndex(IndexColumns.HIGHLIGHT_MENU_RESOURCE)))
+                        .isEqualTo(HIGHLIGHT_MENU_KEY);
                 cursor.moveToNext();
             }
         } finally {
@@ -220,7 +227,8 @@
                 .setUri(URI)
                 .setPreferenceControllerClassName(PREF_CONTROLLER)
                 .setSliceType(SLICE_TYPE)
-                .setUnavailableSliceSubtitle(UNAVAILABLE_SLICE_SUBTITLE);
+                .setUnavailableSliceSubtitle(UNAVAILABLE_SLICE_SUBTITLE)
+                .setHighlightMenuRes(HIGHLIGHT_MENU_KEY);
 
         if (isPublicSlice) {
             builder.setIsPublicSlice(true);
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/robotests/src/com/android/settings/testutils/FakeToggleController.java b/tests/robotests/src/com/android/settings/testutils/FakeToggleController.java
index 6812451..4e968a2 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeToggleController.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeToggleController.java
@@ -27,6 +27,7 @@
 public class FakeToggleController extends TogglePreferenceController {
 
     public static final String AVAILABILITY_KEY = "fake_toggle_availability_key";
+    public static final int HIGHLIGHT_MENU_RES = 5678;
 
     public static final IntentFilter INTENT_FILTER = new IntentFilter(
             WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
@@ -71,6 +72,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return HIGHLIGHT_MENU_RES;
+    }
+
+    @Override
     public Class<? extends SliceBackgroundWorker> getBackgroundWorkerClass() {
         return TestWorker.class;
     }
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityEmbeddingUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityEmbeddingUtils.java
new file mode 100644
index 0000000..ddd7c88
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowActivityEmbeddingUtils.java
@@ -0,0 +1,41 @@
+/*
+ * 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.testutils.shadow;
+
+import android.content.Context;
+
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+/**
+ * Shadow class for {@link ActivityEmbeddingUtils} to test embedding activity features.
+ */
+@Implements(ActivityEmbeddingUtils.class)
+public class ShadowActivityEmbeddingUtils {
+    private static boolean sIsEmbeddingActivityEnabled;
+
+    @Implementation
+    public static boolean isEmbeddingActivityEnabled(Context context) {
+        return sIsEmbeddingActivityEnabled;
+    }
+
+    public static void setIsEmbeddingActivityEnabled(boolean isEmbeddingActivityEnabled) {
+        sIsEmbeddingActivityEnabled = isEmbeddingActivityEnabled;
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
index 1f5abd3..5f2f564 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiSettingsTest.java
@@ -106,7 +106,7 @@
         mWifiSettings.mConfigureWifiSettingsPreference = new Preference(mContext);
         mWifiSettings.mWifiPickerTracker = mMockWifiPickerTracker;
         mWifiSettings.mWifiManager = mWifiManager;
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
+        mWifiSettings.IS_ENABLED_PROVIDER_MODEL = false;
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java
index b614698..39408e2 100644
--- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java
@@ -18,27 +18,70 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
-import static org.robolectric.Shadows.shadowOf;
+import android.annotation.Nullable;
+import android.app.IActivityManager;
+import android.os.RemoteException;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
 
 @RunWith(RobolectricTestRunner.class)
 public class AddAppNetworksActivityTest {
 
+    @Mock
+    private IActivityManager mIActivityManager;
+
+    private AddAppNetworksActivity mActivity;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mActivity = Robolectric.buildActivity(AddAppNetworksActivity.class).create().get();
+        mActivity.mActivityManager = mIActivityManager;
+    }
+
     @Test
-    public void startActivity_withPackageName_bundleShouldHaveRightPackageName() {
-        final String packageName = RuntimeEnvironment.application.getPackageName();
-        final AddAppNetworksActivity activity =
-                Robolectric.buildActivity(AddAppNetworksActivity.class).create().get();
-        shadowOf(activity).setCallingPackage(packageName);
+    public void getCallingAppPackageName_nullPackageName_returnNotNull() {
+        fakeCallingPackage("com.android.settings");
 
-        activity.showAddNetworksFragment();
+        assertThat(mActivity.getCallingAppPackageName()).isNotNull();
+    }
 
-        assertThat(activity.mBundle.getString(AddAppNetworksActivity.KEY_CALLING_PACKAGE_NAME))
-                .isEqualTo(packageName);
+    @Test
+    public void getCallingAppPackageName_withPackageName_returnNull()  {
+        fakeCallingPackage(null);
+
+        assertThat(mActivity.getCallingAppPackageName()).isNull();
+    }
+
+    @Test
+    public void showAddNetworksFragment_nullPackageName_returnFalse()  {
+        fakeCallingPackage(null);
+
+        assertThat(mActivity.showAddNetworksFragment()).isFalse();
+    }
+
+    @Test
+    public void showAddNetworksFragment_withPackageName_returnTrue()  {
+        fakeCallingPackage("com.android.settings");
+
+        assertThat(mActivity.showAddNetworksFragment()).isTrue();
+    }
+
+    private void fakeCallingPackage(@Nullable String packageName) {
+        try {
+            when(mIActivityManager.getLaunchedFromPackage(any())).thenReturn(packageName);
+        } catch (RemoteException e) {
+            // Do nothing.
+        }
     }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivityTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivityTest.java
index 819b7f4..67d4678 100644
--- a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivityTest.java
@@ -16,16 +16,82 @@
 
 package com.android.settings.wifi.dpp;
 
+import static com.android.settings.wifi.dpp.WifiDppEnrolleeActivity.ACTION_ENROLLEE_QR_CODE_SCANNER;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Intent;
+
+import com.android.settingslib.wifi.WifiRestrictionsCache;
+
+import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 
 @RunWith(RobolectricTestRunner.class)
 public class WifiDppEnrolleeActivityTest {
+
+    private static final String WIFI_SSID = "wifi-ssid";
+
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Mock
+    WifiRestrictionsCache mWifiRestrictionsCache;
+    @Mock
+    Intent mIntent;
+
+    WifiDppEnrolleeActivity mActivity;
+
+    @Before
+    public void setUp() {
+        when(mWifiRestrictionsCache.isConfigWifiAllowed()).thenReturn(true);
+        when(mIntent.getAction()).thenReturn(ACTION_ENROLLEE_QR_CODE_SCANNER);
+        when(mIntent.getStringExtra(WifiDppUtils.EXTRA_WIFI_SSID)).thenReturn(WIFI_SSID);
+
+        mActivity = spy(Robolectric.setupActivity(WifiDppEnrolleeActivity.class));
+        mActivity.mWifiRestrictionsCache = mWifiRestrictionsCache;
+    }
+
     @Test
     public void launchActivity_noIntentAction_shouldNotFatalException() {
         WifiDppEnrolleeActivity wifiDppEnrolleeActivity =
                 Robolectric.setupActivity(WifiDppEnrolleeActivity.class);
     }
+
+    @Test
+    public void handleIntent_noIntentAction_shouldFinish() {
+        when(mIntent.getAction()).thenReturn(null);
+
+        mActivity.handleIntent(mIntent);
+
+        verify(mActivity).finish();
+    }
+
+    @Test
+    public void handleIntent_notAllowedConfigWifi_shouldFinish() {
+        when(mWifiRestrictionsCache.isConfigWifiAllowed()).thenReturn(false);
+
+        mActivity.handleIntent(mIntent);
+
+        verify(mActivity).finish();
+    }
+
+    @Test
+    public void handleIntent_hasIntentDataAndAllowedConfigWifi_shouldShowFragment() {
+        when(mWifiRestrictionsCache.isConfigWifiAllowed()).thenReturn(true);
+        doNothing().when(mActivity).showQrCodeScannerFragment(WIFI_SSID);
+
+        mActivity.handleIntent(mIntent);
+
+        verify(mActivity).showQrCodeScannerFragment(WIFI_SSID);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java
index d8bcb59..e605308 100644
--- a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppUtilsTest.java
@@ -27,6 +27,8 @@
 import android.net.wifi.WifiConfiguration.KeyMgmt;
 import android.net.wifi.WifiManager;
 
+import androidx.test.core.app.ApplicationProvider;
+
 import com.android.wifitrackerlib.WifiEntry;
 
 import org.junit.Before;
@@ -80,4 +82,12 @@
         assertThat(intent.getBooleanExtra(WifiDppUtils.EXTRA_WIFI_HIDDEN_SSID, false))
                 .isEqualTo(true);
     }
+
+    @Test
+    public void getEnrolleeQrCodeScannerIntent_isExplicitIntent() {
+        Intent intent = WifiDppUtils.getEnrolleeQrCodeScannerIntent(
+                ApplicationProvider.getApplicationContext(), null);
+        assertThat(intent.getComponent()).isNotNull();
+    }
+
 }
diff --git a/tests/unit/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceControllerTest.java
index 1e1799a..567594c 100644
--- a/tests/unit/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/applications/appinfo/HibernationSwitchPreferenceControllerTest.java
@@ -34,6 +34,7 @@
 import static org.mockito.Mockito.when;
 
 import android.app.AppOpsManager;
+import android.apphibernation.AppHibernationManager;
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.provider.DeviceConfig;
@@ -61,6 +62,8 @@
     @Mock
     private PackageManager mPackageManager;
     @Mock
+    private AppHibernationManager mAppHibernationManager;
+    @Mock
     private SwitchPreference mPreference;
 
     private HibernationSwitchPreferenceController mController;
@@ -71,6 +74,8 @@
         MockitoAnnotations.initMocks(this);
         mContext = spy(ApplicationProvider.getApplicationContext());
         when(mContext.getSystemService(Context.APP_OPS_SERVICE)).thenReturn(mAppOpsManager);
+        when(mContext.getSystemService(AppHibernationManager.class))
+                .thenReturn(mAppHibernationManager);
         when(mPackageManager.getPackageUid(eq(VALID_PACKAGE_NAME), anyInt()))
                 .thenReturn(PACKAGE_UID);
         when(mPackageManager.getPackageUid(eq(INVALID_PACKAGE_NAME), anyInt()))
@@ -110,6 +115,15 @@
     }
 
     @Test
+    public void onPreferenceChange_unhibernatesWhenExempted() {
+        mController.setPackage(VALID_PACKAGE_NAME);
+        mController.onPreferenceChange(mPreference, false);
+
+        verify(mAppHibernationManager).setHibernatingForUser(VALID_PACKAGE_NAME, false);
+        verify(mAppHibernationManager).setHibernatingGlobally(VALID_PACKAGE_NAME, false);
+    }
+
+    @Test
     public void updateState_exemptedByDefaultPackage_shouldNotCheck() {
         when(mAppOpsManager.unsafeCheckOpNoThrow(
                 eq(OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED), anyInt(), eq(EXEMPTED_PACKAGE_NAME)))
diff --git a/tests/unit/src/com/android/settings/biometrics/ParentalConsentHelperTest.java b/tests/unit/src/com/android/settings/biometrics/ParentalConsentHelperTest.java
index 78856da..abb5355 100644
--- a/tests/unit/src/com/android/settings/biometrics/ParentalConsentHelperTest.java
+++ b/tests/unit/src/com/android/settings/biometrics/ParentalConsentHelperTest.java
@@ -167,8 +167,8 @@
         }
 
         // initial consent status
-        final ParentalConsentHelper helper =
-                new ParentalConsentHelper(requireFace, requireFingerprint, gkpw);
+        final ParentalConsentHelper helper = new ParentalConsentHelper(gkpw);
+        helper.setConsentRequirement(requireFace, requireFingerprint);
         assertThat(ParentalConsentHelper.hasFaceConsent(helper.getConsentResult()))
                 .isFalse();
         assertThat(ParentalConsentHelper.hasFingerprintConsent(helper.getConsentResult()))
diff --git a/tests/unit/src/com/android/settings/core/TogglePreferenceControllerTest.java b/tests/unit/src/com/android/settings/core/TogglePreferenceControllerTest.java
index 8817a17..13e8c13 100644
--- a/tests/unit/src/com/android/settings/core/TogglePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/core/TogglePreferenceControllerTest.java
@@ -120,6 +120,11 @@
         }
 
         @Override
+        public int getSliceHighlightMenuRes() {
+            return 5678;
+        }
+
+        @Override
         public int getAvailabilityStatus() {
             return AVAILABLE;
         }
diff --git a/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
index 5360dac..9cd6f2d 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
@@ -33,6 +33,7 @@
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.SIGNAL_STRENGTH_LABEL_ID;
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.SIGNAL_STRENGTH_VALUE_ID;
 
+import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
@@ -78,12 +79,16 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 
 @RunWith(AndroidJUnit4.class)
 public class SimStatusDialogControllerTest {
 
     @Mock
     private SimStatusDialogFragment mDialog;
+    @Mock
     private TelephonyManager mTelephonyManager;
     @Mock
     private SubscriptionInfo mSubscriptionInfo;
@@ -109,6 +114,9 @@
     @Mock
     private LifecycleOwner mLifecycleOwner;
     private Lifecycle mLifecycle;
+    private AtomicBoolean mEuiccEnabled;
+    private AtomicReference<String> mEid;
+    private AtomicInteger mUpdatePhoneNumberCount;
 
     private static final String TEST_EID_FROM_CARD = "11111111111111111111111111111111";
     private static final String TEST_EID_FROM_MANAGER = "22222222222222222222222222222222";
@@ -139,7 +147,26 @@
         doReturn(2).when(mTelephonyManager).getCardIdForDefaultEuicc();
         doReturn(TelephonyManager.NETWORK_TYPE_LTE).when(mTelephonyManager).getDataNetworkType();
 
-        mController = spy(new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */));
+        mUpdatePhoneNumberCount = new AtomicInteger();
+        mEuiccEnabled = new AtomicBoolean(false);
+        mEid = new AtomicReference<String>("");
+        mController = new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */) {
+            @Override
+            public TelephonyManager getTelephonyManager() {
+                return mTelephonyManager;
+            }
+
+            @Override
+            public AtomicReference<String> getEid(int slotIndex) {
+                return mEuiccEnabled.get() ? mEid : null;
+            }
+
+            @Override
+            public void updatePhoneNumber() {
+                super.updatePhoneNumber();
+                mUpdatePhoneNumberCount.incrementAndGet();
+            }
+        };
         // CellSignalStrength setup
         doReturn(0).when(mCellSignalStrengthCdma).getDbm();
         doReturn(0).when(mCellSignalStrengthCdma).getAsuLevel();
@@ -157,7 +184,7 @@
                 .getLogicalToPhysicalSlotMapping();
 
         when(mEuiccManager.isEnabled()).thenReturn(false);
-        when(mEuiccManager.getEid()).thenReturn("");
+        mEuiccEnabled.set(false);
         when(mEuiccManager.createForCardId(anyInt())).thenReturn(mEuiccManager);
 
         mPersistableBundle = new PersistableBundle();
@@ -183,7 +210,7 @@
     public void initialize_shouldUpdatePhoneNumber() {
         mController.initialize();
 
-        verify(mController).updatePhoneNumber();
+        assertTrue(mUpdatePhoneNumberCount.get() > 0);
     }
 
     @Test
@@ -426,10 +453,9 @@
         when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
 
         when(mEuiccManager.isEnabled()).thenReturn(true);
-        when(mEuiccManager.getEid()).thenReturn(null);
+        mEuiccEnabled.set(true);
+        mEid.set(null);
 
-        doNothing().when(mController).requestForUpdateEid();
-        mController.updateEid(mController.getEid(0));
         mController.initialize();
 
         // Keep 'Not available' if neither the card nor the associated manager can provide EID.
@@ -480,11 +506,10 @@
         when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
 
         when(mEuiccManager.isEnabled()).thenReturn(true);
-        when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+        mEuiccEnabled.set(true);
+        mEid.set(TEST_EID_FROM_CARD);
         when(mEuiccManager.createForCardId(0)).thenReturn(mEuiccManager);
 
-        doNothing().when(mController).requestForUpdateEid();
-        mController.updateEid(mController.getEid(0));
         mController.initialize();
 
         // Set EID retrieved from the card.
@@ -538,13 +563,12 @@
         when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
 
         when(mEuiccManager.isEnabled()).thenReturn(true);
-        when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+        mEuiccEnabled.set(true);
+        mEid.set(TEST_EID_FROM_MANAGER);
         when(mEuiccManager.createForCardId(0)).thenThrow(
                 new RuntimeException("Unexpected card ID was specified"));
         when(mEuiccManager.createForCardId(1)).thenReturn(mEuiccManager);
 
-        doNothing().when(mController).requestForUpdateEid();
-        mController.updateEid(mController.getEid(0));
         mController.initialize();
 
         // Set EID retrieved from the manager associated with the card which cannot provide EID.
@@ -552,6 +576,7 @@
         verify(mDialog, never()).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
     }
 
+    @Ignore
     @Test
     public void initialize_updateEid_shouldRemoveEid() {
         when(mTelephonyManager.getActiveModemCount()).thenReturn(MAX_PHONE_COUNT_DUAL_SIM);
@@ -597,9 +622,9 @@
         when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
 
         when(mEuiccManager.isEnabled()).thenReturn(true);
-        when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+        mEuiccEnabled.set(true);
+        mEid.set(TEST_EID_FROM_MANAGER);
 
-        doNothing().when(mController).requestForUpdateEid();
         mController.updateEid(mController.getEid(0));
         mController.initialize();
 
@@ -637,10 +662,9 @@
         when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
 
         when(mEuiccManager.isEnabled()).thenReturn(true);
-        when(mEuiccManager.getEid()).thenReturn(null);
+        mEuiccEnabled.set(true);
+        mEid.set(null);
 
-        doNothing().when(mController).requestForUpdateEid();
-        mController.updateEid(mController.getEid(0));
         mController.initialize();
 
         // Keep 'Not available' if the default eUICC manager cannot provide EID in Single SIM mode.
@@ -677,12 +701,11 @@
         when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
 
         when(mEuiccManager.isEnabled()).thenReturn(true);
-        when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+        mEuiccEnabled.set(true);
+        mEid.set(TEST_EID_FROM_MANAGER);
         when(mEuiccManager.createForCardId(anyInt())).thenThrow(
                 new RuntimeException("EID shall be retrieved from the default eUICC manager"));
 
-        doNothing().when(mController).requestForUpdateEid();
-        mController.updateEid(mController.getEid(0));
         mController.initialize();
 
         // Set EID retrieved from the default eUICC manager in Single SIM mode.
@@ -719,12 +742,11 @@
         when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
 
         when(mEuiccManager.isEnabled()).thenReturn(true);
-        when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+        mEuiccEnabled.set(true);
+        mEid.set(TEST_EID_FROM_MANAGER);
         when(mEuiccManager.createForCardId(anyInt())).thenThrow(
                 new RuntimeException("EID shall be retrieved from the default eUICC manager"));
 
-        doNothing().when(mController).requestForUpdateEid();
-        mController.updateEid(mController.getEid(0));
         mController.initialize();
 
         // Set EID retrieved from the default eUICC manager in Single SIM mode.
@@ -760,14 +782,12 @@
         when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
 
         when(mEuiccManager.isEnabled()).thenReturn(false);
-        when(mEuiccManager.getEid()).thenReturn(null);
+        mEuiccEnabled.set(false);
+        mEid.set(null);
 
-        doNothing().when(mController).requestForUpdateEid();
-        mController.updateEid(mController.getEid(0));
         mController.initialize();
 
         // Remove EID if the default eUICC manager indicates that eSIM is not enabled.
-        verify(mDialog, never()).setText(eq(EID_INFO_VALUE_ID), any());
         verify(mDialog).removeSettingFromScreen(eq(EID_INFO_LABEL_ID));
         verify(mDialog).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
     }
diff --git a/tests/unit/src/com/android/settings/network/CarrierWifiTogglePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/CarrierWifiTogglePreferenceControllerTest.java
index 4444019..21a8444 100644
--- a/tests/unit/src/com/android/settings/network/CarrierWifiTogglePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/CarrierWifiTogglePreferenceControllerTest.java
@@ -70,7 +70,6 @@
         mController = new CarrierWifiTogglePreferenceController(mContext,
                 CarrierWifiTogglePreferenceController.CARRIER_WIFI_TOGGLE_PREF_KEY);
         mController.init(mock(Lifecycle.class), SUB_ID);
-        mController.mIsProviderModelEnabled = true;
         mController.mIsCarrierProvisionWifiEnabled = true;
         doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive();
         doReturn(SSID).when(mWifiPickerTrackerHelper).getCarrierNetworkSsid();
@@ -93,13 +92,6 @@
     }
 
     @Test
-    public void getAvailabilityStatus_providerModelDisable_returnUnavailable() {
-        mController.mIsProviderModelEnabled = false;
-
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
-    }
-
-    @Test
     public void getAvailabilityStatus_carrierProvisionWifiEnabled_returnAvailable() {
         mController.mIsCarrierProvisionWifiEnabled = true;
 
diff --git a/tests/unit/src/com/android/settings/network/NetworkProviderCallsSmsFragmentTest.java b/tests/unit/src/com/android/settings/network/NetworkProviderCallsSmsFragmentTest.java
index 8327d22..d00e2dd 100644
--- a/tests/unit/src/com/android/settings/network/NetworkProviderCallsSmsFragmentTest.java
+++ b/tests/unit/src/com/android/settings/network/NetworkProviderCallsSmsFragmentTest.java
@@ -20,30 +20,24 @@
 
 import static org.mockito.Mockito.spy;
 
-import android.app.Instrumentation;
 import android.content.Context;
 import android.os.Looper;
-import android.provider.SearchIndexableResource;
-import android.util.FeatureFlagUtils;
 
 import androidx.test.annotation.UiThreadTest;
 import androidx.test.core.app.ApplicationProvider;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.platform.app.InstrumentationRegistry;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.MockitoAnnotations;
 
-import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(AndroidJUnit4.class)
 public class NetworkProviderCallsSmsFragmentTest {
 
     private Context mContext;
-    private NetworkProviderCallsSmsFragment mNetworkProviderCallsSmsFragment;
     private List<String> mPreferenceKeyList;
 
     @Before
@@ -55,14 +49,11 @@
         if (Looper.myLooper() == null) {
             Looper.prepare();
         }
-
-        mNetworkProviderCallsSmsFragment = new NetworkProviderCallsSmsFragment();
     }
 
     @Test
     @UiThreadTest
-    public void isPageSearchEnabled_providerModelEnable_shouldIncludeFragmentXml() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
+    public void isPageSearchEnabled_shouldIncludeFragmentXml() {
         mPreferenceKeyList =
                 NetworkProviderCallsSmsFragment.SEARCH_INDEX_DATA_PROVIDER
                         .getNonIndexableKeys(mContext);
@@ -71,17 +62,4 @@
         assertThat(mPreferenceKeyList).doesNotContain(
                 NetworkProviderCallsSmsFragment.KEY_PREFERENCE_SMS);
     }
-
-    @Test
-    @UiThreadTest
-    public void isPageSearchEnabled_providerModelDisable_shouldNotIncludeFragmentXml() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, false);
-        mPreferenceKeyList =
-                NetworkProviderCallsSmsFragment.SEARCH_INDEX_DATA_PROVIDER
-                        .getNonIndexableKeys(mContext);
-        assertThat(mPreferenceKeyList).contains(NetworkProviderCallsSmsFragment
-                .KEY_PREFERENCE_CALLS);
-        assertThat(mPreferenceKeyList).contains(NetworkProviderCallsSmsFragment
-                .KEY_PREFERENCE_SMS);
-    }
 }
diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java
index 7d43230..8687e5a 100644
--- a/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java
+++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceHelperTest.java
@@ -302,6 +302,11 @@
         public Intent getIntent() {
             return new Intent();
         }
+
+        @Override
+        public int getSliceHighlightMenuRes() {
+            return NO_RES;
+        }
     }
 
     private class MockProviderModelSliceHelper extends ProviderModelSliceHelper {
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
index 7cffb76..ac07fae 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
@@ -39,6 +39,7 @@
 import android.net.ConnectivityManager;
 import android.net.Network;
 import android.net.NetworkCapabilities;
+import android.net.wifi.WifiManager;
 import android.os.Looper;
 import android.os.UserManager;
 import android.provider.Settings;
@@ -102,6 +103,8 @@
     private LifecycleOwner mLifecycleOwner;
     @Mock
     private WifiPickerTrackerHelper mWifiPickerTrackerHelper;
+    @Mock
+    private WifiManager mWifiManager;
 
     private LifecycleRegistry mLifecycleRegistry;
     private int mOnChildUpdatedCount;
@@ -132,6 +135,7 @@
         when(mConnectivityManager.getNetworkCapabilities(mActiveNetwork))
                 .thenReturn(mNetworkCapabilities);
         when(mUserManager.isAdminUser()).thenReturn(true);
+        when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
         when(mLifecycleOwner.getLifecycle()).thenReturn(mLifecycleRegistry);
 
         mPreferenceManager = new PreferenceManager(mContext);
@@ -146,7 +150,6 @@
         mUpdateListener = () -> mOnChildUpdatedCount++;
 
         sInjector = spy(new SubsPrefCtrlInjector());
-        initializeMethod(true, 1, 1, 1, false, false);
         mController =  new FakeSubscriptionsPreferenceController(mContext, mLifecycle,
                 mUpdateListener, KEY, 5);
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
@@ -158,40 +161,25 @@
     }
 
     @Test
-    public void isAvailable_oneSubscription_availableFalse() {
-        setupMockSubscriptions(1);
-
-        assertThat(mController.isAvailable()).isFalse();
-    }
-
-    @Test
     public void isAvailable_oneSubAndProviderOn_availableTrue() {
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         setupMockSubscriptions(1);
 
         assertThat(mController.isAvailable()).isTrue();
     }
 
     @Test
-    public void isAvailable_twoSubscriptions_availableTrue() {
-        setupMockSubscriptions(2);
-
-        assertThat(mController.isAvailable()).isTrue();
-    }
-
-    @Test
     public void isAvailable_fiveSubscriptions_availableTrue() {
-        doReturn(true).when(sInjector).canSubscriptionBeDisplayed(mContext, 0);
         setupMockSubscriptions(5);
 
         assertThat(mController.isAvailable()).isTrue();
     }
 
     @Test
-    public void isAvailable_airplaneModeOn_availableFalse() {
+    public void isAvailable_airplaneModeOnWifiOff_availableFalse() {
         setupMockSubscriptions(2);
 
         assertThat(mController.isAvailable()).isTrue();
+        when(mWifiManager.isWifiEnabled()).thenReturn(false);
 
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
 
@@ -199,204 +187,47 @@
     }
 
     @Test
-    @UiThreadTest
-    public void onAirplaneModeChanged_airplaneModeTurnedOn_eventFired() {
+    public void isAvailable_airplaneModeOnWifiOnWithNoCarrierNetwork_availableFalse() {
         setupMockSubscriptions(2);
 
-        mController.onResume();
-        mController.displayPreference(mPreferenceScreen);
-
         assertThat(mController.isAvailable()).isTrue();
+        when(mWifiManager.isWifiEnabled()).thenReturn(true);
+        doReturn(false).when(mWifiPickerTrackerHelper).isCarrierNetworkActive();
 
-        final int updateCountBeforeModeChange = mOnChildUpdatedCount;
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
 
-        mController.onAirplaneModeChanged(true);
-
         assertThat(mController.isAvailable()).isFalse();
-        assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeModeChange + 1);
     }
 
     @Test
-    @UiThreadTest
-    public void onAirplaneModeChanged_airplaneModeTurnedOff_eventFired() {
+    public void isAvailable_airplaneModeOnWifiOffWithCarrierNetwork_availableTrue() {
+        setupMockSubscriptions(1);
+
+        when(mWifiManager.isWifiEnabled()).thenReturn(false);
+        doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive();
+
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
+
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void isAvailable_airplaneModeOff_availableFalse() {
         setupMockSubscriptions(2);
 
-        mController.onResume();
-        mController.displayPreference(mPreferenceScreen);
-        assertThat(mController.isAvailable()).isFalse();
+        assertThat(mController.isAvailable()).isTrue();
+        when(mWifiManager.isWifiEnabled()).thenReturn(true);
+        doReturn(true).when(mWifiPickerTrackerHelper).isCarrierNetworkActive();
 
-        final int updateCountBeforeModeChange = mOnChildUpdatedCount;
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
 
-        mController.onAirplaneModeChanged(true);
-
         assertThat(mController.isAvailable()).isTrue();
-        assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeModeChange + 1);
-    }
-
-    @Test
-    @UiThreadTest
-    public void onSubscriptionsChanged_countBecameTwo_eventFired() {
-        final List<SubscriptionInfo> subs = setupMockSubscriptions(2);
-        SubscriptionUtil.setActiveSubscriptionsForTesting(subs.subList(0, 1));
-
-        mController.onResume();
-        mController.displayPreference(mPreferenceScreen);
-
-        assertThat(mController.isAvailable()).isFalse();
-
-        final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount;
-        SubscriptionUtil.setActiveSubscriptionsForTesting(subs);
-
-        mController.onSubscriptionsChanged();
-
-        assertThat(mController.isAvailable()).isTrue();
-        assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1);
-    }
-
-    @Test
-    @UiThreadTest
-    public void onSubscriptionsChanged_countBecameOne_eventFiredAndPrefsRemoved() {
-        final List<SubscriptionInfo> subs = setupMockSubscriptions(2);
-
-        mController.onResume();
-        mController.displayPreference(mPreferenceScreen);
-
-        assertThat(mController.isAvailable()).isTrue();
-        assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(2);
-
-        final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount;
-        SubscriptionUtil.setActiveSubscriptionsForTesting(subs.subList(0, 1));
-
-        mController.onSubscriptionsChanged();
-
-        assertThat(mController.isAvailable()).isFalse();
-        assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1);
-        assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(0);
-    }
-
-    @Test
-    @UiThreadTest
-    public void onSubscriptionsChanged_subscriptionReplaced_preferencesChanged() {
-        final List<SubscriptionInfo> subs = setupMockSubscriptions(3);
-        doReturn(subs).when(mSubscriptionManager).getAvailableSubscriptionInfoList();
-
-        // Start out with only sub1 and sub2.
-        SubscriptionUtil.setActiveSubscriptionsForTesting(subs.subList(0, 2));
-        mController.onResume();
-        mController.displayPreference(mPreferenceScreen);
-
-        assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(2);
-        assertThat(mPreferenceCategory.getPreference(0).getTitle()).isEqualTo("sub2");
-        assertThat(mPreferenceCategory.getPreference(1).getTitle()).isEqualTo("sub1");
-
-        // Now replace sub2 with sub3, and make sure the old preference was removed and the new
-        // preference was added.
-        final int updateCountBeforeSubscriptionChange = mOnChildUpdatedCount;
-        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(subs.get(0), subs.get(2)));
-        mController.onSubscriptionsChanged();
-
-        assertThat(mController.isAvailable()).isTrue();
-        assertThat(mOnChildUpdatedCount).isEqualTo(updateCountBeforeSubscriptionChange + 1);
-        assertThat(mPreferenceCategory.getPreferenceCount()).isEqualTo(2);
-        assertThat(mPreferenceCategory.getPreference(0).getTitle()).isEqualTo("sub3");
-        assertThat(mPreferenceCategory.getPreference(1).getTitle()).isEqualTo("sub1");
-    }
-
-    @Test
-    public void getSummary_twoSubsOneDefaultForEverythingDataActive() {
-        setupMockSubscriptions(2);
-
-        doReturn(11).when(sInjector).getDefaultSmsSubscriptionId();
-        doReturn(11).when(sInjector).getDefaultVoiceSubscriptionId();
-        when(mTelephonyManager.isDataEnabled()).thenReturn(true);
-        doReturn(true).when(sInjector).isActiveCellularNetwork(mContext);
-
-        assertThat(mController.getSummary(11, true)).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "default_for_calls_and_sms")
-                        + System.lineSeparator()
-                        + ResourcesUtils.getResourcesString(mContext, "mobile_data_active"));
-
-        assertThat(mController.getSummary(22, false)).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "subscription_available"));
-    }
-
-    @Test
-    public void getSummary_twoSubsOneDefaultForEverythingDataNotActive() {
-        setupMockSubscriptions(2, 1, true);
-
-        doReturn(1).when(sInjector).getDefaultSmsSubscriptionId();
-        doReturn(1).when(sInjector).getDefaultVoiceSubscriptionId();
-
-        assertThat(mController.getSummary(1, true)).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "default_for_calls_and_sms")
-                        + System.lineSeparator()
-                        + ResourcesUtils.getResourcesString(mContext, "default_for_mobile_data"));
-
-        assertThat(mController.getSummary(2, false)).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "subscription_available"));
-    }
-
-    @Test
-    public void getSummary_twoSubsOneDefaultForEverythingDataDisabled() {
-        setupMockSubscriptions(2);
-
-        doReturn(1).when(sInjector).getDefaultSmsSubscriptionId();
-        doReturn(1).when(sInjector).getDefaultVoiceSubscriptionId();
-
-        assertThat(mController.getSummary(1, true)).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "default_for_calls_and_sms")
-                        + System.lineSeparator()
-                        + ResourcesUtils.getResourcesString(mContext, "mobile_data_off"));
-
-        assertThat(mController.getSummary(2, false)).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "subscription_available"));
-    }
-
-    @Test
-    public void getSummary_twoSubsOneForCallsAndDataOneForSms() {
-        setupMockSubscriptions(2, 1, true);
-
-        doReturn(2).when(sInjector).getDefaultSmsSubscriptionId();
-        doReturn(1).when(sInjector).getDefaultVoiceSubscriptionId();
-
-        assertThat(mController.getSummary(1, true)).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "default_for_calls")
-                        + System.lineSeparator()
-                        + ResourcesUtils.getResourcesString(mContext, "default_for_mobile_data"));
-
-        assertThat(mController.getSummary(2, false)).isEqualTo(
-                ResourcesUtils.getResourcesString(mContext, "default_for_sms"));
-    }
-
-    @Test
-    @UiThreadTest
-    public void setIcon_greatSignal_correctLevels() {
-        final List<SubscriptionInfo> subs = setupMockSubscriptions(2, 1, true);
-        setMockSubSignalStrength(subs, 0, SIGNAL_STRENGTH_GREAT);
-        setMockSubSignalStrength(subs, 1, SIGNAL_STRENGTH_GREAT);
-        final Preference pref = new Preference(mContext);
-        final Drawable greatDrawWithoutCutOff = mock(Drawable.class);
-        doReturn(greatDrawWithoutCutOff).when(sInjector)
-                .getIcon(any(), anyInt(), anyInt(), anyBoolean());
-
-        mController.setIcon(pref, 1, true /* isDefaultForData */);
-        assertThat(pref.getIcon()).isEqualTo(greatDrawWithoutCutOff);
-
-        final Drawable greatDrawWithCutOff = mock(Drawable.class);
-        doReturn(greatDrawWithCutOff).when(sInjector)
-                .getIcon(any(), anyInt(), anyInt(), anyBoolean());
-        mController.setIcon(pref, 2, false /* isDefaultForData */);
-        assertThat(pref.getIcon()).isEqualTo(greatDrawWithCutOff);
     }
 
     @Test
     @UiThreadTest
     public void displayPreference_providerAndHasSim_showPreference() {
         final List<SubscriptionInfo> sub = setupMockSubscriptions(1);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         doReturn(sub).when(mSubscriptionManager).getAvailableSubscriptionInfoList();
 
@@ -411,7 +242,6 @@
     @UiThreadTest
     public void displayPreference_providerAndHasMultiSim_showDataSubPreference() {
         final List<SubscriptionInfo> sub = setupMockSubscriptions(2);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         doReturn(sub).when(mSubscriptionManager).getAvailableSubscriptionInfoList();
 
@@ -429,7 +259,6 @@
                 Html.fromHtml("Connected / 5G", Html.FROM_HTML_MODE_LEGACY);
         final String networkType = "5G";
         final List<SubscriptionInfo> sub = setupMockSubscriptions(2);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         setupGetIconConditions(sub.get(0).getSubscriptionId(), true, true,
                 true, ServiceState.STATE_IN_SERVICE);
@@ -450,7 +279,6 @@
                 Html.fromHtml("Connected / W+", Html.FROM_HTML_MODE_LEGACY);
         final String networkType = "W+";
         final List<SubscriptionInfo> sub = setupMockSubscriptions(2);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         setupGetIconConditions(sub.get(0).getSubscriptionId(), false, true,
                 true, ServiceState.STATE_IN_SERVICE);
@@ -475,7 +303,6 @@
                 Html.fromHtml(dataOffSummary, Html.FROM_HTML_MODE_LEGACY);
         final String networkType = "5G";
         final List<SubscriptionInfo> sub = setupMockSubscriptions(2);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         setupGetIconConditions(sub.get(0).getSubscriptionId(), false, false,
                 true, ServiceState.STATE_IN_SERVICE);
@@ -495,7 +322,6 @@
         final CharSequence expectedSummary = Html.fromHtml("5G", Html.FROM_HTML_MODE_LEGACY);
         final String networkType = "5G";
         final List<SubscriptionInfo> sub = setupMockSubscriptions(2);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         setupGetIconConditions(sub.get(0).getSubscriptionId(), false, true,
                 true, ServiceState.STATE_IN_SERVICE);
@@ -512,7 +338,6 @@
     @Test
     @UiThreadTest
     public void displayPreference_providerAndNoSim_noPreference() {
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(null).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
 
         mController.onResume();
@@ -531,7 +356,6 @@
         final TelephonyDisplayInfo telephonyDisplayInfo =
                 new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
                         TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         setupGetIconConditions(sub.get(0).getSubscriptionId(), true, true,
                 true, ServiceState.STATE_IN_SERVICE);
@@ -557,7 +381,6 @@
         final TelephonyDisplayInfo telephonyDisplayInfo =
                 new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
                         TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         setupGetIconConditions(sub.get(0).getSubscriptionId(), false, true,
                 true, ServiceState.STATE_IN_SERVICE);
@@ -584,7 +407,6 @@
         final TelephonyDisplayInfo telephonyDisplayInfo =
                 new TelephonyDisplayInfo(TelephonyManager.NETWORK_TYPE_UNKNOWN,
                         TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NONE);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         setupGetIconConditions(sub.get(0).getSubscriptionId(), false, true,
                 false, ServiceState.STATE_OUT_OF_SERVICE);
@@ -603,7 +425,6 @@
     @UiThreadTest
     public void onAirplaneModeChanged_providerAndHasSim_noPreference() {
         setupMockSubscriptions(1);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         mController.onResume();
         mController.displayPreference(mPreferenceScreen);
         Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
@@ -618,7 +439,6 @@
     @UiThreadTest
     public void dataSubscriptionChanged_providerAndHasMultiSim_showSubId1Preference() {
         final List<SubscriptionInfo> sub = setupMockSubscriptions(2);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         doReturn(sub).when(mSubscriptionManager).getAvailableSubscriptionInfoList();
         Intent intent = new Intent(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
@@ -637,7 +457,6 @@
     public void dataSubscriptionChanged_providerAndHasMultiSim_showSubId2Preference() {
         final List<SubscriptionInfo> sub = setupMockSubscriptions(2);
         final int subId = sub.get(0).getSubscriptionId();
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         doReturn(sub).when(mSubscriptionManager).getAvailableSubscriptionInfoList();
         Intent intent = new Intent(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
@@ -662,7 +481,6 @@
     @UiThreadTest
     public void getIcon_cellularIsActive_iconColorIsAccentDefaultColor() {
         final List<SubscriptionInfo> sub = setupMockSubscriptions(1);
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(sub.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         Drawable icon = mock(Drawable.class);
         when(mTelephonyManager.isDataEnabled()).thenReturn(true);
@@ -681,7 +499,6 @@
     public void getIcon_dataStateConnectedAndMobileDataOn_iconIsSignalIcon() {
         final List<SubscriptionInfo> subs = setupMockSubscriptions(1);
         final int subId = subs.get(0).getSubscriptionId();
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(subs.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         Drawable icon = mock(Drawable.class);
         when(mTelephonyManager.isDataEnabled()).thenReturn(true);
@@ -700,7 +517,6 @@
     public void getIcon_voiceInServiceAndMobileDataOff_iconIsSignalIcon() {
         final List<SubscriptionInfo> subs = setupMockSubscriptions(1);
         final int subId = subs.get(0).getSubscriptionId();
-        doReturn(true).when(sInjector).isProviderModelEnabled(mContext);
         doReturn(subs.get(0)).when(mSubscriptionManager).getDefaultDataSubscriptionInfo();
         Drawable icon = mock(Drawable.class);
         when(mTelephonyManager.isDataEnabled()).thenReturn(false);
@@ -807,40 +623,6 @@
         return infos;
     }
 
-    /**
-     * Helper method to set the signal strength returned for a mock subscription
-     * @param subs The list of subscriptions
-     * @param index The index in of the subscription in |subs| to change
-     * @param level The signal strength level to return for the subscription. Pass -1 to force
-     *              return of a null SignalStrength object for the subscription.
-     */
-    private void setMockSubSignalStrength(List<SubscriptionInfo> subs, int index, int level) {
-        final int subId =  subs.get(index).getSubscriptionId();
-        doReturn(mTelephonyManagerForSub).when(mTelephonyManager).createForSubscriptionId(subId);
-        if (level == -1) {
-            when(mTelephonyManagerForSub.getSignalStrength()).thenReturn(null);
-        } else {
-            final SignalStrength signalStrength = mock(SignalStrength.class);
-            doReturn(signalStrength).when(mTelephonyManagerForSub).getSignalStrength();
-            when(signalStrength.getLevel()).thenReturn(level);
-        }
-    }
-
-    private void initializeMethod(boolean isSubscriptionCanBeDisplayed,
-            int defaultSmsSubscriptionId, int defaultVoiceSubscriptionId,
-            int defaultDataSubscriptionId, boolean isActiveCellularNetwork,
-            boolean isProviderModelEnabled) {
-        doReturn(isSubscriptionCanBeDisplayed)
-                .when(sInjector).canSubscriptionBeDisplayed(mContext, eq(anyInt()));
-        doReturn(defaultSmsSubscriptionId).when(sInjector).getDefaultSmsSubscriptionId();
-        doReturn(defaultVoiceSubscriptionId).when(sInjector).getDefaultVoiceSubscriptionId();
-        doReturn(defaultDataSubscriptionId).when(sInjector).getDefaultDataSubscriptionId();
-        doReturn(isActiveCellularNetwork).when(sInjector).isActiveCellularNetwork(mContext);
-        doReturn(isProviderModelEnabled).when(sInjector).isProviderModelEnabled(mContext);
-        doReturn(mock(Drawable.class))
-                .when(sInjector).getIcon(any(), anyInt(), anyInt(), eq(false));
-    }
-
     private static class FakeSubscriptionsPreferenceController
             extends SubscriptionsPreferenceController {
 
diff --git a/tests/unit/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java
index 93621d9..c48941f 100644
--- a/tests/unit/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/DefaultSubscriptionControllerTest.java
@@ -90,13 +90,6 @@
     }
 
     @Test
-    public void getAvailabilityStatus_onlyOneSubscription_notAvailable() {
-        SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(
-                createMockSub(1, "sub1")));
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
-    }
-
-    @Test
     public void getAvailabilityStatus_twoSubscriptions_isAvailable() {
         SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(
                 createMockSub(1, "sub1"),
@@ -248,7 +241,7 @@
         mController.setDefaultSubscription(sub1.getSubscriptionId());
 
         mController.displayPreference(mScreen);
-        assertThat(mController.isAvailable()).isFalse();
+        assertThat(mController.isAvailable()).isTrue();
 
         // Now make two subs be active - the pref should become available, and the
         // onPreferenceChange callback should be properly wired up.
@@ -289,12 +282,14 @@
         mController.displayPreference(mScreen);
         assertThat(mController.isAvailable()).isTrue();
         assertThat(mListPreference.isVisible()).isTrue();
+        assertThat(mListPreference.isEnabled()).isTrue();
 
         SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1));
         mController.onSubscriptionsChanged();
 
-        assertThat(mController.isAvailable()).isFalse();
-        assertThat(mListPreference.isVisible()).isFalse();
+        assertThat(mController.isAvailable()).isTrue();
+        assertThat(mListPreference.isVisible()).isTrue();
+        assertThat(mListPreference.isEnabled()).isFalse();
     }
 
     @Test
@@ -306,8 +301,9 @@
         mController.setDefaultSubscription(sub1.getSubscriptionId());
 
         mController.displayPreference(mScreen);
-        assertThat(mController.isAvailable()).isFalse();
-        assertThat(mListPreference.isVisible()).isFalse();
+        assertThat(mController.isAvailable()).isTrue();
+        assertThat(mListPreference.isVisible()).isTrue();
+        assertThat(mListPreference.isEnabled()).isFalse();
 
         SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(sub1, sub2));
         when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(sub1, sub2));
@@ -315,6 +311,7 @@
 
         assertThat(mController.isAvailable()).isTrue();
         assertThat(mListPreference.isVisible()).isTrue();
+        assertThat(mListPreference.isEnabled()).isTrue();
     }
 
     @Test
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderBackupCallingGroupTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderBackupCallingGroupTest.java
index e7a6af3..8396f1b 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderBackupCallingGroupTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderBackupCallingGroupTest.java
@@ -153,7 +153,6 @@
     @Test
     public void
     shouldShowBackupCallingForSub_crossSimDisabled_returnFalse() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
         doReturn(false).when(mNetworkProviderBackupCallingGroup).isCrossSimEnabledByPlatform(
                 mContext, SUB_ID_1);
 
@@ -163,7 +162,6 @@
 
     @Test
     public void shouldBackupCallingForSub_crossSimEnabled_returnTrue() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
         doReturn(true).when(mNetworkProviderBackupCallingGroup).isCrossSimEnabledByPlatform(
                 mContext, SUB_ID_1);
 
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java
index 660772e..9cd12fe 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroupTest.java
@@ -147,7 +147,6 @@
     @Test
     public void
     shouldShowWifiCallingForSub_wifiCallingDisabledWithWifiCallingNotReady_returnFalse() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
         setWifiCallingEnabled(false);
         doReturn(mMockQueryWfcState).when(mNetworkProviderWifiCallingGroup).queryImsState(SUB_ID);
 
@@ -157,7 +156,6 @@
 
     @Test
     public void shouldShowWifiCallingForSub_wifiCallingEnabledWithWifiCallingIsReady_returnTrue() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
         setWifiCallingEnabled(true);
         doReturn(mMockQueryWfcState).when(mNetworkProviderWifiCallingGroup).queryImsState(SUB_ID);
 
@@ -168,7 +166,6 @@
     @Test
     public void
     shouldShowWifiCallingForSub_wifiCallingDisabledWithNoActivityHandleIntent_returnFalse() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
         buildPhoneAccountConfigureIntent(false);
         doReturn(mMockQueryWfcState).when(mNetworkProviderWifiCallingGroup).queryImsState(SUB_ID);
         doReturn(mPhoneAccountHandle).when(mNetworkProviderWifiCallingGroup)
@@ -181,7 +178,6 @@
     @Test
     public void
     shouldShowWifiCallingForSub_wifiCallingEnabledWithActivityHandleIntent_returnTrue() {
-        FeatureFlagUtils.setEnabled(mContext, FeatureFlagUtils.SETTINGS_PROVIDER_MODEL, true);
         buildPhoneAccountConfigureIntent(true);
         doReturn(mMockQueryWfcState).when(mNetworkProviderWifiCallingGroup).queryImsState(SUB_ID);
         doReturn(mPhoneAccountHandle).when(mNetworkProviderWifiCallingGroup)
diff --git a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
index 47e3ad9..02b8706 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NetworkSelectSettingsTest.java
@@ -166,6 +166,19 @@
         assertThat(mNetworkSelectSettings.doAggregation(testList)).isEqualTo(expected);
     }
 
+    @Test
+    public void doAggregation_hasDuplicateItemsDiffMccMncCase3_removeSamePlmnRatItem() {
+        List<CellInfo> testList = Arrays.asList(
+                createLteCellInfo(false, 123, "123", "232", "CarrierA"),
+                createLteCellInfo(false, 124, "123", "233", "CarrierA"),
+                createLteCellInfo(true, 125, "123", "234", "CarrierA"),
+                createGsmCellInfo(false, 126, "456", "232", "CarrierA"));
+        List<CellInfo> expected = Arrays.asList(
+                createLteCellInfo(true, 125, "123", "234", "CarrierA"),
+                createGsmCellInfo(false, 126, "456", "232", "CarrierA"));
+        assertThat(mNetworkSelectSettings.doAggregation(testList)).isEqualTo(expected);
+    }
+
     private CellInfoLte createLteCellInfo(boolean registered, int cellId, String mcc, String mnc,
             String plmnName) {
         CellIdentityLte cil = new CellIdentityLte(
diff --git a/tests/unit/src/com/android/settings/network/telephony/NrAdvancedCallingPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/NrAdvancedCallingPreferenceControllerTest.java
index 9eb67df..fac7772 100644
--- a/tests/unit/src/com/android/settings/network/telephony/NrAdvancedCallingPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/NrAdvancedCallingPreferenceControllerTest.java
@@ -80,7 +80,8 @@
                 mTelephonyManager).setVoNrEnabled(anyBoolean());
         mCarrierConfig = new PersistableBundle();
         doReturn(mCarrierConfig).when(mCarrierConfigManager).getConfigForSubId(SUB_ID);
-        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_SETTING_VISIBILITY_BOOL, false);
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_ENABLED_BOOL, false);
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_SETTING_VISIBILITY_BOOL, true);
         mCarrierConfig.putIntArray(CarrierConfigManager.KEY_CARRIER_NR_AVAILABILITIES_INT_ARRAY,
                 new int[]{1, 2});
 
@@ -92,7 +93,8 @@
     }
 
     @Test
-    public void getAvailabilityStatus_vonrDisabled_returnUnavailable() {
+    public void getAvailabilityStatus_vonrEnabledAndVisibleDisable_returnUnavailable() {
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_ENABLED_BOOL, true);
         mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_SETTING_VISIBILITY_BOOL, false);
 
         mController.init(SUB_ID);
@@ -102,7 +104,30 @@
     }
 
     @Test
-    public void getAvailabilityStatus_vonrEnabled_returnAvailable() {
+    public void getAvailabilityStatus_vonrDisabledAndVisibleDisable_returnUnavailable() {
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_ENABLED_BOOL, false);
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_SETTING_VISIBILITY_BOOL, false);
+
+        mController.init(SUB_ID);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(
+                BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_vonrDisabledAndVisibleEnable_returnUnavailable() {
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_ENABLED_BOOL, false);
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_SETTING_VISIBILITY_BOOL, true);
+
+        mController.init(SUB_ID);
+
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(
+                BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    public void getAvailabilityStatus_vonrEnabledAndVisibleEnable_returnAvailable() {
+        mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_ENABLED_BOOL, true);
         mCarrierConfig.putBoolean(CarrierConfigManager.KEY_VONR_SETTING_VISIBILITY_BOOL, true);
 
         mController.init(SUB_ID);
diff --git a/tests/unit/src/com/android/settings/slices/SliceTestUtils.java b/tests/unit/src/com/android/settings/slices/SliceTestUtils.java
index 1b035cd..40a827a 100644
--- a/tests/unit/src/com/android/settings/slices/SliceTestUtils.java
+++ b/tests/unit/src/com/android/settings/slices/SliceTestUtils.java
@@ -35,6 +35,7 @@
     public static final int FAKE_ICON = 1234;
     public static final String FAKE_FRAGMENT_NAME = FakeIndexProvider.class.getName();
     public static final String FAKE_CONTROLLER_NAME = FakeToggleController.class.getName();
+    public static final int FAKE_HIGHLIGHT_MENU_RES = FakeToggleController.HIGHLIGHT_MENU_RES;
 
 
     public static void insertSliceToDb(Context context, String key) {
@@ -75,6 +76,8 @@
         values.put(SlicesDatabaseHelper.IndexColumns.UNAVAILABLE_SLICE_SUBTITLE,
                 customizedUnavailableSliceSubtitle);
         values.put(SlicesDatabaseHelper.IndexColumns.PUBLIC_SLICE, isPublicSlice);
+        values.put(SlicesDatabaseHelper.IndexColumns.HIGHLIGHT_MENU_RESOURCE,
+                FAKE_HIGHLIGHT_MENU_RES);
 
         db.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
         db.close();
diff --git a/tests/unit/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java b/tests/unit/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java
index 4fcbd15..38347e9 100644
--- a/tests/unit/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java
+++ b/tests/unit/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java
@@ -143,5 +143,10 @@
         public Intent getIntent() {
             return null;
         }
+
+        @Override
+        public int getSliceHighlightMenuRes() {
+            return NO_RES;
+        }
     }
 }
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;
+    }
 }
diff --git a/tests/unit/src/com/android/settings/testutils/FakeToggleController.java b/tests/unit/src/com/android/settings/testutils/FakeToggleController.java
index 9eda8b6..c232479 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeToggleController.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeToggleController.java
@@ -27,6 +27,7 @@
 public class FakeToggleController extends TogglePreferenceController {
 
     public static final String AVAILABILITY_KEY = "fake_toggle_availability_key";
+    public static final int HIGHLIGHT_MENU_RES = 5678;
 
     public static final IntentFilter INTENT_FILTER = new IntentFilter(
             WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
@@ -71,6 +72,11 @@
     }
 
     @Override
+    public int getSliceHighlightMenuRes() {
+        return HIGHLIGHT_MENU_RES;
+    }
+
+    @Override
     public Class<? extends SliceBackgroundWorker> getBackgroundWorkerClass() {
         return TestWorker.class;
     }
diff --git a/tests/unit/src/com/android/settings/wifi/RequestToggleWiFiActivityTest.java b/tests/unit/src/com/android/settings/wifi/RequestToggleWiFiActivityTest.java
new file mode 100644
index 0000000..0e3dd40
--- /dev/null
+++ b/tests/unit/src/com/android/settings/wifi/RequestToggleWiFiActivityTest.java
@@ -0,0 +1,101 @@
+/*
+ * 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.wifi;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import android.annotation.Nullable;
+import android.app.IActivityManager;
+import android.content.Context;
+import android.content.Intent;
+import android.net.wifi.WifiManager;
+import android.os.RemoteException;
+
+import androidx.test.core.app.ActivityScenario;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.After;
+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;
+
+@RunWith(AndroidJUnit4.class)
+public class RequestToggleWiFiActivityTest {
+
+    @Rule
+    public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+    @Spy
+    private final Context mContext = ApplicationProvider.getApplicationContext();
+    @Mock
+    private WifiManager mWifiManager;
+    @Mock
+    private IActivityManager mIActivityManager;
+
+    private ActivityScenario<RequestToggleWiFiActivity> mActivityScenario;
+    private RequestToggleWiFiActivity mActivity;
+
+    @Before
+    public void setUp() {
+        when(mContext.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
+        when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
+
+        mActivityScenario = ActivityScenario.launch(new Intent(WifiManager.ACTION_REQUEST_ENABLE));
+        mActivityScenario.onActivity(activity -> mActivity = activity);
+
+    }
+
+    @After
+    public void cleanUp() {
+        mActivity = null;
+        if (mActivityScenario != null) {
+            mActivityScenario.close();
+        }
+    }
+
+    @Test
+    public void getAppLabel_nullPackageName_returnNull() {
+        fakeCallingPackage(null);
+
+        assertThat(mActivity.getAppLabel()).isNull();
+    }
+
+    @Test
+    public void getAppLabel_settingsPackageName_returnNotNull() {
+        fakeCallingPackage("com.android.settings");
+
+        assertThat(mActivity.getAppLabel()).isNotNull();
+    }
+
+    private void fakeCallingPackage(@Nullable String packageName) {
+        assertThat(mActivity).isNotNull();
+        mActivity.mActivityManager = mIActivityManager;
+        try {
+            when(mIActivityManager.getLaunchedFromPackage(any())).thenReturn(packageName);
+        } catch (RemoteException e) {
+            // Do nothing.
+        }
+    }
+}