Merge "Add Lock Screen page skeleton and TS flag" into main
diff --git a/aconfig/catalyst/network_and_internet.aconfig b/aconfig/catalyst/network_and_internet.aconfig
index a5183f3..94faaef 100644
--- a/aconfig/catalyst/network_and_internet.aconfig
+++ b/aconfig/catalyst/network_and_internet.aconfig
@@ -9,6 +9,13 @@
 }
 
 flag {
+  name: "catalyst_internet_settings"
+  namespace: "android_settings"
+  description: "Flag for Internet"
+  bug: "323791114"
+}
+
+flag {
   name: "catalyst_mobile_network_list"
   namespace: "android_settings"
   description: "Flag for SIMs"
diff --git a/aconfig/settings_display_flag_declarations.aconfig b/aconfig/settings_display_flag_declarations.aconfig
index 9fe587b..a85d967 100644
--- a/aconfig/settings_display_flag_declarations.aconfig
+++ b/aconfig/settings_display_flag_declarations.aconfig
@@ -8,3 +8,10 @@
     bug: "315937886"
 }
 
+flag {
+    name: "screen_timeout_settings_dashboard"
+    namespace: "android_settings"
+    description: "Use dashboard style settings"
+    bug: "368359967"
+}
+
diff --git a/res/drawable-night/mouse_keys_click.xml b/res/drawable-night/mouse_keys_click.xml
new file mode 100644
index 0000000..e5e8d5a
--- /dev/null
+++ b/res/drawable-night/mouse_keys_click.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#171216"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#F1B3E6"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_directional.xml b/res/drawable-night/mouse_keys_directional.xml
new file mode 100644
index 0000000..fd49f1e
--- /dev/null
+++ b/res/drawable-night/mouse_keys_directional.xml
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#171216"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#F1B3E6"/>
+    <group>
+        <clip-path
+            android:pathData="M172.4,18h12v12h-12z"/>
+        <path
+            android:pathData="M181.24,27.41L176.46,22.64V26.69H174.99V20.11H181.56V21.59H177.51L182.29,26.36L181.24,27.41Z"
+            android:fillColor="#4C1F49"/>
+    </group>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#F1B3E6"/>
+    <group>
+        <clip-path
+            android:pathData="M194.63,18h12v12h-12z"/>
+        <path
+            android:pathData="M199.89,28.02V22.81L197.66,25.05L196.61,24L200.63,19.98L204.66,24L203.61,25.05L201.37,22.81V28.02H199.89Z"
+            android:fillColor="#4C1F49"/>
+    </group>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#F1B3E6"/>
+    <group>
+        <clip-path
+            android:pathData="M216.86,18h12v12h-12z"/>
+        <path
+            android:pathData="M220.02,27.41L218.98,26.36L223.75,21.59H219.7V20.11H226.27V26.69H224.8V22.64L220.02,27.41Z"
+            android:fillColor="#4C1F49"/>
+    </group>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.66,14 282.77,14H297C298.1,14 299,14.9 299,16V32C299,33.1 298.1,34 297,34H282.77C281.66,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.3,42 121.2,42.9 121.2,44V60C121.2,61.1 120.3,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#F1B3E6"/>
+    <group>
+        <clip-path
+            android:pathData="M180.79,46h12v12h-12z"/>
+        <path
+            android:pathData="M185.6,52.74L187.84,54.97L186.79,56.03L182.76,52L186.79,47.97L187.84,49.03L185.6,51.26H190.81V52.74H185.6Z"
+            android:fillColor="#4C1F49"/>
+    </group>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#F1B3E6"/>
+    <group>
+        <clip-path
+            android:pathData="M231.59,46h12v12h-12z"/>
+        <path
+            android:pathData="M238.77,52.74H233.56V51.26H238.77L236.54,49.03L237.59,47.97L241.61,52L237.59,56.03L236.54,54.97L238.77,52.74Z"
+            android:fillColor="#4C1F49"/>
+    </group>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#F1B3E6"/>
+    <group>
+        <clip-path
+            android:pathData="M187.67,74h12v12h-12z"/>
+        <path
+            android:pathData="M190.09,83.59V78.51H191.56V81.07L196.64,76L197.67,77.04L192.6,82.11H195.16V83.59H190.09Z"
+            android:fillColor="#4C1F49"/>
+    </group>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.44C229.55,70 230.44,70.9 230.44,72V88C230.44,89.1 229.55,90 228.44,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#F1B3E6"/>
+    <group>
+        <clip-path
+            android:pathData="M213.45,74h12v12h-12z"/>
+        <path
+            android:pathData="M218.71,75.97H220.19V81.19L222.43,78.95L223.48,80L219.45,84.03L215.43,80L216.48,78.95L218.71,81.19V75.97Z"
+            android:fillColor="#4C1F49"/>
+    </group>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#F1B3E6"/>
+    <group>
+        <clip-path
+            android:pathData="M239.23,74h12v12h-12z"/>
+        <path
+            android:pathData="M243.84,83.69V82.21H246.4L241.21,77.01L242.24,75.97L247.44,81.18V78.61H248.92V83.69H243.84Z"
+            android:fillColor="#4C1F49"/>
+    </group>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.44C243.55,98 244.44,98.9 244.44,100V116C244.44,117.11 243.55,118 242.44,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_press_hold.xml b/res/drawable-night/mouse_keys_press_hold.xml
new file mode 100644
index 0000000..eb85602
--- /dev/null
+++ b/res/drawable-night/mouse_keys_press_hold.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#171216"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#F1B3E6"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_release.xml b/res/drawable-night/mouse_keys_release.xml
new file mode 100644
index 0000000..4fb7c4a
--- /dev/null
+++ b/res/drawable-night/mouse_keys_release.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#171216"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#F1B3E6"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_release2.xml b/res/drawable-night/mouse_keys_release2.xml
new file mode 100644
index 0000000..e844bc9
--- /dev/null
+++ b/res/drawable-night/mouse_keys_release2.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#171216"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#F1B3E6"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_toggle_scroll.xml b/res/drawable-night/mouse_keys_toggle_scroll.xml
new file mode 100644
index 0000000..3d6cbf3
--- /dev/null
+++ b/res/drawable-night/mouse_keys_toggle_scroll.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#171216"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#F1B3E6"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#554151"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#4E444B"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#3A3338"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable/audio_sharing_rounded_bg.xml b/res/drawable/audio_sharing_rounded_bg.xml
deleted file mode 100644
index 35517ea..0000000
--- a/res/drawable/audio_sharing_rounded_bg.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2023 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">
-    <solid android:color="?androidprv:attr/colorAccentPrimary" />
-    <corners android:radius="12dp" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/audio_sharing_rounded_bg_ripple.xml b/res/drawable/audio_sharing_rounded_bg_ripple.xml
deleted file mode 100644
index 18696c6..0000000
--- a/res/drawable/audio_sharing_rounded_bg_ripple.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2023 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.
-  -->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="?android:attr/colorControlHighlight">
-    <item android:drawable="@drawable/audio_sharing_rounded_bg"/>
-</ripple>
\ No newline at end of file
diff --git a/res/drawable/mouse_keys_click.xml b/res/drawable/mouse_keys_click.xml
new file mode 100644
index 0000000..2dd6238
--- /dev/null
+++ b/res/drawable/mouse_keys_click.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#FFF7F9"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#804D7A"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_directional.xml b/res/drawable/mouse_keys_directional.xml
new file mode 100644
index 0000000..ae79563
--- /dev/null
+++ b/res/drawable/mouse_keys_directional.xml
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#FFF7F9"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#804D7A"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#804D7A"/>
+    <group>
+        <clip-path
+            android:pathData="M172.4,18h12v12h-12z"/>
+        <path
+            android:pathData="M181.24,27.41L176.46,22.64V26.69H174.99V20.11H181.56V21.59H177.51L182.29,26.36L181.24,27.41Z"
+            android:fillColor="#ffffff"/>
+    </group>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#804D7A"/>
+    <group>
+        <clip-path
+            android:pathData="M194.63,18h12v12h-12z"/>
+        <path
+            android:pathData="M199.89,28.02V22.81L197.66,25.05L196.61,24L200.63,19.98L204.66,24L203.61,25.05L201.37,22.81V28.02H199.89Z"
+            android:fillColor="#ffffff"/>
+    </group>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#804D7A"/>
+    <group>
+        <clip-path
+            android:pathData="M216.86,18h12v12h-12z"/>
+        <path
+            android:pathData="M220.02,27.41L218.98,26.36L223.75,21.59H219.7V20.11H226.27V26.69H224.8V22.64L220.02,27.41Z"
+            android:fillColor="#ffffff"/>
+    </group>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.66,14 282.77,14H297C298.1,14 299,14.9 299,16V32C299,33.1 298.1,34 297,34H282.77C281.66,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.3,42 121.2,42.9 121.2,44V60C121.2,61.1 120.3,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#804D7A"/>
+    <group>
+        <clip-path
+            android:pathData="M180.79,46h12v12h-12z"/>
+        <path
+            android:pathData="M185.6,52.74L187.84,54.97L186.79,56.03L182.76,52L186.79,47.97L187.84,49.03L185.6,51.26H190.81V52.74H185.6Z"
+            android:fillColor="#ffffff"/>
+    </group>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#804D7A"/>
+    <group>
+        <clip-path
+            android:pathData="M231.59,46h12v12h-12z"/>
+        <path
+            android:pathData="M238.77,52.74H233.56V51.26H238.77L236.54,49.03L237.59,47.97L241.61,52L237.59,56.03L236.54,54.97L238.77,52.74Z"
+            android:fillColor="#ffffff"/>
+    </group>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#804D7A"/>
+    <group>
+        <clip-path
+            android:pathData="M187.67,74h12v12h-12z"/>
+        <path
+            android:pathData="M190.09,83.59V78.51H191.56V81.07L196.64,76L197.67,77.04L192.6,82.11H195.16V83.59H190.09Z"
+            android:fillColor="#ffffff"/>
+    </group>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.44C229.55,70 230.44,70.9 230.44,72V88C230.44,89.1 229.55,90 228.44,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#804D7A"/>
+    <group>
+        <clip-path
+            android:pathData="M213.45,74h12v12h-12z"/>
+        <path
+            android:pathData="M218.71,75.97H220.19V81.19L222.43,78.95L223.48,80L219.45,84.03L215.43,80L216.48,78.95L218.71,81.19V75.97Z"
+            android:fillColor="#ffffff"/>
+    </group>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#804D7A"/>
+    <group>
+        <clip-path
+            android:pathData="M239.23,74h12v12h-12z"/>
+        <path
+            android:pathData="M243.84,83.69V82.21H246.4L241.21,77.01L242.24,75.97L247.44,81.18V78.61H248.92V83.69H243.84Z"
+            android:fillColor="#ffffff"/>
+    </group>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.44C243.55,98 244.44,98.9 244.44,100V116C244.44,117.11 243.55,118 242.44,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#F2E5EB"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_press_hold.xml b/res/drawable/mouse_keys_press_hold.xml
new file mode 100644
index 0000000..af20290
--- /dev/null
+++ b/res/drawable/mouse_keys_press_hold.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#FFF7F9"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#804D7A"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_release.xml b/res/drawable/mouse_keys_release.xml
new file mode 100644
index 0000000..232d5e7
--- /dev/null
+++ b/res/drawable/mouse_keys_release.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#FFF7F9"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#804D7A"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_release2.xml b/res/drawable/mouse_keys_release2.xml
new file mode 100644
index 0000000..88422cb
--- /dev/null
+++ b/res/drawable/mouse_keys_release2.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#FFF7F9"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#804D7A"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_toggle_scroll.xml b/res/drawable/mouse_keys_toggle_scroll.xml
new file mode 100644
index 0000000..1a1a550
--- /dev/null
+++ b/res/drawable/mouse_keys_toggle_scroll.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 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="348dp"
+        android:height="160dp"
+        android:viewportWidth="348"
+        android:viewportHeight="160">
+    <path
+        android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+        android:fillColor="#FFF7F9"/>
+    <path
+        android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+        android:fillColor="#804D7A"/>
+    <path
+        android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+        android:fillColor="#F8DAEE"/>
+    <path
+        android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+        android:fillColor="#D1C2CB"/>
+    <path
+        android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+        android:fillColor="#ECDFE5"/>
+    <path
+        android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+        android:strokeWidth="6"
+        android:fillColor="#00000000"
+        android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/layout/dialog_custom_body_audio_sharing.xml b/res/layout/dialog_custom_body_audio_sharing.xml
index ba7f643..5e9f239 100644
--- a/res/layout/dialog_custom_body_audio_sharing.xml
+++ b/res/layout/dialog_custom_body_audio_sharing.xml
@@ -64,7 +64,7 @@
             android:layout_gravity="center"
             android:layout_marginTop="4dp"
             android:textColor="?androidprv:attr/textColorOnAccent"
-            android:background="@drawable/audio_sharing_rounded_bg_ripple"
+            android:background="@drawable/audio_sharing_rounded_bg_ripple_top"
             android:visibility="gone" />
 
         <Button
@@ -75,7 +75,7 @@
             android:layout_gravity="center"
             android:layout_marginTop="4dp"
             android:textColor="?androidprv:attr/textColorOnAccent"
-            android:background="@drawable/audio_sharing_rounded_bg_ripple"
+            android:background="@drawable/audio_sharing_rounded_bg_ripple_bottom"
             android:visibility="gone" />
     </LinearLayout>
 </ScrollView>
\ No newline at end of file
diff --git a/res/layout/mouse_keys_image_item.xml b/res/layout/mouse_keys_image_item.xml
new file mode 100644
index 0000000..36b9992
--- /dev/null
+++ b/res/layout/mouse_keys_image_item.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2024 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.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+          android:id="@+id/layout_description"
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:layout_marginStart="16dp"
+          android:layout_marginEnd="20dp"
+          android:layout_marginBottom="20dp"
+          android:textAppearance="?android:attr/textAppearanceListItemSmall"
+          android:drawablePadding="8dp"/>
diff --git a/res/layout/mouse_keys_image_list.xml b/res/layout/mouse_keys_image_list.xml
new file mode 100644
index 0000000..f111736
--- /dev/null
+++ b/res/layout/mouse_keys_image_list.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2024 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.constraintlayout.widget.ConstraintLayout
+    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">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/mouse_keys_image_recycler_list"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:clipToPadding="true"
+        android:nestedScrollingEnabled="false"
+        android:padding="12dp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b62df60..ebb69f7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -33,9 +33,9 @@
     <string name="device_info_protected_single_press">Tap to show info</string>
     <!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to enable development settings -->
     <string name="show_dev_countdown">{count, plural,
-      =1      {You are now # step away from being a developer.}
-      other   {You are now # steps away from being a developer.}
-    }</string>
+        =1      {You are now # step away from being a developer.}
+        other   {You are now # steps away from being a developer.}
+        }</string>
     <!-- [CHAR LIMIT=NONE] Device Info screen. Confirmation that developer settings are enabled -->
     <string name="show_dev_on">You are now a developer!</string>
     <!-- [CHAR LIMIT=NONE] Device Info screen. Okay we get it, stop pressing, you already have it on -->
@@ -502,9 +502,9 @@
 
     <!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
     <string name="dlg_remove_locales_title">{count, plural,
-      =1      {Remove selected language?}
-      other   {Remove selected languages?}
-    }</string>
+        =1      {Remove selected language?}
+        other   {Remove selected languages?}
+        }</string>
 
     <!-- The text of the confirmation dialog shown when the user selects several languages and tries to remove them [CHAR LIMIT=NONE] -->
     <string name="dlg_remove_locales_message">Text will be displayed in another language.</string>
@@ -654,9 +654,9 @@
     <string name="location_settings_summary_location_off">Off</string>
     <!-- Summary for Location settings when location is on, explaining how many apps have location permission [CHAR LIMIT=NONE]-->
     <string name="location_settings_summary_location_on">{count, plural,
-      =1      {On / # app has access to location}
-      other   {On / # apps have access to location}
-    }</string>
+        =1      {On / # app has access to location}
+        other   {On / # apps have access to location}
+        }</string>
     <!-- Location settings, loading the number of apps which have location permission [CHAR LIMIT=30] -->
     <string name="location_settings_loading_app_permission_stats">Loading\u2026</string>
     <!-- Location settings footer warning text when location is on [CHAR LIMIT=NONE] -->
@@ -845,9 +845,9 @@
     <string name="fingerprint_add_title">Add fingerprint</string>
     <!-- Message showing the current number of fingerprints set up. Shown for a menu item that launches fingerprint settings or enrollment. -->
     <string name="security_settings_fingerprint_preference_summary">{count, plural,
-      =1      {Fingerprint added}
-      other   {# fingerprints added}
-    }</string>
+        =1      {Fingerprint added}
+        other   {# fingerprints added}
+        }</string>
     <!-- message shown in summary field when no fingerprints are registered -->
     <string name="security_settings_fingerprint_preference_summary_none">Setup needed</string>
     <!-- Introduction title shown in fingerprint enrollment to introduce the fingerprint feature [CHAR LIMIT=29] -->
@@ -1448,9 +1448,9 @@
     <string name="private_space_category_hide">Hide</string>
     <!-- Header on pattern confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
     <string name="private_space_confirm_your_pattern_header">Confirm your private space pattern</string>
-     <!-- Header on PIN confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
+    <!-- Header on PIN confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
     <string name="private_space_confirm_your_pin_header">Re-enter your private space PIN</string>
-     <!-- Header on password confirm screen inside private space when separate lock set for private space[CHAR LIMIT=50] -->
+    <!-- Header on password confirm screen inside private space when separate lock set for private space[CHAR LIMIT=50] -->
     <string name="private_space_confirm_your_password_header">Re-enter your private space password</string>
 
     <!-- Text shown when "Add fingerprint" button is disabled -->
@@ -1686,21 +1686,21 @@
 
     <!-- Hint shown in dialog screen when password is too short -->
     <string name="lockpassword_password_too_short">{count, plural,
-      =1      {Must contain at least # character}
-      other   {Must be at least # characters}
-    }</string>
+        =1      {Must contain at least # character}
+        other   {Must be at least # characters}
+        }</string>
     <!-- Hint shown in dialog screen when password is too short and only using numbers. [CHAR LIMIT=NONE] -->
     <string name="lockpassword_password_too_short_all_numeric">
         {count, plural,
-            =1    {If using only numbers, must be at least 1 digit}
-            other {If using only numbers, must be at least # digits}
+        =1    {If using only numbers, must be at least 1 digit}
+        other {If using only numbers, must be at least # digits}
         }
     </string>
     <!-- Hint shown in dialog screen when PIN is too short -->
     <string name="lockpassword_pin_too_short">{count, plural,
-      =1      {PIN must contain at least # digit}
-      other   {PIN must be at least # digits}
-    }</string>
+        =1      {PIN must contain at least # digit}
+        other   {PIN must be at least # digits}
+        }</string>
 
     <!-- Hint shown in dialog screen when PIN is too short with Additional text indicating minAutoConfirmLen(eg: 6) digits PIN offer additional security -->
     <string name="lockpassword_pin_too_short_autoConfirm_extra_message">{count, plural,
@@ -1710,14 +1710,14 @@
 
     <!-- Error shown in popup when password is too long -->
     <string name="lockpassword_password_too_long">{count, plural,
-      =1      {Must be fewer than # character}
-      other   {Must be fewer than # characters}
-    }</string>
+        =1      {Must be fewer than # character}
+        other   {Must be fewer than # characters}
+        }</string>
     <!-- Error shown in popup when PIN is too long -->
     <string name="lockpassword_pin_too_long">{count, plural,
-      =1      {Must be fewer than # digit}
-      other   {Must be fewer than # digits}
-    }</string>
+        =1      {Must be fewer than # digit}
+        other   {Must be fewer than # digits}
+        }</string>
 
     <!-- Error shown when in PIN mode and PIN has been used recently. Please keep this string short! -->
     <string name="lockpassword_pin_recently_used">Device admin doesn\'t allow using a recent PIN</string>
@@ -1727,45 +1727,45 @@
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of letters -->
     <string name="lockpassword_password_requires_letters">{count, plural,
-      =1      {Must contain at least 1 letter}
-      other   {Must contain at least # letters}
-    }</string>
+        =1      {Must contain at least 1 letter}
+        other   {Must contain at least # letters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of lowercase letters -->
     <string name="lockpassword_password_requires_lowercase">{count, plural,
-      =1      {Must contain at least 1 lowercase letter}
-      other   {Must contain at least # lowercase letters}
-    }</string>
+        =1      {Must contain at least 1 lowercase letter}
+        other   {Must contain at least # lowercase letters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of uppercase letters -->
     <string name="lockpassword_password_requires_uppercase">{count, plural,
-      =1      {Must contain at least 1 uppercase letter}
-      other   {Must contain at least # uppercase letters}
-    }</string>
+        =1      {Must contain at least 1 uppercase letter}
+        other   {Must contain at least # uppercase letters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of numerical digits -->
     <string name="lockpassword_password_requires_numeric">{count, plural,
-      =1      {Must contain at least 1 numerical digit}
-      other   {Must contain at least # numerical digits}
-    }</string>
+        =1      {Must contain at least 1 numerical digit}
+        other   {Must contain at least # numerical digits}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of special symbols -->
     <string name="lockpassword_password_requires_symbols">{count, plural,
-      =1      {Must contain at least 1 special symbol}
-      other   {Must contain at least # special symbols}
-    }</string>
+        =1      {Must contain at least 1 special symbol}
+        other   {Must contain at least # special symbols}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of non-letter characters -->
     <string name="lockpassword_password_requires_nonletter">{count, plural,
-      =1      {Must contain at least 1 non-letter character}
-      other   {Must contain at least # non-letter characters}
-    }</string>
+        =1      {Must contain at least 1 non-letter character}
+        other   {Must contain at least # non-letter characters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password doesn't contain the required number of non-numerical characters -->
     <string name="lockpassword_password_requires_nonnumerical">{count, plural,
-      =1      {Must contain at least 1 non-numerical character}
-      other   {Must contain at least # non-numerical characters}
-    }</string>
+        =1      {Must contain at least 1 non-numerical character}
+        other   {Must contain at least # non-numerical characters}
+        }</string>
 
     <!-- Error shown when in PASSWORD mode and password has been used recently. Please keep this string short! -->
     <string name="lockpassword_password_recently_used">Device admin doesn\'t allow using a recent
@@ -1801,9 +1801,9 @@
 
     <!-- Summary of preference to manage device admin apps, informing the user how many device admin apps are installed and active -->
     <string name="number_of_device_admins">{count, plural,
-      =1      {# active app}
-      other   {# active apps}
-    }</string>
+        =1      {# active app}
+        other   {# active apps}
+        }</string>
 
     <!-- Title of preference to manage trust agents -->
     <string name="manage_trust_agents">Trust agents</string>
@@ -1816,9 +1816,9 @@
 
     <!-- Summary of preference to manage device policies when there is trust agent-->
     <string name="manage_trust_agents_summary_on">{count, plural,
-      =1      {1 active trust agent}
-      other   {# active trust agents}
-    }</string>
+        =1      {1 active trust agent}
+        other   {# active trust agents}
+        }</string>
 
     <!-- Bluetooth settings -->
     <!--Used as title on second screen after selecting Bluetooth settings -->
@@ -2412,19 +2412,19 @@
     <!-- Wi-Fi Advanced Settings --> <skip />
     <!-- Wi-Fi settings screen, Saved networks summary.  This shows below the "Saved networks" item and indicates the number of networks, not including passpoint network, a user has saved. [CHAR LIMIT=30] -->
     <string name="wifi_saved_access_points_summary">{count, plural,
-      =1      {1 network}
-      other   {# networks}
-    }</string>
+        =1      {1 network}
+        other   {# networks}
+        }</string>
     <!-- Wi-Fi settings screen, Saved networks summary.  This shows below the "Saved networks" item and indicates the number of passpoint networks a user has saved. [CHAR LIMIT=30] -->
     <string name="wifi_saved_passpoint_access_points_summary">{count, plural,
-      =1      {1 subscription}
-      other   {# subscriptions}
-    }</string>
+        =1      {1 subscription}
+        other   {# subscriptions}
+        }</string>
     <!-- Wi-Fi settings screen, Saved networks summary.  This shows below the "Saved networks" item and indicates number of whole kinds networks, if there are both normal saved networks and saved passpoint networks. The number will be at least 2, so the one case is only to prevent lint error. [CHAR LIMIT=60] -->
     <string name="wifi_saved_all_access_points_summary">{count, plural,
-      =1      {1 network &amp; subscription}
-      other   {# networks &amp; subscriptions}
-    }</string>
+        =1      {1 network &amp; subscription}
+        other   {# networks &amp; subscriptions}
+        }</string>
     <!-- Wi-Fi settings screen, advanced, title of the item to show the Wi-Fi device's SSID. [CHAR LIMIT=20] -->
     <string name="wifi_advanced_ssid_title">SSID</string>
     <!-- Wi-Fi settings screen, advanced, title of the item to show the device's Wi-Fi MAC address. [CHAR LIMIT=50] -->
@@ -2998,11 +2998,11 @@
     <!-- Dark UI screen footer summary text shown to indicate Modes may turn on/off Dark theme automatically according to their triggers. [CHAR LIMIT=NONE] -->
     <string name="dark_ui_modes_footer_summary">
         {count, plural, offset:2
-            =0    {Modes can also activate dark theme}
-            =1    {{mode_1} also activates dark theme}
-            =2    {{mode_1} and {mode_2} also activate dark theme}
-            =3    {{mode_1}, {mode_2}, and {mode_3} also activate dark theme}
-            other {{mode_1}, {mode_2}, and # more also activate dark theme}
+        =0    {Modes can also activate dark theme}
+        =1    {{mode_1} also activates dark theme}
+        =2    {{mode_1} and {mode_2} also activate dark theme}
+        =3    {{mode_1}, {mode_2}, and {mode_3} also activate dark theme}
+        other {{mode_1}, {mode_2}, and # more also activate dark theme}
         }
     </string>
     <!-- Dark UI screen footer action text linking to Modes settings. [CHAR LIMIT=NONE] -->
@@ -3153,9 +3153,9 @@
     <string name="wrong_pin_code_pukked">Incorrect SIM PIN code you must now contact your carrier to unlock your device.</string>
     <!-- Instructions telling the user that they entered the wrong SIM PIN while trying to unlock the keyguard.  Displayed in a dialog box.  [CHAR LIMIT=100] -->
     <string name="wrong_pin_code">{count, plural,
-      =1      {Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.}
-      other   {Incorrect SIM PIN code, you have # remaining attempts.}
-    }</string>
+        =1      {Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.}
+        other   {Incorrect SIM PIN code, you have # remaining attempts.}
+        }</string>
 
     <!-- This is instruction text to inform the user that they have entered the wrong SIM PIN while trying to unlock the keyguard.
          The variable will be replaced with a number. [CHAR LIMIT=NONE] -->
@@ -3324,27 +3324,27 @@
 
     <!-- Dialog body informing user about an unmountable storage device. [CHAR LIMIT=NONE]-->
     <string name="storage_dialog_unmountable">This <xliff:g id="name" example="SD card">^1</xliff:g> is corrupted.
-\n\nTo use this <xliff:g id="name" example="SD card">^1</xliff:g>, you have to set it up first.</string>
+        \n\nTo use this <xliff:g id="name" example="SD card">^1</xliff:g>, you have to set it up first.</string>
 
     <!-- Body of dialog informing user about consequences of formatting an internal storage device [CHAR LIMIT=NONE]-->
     <string name="storage_internal_format_details">You can format this SD card to store photos, videos, music,
         and more and access them on other devices.
         \n\n<b>All data on this SD card will be erased.</b>
         \n\n<b>Before formatting</b>
-\n\n<b>Back up photos &amp; other media</b>
-\nMove your media files to alternative storage on this device, or transfer them to a computer using a USB cable.
-\n\n<b>Back up apps</b>
-\nAll apps stored on this <xliff:g id="name" example="SD card">^1</xliff:g> will be uninstalled and their data will be erased. To keep these apps, move them to alternative storage on this device.</string>
+        \n\n<b>Back up photos &amp; other media</b>
+        \nMove your media files to alternative storage on this device, or transfer them to a computer using a USB cable.
+        \n\n<b>Back up apps</b>
+        \nAll apps stored on this <xliff:g id="name" example="SD card">^1</xliff:g> will be uninstalled and their data will be erased. To keep these apps, move them to alternative storage on this device.</string>
 
     <!-- Body of dialog informing user about consequences of ejecting an internal storage device [CHAR LIMIT=NONE]-->
     <string name="storage_internal_unmount_details"><b>When you eject this <xliff:g id="name" example="SD card">^1</xliff:g>, apps stored on it will stop working, and media files stored on it will not be available until it is reinserted.</b>
-\n\nThis <xliff:g id="name" example="SD card">^1</xliff:g> is formatted to work on this device only.  It won\u2019t work on any others.</string>
+        \n\nThis <xliff:g id="name" example="SD card">^1</xliff:g> is formatted to work on this device only.  It won\u2019t work on any others.</string>
 
     <!-- Body of dialog informing user about consequences of forgetting an internal storage device [CHAR LIMIT=NONE]-->
     <string name="storage_internal_forget_details">To use the apps, photos, or data this <xliff:g id="name" example="SD card">^1</xliff:g> contains, reinsert it.
-\n\nAlternatively, you can choose to forget this storage if the device isn\u2019t available.
-\n\nIf you choose to forget, all the data the device contains will be lost forever.
-\n\nYou can reinstall the apps later, but their data stored on this device will be lost.</string>
+        \n\nAlternatively, you can choose to forget this storage if the device isn\u2019t available.
+        \n\nIf you choose to forget, all the data the device contains will be lost forever.
+        \n\nYou can reinstall the apps later, but their data stored on this device will be lost.</string>
 
     <!-- Title of dialog confirming that user wants to forget an internal storage device [CHAR LIMIT=32]-->
     <string name="storage_internal_forget_confirm_title">Forget <xliff:g id="name" example="SD card">^1</xliff:g>?</string>
@@ -3378,7 +3378,7 @@
     <string name="storage_wizard_move_confirm_title">Move <xliff:g id="app" example="Calculator">^1</xliff:g></string>
     <!-- Body of wizard step prompting user to move an app [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_move_confirm_body">Moving <xliff:g id="app" example="Calculator">^1</xliff:g> and its data to <xliff:g id="name" example="SD card">^2</xliff:g> will take only a few moments. You won\u2019t be able to use the app until the move is complete.
-\n\nDon\u2019t remove the <xliff:g id="name" example="SD card">^2</xliff:g> during the move.
+        \n\nDon\u2019t remove the <xliff:g id="name" example="SD card">^2</xliff:g> during the move.
     </string>
 
     <!-- Body of lock screen challenge message explaining that the given user must be unlocked before data can be moved [CHAR LIMIT=64] -->
@@ -3388,7 +3388,7 @@
     <string name="storage_wizard_move_progress_title">Moving <xliff:g id="app" example="Calculator">^1</xliff:g>\u2026</string>
     <!-- Body of wizard step showing app move progress [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_move_progress_body">Don\u2019t remove the <xliff:g id="name" example="SD card">^1</xliff:g> during the move.
-\n\nThe <xliff:g id="app" example="Calculator">^2</xliff:g> app on this device won\u2019t be available until the move is complete.
+        \n\nThe <xliff:g id="app" example="Calculator">^2</xliff:g> app on this device won\u2019t be available until the move is complete.
     </string>
 
     <!-- This is the title of a full-screen message. After this question, the user will get to choose how they want to use the storage device that they have in their phone. The placeholder is for the specific device (e.g. SD card, USB drive, etc.). [CHAR LIMIT=32] -->
@@ -3408,7 +3408,7 @@
     <string name="storage_wizard_format_confirm_v2_title">Format this <xliff:g id="name" example="SD card">^1</xliff:g>?</string>
     <!-- Body of a dialog. This text is confirming that the user wants to use their SD card as extra phone storage, but the formatting process will erase existing content on the card. The first placeholder is for the name of the device (e.g. a brand name of the SD card or USB drive). The second and third placeholders are for the general references (e.g. SD card, USB drive). [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_format_confirm_v2_body">This <xliff:g id="name" example="SanDisk SD card">^1</xliff:g> needs to be formatted to store apps, files, and media.
-\n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
+        \n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
     <!-- Body of a dialog. This text is confirming that the user wants to use their SD card as portable storage, but the formatting process will erase existing content on the card. The first placeholder is for the name of the device (e.g. a brand name of the SD card or USB drive). The second and third placeholders are for the general references (e.g. SD card, USB drive). [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_format_confirm_v2_body_external">This <xliff:g id="name" example="SanDisk SD card">^1</xliff:g> needs to be formatted to store photos, videos, music, and more.
         \n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
@@ -3437,8 +3437,8 @@
     <string name="storage_wizard_slow_v2_title">Slow <xliff:g id="name" example="SD card">^1</xliff:g></string>
     <!-- Strings that are part of a full-screen message. These strings let the user know that their storage device is slow, and include some options they can try. The first placeholder is for the name of the storage device (e.g. brand name of the SD card), and the second and third placeholders are for the general references (e.g. SD card, USB drive, etc.). [CHAR LIMIT=NONE] -->
     <string name="storage_wizard_slow_v2_body">You can still use this <xliff:g id="name" example="SanDisk SD card">^1</xliff:g>, but it may be slow.
-\n\nApps stored on this <xliff:g id="name" example="SD card">^2</xliff:g> may not work properly, and content transfers could take a long time.
-\n\nTry using a faster <xliff:g id="name" example="SD card">^3</xliff:g>, or use this <xliff:g id="name" example="SD card">^4</xliff:g> for portable storage instead.</string>
+        \n\nApps stored on this <xliff:g id="name" example="SD card">^2</xliff:g> may not work properly, and content transfers could take a long time.
+        \n\nTry using a faster <xliff:g id="name" example="SD card">^3</xliff:g>, or use this <xliff:g id="name" example="SD card">^4</xliff:g> for portable storage instead.</string>
     <!-- Action of a dialog. This action will start the wizard from the beginning, letting the user make an alternative choice. [CHAR LIMIT=32] -->
     <string name="storage_wizard_slow_v2_start_over">Start over</string>
     <!-- Action of a dialog. This action will continue the wizard, meaning the user acknowledges their card is slow. [CHAR LIMIT=32] -->
@@ -3753,9 +3753,9 @@
 
     [CHAR LIMIT=NONE]-->
     <string name="location_app_permission_summary_location_on">{count, plural,
-      =1      {# of {total} apps has access to location}
-      other   {# of {total} apps have access to location}
-    }</string>
+        =1      {# of {total} apps has access to location}
+        other   {# of {total} apps have access to location}
+        }</string>
     <!-- [CHAR LIMIT=50] Location settings screen, sub category for recent location access -->
     <string name="location_category_recent_location_access">Recent access</string>
     <!-- Location settings screen, displayed when there're more than three recent location access apps [CHAR LIMIT=30] -->
@@ -4141,9 +4141,9 @@
     <string name="recent_app_category_title">Recently opened apps</string>
     <!-- Preference title for showing all apps on device [CHAR_LIMIT=50]-->
     <string name="see_all_apps_title">{count, plural,
-      =1      {See all apps}
-      other   {See all # apps}
-    }</string>
+        =1      {See all apps}
+        other   {See all # apps}
+        }</string>
 
     <!-- Title of the dialog that asks the user to contact the IT admin to reset password [CHAR LIMIT=40] -->
     <string name="forgot_password_title">Contact your IT admin</string>
@@ -4174,9 +4174,9 @@
     <string name="cache_size_label">Cache</string>
     <!-- Manage applications, individual application info storage screen. Describes the number of URIs (directories or files) an app has been granted access (by another apps)-->
     <string name="uri_permissions_text">{count, plural,
-      =1      {1 item}
-      other   {# items}
-    }</string>
+        =1      {1 item}
+        other   {# items}
+        }</string>
     <!-- Manage applications, individual application info storage screen. Button below list of URIs. -->
     <string name="clear_uri_btn_text">Clear access</string>
     <!-- Manage applications, Header name used for other controls -->
@@ -4229,7 +4229,7 @@
     <string name="clear_activities">Clear default preferences</string>
     <!-- Manage applications, individual application info screen, screen, message text under screen compatibility heading -->
     <string name="screen_compatibility_text">This app may not be designed for your screen. You can control how it
-            adjusts to your screen here.</string>
+        adjusts to your screen here.</string>
     <!-- Manage applications, individual application screen, checkbox to control asking for compatibility mode.  -->
     <string name="ask_compatibility">Ask when launched</string>
     <!-- Manage applications, individual application screen, checkbox to control compatibility mode.  -->
@@ -4493,10 +4493,10 @@
     <!-- Warning message about security implications of enabling a spell checker, displayed as a dialog
          message when the user selects to enable a spell checker. -->
     <string name="spellchecker_security_warning">This spell checker may be able to collect
-    all the text you type, including personal data like passwords and credit
-    card numbers.  It comes from the app
-    <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
-    Use this spell checker?</string>
+        all the text you type, including personal data like passwords and credit
+        card numbers.  It comes from the app
+        <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
+        Use this spell checker?</string>
     <!-- Image button description for spell checker quick settings. -->
     <string name="spellchecker_quick_settings">Settings</string>
     <!-- Image button description for spell checker language. -->
@@ -4546,6 +4546,8 @@
     <string name="sticky_keys_summary">Press one key at a time for shortcuts instead of holding keys down together</string>
     <!-- Title for a toggle switch for 'mouse' keys,  an accessibility setting that allows the mouse pointer to be controlled using certain keys on a physical keyboard if keyboard is connected. [CHAR LIMIT=35] -->
     <string name="mouse_keys">Mouse keys</string>
+    <!-- Title for a toggle switch for 'mouse' keys under mouse key main page,  an accessibility setting that allows the mouse pointer to be controlled using certain keys on a physical keyboard if keyboard is connected. [CHAR LIMIT=35] -->
+    <string name="mouse_keys_main_title">Use mouse keys</string>
     <!-- Summary text for the accessibility setting 'Mouse keys' preference sub-screen. [CHAR LIMIT=100] -->
     <string name="mouse_keys_summary">Use your keyboard to control the pointer</string>
     <!-- Title for the 'Mouse reverse scrolling' preference switch, which reverses the direction of mouse scroll wheels so that moving the wheel up scrolls the content down. [CHAR LIMIT=60] -->
@@ -4556,6 +4558,21 @@
     <string name="mouse_swap_primary_button">Swap left and right buttons</string>
     <!-- Summary text for the 'Swap buttons' preference switch indicating to users that when this switch is enabled, their left click will behave as though it is the right click (secondary action) and that the right click will be the primary action. [CHAR LIMIT=NONE] -->
     <string name="mouse_swap_primary_button_summary">Use the left mouse button as your right</string>
+    <!-- page title for Mouse key main page. [CHAR LIMIT=NONE] -->
+    <string name="mouse_key_main_page_title">Mouse keys for <xliff:g id="keyboard name" example="my keyboard">%s</xliff:g></string>
+    <!-- Summary text for Mouse keys directional image. [CHAR LIMIT=NONE] -->
+    <string name="mouse_keys_directional_summary">Use the \“<xliff:g id="directional_label" example="7,8,9,u,o,j,k,l">%s</xliff:g>\” keys to move the mouse pointer</string>
+    <!-- Summary text for Mouse keys click image. [CHAR LIMIT=NONE] -->
+    <string name="mouse_keys_click_summary">Use the \“<xliff:g id="click_label" example="i">%s</xliff:g>\” key to click the primary mouse button</string>
+    <!-- Summary text for Mouse keys press hold image. [CHAR LIMIT=NONE] -->
+    <string name="mouse_keys_press_hold_summary">Use the \“<xliff:g id="press_hold_label" example="m">%s</xliff:g>\” key to press &amp; hold the primary mouse button</string>
+    <!-- Summary text for Mouse keys release image. [CHAR LIMIT=NONE] -->
+    <string name="mouse_keys_release_summary">Use the \“<xliff:g id="release_label" example=",">%s</xliff:g>\” key to release the primary mouse button</string>
+    <!-- Summary text for Mouse keys toggle scroll image. [CHAR LIMIT=NONE] -->
+    <string name="mouse_keys_toggle_scroll_summary">Use the \“<xliff:g id="release_label_1" example=".">%1$s</xliff:g>\” key to toggle scroll mode. This will make the \“<xliff:g id="release_label_2" example="8, k, o, u">%2$s</xliff:g>\” keys scroll the view top, down, left or right</string>
+    <!-- Summary text for Mouse keys click secondary button image. [CHAR LIMIT=NONE] -->
+    <string name="mouse_keys_release2_summary">Use the \“<xliff:g id="release_2_label" example="/">%s</xliff:g>\” key to click the secondary mouse button</string>
+
     <!-- Title for the button to trigger the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=35] -->
     <string name="keyboard_shortcuts_helper">Keyboard shortcuts</string>
     <!-- Summary text for the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=100] -->
@@ -5139,18 +5156,18 @@
     <string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction">To start and stop magnification, quickly tap the screen twice with %1$d fingers</string>
     <!-- Instruction for the accessibility tutorial dialog in accessibility service with quick settings shortcut. [CHAR LIMIT=NONE]-->
     <string name="accessibility_tutorial_dialog_message_quick_setting">{count, plural,
-      =1    {To use this feature, swipe down from the top of your screen. Then, find the {featureName} tile.}
-      other {To use this feature, swipe down from the top of your screen with # fingers. Then, find the {featureName} tile.}
-    }</string>
+        =1    {To use this feature, swipe down from the top of your screen. Then, find the {featureName} tile.}
+        other {To use this feature, swipe down from the top of your screen with # fingers. Then, find the {featureName} tile.}
+        }</string>
     <!-- Warning for the accessibility shortcut type that is not available immediately during device setup when chosen, but will be available after setup. [CHAR LIMIT=NONE]-->
     <string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw">This shortcut will be available after you finish device setup.</string>
     <!-- Message for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation and touch exploration is not enabled. [CHAR LIMIT=NONE] -->
     <string name="accessibility_tutorial_dialog_message_gesture">To use this feature, swipe up from the bottom of the screen with 2 fingers.\n\nTo switch between features, swipe up with 2 fingers and hold.</string>
     <!-- Instruction for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation. [CHAR LIMIT=NONE] -->
     <string name="accessibility_tutorial_dialog_gesture_shortcut_instruction">{count, plural,
-      =1    {To use this feature, swipe up from the bottom of your screen}
-      other {To use this feature, swipe up with # fingers from the bottom of your screen}
-    }</string>
+        =1    {To use this feature, swipe up from the bottom of your screen}
+        other {To use this feature, swipe up with # fingers from the bottom of your screen}
+        }</string>
     <!-- Message for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation and touch exploration is enabled. [CHAR LIMIT=NONE] -->
     <string name="accessibility_tutorial_dialog_message_gesture_talkback">To use this feature, swipe up from the bottom of the screen with 3 fingers.\n\nTo switch between features, swipe up with 3 fingers and hold.</string>
     <!-- Message for the accessibility tutorial dialog when user chooses gesture navigation in navigation settings, an accessibility service is using the accessibility button, and touch exploration is disabled. [CHAR LIMIT=NONE] -->
@@ -5183,9 +5200,9 @@
     <string name="accessibility_shortcut_edit_dialog_summary_software">Tap the accessibility button <xliff:g id="accessibility_icon" example="[Icon]">%s</xliff:g> at the bottom of your screen. To switch between features, touch &amp; hold the accessibility button.</string>
     <!-- Summary for gesture shortcut option -->
     <string name="accessibility_shortcut_edit_dialog_summary_gesture">{count, plural,
-      =1      {Swipe up from the bottom of your screen. To switch between features, swipe up and hold.}
-      other   {Swipe up with # fingers from the bottom of your screen. To switch between features, swipe up with # fingers and hold.}
-    }</string>
+        =1      {Swipe up from the bottom of your screen. To switch between features, swipe up and hold.}
+        other   {Swipe up with # fingers from the bottom of your screen. To switch between features, swipe up with # fingers and hold.}
+        }</string>
     <!-- Summary for software shortcut in accessibility edit shortcut dialog when user had enabled the accessibility floating button mode (Floating over other apps). [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_edit_dialog_summary_software_floating"><annotation id="link">More options</annotation></string>
     <!-- Footer to show help link content description. [CHAR LIMIT=NONE] -->
@@ -5194,14 +5211,14 @@
     <string name="accessibility_shortcut_edit_dialog_title_quick_settings">Quick Settings</string>
     <!-- Summary for quick settings shortcut option in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_edit_dialog_summary_quick_settings">{count, plural,
-      =1      {Swipe down from the top of your screen}
-      other   {Swipe down with # fingers from the top of your screen}
-    }</string>
+        =1      {Swipe down from the top of your screen}
+        other   {Swipe down with # fingers from the top of your screen}
+        }</string>
     <!-- Summary for quick settings shortcut option in accessibility edit shortcut dialog in Setup Wizard. [CHAR LIMIT=NONE] -->
     <string name="accessibility_shortcut_edit_dialog_summary_quick_settings_suw">{count, plural,
-      =1      {Swipe down from the top of your screen. This shortcut will be available after you finish device setup.}
-      other   {Swipe down with # fingers from the top of your screen. This shortcut will be available after you finish device setup.}
-    }</string>
+        =1      {Swipe down from the top of your screen. This shortcut will be available after you finish device setup.}
+        other   {Swipe down with # fingers from the top of your screen. This shortcut will be available after you finish device setup.}
+        }</string>
     <!-- Shown as one of the item in the chosen accessibility shortcut types list presented as a label next to the shortcut toggle. [CHAR LIMIT=NONE] -->
     <string name="accessibility_feature_shortcut_setting_summary_quick_settings">Quick Settings</string>
     <!-- Title for hardware shortcut in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
@@ -5621,25 +5638,25 @@
 
     <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
     <string name="accessibilty_autoclick_preference_subtitle_short_delay">{count, plural,
-      =1      {Short ({time} second)}
-      other   {Short ({time} seconds)}
-    }</string>
+        =1      {Short ({time} second)}
+        other   {Short ({time} seconds)}
+        }</string>
     <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
     <string name="accessibilty_autoclick_preference_subtitle_medium_delay">{count, plural,
-      =1      {Medium ({time} second)}
-      other   {Medium ({time} seconds)}
-    }</string>
+        =1      {Medium ({time} second)}
+        other   {Medium ({time} seconds)}
+        }</string>
     <!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
     <string name="accessibilty_autoclick_preference_subtitle_long_delay">{count, plural,
-      =1      {Long ({time} second)}
-      other   {Long ({time} seconds)}
-    }</string>
+        =1      {Long ({time} second)}
+        other   {Long ({time} seconds)}
+        }</string>
 
     <!-- Summary for autoclick seekbar settings preference when user selected custom item. [CHAR LIMIT=35] -->
     <string name="accessibilty_autoclick_delay_unit_second">{count, plural,
-      =1      {{time} second}
-      other   {{time} seconds}
-    }</string>
+        =1      {{time} second}
+        other   {{time} seconds}
+        }</string>
 
     <!-- Title for accessibility menu item to launch a settings activity. [CHAR LIMIT=15] -->
     <string name="accessibility_menu_item_settings">Settings</string>
@@ -5801,15 +5818,15 @@
     <string name="print_settings_summary_no_service">Off</string>
 
     <string name="print_settings_summary">{count, plural,
-      =1      {1 print service on}
-      other   {# print services on}
-    }</string>
+        =1      {1 print service on}
+        other   {# print services on}
+        }</string>
 
     <!-- Print setting summary in settings screenm indicating how many print jobs are active [CHAR LIMIT=None] -->
     <string name="print_jobs_summary">{count, plural,
-      =1      {1 print job}
-      other   {# print jobs}
-    }</string>
+        =1      {1 print job}
+        other   {# print jobs}
+        }</string>
 
     <!-- Title for print service settings screen [CHAR LIMIT=25] -->
     <string name="print_settings_title">Print services</string>
@@ -5894,7 +5911,7 @@
     <string name="power_usage_summary">What has been using the battery</string>
     <!-- Display the battery level and status [CHAR_LIMIT=60] -->
     <string name="power_usage_level_and_status"><xliff:g id="level">%1$s</xliff:g>
-            - <xliff:g id="status">%2$s</xliff:g></string>
+        - <xliff:g id="status">%2$s</xliff:g></string>
     <!-- Display time remaining until battery is discharged [CHAR_LIMIT=60] -->
     <string name="power_discharge_remaining"><xliff:g id="remain">%1$s</xliff:g> remaining</string>
     <!-- Display time remaining until battery is charged [CHAR_LIMIT=60] -->
@@ -6012,30 +6029,30 @@
     <string name="battery_tip_dialog_message_footer">Includes high-power background activity</string>
     <!-- Title for restricted app preference, showing how many app need to be restricted [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_title">{count, plural,
-      =1      {Restrict # app}
-      other   {Restrict # apps}
-    }</string>
+        =1      {Restrict # app}
+        other   {Restrict # apps}
+        }</string>
     <!-- Title for restricted app preference, showing how many app been restricted [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_handled_title">{count, plural,
-      =1      {{label} recently restricted}
-      other   {# apps recently restricted}
-    }</string>
+        =1      {{label} recently restricted}
+        other   {# apps recently restricted}
+        }</string>
     <!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_summary">{count, plural,
-      =1      {{label} has high background battery usage}
-      other   {# apps have high background battery usage}
-    }</string>
+        =1      {{label} has high background battery usage}
+        other   {# apps have high background battery usage}
+        }</string>
     <!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_handled_summary">{count, plural,
-      =1      {This app can\'t run in the background}
-      other   {These apps can\'t run in the background}
-    }</string>
+        =1      {This app can\'t run in the background}
+        other   {These apps can\'t run in the background}
+        }</string>
 
     <!-- Title for dialog to restrict the app [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_app_dialog_title">{count, plural,
-      =1      {Restrict app?}
-      other   {Restrict # apps?}
-    }</string>
+        =1      {Restrict app?}
+        other   {Restrict # apps?}
+        }</string>
     <!-- Message for battery tip dialog to show the info to restrict the app [CHAR LIMIT=NONE] -->
     <string name="battery_tip_restrict_app_dialog_message">To save battery, stop <xliff:g id="app">%1$s</xliff:g> from using battery in the background. This app may not work properly and notifications may be delayed.</string>
     <!-- Message for battery tip dialog to show the info to restrict the app, below it app list will be shown as a view [CHAR LIMIT=NONE] -->
@@ -6069,9 +6086,9 @@
     <string name="restricted_app_title">Restricted apps</string>
     <!-- Summary for restricted app preference, clicking it will goes to restricted app list [CHAR LIMIT=NONE] -->
     <string name="restricted_app_summary">{count, plural,
-      =1      {Limiting battery usage for # app}
-      other   {Limiting battery usage for # apps}
-    }</string>
+        =1      {Limiting battery usage for # app}
+        other   {Limiting battery usage for # apps}
+        }</string>
 
     <!-- Summary for restricted app to show the restriction time [CHAR LIMIT=NONE] -->
     <string name="restricted_app_time_summary">Restricted <xliff:g id="time" example="5 days ago">%1$s</xliff:g></string>
@@ -6091,9 +6108,9 @@
 
     <!-- Summary for battery manager, showing app restricted -->
     <string name="battery_manager_app_restricted">{count, plural,
-      =1      {# app restricted}
-      other   {# apps restricted}
-    }</string>
+        =1      {# app restricted}
+        other   {# apps restricted}
+        }</string>
 
     <!-- Summary for top level battery tile if battery is not present. [CHAR LIMIT=NONE] -->
     <string name="battery_missing_message">Problem reading the battery meter.</string>
@@ -6581,9 +6598,9 @@
     <string name="remove_credential_management_app_dialog_message">This app won\u2019t manage certificates, but it will stay on your device. Any certificates installed by the app will be uninstalled.</string>
     <!-- List item found in the credential management app's authentication policy [CHAR LIMIT=NONE] -->
     <string name="number_of_urls">{count, plural,
-      =1      {# URL}
-      other   {# URLs}
-    }</string>
+        =1      {# URL}
+        other   {# URLs}
+        }</string>
 
     <!-- Sound settings screen, setting check box label -->
     <string name="emergency_tone_title">Emergency dialing signal</string>
@@ -6685,9 +6702,9 @@
 
     <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
     <string name="notification_history_count">{count, plural,
-      =1      {# notification}
-      other   {# notifications}
-    }</string>
+        =1      {# notification}
+        other   {# notifications}
+        }</string>
 
     <!-- Category title for phone call's ringtone and vibration settings in the Sound Setting.
          [CHAR LIMIT=40] -->
@@ -7108,9 +7125,9 @@
     <string name="done_button">Done</string>
     <!-- Title of Dialog warning users of SSL monitoring. [CHAR LIMIT=NONE] -->
     <string name="ssl_ca_cert_dialog_title">{count, plural,
-      =1      {Trust or remove certificate}
-      other   {Trust or remove certificates}
-    }</string>
+        =1      {Trust or remove certificate}
+        other   {Trust or remove certificates}
+        }</string>
     <!-- Text of message to show to device owner user whose administrator has installed a SSL CA Cert.  [CHAR LIMIT=NONE] -->
     <string name="ssl_ca_cert_info_message_device_owner"> {numberOfCertificates, plural,
         =1 {{orgName} has installed a certificate authority on your device, which may allow them to monitor your device network activity, including emails, apps, and secure websites.\n\nFor more information about this certificate, contact your admin.}
@@ -7125,9 +7142,9 @@
     <string name="ssl_ca_cert_warning_message">A third party is capable of monitoring your network activity, including emails, apps, and secure websites.\n\nA trusted credential installed on your device is making this possible.</string>
     <!-- Label on button that will take the user to the Trusted Credentials settings page.  [CHAR LIMIT=NONE]-->
     <string name="ssl_ca_cert_settings_button">{count, plural,
-      =1      {Check certificate}
-      other   {Check certificates}
-    }</string>
+        =1      {Check certificate}
+        other   {Check certificates}
+        }</string>
 
     <!-- User settings screen title [CHAR LIMIT=40] -->
     <string name="user_settings_title">Users</string>
@@ -8085,9 +8102,9 @@
     <!-- Zen Modes: Summary for the Do not Disturb option that describes how many automatic rules (schedules) are enabled [CHAR LIMIT=NONE]-->
     <string name="zen_mode_settings_schedules_summary">
         {count, plural,
-            =0    {None}
-            =1    {1 schedule set}
-            other {# schedules set}
+        =0    {None}
+        =1    {1 schedule set}
+        other {# schedules set}
         }
     </string>
 
@@ -8123,20 +8140,20 @@
     <!-- Modes: Summary for the modes segment, when at least one mode is active. [CHAR LIMIT=NONE]-->
     <string name="zen_modes_summary_some_active">
         {count, plural, offset:2
-            =0    {}
-            =1    {{mode_1} is active}
-            =2    {{mode_1} and {mode_2} are active}
-            =3    {{mode_1}, {mode_2}, and {mode_3} are active}
-            other {{mode_1}, {mode_2}, and # more are active}
+        =0    {}
+        =1    {{mode_1} is active}
+        =2    {{mode_1} and {mode_2} are active}
+        =3    {{mode_1}, {mode_2}, and {mode_3} are active}
+        other {{mode_1}, {mode_2}, and # more are active}
         }
     </string>
 
     <!-- Modes: Summary for the modes segment, when no modes are active. [CHAR LIMIT=NONE]-->
     <string name="zen_modes_summary_none_active">
         {count, plural,
-            =0    {}
-            =1    {1 mode can turn on automatically}
-            other {# modes can turn on automatically}
+        =0    {}
+        =1    {1 mode can turn on automatically}
+        other {# modes can turn on automatically}
         }
     </string>
 
@@ -8437,25 +8454,25 @@
     <!--  Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when dnd is manually toggled on [CHAR LIMIT=NONE] -->
     <string name="zen_mode_duration_summary_time_hours">
         {count, plural,
-            =1    {1 hour}
-            other {# hours}
+        =1    {1 hour}
+        other {# hours}
         }
     </string>
 
     <!--  Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when toggled on -->
     <string name="zen_mode_duration_summary_time_minutes">
         {count, plural,
-            =1    {1 minute}
-            other {# minutes}
+        =1    {1 minute}
+        other {# minutes}
         }
     </string>
 
     <!-- Summary for the Sound Do not Disturb option when DND isn't currently on. [CHAR LIMIT=NONE]-->
     <string name="zen_mode_sound_summary_off">
         {count, plural,
-            =0    {Off}
-            =1    {Off / 1 schedule can turn on automatically}
-            other {Off / # schedules can turn on automatically}
+        =0    {Off}
+        =1    {Off / 1 schedule can turn on automatically}
+        other {Off / # schedules can turn on automatically}
         }
     </string>
 
@@ -8798,9 +8815,9 @@
 
     <!-- [CHAR LIMIT=100] summary text on link to 'all conversations' page, some conversations are priority -->
     <string name="priority_conversation_count">{count, plural,
-      =1      {# priority conversation}
-      other   {# priority conversations}
-    }</string>
+        =1      {# priority conversation}
+        other   {# priority conversations}
+        }</string>
 
     <!-- [CHAR LIMIT=100] preference category title -->
     <string name="important_conversations">Priority conversations</string>
@@ -8897,13 +8914,13 @@
 
     <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
     <string name="notifications_sent_daily">{count, plural,
-      =1      {About # notification per day}
-      other   {About # notifications per day}
-    }</string>
+        =1      {About # notification per day}
+        other   {About # notifications per day}
+        }</string>
     <string name="notifications_sent_weekly">{count, plural,
-      =1      {About # notification per week}
-      other   {About # notifications per week}
-    }</string>
+        =1      {About # notification per week}
+        other   {About # notifications per week}
+        }</string>
     <!-- app summary of notification app list screen [CHAR LIMIT=100] -->
     <string name="notifications_sent_never">Never</string>
 
@@ -8943,7 +8960,7 @@
     <!-- Title for a warning message about security implications of enabling a notification
           listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
     <string name="notification_listener_security_warning_title">Allow notification access for
-         <xliff:g id="service" example="NotificationReader">%1$s</xliff:g>?</string>
+        <xliff:g id="service" example="NotificationReader">%1$s</xliff:g>?</string>
     <!-- Summary for a warning message about security implications of enabling a notification
           listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
     <string name="notification_listener_security_warning_summary">
@@ -9007,7 +9024,7 @@
     <!-- Title for a warning message about security implications of enabling a VR
           listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
     <string name="vr_listener_security_warning_title">Allow VR service access for
-         <xliff:g id="service" example="VrCore">%1$s</xliff:g>?</string>
+        <xliff:g id="service" example="VrCore">%1$s</xliff:g>?</string>
     <!-- Summary for a warning message about security implications of enabling a VR
           listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
     <string name="vr_listener_security_warning_summary">
@@ -9114,9 +9131,9 @@
 
     <!-- Summary of preference to manage connected work and personal apps, informing the user how many apps are connected -->
     <string name="interact_across_profiles_number_of_connected_apps">{count, plural,
-      =1      {# app connected}
-      other   {# apps connected}
-    }</string>
+        =1      {# app connected}
+        other   {# apps connected}
+        }</string>
 
     <!-- Banner title. This banner lets a user know that they need to install an app in their
     work profile in order to connect it to the corresponding personal app.
@@ -9188,9 +9205,9 @@
 
     <!-- [CHAR LIMIT=NONE] Footer listing a count of deleted channels. -->
     <string name="deleted_channels">{count, plural,
-      =1      {# category deleted}
-      other   {# categories deleted}
-    }</string>
+        =1      {# category deleted}
+        other   {# categories deleted}
+        }</string>
 
     <!-- [CHAR LIMIT=NONE] App notification settings: Block option title -->
     <string name="app_notification_block_title">Block all</string>
@@ -9351,9 +9368,9 @@
     <!-- [CHAR LIMIT=NONE] Zen mode settings: Number of conversations allowed to bypass DND -->
     <string name="zen_mode_conversations_count">
         {count, plural,
-            =0    {None}
-            =1    {1 conversation}
-            other {# conversations}
+        =0    {None}
+        =1    {1 conversation}
+        other {# conversations}
         }
     </string>
 
@@ -9385,11 +9402,11 @@
     <!-- Zen mode settings: Starred contacts summary [CHAR LIMIT=NONE] -->
     <string name="zen_mode_starred_contacts_summary_contacts">
         {count, plural, offset:2
-            =0    {None}
-            =1    {{contact_1}}
-            =2    {{contact_1} and {contact_2}}
-            =3    {{contact_1}, {contact_2}, and {contact_3}}
-            other {{contact_1}, {contact_2}, and # others}
+        =0    {None}
+        =1    {{contact_1}}
+        =2    {{contact_1} and {contact_2}}
+        =3    {{contact_1}, {contact_2}, and {contact_3}}
+        other {{contact_1}, {contact_2}, and # others}
         }
     </string>
 
@@ -9416,9 +9433,9 @@
     <!-- Zen mode settings: Senders in contacts can bypass DND summary summary [CHAR LIMIT=NONE] -->
     <string name="zen_mode_contacts_count">
         {count, plural,
-            =0    {None}
-            =1    {1 contact}
-            other {# contacts}
+        =0    {None}
+        =1    {1 contact}
+        other {# contacts}
         }
     </string>
     <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From anyone -->
@@ -9494,11 +9511,11 @@
     <!-- [CHAR LIMIT=NONE] Zen mode settings: Lists apps that can bypass DND. For example, "Nest, Messages, and 2 more can interrupt". -->
     <string name="zen_mode_apps_subtext">
         {count, plural, offset:2
-            =0    {No apps can interrupt}
-            =1    {{app_1} can interrupt}
-            =2    {{app_1} and {app_2} can interrupt}
-            =3    {{app_1}, {app_2}, and {app_3} can interrupt}
-            other {{app_1}, {app_2}, and # more can interrupt}
+        =0    {No apps can interrupt}
+        =1    {{app_1} can interrupt}
+        =2    {{app_1} and {app_2} can interrupt}
+        =3    {{app_1}, {app_2}, and {app_3} can interrupt}
+        other {{app_1}, {app_2}, and # more can interrupt}
         }
     </string>
     <!-- Modes: Entry in the "apps that can bypass DND" list that corresponds to a work profile app (e.g. "Chrome (Work)" [CHAR LIMIT=15]. -->
@@ -9533,11 +9550,11 @@
     <!-- [CHAR LIMIT=NONE] Zen mode settings: Lists apps that can bypass DND. For example, "Nest, Messages, and 2 more can interrupt". -->
     <string name="zen_mode_bypassing_apps_subtext">
         {count, plural, offset:2
-            =0    {No apps can interrupt}
-            =1    {{app_1} can interrupt}
-            =2    {{app_1} and {app_2} can interrupt}
-            =3    {{app_1}, {app_2}, and {app_3} can interrupt}
-            other {{app_1}, {app_2}, and # more can interrupt}
+        =0    {No apps can interrupt}
+        =1    {{app_1} can interrupt}
+        =2    {{app_1} and {app_2} can interrupt}
+        =3    {{app_1}, {app_2}, and {app_3} can interrupt}
+        other {{app_1}, {app_2}, and # more can interrupt}
         }
     </string>
     <!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND title-->
@@ -9551,11 +9568,11 @@
     <!-- [CHAR LIMIT=NONE] Zen mode settings: Summary for sound interruption settings -->
     <string name="zen_mode_other_sounds_summary">
         {count, plural, offset:2
-            =0    {Nothing can interrupt}
-            =1    {{sound_category_1} can interrupt}
-            =2    {{sound_category_1} and {sound_category_2} can interrupt}
-            =3    {{sound_category_1}, {sound_category_2}, and {sound_category_3} can interrupt}
-            other {{sound_category_1}, {sound_category_2}, and # more can interrupt}
+        =0    {Nothing can interrupt}
+        =1    {{sound_category_1} can interrupt}
+        =2    {{sound_category_1} and {sound_category_2} can interrupt}
+        =3    {{sound_category_1}, {sound_category_2}, and {sound_category_3} can interrupt}
+        other {{sound_category_1}, {sound_category_2}, and # more can interrupt}
         }
     </string>
     <!-- [CHAR LIMIT=120] Zen mode settings: No sounds are allowed to bypass DND -->
@@ -9599,14 +9616,14 @@
     <string name="zen_mode_summary_alarms_only_indefinite">Change to alarms only indefinitely</string>
     <!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only for < 60 minutes. -->
     <string name="zen_mode_summary_alarms_only_by_minute">{count, plural,
-      =1      {Change to alarms only for one minute until {time}}
-      other   {Change to alarms only for # minutes (until {time})}
-    }</string>
+        =1      {Change to alarms only for one minute until {time}}
+        other   {Change to alarms only for # minutes (until {time})}
+        }</string>
     <!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only for N hours. -->
     <string name="zen_mode_summary_alarms_only_by_hour">{count, plural,
-      =1      {Change to alarms only for one hour until {time}}
-      other   {Change to alarms only for # hours until {time}}
-    }</string>
+        =1      {Change to alarms only for one hour until {time}}
+        other   {Change to alarms only for # hours until {time}}
+        }</string>
     <!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only until a specific time. -->
     <string name="zen_mode_summary_alarms_only_by_time">Change to alarms only until <xliff:g id="formattedTime" example="10:00 PM">%1$s</xliff:g></string>
     <!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: Turn on all notifications. -->
@@ -9828,13 +9845,13 @@
 
     <!-- Title, message and button for verified links dialog. -->
     <string name="app_launch_verified_links_title">{count, plural,
-      =1      {# verified link}
-      other   {# verified links}
-    }</string>
+        =1      {# verified link}
+        other   {# verified links}
+        }</string>
     <string name="app_launch_verified_links_message">{count, plural,
-      =1      {This link is verified and automatically opens in this app.}
-      other   {These links are verified and automatically open in this app.}
-    }</string>
+        =1      {This link is verified and automatically opens in this app.}
+        other   {These links are verified and automatically open in this app.}
+        }</string>
     <!-- OK button for verified links dialog. [CHAR LIMIT=20] -->
     <string name="app_launch_dialog_ok">OK</string>
     <!-- Info icon description of the verified links. [CHAR LIMIT=NONE] -->
@@ -9847,9 +9864,9 @@
 
     <!-- Title and button for supported links dialog. -->
     <string name="app_launch_supported_links_title">{count, plural,
-      =1      {# supported link}
-      other   {# supported links}
-    }</string>
+        =1      {# supported link}
+        other   {# supported links}
+        }</string>
     <!-- Add button for supported links dialog. [CHAR LIMIT=20] -->
     <string name="app_launch_supported_links_add">Add</string>
     <!-- The subtext of the link title in supported links dialog. [CHAR LIMIT=30] -->
@@ -9885,15 +9902,15 @@
 
     <!-- Permissions preference summary [CHAR LIMIT=40] -->
     <string name="notifications_categories_off">{count, plural,
-      =1      {# category turned off}
-      other   {# categories turned off}
-    }</string>
+        =1      {# category turned off}
+        other   {# categories turned off}
+        }</string>
 
     <!-- Runtime permissions preference summary.  Number of additional permissions granted. [CHAR LIMIT=40] -->
     <string name="runtime_permissions_additional_count">{count, plural,
-      =1      {# additional permission}
-      other   {# additional permissions}
-    }</string>
+        =1      {# additional permission}
+        other   {# additional permissions}
+        }</string>
 
     <!-- Runtime permissions preference summary, shown when the app has no permissions granted. [CHAR LIMIT=40] -->
     <string name="runtime_permissions_summary_no_permissions_granted">No permissions granted</string>
@@ -9915,9 +9932,9 @@
 
     <!-- Summary of number of apps that have not been used for months. [CHAR LIMIT=40]-->
     <string name="unused_apps_summary">{count, plural,
-      =1      {# unused app}
-      other   {# unused apps}
-    }</string>
+        =1      {# unused app}
+        other   {# unused apps}
+        }</string>
 
     <!-- Label for category for unused app settings for an app. [CHAR LIMIT=40]-->
     <string name="unused_apps_category">Unused app settings</string>
@@ -9985,9 +10002,9 @@
 
     <!-- Summary for allow app to open supported links [CHAR LIMIT=42] -->
     <string name="app_link_open_always_summary">{count, plural,
-      =1      {App claims to handle # link}
-      other   {App claims to handle # links}
-    }</string>
+        =1      {App claims to handle # link}
+        other   {App claims to handle # links}
+        }</string>
 
     <!-- Footer of open supported links settings [CHAR LIMIT=NONE] -->
     <string name="open_supported_links_footer">App claims to handle following links:</string>
@@ -10257,9 +10274,9 @@
 
     <!-- Description of number of apps using memory [CHAR LIMIT=NONE] -->
     <string name="memory_usage_apps_summary">{count, plural,
-      =1      {1 app used memory in the last {time}}
-      other   {# apps used memory in the last {time}}
-    }</string>
+        =1      {1 app used memory in the last {time}}
+        other   {# apps used memory in the last {time}}
+        }</string>
 
     <!-- Label for toggle that enables the profiling/aggregating of memory usage [CHAR LIMIT=80]-->
     <string name="force_enable_pss_profiling_title">Enable memory usage profiling</string>
@@ -10685,9 +10702,9 @@
 
     <!-- Description of number of apps allowed to ignore Data Saver [CHAR LIMIT=NONE] -->
     <string name="data_saver_unrestricted_summary">{count, plural,
-      =1      {1 app allowed to use unrestricted mobile data when Data Saver is on}
-      other   {# apps allowed to use unrestricted mobile data when Data Saver is on}
-    }</string>
+        =1      {1 app allowed to use unrestricted mobile data when Data Saver is on}
+        other   {# apps allowed to use unrestricted mobile data when Data Saver is on}
+        }</string>
 
     <!-- Data usage title text [CHAR LIMIT=30] -->
     <string name="data_usage_title">Primary data</string>
@@ -10712,9 +10729,9 @@
 
     <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] -->
     <string name="billing_cycle_days_left">{count, plural,
-      =1      {# day left}
-      other   {# days left}
-    }</string>
+        =1      {# day left}
+        other   {# days left}
+        }</string>
 
     <!-- Informational text about time left in billing cycle [CHAR LIMIT=60] -->
     <string name="billing_cycle_none_left">No time remaining</string>
@@ -11291,9 +11308,9 @@
     <string name="enterprise_privacy_apps_count_estimation_info">Number of apps is estimated. It may not include apps installed outside of the Play Store.</string>
     <!-- Summary indicating the number of apps that a label (e.g. installed apps or apps granted a particular permission) refers to. The number shown is a minimum as there may be additional apps we do not know about. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_number_packages_lower_bound">{count, plural,
-      =1      {Minimum # app}
-      other   {Minimum # apps}
-    }</string>
+        =1      {Minimum # app}
+        other   {Minimum # apps}
+        }</string>
     <!-- Label indicating that the admin granted one or more apps access to the device's location. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_location_access">Location permissions</string>
     <!-- Label indicating that the admin granted one or more apps access to the microphone. [CHAR LIMIT=NONE] -->
@@ -11304,9 +11321,9 @@
     <string name="enterprise_privacy_enterprise_set_default_apps">Default apps</string>
     <!-- Summary indicating the number of apps that a label (e.g. installed apps or apps granted a particular permission) refers to. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_number_packages">{count, plural,
-      =1      {# app}
-      other   {# apps}
-    }</string>
+        =1      {# app}
+        other   {# apps}
+        }</string>
     <!-- Label explaining that the current input method was set by the admin. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_input_method">Default keyboard</string>
     <!-- Summary indicating the input method set by the admin. [CHAR LIMIT=NONE] -->
@@ -11327,9 +11344,9 @@
     <string name="enterprise_privacy_ca_certs_work">Trusted credentials in your work profile</string>
     <!-- Summary indicating the number of trusted CA certificates installed by the admin. The number shown is a minimum as there may be additional CA certificates we do not know about. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_number_ca_certs">{count, plural,
-      =1      {Minimum # CA certificate}
-      other   {Minimum # CA certificates}
-    }</string>
+        =1      {Minimum # CA certificate}
+        other   {Minimum # CA certificates}
+        }</string>
     <!-- Label explaining that the admin can lock the device and change the user's password. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_lock_device">Admin can lock the device and reset password</string>
     <!-- Label explaining that the admin can wipe the device remotely. [CHAR LIMIT=NONE] -->
@@ -11340,9 +11357,9 @@
     <string name="enterprise_privacy_failed_password_wipe_work">Failed password attempts before deleting work profile data</string>
     <!-- Summary indicating the number of mistyped passwords after which the device or work profile wipes itself. [CHAR LIMIT=NONE] -->
     <string name="enterprise_privacy_number_failed_password_wipe">{count, plural,
-      =1      {# attempt}
-      other   {# attempts}
-    }</string>
+        =1      {# attempt}
+        other   {# attempts}
+        }</string>
     <!-- Message indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=NONE] -->
     <string name="do_disclosure_generic">This device is managed by your organization.</string>
     <!-- Message indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=NONE] -->
@@ -11405,25 +11422,25 @@
     <!-- Strings for displaying which applications were set as default for specific actions. -->
     <!-- Title for the apps that have been set as default handlers of camera-related intents. [CHAR LIMIT=30] -->
     <string name="default_camera_app_title">{count, plural,
-      =1      {Camera app}
-      other   {Camera apps}
-    }</string>
+        =1      {Camera app}
+        other   {Camera apps}
+        }</string>
     <!-- Title for the app that has been set as default handler of calendar-related intents. [CHAR LIMIT=30] -->
     <string name="default_calendar_app_title">Calendar app</string>
     <!-- Title for the app that has been set as default handler of contacts-related intents. [CHAR LIMIT=30] -->
     <string name="default_contacts_app_title">Contacts app</string>
     <!-- Title for the apps that have been set as default handlers of new email intents. [CHAR LIMIT=30] -->
     <string name="default_email_app_title">{count, plural,
-      =1      {Email client app}
-      other   {Email client apps}
-    }</string>
+        =1      {Email client app}
+        other   {Email client apps}
+        }</string>
     <!-- Title for the app that has been set as default handler of geo-related intents. [CHAR LIMIT=30] -->
     <string name="default_map_app_title">Map app</string>
     <!-- Title for the apps that have been set as default handlers of call-related intents. [CHAR LIMIT=30] -->
     <string name="default_phone_app_title">{count, plural,
-      =1      {Phone app}
-      other   {Phone apps}
-    }</string>
+        =1      {Phone app}
+        other   {Phone apps}
+        }</string>
     <!-- Template for concatenating two app names -->
     <string name="app_names_concatenation_template_2"><xliff:g id="first_app_name">%1$s</xliff:g>, <xliff:g id="second_app_name">%2$s</xliff:g></string>
     <!-- Template for concatenating three app names -->
@@ -11518,9 +11535,9 @@
     <!-- Summary for passwords settings that shows how many passwords are saved for each autofill
          service. [CHAR LIMIT=NONE] -->
     <string name="autofill_passwords_count">{count, plural,
-      =1      {# password}
-      other   {# passwords}
-    }</string>
+        =1      {# password}
+        other   {# passwords}
+        }</string>
     <!-- DO NOT TRANSLATE Summary placeholder for when the passwords count is still loading or is
          unavailable. -->
     <string name="autofill_passwords_count_placeholder" translatable="false">\u2014</string>
@@ -12379,10 +12396,10 @@
     <string name="choose_sim_title">Choose a SIM to use</string>
     <!--  The body text of choose SIM activity. [CHAR LIMIT=NONE] -->
     <string name="choose_sim_text">{count, plural,
-      =1      {1 SIM is available on this device, but only one can be used at a time}
-      =2      {2 SIMs are available on this device, but only one can be used at a time}
-      other   {# SIMs are available on this device, but only one can be used at a time}
-    }</string>
+        =1      {1 SIM is available on this device, but only one can be used at a time}
+        =2      {2 SIMs are available on this device, but only one can be used at a time}
+        other   {# SIMs are available on this device, but only one can be used at a time}
+        }</string>
     <!-- String indicating that we are activating the profile [CHAR LIMIT=NONE] -->
     <string name="choose_sim_activating">Turning on<xliff:g id="ellipsis" example="...">&#8230;</xliff:g></string>
     <!-- String indicating that we failed to activate the selected profile [CHAR LIMIT=NONE] -->
@@ -12513,9 +12530,9 @@
 
     <!-- Summary for the accessibility usage preference in the Privacy page.  [CHAR LIMIT=NONE] -->
     <string name="accessibility_usage_summary">{count, plural,
-      =1      {1 app has full access to your device}
-      other   {# apps have full access to your device}
-    }</string>
+        =1      {1 app has full access to your device}
+        other   {# apps have full access to your device}
+        }</string>
 
     <!-- Label for the title on wfc disclaimer fragment. [CHAR LIMIT=40] -->
     <string name="wfc_disclaimer_title_text">Important information</string>
@@ -13268,9 +13285,9 @@
     <!-- Background Install Control UI -->
     <!-- [CHAR LIMIT=NONE] Preference Feature Summary -->
     <string name="background_install_preference_summary">{count, plural,
-    =1    {# app}
-    other {# apps}
-    }</string>
+        =1    {# app}
+        other {# apps}
+        }</string>
 
     <!-- [CHAR LIMIT=NONE] Feature Title -->
     <string name="background_install_title">Apps installed in the background</string>
@@ -13282,14 +13299,14 @@
     <string name="background_install_uninstall_button_description">Uninstall app</string>
     <!-- [CHAR LIMIT=NONE] Before time period group list title -->
     <string name="background_install_before">{count, plural,
-    =1    {Apps installed in the last # month}
-    other {Apps installed in the last # months}
-    }</string>
+        =1    {Apps installed in the last # month}
+        other {Apps installed in the last # months}
+        }</string>
     <!-- [CHAR LIMIT=NONE] After time period group list title -->
     <string name="background_install_after">{count, plural,
-    =1    {Apps installed more than # month ago}
-    other {Apps installed more than # months ago}
-    }</string>
+        =1    {Apps installed more than # month ago}
+        other {Apps installed more than # months ago}
+        }</string>
 
     <!-- App Aspect Ratio (User Aspect Ratio Override) -->
     <!-- [CHAR LIMIT=60] Aspect ratio title setting to choose app aspect ratio -->
@@ -13482,11 +13499,11 @@
     <!--Text for Stylus Pointer Icon preference -->
     <string name="show_stylus_pointer_icon">Show pointer while hovering</string>
 
-     <!-- Developer settings title: Media DRM settings screen. [CHAR LIMIT=50] -->
+    <!-- Developer settings title: Media DRM settings screen. [CHAR LIMIT=50] -->
     <string name="media_drm_settings_title">Media DRM settings</string>
-     <!-- Developer settings title: select whether to enable force Software Secure Crypto fallback. [CHAR LIMIT=50] -->
+    <!-- Developer settings title: select whether to enable force Software Secure Crypto fallback. [CHAR LIMIT=50] -->
     <string name="force_swcrypto_fallback_title">Force Software Secure Crypto</string>
-     <!-- Developer settings summary: select to force Software Secure Crypto.[CHAR LIMIT=NONE] -->
+    <!-- Developer settings summary: select to force Software Secure Crypto.[CHAR LIMIT=NONE] -->
     <string name="force_swcrypto_fallback_summary">Force DRM key management to use software-based whitebox crypto</string>
 
     <!--Text for acquire msg on UDFPS devices -->
@@ -13729,8 +13746,12 @@
     <string name="contacts_storage_device_only_preference_summary">New contacts won\'t be synced with an account</string>
     <!-- Text for explaining the selection in Contacts Storage Settings [CHAR LIMIT=NONE] -->
     <string name="contacts_storage_selection_message">Contacts will be saved to your device and synced to your account by default</string>
+    <!-- Text for error toast when there's error setting the default account in Contacts Storage Settings [CHAR LIMIT=NONE] -->
+    <string name="contacts_storage_set_default_account_error_message">Error setting the default account</string>
     <!-- Text for displaying when no account is set as default account [CHAR LIMIT=50] -->
-    <string name="contacts_storage_no_account_set">No default set</string>
+    <string name="contacts_storage_no_account_set_summary">No default set</string>
+    <!-- Text for displaying when default account is set as local only [CHAR LIMIT=50] -->
+    <string name="contacts_storage_local_account_summary">Device only</string>
     <!-- Text for add account selection message when no account has been added [CHAR LIMIT=100] -->
     <string name="contacts_storage_first_time_add_account_message">Add an account to get started</string>
 
diff --git a/res/xml/mouse_keys_main_page.xml b/res/xml/mouse_keys_main_page.xml
new file mode 100644
index 0000000..d781b51
--- /dev/null
+++ b/res/xml/mouse_keys_main_page.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Copyright 2024 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/mouse_keys"
+    android:key="mouse_key_main_page">
+
+    <com.android.settingslib.widget.MainSwitchPreference
+        android:key="mouse_keys_main_switch"
+        android:title="@string/mouse_keys_main_title"
+        settings:controller="com.android.settings.inputmethod.KeyboardAccessibilityMouseKeysController"/>
+
+    <com.android.settingslib.widget.LayoutPreference
+        android:key="mouse_keys_list"
+        android:layout="@layout/mouse_keys_image_list"/>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/physical_keyboard_a11y_settings.xml b/res/xml/physical_keyboard_a11y_settings.xml
index 3bfe199..9d634c0 100644
--- a/res/xml/physical_keyboard_a11y_settings.xml
+++ b/res/xml/physical_keyboard_a11y_settings.xml
@@ -44,14 +44,15 @@
             android:title="@string/slow_keys"
             android:defaultValue="false"
             android:summary="@string/slow_keys_summary"
-            settings:controller="com.android.settings.inputmethod.KeyboardAccessibilitySlowKeysController" />
+            settings:controller="com.android.settings.inputmethod.KeyboardAccessibilitySlowKeysController"/>
 
-        <SwitchPreferenceCompat
+        <com.android.settingslib.PrimarySwitchPreference
             android:key="keyboard_a11y_page_mouse_keys"
             android:title="@string/mouse_keys"
             android:summary="@string/mouse_keys_summary"
             android:defaultValue="false"
-            settings:controller="com.android.settings.inputmethod.KeyboardAccessibilityMouseKeysController" />
+            android:fragment="com.android.settings.inputmethod.MouseKeysMainPageFragment"
+            settings:controller="com.android.settings.inputmethod.KeyboardAccessibilityMouseKeysController"/>
 
     </PreferenceCategory>
 
diff --git a/src/com/android/settings/accessibility/ColorAndMotionScreen.kt b/src/com/android/settings/accessibility/ColorAndMotionScreen.kt
index 20a71e3..909b08b 100644
--- a/src/com/android/settings/accessibility/ColorAndMotionScreen.kt
+++ b/src/com/android/settings/accessibility/ColorAndMotionScreen.kt
@@ -17,16 +17,19 @@
 package com.android.settings.accessibility
 
 import android.content.Context
-import com.android.settings.flags.Flags
 import com.android.settings.R
+import com.android.settings.flags.Flags
 import com.android.settingslib.metadata.ProvidePreferenceScreen
 import com.android.settingslib.metadata.preferenceHierarchy
 import com.android.settingslib.preference.PreferenceScreenCreator
 
 @ProvidePreferenceScreen
 class ColorAndMotionScreen : PreferenceScreenCreator {
-    override val key: String = KEY
-    override val title: Int = R.string.accessibility_color_and_motion_title
+    override val key: String
+        get() = KEY
+
+    override val title: Int
+        get() = R.string.accessibility_color_and_motion_title
 
     override fun isFlagEnabled(context: Context) = Flags.catalystAccessibilityColorAndMotion()
 
@@ -36,8 +39,7 @@
 
     override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
 
-
     companion object {
         const val KEY = "accessibility_color_and_motion"
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java b/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
index bc6931d..6c179da 100644
--- a/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
+++ b/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (C) 2024 The Android Open Source Project
  *
@@ -16,12 +15,13 @@
  */
 package com.android.settings.applications.contacts;
 
+import static android.provider.ContactsContract.RawContacts.DefaultAccount;
+
 import android.accounts.Account;
 import android.content.Context;
 import android.os.UserHandle;
-import android.provider.ContactsContract;
-
-import androidx.preference.PreferenceScreen;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
+import android.util.Log;
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
@@ -36,33 +36,53 @@
 
     private final AuthenticatorHelper mAuthenticatorHelper;
 
+    private DefaultAccountAndState mCurrentDefaultAccountAndState;
+
     public ContactsStoragePreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
         mAuthenticatorHelper = new AuthenticatorHelper(mContext,
                 new UserHandle(UserHandle.myUserId()), null);
+        try {
+            mCurrentDefaultAccountAndState =
+                    DefaultAccount.getDefaultAccountForNewContacts(mContext.getContentResolver());
+        } catch (IllegalStateException e) {
+            Log.e(TAG, "The default account is in an invalid state: " + e);
+        } catch (RuntimeException e) {
+            Log.e(TAG, "Failed to look up the default account: " + e);
+        }
     }
 
     @Override
     public int getAvailabilityStatus() {
-        return Flags.enableContactsDefaultAccountInSettings()
-            ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+        return (Flags.enableContactsDefaultAccountInSettings()
+                && mCurrentDefaultAccountAndState != null) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
     }
 
     @Override
     public CharSequence getSummary() {
-        Account currentDefaultAccount =
-                ContactsContract.Settings.getDefaultAccount(mContext.getContentResolver());
-        if (currentDefaultAccount == null) {
-            return mContext.getResources().getString(
-                    R.string.contacts_storage_no_account_set);
+        if (mCurrentDefaultAccountAndState != null) {
+            int currentDefaultAccountState = mCurrentDefaultAccountAndState.getState();
+            Account currentDefaultAccount = mCurrentDefaultAccountAndState.getAccount();
+            if (currentDefaultAccountState
+                    == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET) {
+                return mContext.getResources().getString(
+                        R.string.contacts_storage_no_account_set_summary);
+            } else if (currentDefaultAccountState
+                    == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL) {
+                return mContext.getResources().getString(
+                        R.string.contacts_storage_local_account_summary);
+            } else if (currentDefaultAccount != null) {
+                String accountTypeLabel = (String) mAuthenticatorHelper.getLabelForType(mContext,
+                        currentDefaultAccount.type);
+                // If there's no account type, or the account type is the same as the
+                // current default account name, just return the account name.
+                if (accountTypeLabel == null || accountTypeLabel.equals(
+                        currentDefaultAccount.name)) {
+                    return currentDefaultAccount.name;
+                }
+                return accountTypeLabel + " | " + currentDefaultAccount.name;
+            }
         }
-        String accountTypeLabel = (String) mAuthenticatorHelper.getLabelForType(mContext,
-                currentDefaultAccount.type);
-        // If there's no account type, or the account type is the same as the
-        // current default account name, just return the account name.
-        if (accountTypeLabel == null || accountTypeLabel.equals(currentDefaultAccount.name)) {
-            return currentDefaultAccount.name;
-        }
-        return accountTypeLabel + " | " + currentDefaultAccount.name;
+        return "";
     }
 }
diff --git a/src/com/android/settings/applications/contacts/ContactsStorageSettings.java b/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
index 90d593a..3d449cf 100644
--- a/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
+++ b/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (C) 2020 The Android Open Source Project
  *
@@ -17,25 +16,27 @@
 package com.android.settings.applications.contacts;
 
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount;
 import static android.provider.Settings.ACTION_ADD_ACCOUNT;
 import static android.provider.Settings.EXTRA_ACCOUNT_TYPES;
 
 import android.accounts.Account;
-import android.accounts.AccountManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.UserHandle;
-import android.provider.ContactsContract.Settings;
-
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
+import android.widget.Toast;
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.annotation.UiThread;
 import androidx.preference.Preference;
 import androidx.preference.Preference.OnPreferenceClickListener;
 import androidx.preference.PreferenceScreen;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
 import com.android.settings.accounts.AddAccountSettings;
 import com.android.settings.dashboard.DashboardFragment;
@@ -46,6 +47,7 @@
 import com.android.settingslib.widget.SelectorWithWidgetPreference;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -59,7 +61,7 @@
     private static final String TAG = "ContactsStorageSettings";
     private static final String PREF_KEY_ADD_ACCOUNT = "add_account";
     private static final String PREF_KEY_DEVICE_ONLY = "device_only_account_preference";
-    private final Map<String, Account> mAccountMap = new HashMap<>();
+    private final Map<String, DefaultAccountAndState> mAccountMap = new HashMap<>();
     private AuthenticatorHelper mAuthenticatorHelper;
 
     @Override
@@ -73,13 +75,18 @@
     @Override
     public void onRadioButtonClicked(@NonNull SelectorWithWidgetPreference selectedPref) {
         final String selectedPreferenceKey = selectedPref.getKey();
-        // Check if current provider is different from the selected provider.
+        // Check if current account is different from the selected account.
         for (String preferenceKey : mAccountMap.keySet()) {
             if (selectedPreferenceKey.equals(preferenceKey)) {
-                selectedPref.setChecked(true);
-                //TODO: Call DefaultAccount.setDefaultAccountForNewContacts once
-                // the implementation is ready.
-                Settings.setDefaultAccount(getContentResolver(), mAccountMap.get(preferenceKey));
+                try {
+                    DefaultAccount.setDefaultAccountForNewContacts(getContentResolver(),
+                            mAccountMap.get(preferenceKey));
+                    selectedPref.setChecked(true);
+                } catch (RuntimeException e) {
+                    Toast.makeText(getContext(),
+                            R.string.contacts_storage_set_default_account_error_message,
+                            Toast.LENGTH_SHORT).show();
+                }
             } else {
                 SelectorWithWidgetPreference unSelectedPreference =
                         getPreferenceScreen().findPreference(preferenceKey);
@@ -92,10 +99,7 @@
 
     public boolean onPreferenceClick(@NonNull Preference preference) {
         if (PREF_KEY_ADD_ACCOUNT.equals(preference.getKey())) {
-            Resources resources = Resources.getSystem();
-            String[] accountTypesArray =
-                    resources.getStringArray(
-                            com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes);
+            String[] accountTypesArray = getEligibleAccountTypes();
             Intent intent = new Intent(ACTION_ADD_ACCOUNT);
             intent.setClass(getContext(), AddAccountSettings.class);
             intent.putExtra(EXTRA_ACCOUNT_TYPES, accountTypesArray);
@@ -108,7 +112,7 @@
 
     @Override
     public void onCreatePreferences(@NonNull Bundle savedInstanceState,
-        @NonNull String rootKey) {
+            @NonNull String rootKey) {
         super.onCreatePreferences(savedInstanceState, rootKey);
         refreshUI();
     }
@@ -119,48 +123,60 @@
         // when creating eligible account preferences.
         mAccountMap.clear();
         final PreferenceScreen screen = getPreferenceScreen();
-        AccountManager accountManager = AccountManager.get(getPrefContext());
-        //TODO: Call DefaultAccount.getDefaultAccountForNewContacts once
-        // implementation is ready.
-        Account[] accounts = accountManager.getAccounts();
-
-        for (int i = 0; i < accounts.length; i++) {
-            screen.addPreference(buildAccountPreference(accounts[i], i));
+        List<Account> accounts = DefaultAccount.getEligibleCloudAccounts(getContentResolver());
+        for (int i = 0; i < accounts.size(); i++) {
+            screen.addPreference(buildAccountPreference(accounts.get(i), /*order=*/i));
         }
-        screen.addPreference(buildAddAccountPreference(accounts.length == 0));
+        // If there's no eligible account types, the "Add Account" preference should
+        // not be shown to the users.
+        if (getEligibleAccountTypes().length > 0) {
+            screen.addPreference(buildAddAccountPreference(accounts.isEmpty()));
+        }
         setupDeviceOnlyPreference();
-
-        //TODO: Call DefaultAccount.ListEligibleCloudAccounts once the
-        // implementation is ready. And differentiate device only account vs account not set case.
-        Account currentDefaultAccount = Settings.getDefaultAccount(getContentResolver());
-        String preferenceKey = currentDefaultAccount != null ?
-                String.valueOf(currentDefaultAccount.hashCode()) : PREF_KEY_DEVICE_ONLY;
-        SelectorWithWidgetPreference preference = getPreferenceScreen().findPreference(
-                preferenceKey);
-        if (preference != null) {
-            preference.setChecked(true);
-        }
+        setDefaultAccountPreference();
     }
 
     private void setupDeviceOnlyPreference() {
         SelectorWithWidgetPreference preference = findPreference(PREF_KEY_DEVICE_ONLY);
         if (preference != null) {
             preference.setOnClickListener(this);
-            mAccountMap.put(PREF_KEY_DEVICE_ONLY, null);
+            mAccountMap.put(PREF_KEY_DEVICE_ONLY, DefaultAccountAndState.ofLocal());
+        }
+    }
+
+    private void setDefaultAccountPreference() {
+        DefaultAccountAndState currentDefaultAccountAndState =
+                DefaultAccount.getDefaultAccountForNewContacts(getContentResolver());
+        String preferenceKey = getAccountHashCode(currentDefaultAccountAndState);
+        Account currentDefaultAccount = currentDefaultAccountAndState.getAccount();
+
+        // Set the current default account preference to be checked if found among existing
+        // preferences. If not, then create a new preference for default account.
+        SelectorWithWidgetPreference preference = null;
+        if (mAccountMap.containsKey(preferenceKey)) {
+            preference = getPreferenceScreen().findPreference(preferenceKey);
+        } else if (preferenceKey != null && currentDefaultAccount != null) {
+            preference = buildAccountPreference(currentDefaultAccount, mAccountMap.size());
+            getPreferenceScreen().addPreference(preference);
+        }
+        if (preference != null) {
+            preference.setChecked(true);
         }
     }
 
     //TODO: Add preference category on account preferences.
-    private Preference buildAccountPreference(Account account, int order) {
+    private SelectorWithWidgetPreference buildAccountPreference(Account account, int order) {
         SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(
                 getPrefContext());
+        DefaultAccountAndState accountAndState = DefaultAccountAndState.ofCloud(account);
+        String preferenceKey = getAccountHashCode(accountAndState);
         preference.setTitle(mAuthenticatorHelper.getLabelForType(getPrefContext(), account.type));
         preference.setIcon(mAuthenticatorHelper.getDrawableForType(getPrefContext(), account.type));
         preference.setSummary(account.name);
-        preference.setKey(String.valueOf(account.hashCode()));
+        preference.setKey(preferenceKey);
         preference.setOnClickListener(this);
         preference.setOrder(order);
-        mAccountMap.put(String.valueOf(account.hashCode()), account);
+        mAccountMap.put(preferenceKey, accountAndState);
         return preference;
     }
 
@@ -178,6 +194,29 @@
         return preference;
     }
 
+    private @Nullable String getAccountHashCode(DefaultAccountAndState currentDefaultAccountAndState) {
+        Account currentDefaultAccount = currentDefaultAccountAndState.getAccount();
+        if (currentDefaultAccount != null && (currentDefaultAccountAndState.getState()
+                == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD
+                || currentDefaultAccountAndState.getState()
+                == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM)) {
+            return String.valueOf(currentDefaultAccount.hashCode());
+        } else if (currentDefaultAccountAndState.getState()
+                == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL) {
+            return PREF_KEY_DEVICE_ONLY;
+        } else {
+            // If the account is not set or in error state, it should just return null and won't
+            // set the checked status in radio button.
+            return null;
+        }
+    }
+
+    @VisibleForTesting
+    String[] getEligibleAccountTypes() {
+        return Resources.getSystem().getStringArray(
+                com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes);
+    }
+
     @Override
     protected int getPreferenceScreenResId() {
         return R.xml.contacts_storage_settings;
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDeviceAdapter.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDeviceAdapter.java
index 0b6b8c9..7ff7844 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDeviceAdapter.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDeviceAdapter.java
@@ -85,6 +85,10 @@
                 mButtonView.setText(btnText);
                 mButtonView.setOnClickListener(
                         v -> mOnClickListener.onClick(mDevices.get(position)));
+                if (position == 0) {
+                    mButtonView.setBackgroundResource(
+                            com.android.settingslib.R.drawable.audio_sharing_rounded_bg_ripple_top);
+                }
             } else {
                 Log.w(TAG, "bind view skipped due to button view is null");
             }
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
index 0836912..df84aba 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
@@ -20,8 +20,6 @@
 import android.content.Context;
 import android.os.AsyncTask;
 import android.os.BatteryUsageStats;
-import android.os.Handler;
-import android.os.Looper;
 import android.util.Log;
 
 import androidx.annotation.VisibleForTesting;
@@ -117,11 +115,9 @@
     private static void preprocessBatteryUsageSlots(
             final Context context, final UserIdsSeries userIdsSeries) {
         final long start = System.currentTimeMillis();
-        final Handler handler = new Handler(Looper.getMainLooper());
         final BatteryLevelData batteryLevelData =
                 DataProcessManager.getBatteryLevelData(
                         context,
-                        handler,
                         userIdsSeries,
                         /* isFromPeriodJob= */ true,
                         batteryDiffDataMap -> {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
index 0a1a547..fd548ab 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
@@ -19,8 +19,6 @@
 import android.app.usage.UsageEvents;
 import android.content.Context;
 import android.os.AsyncTask;
-import android.os.Handler;
-import android.os.Looper;
 import android.util.ArrayMap;
 import android.util.Log;
 
@@ -82,7 +80,6 @@
     private final long mLastFullChargeTimestamp;
     private final boolean mIsFromPeriodJob;
     private final Context mContext;
-    private final Handler mHandler;
     private final UserIdsSeries mUserIdsSeries;
     private final OnBatteryDiffDataMapLoadedListener mCallbackFunction;
     private final List<AppUsageEvent> mAppUsageEventList = new ArrayList<>();
@@ -123,7 +120,6 @@
     /** Constructor when there exists battery level data. */
     DataProcessManager(
             Context context,
-            Handler handler,
             final UserIdsSeries userIdsSeries,
             final boolean isFromPeriodJob,
             final long rawStartTimestamp,
@@ -132,7 +128,6 @@
             @NonNull final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
             @NonNull final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
         mContext = context.getApplicationContext();
-        mHandler = handler;
         mUserIdsSeries = userIdsSeries;
         mIsFromPeriodJob = isFromPeriodJob;
         mRawStartTimestamp = rawStartTimestamp;
@@ -145,11 +140,9 @@
     /** Constructor when there is no battery level data. */
     DataProcessManager(
             Context context,
-            Handler handler,
             final UserIdsSeries userIdsSeries,
             @NonNull final OnBatteryDiffDataMapLoadedListener callbackFunction) {
         mContext = context.getApplicationContext();
-        mHandler = handler;
         mUserIdsSeries = userIdsSeries;
         mCallbackFunction = callbackFunction;
         mIsFromPeriodJob = false;
@@ -444,12 +437,8 @@
 
             @Override
             protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
-                // Post results back to main thread to refresh UI.
-                if (mHandler != null && mCallbackFunction != null) {
-                    mHandler.post(
-                            () -> {
-                                mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
-                            });
+                if (mCallbackFunction != null) {
+                    mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
                 }
             }
         }.execute();
@@ -534,12 +523,8 @@
 
             @Override
             protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
-                // Post results back to main thread to refresh UI.
-                if (mHandler != null && mCallbackFunction != null) {
-                    mHandler.post(
-                            () -> {
-                                mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
-                            });
+                if (mCallbackFunction != null) {
+                    mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
                 }
             }
         }.execute();
@@ -581,7 +566,6 @@
     @Nullable
     public static BatteryLevelData getBatteryLevelData(
             Context context,
-            @Nullable Handler handler,
             final UserIdsSeries userIdsSeries,
             final boolean isFromPeriodJob,
             final OnBatteryDiffDataMapLoadedListener onBatteryUsageMapLoadedListener) {
@@ -601,7 +585,6 @@
         final BatteryLevelData batteryLevelData =
                 getPeriodBatteryLevelData(
                         context,
-                        handler,
                         userIdsSeries,
                         startTimestamp,
                         lastFullChargeTime,
@@ -621,7 +604,6 @@
 
     private static BatteryLevelData getPeriodBatteryLevelData(
             Context context,
-            @Nullable Handler handler,
             final UserIdsSeries userIdsSeries,
             final long startTimestamp,
             final long lastFullChargeTime,
@@ -639,7 +621,6 @@
             return null;
         }
 
-        handler = handler != null ? handler : new Handler(Looper.getMainLooper());
         final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
                 sFakeBatteryHistoryMap != null
                         ? sFakeBatteryHistoryMap
@@ -650,8 +631,7 @@
                                 lastFullChargeTime);
         if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
             Log.d(TAG, "batteryHistoryMap is null in getPeriodBatteryLevelData()");
-            new DataProcessManager(
-                            context, handler, userIdsSeries, onBatteryDiffDataMapLoadedListener)
+            new DataProcessManager(context, userIdsSeries, onBatteryDiffDataMapLoadedListener)
                     .start();
             return null;
         }
@@ -680,8 +660,7 @@
                 DataProcessor.getLevelDataThroughProcessedHistoryMap(
                         context, processedBatteryHistoryMap);
         if (batteryLevelData == null) {
-            new DataProcessManager(
-                            context, handler, userIdsSeries, onBatteryDiffDataMapLoadedListener)
+            new DataProcessManager(context, userIdsSeries, onBatteryDiffDataMapLoadedListener)
                     .start();
             Log.d(TAG, "getBatteryLevelData() returns null");
             return null;
@@ -690,7 +669,6 @@
         // Start the async task to compute diff usage data and load labels and icons.
         new DataProcessManager(
                         context,
-                        handler,
                         userIdsSeries,
                         isFromPeriodJob,
                         startTimestamp,
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
index ad487ef..0998e2d 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
@@ -31,8 +31,6 @@
 import android.os.AsyncTask;
 import android.os.BatteryManager;
 import android.os.BatteryUsageStats;
-import android.os.Handler;
-import android.os.Looper;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.UserManager;
@@ -66,12 +64,6 @@
 public final class DatabaseUtils {
     private static final String TAG = "DatabaseUtils";
     private static final String SHARED_PREFS_FILE = "battery_usage_shared_prefs";
-    private static final boolean EXPLICIT_CLEAR_MEMORY_ENABLED = false;
-
-    /** Clear memory threshold for device booting phase. */
-    private static final long CLEAR_MEMORY_THRESHOLD_MS = Duration.ofMinutes(5).toMillis();
-
-    private static final long CLEAR_MEMORY_DELAYED_MS = Duration.ofSeconds(2).toMillis();
     private static final long INVALID_TIMESTAMP = 0L;
 
     static final int DATA_RETENTION_INTERVAL_DAY = 9;
@@ -593,7 +585,6 @@
                 String.format(
                         "sendAppUsageEventData() size=%d in %d/ms",
                         size, (System.currentTimeMillis() - startTime)));
-        clearMemory();
         return valuesList;
     }
 
@@ -613,7 +604,6 @@
                 String.format(
                         "sendBatteryEventData() in %d/ms",
                         (System.currentTimeMillis() - startTime)));
-        clearMemory();
         return contentValues;
     }
 
@@ -647,7 +637,6 @@
                 String.format(
                         "sendBatteryEventData() size=%d in %d/ms",
                         size, (System.currentTimeMillis() - startTime)));
-        clearMemory();
         return valuesList;
     }
 
@@ -681,7 +670,6 @@
                 String.format(
                         "sendBatteryUsageSlotData() size=%d in %d/ms",
                         size, (System.currentTimeMillis() - startTime)));
-        clearMemory();
         return valuesList;
     }
 
@@ -695,7 +683,6 @@
         final Intent intent = BatteryUtils.getBatteryIntent(context);
         if (intent == null) {
             Log.e(TAG, "sendBatteryEntryData(): cannot fetch battery intent");
-            clearMemory();
             return null;
         }
         final int batteryLevel = BatteryStatus.getBatteryLevel(intent);
@@ -796,7 +783,6 @@
         if (isFullChargeStart) {
             recordDateTime(context, KEY_LAST_UPLOAD_FULL_CHARGE_TIME);
         }
-        clearMemory();
         return valuesList;
     }
 
@@ -992,20 +978,4 @@
             writer.println(String.format("\t\t%s: %s", prefix, results.toString()));
         }
     }
-
-    private static void clearMemory() {
-        if (!EXPLICIT_CLEAR_MEMORY_ENABLED
-                || SystemClock.uptimeMillis() > CLEAR_MEMORY_THRESHOLD_MS) {
-            return;
-        }
-        final Handler mainHandler = new Handler(Looper.getMainLooper());
-        mainHandler.postDelayed(
-                () -> {
-                    System.gc();
-                    System.runFinalization();
-                    System.gc();
-                    Log.w(TAG, "invoke clearMemory()");
-                },
-                CLEAR_MEMORY_DELAYED_MS);
-    }
 }
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
index a9c2332..1ed6a74 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
@@ -214,20 +214,22 @@
         if (!isResumed() || mBatteryLevelData == null) {
             return;
         }
-        mBatteryUsageMap =
-                DataProcessor.generateBatteryUsageMap(
-                        getContext(), batteryDiffDataMap, mBatteryLevelData.orElse(null));
-        Log.d(TAG, "onBatteryDiffDataMapUpdate: " + mBatteryUsageMap);
-        DataProcessor.loadLabelAndIcon(mBatteryUsageMap);
-        onSelectedSlotDataUpdated();
-        detectAnomaly();
-        logScreenUsageTime();
-        if (mBatteryChartPreferenceController != null
-                && mBatteryLevelData.isEmpty()
-                && isBatteryUsageMapNullOrEmpty()) {
-            // No available battery usage and battery level data.
-            mBatteryChartPreferenceController.showEmptyChart();
-        }
+        mHandler.post(() -> {
+            mBatteryUsageMap =
+                    DataProcessor.generateBatteryUsageMap(
+                            getContext(), batteryDiffDataMap, mBatteryLevelData.orElse(null));
+            Log.d(TAG, "onBatteryDiffDataMapUpdate: " + mBatteryUsageMap);
+            DataProcessor.loadLabelAndIcon(mBatteryUsageMap);
+            onSelectedSlotDataUpdated();
+            detectAnomaly();
+            logScreenUsageTime();
+            if (mBatteryChartPreferenceController != null
+                    && mBatteryLevelData.isEmpty()
+                    && isBatteryUsageMapNullOrEmpty()) {
+                // No available battery usage and battery level data.
+                mBatteryChartPreferenceController.showEmptyChart();
+            }
+        });
     }
 
     private void onSelectedSlotDataUpdated() {
@@ -503,7 +505,6 @@
                 public BatteryLevelData loadInBackground() {
                     return DataProcessManager.getBatteryLevelData(
                             getContext(),
-                            mHandler,
                             new UserIdsSeries(getContext(), /* isNonUIRequest= */ false),
                             /* isFromPeriodJob= */ false,
                             PowerUsageAdvanced.this::onBatteryDiffDataMapUpdate);
diff --git a/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysController.java b/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysController.java
index 57ae88a..34f53c4 100644
--- a/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysController.java
+++ b/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysController.java
@@ -22,15 +22,23 @@
 import android.provider.Settings;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.lifecycle.LifecycleObserver;
 import androidx.preference.PreferenceScreen;
-import androidx.preference.TwoStatePreference;
+
+import com.android.settingslib.PrimarySwitchPreference;
+import com.android.settingslib.widget.MainSwitchPreference;
 
 public class KeyboardAccessibilityMouseKeysController extends
         InputSettingPreferenceController implements
         LifecycleObserver {
+    private static final String KEY_MOUSE_KEY = "accessibility_mouse_keys";
+    private static final String KEY_MOUSE_KEY_MAIN_PAGE = "mouse_keys_main_switch";
 
-    private TwoStatePreference mTwoStatePreference;
+    @Nullable
+    private PrimarySwitchPreference mPrimaryPreference;
+    @Nullable
+    private MainSwitchPreference mMainSwitchPreference;
 
     public KeyboardAccessibilityMouseKeysController(@NonNull Context context, @NonNull String key) {
         super(context, key);
@@ -39,7 +47,11 @@
     @Override
     public void displayPreference(@NonNull PreferenceScreen screen) {
         super.displayPreference(screen);
-        mTwoStatePreference = screen.findPreference(getPreferenceKey());
+        if (KEY_MOUSE_KEY.equals(getPreferenceKey())) {
+            mPrimaryPreference = screen.findPreference(getPreferenceKey());
+        } else if (KEY_MOUSE_KEY_MAIN_PAGE.equals(getPreferenceKey())) {
+            mMainSwitchPreference = screen.findPreference(getPreferenceKey());
+        }
     }
 
     @Override
@@ -63,8 +75,11 @@
 
     @Override
     protected void onInputSettingUpdated() {
-        if (mTwoStatePreference != null) {
-            mTwoStatePreference.setChecked(
+        if (mPrimaryPreference != null) {
+            mPrimaryPreference.setChecked(
+                    InputSettings.isAccessibilityMouseKeysEnabled(mContext));
+        } else if (mMainSwitchPreference != null) {
+            mMainSwitchPreference.setChecked(
                     InputSettings.isAccessibilityMouseKeysEnabled(mContext));
         }
     }
diff --git a/src/com/android/settings/inputmethod/MouseKeysImageListAdapter.java b/src/com/android/settings/inputmethod/MouseKeysImageListAdapter.java
new file mode 100644
index 0000000..65024b1
--- /dev/null
+++ b/src/com/android/settings/inputmethod/MouseKeysImageListAdapter.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2024 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.inputmethod;
+
+import android.content.Context;
+import android.view.InputDevice;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.settings.R;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+public class MouseKeysImageListAdapter extends
+        RecyclerView.Adapter<MouseKeysImageListAdapter.MouseKeyImageViewHolder> {
+    private static final ImmutableList<Integer> DRAWABLE_LIST = ImmutableList.of(
+            R.drawable.mouse_keys_directional, R.drawable.mouse_keys_click,
+            R.drawable.mouse_keys_press_hold, R.drawable.mouse_keys_release,
+            R.drawable.mouse_keys_toggle_scroll, R.drawable.mouse_keys_release2);
+    private static final ImmutableList<Integer> DIRECTIONAL_CHAR_KEYCODE_LIST = ImmutableList.of(
+            KeyEvent.KEYCODE_7, KeyEvent.KEYCODE_8, KeyEvent.KEYCODE_9, KeyEvent.KEYCODE_U,
+            KeyEvent.KEYCODE_O, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K, KeyEvent.KEYCODE_L
+    );
+    private static final int LEFT_CLICK_CHAR_KEYCODE =
+            KeyEvent.KEYCODE_I;
+    private static final int PRESS_HOLD_CHAR_KEYCODE =
+            KeyEvent.KEYCODE_M;
+    private static final int RELEASE_CHAR_KEYCODE =
+            KeyEvent.KEYCODE_COMMA;
+    private static final ImmutableList<Integer> TOGGLE_SCROLL_CHAR_KEYCODE_LIST = ImmutableList.of(
+            KeyEvent.KEYCODE_PERIOD, KeyEvent.KEYCODE_8, KeyEvent.KEYCODE_K, KeyEvent.KEYCODE_O,
+            KeyEvent.KEYCODE_U
+    );
+    private static final int RIGHT_CLICK_CHAR_KEYCODE =
+            KeyEvent.KEYCODE_SLASH;
+    private final List<String> mComposedSummaryList = new ArrayList<>();
+
+    public MouseKeysImageListAdapter(@NonNull Context context,
+            @Nullable InputDevice currentInputDevice) {
+        composeSummaryForImages(context, currentInputDevice);
+    }
+
+    @NonNull
+    @Override
+    public MouseKeyImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+        View view = LayoutInflater.from(parent.getContext())
+                .inflate(R.layout.mouse_keys_image_item, parent, false);
+        return new MouseKeyImageViewHolder(view, parent.getContext());
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull MouseKeyImageViewHolder holder, int position) {
+        ((MouseKeyImageViewHolder) holder).bindView(DRAWABLE_LIST.get(position),
+                mComposedSummaryList.get(position));
+    }
+
+    @Override
+    public int getItemCount() {
+        return DRAWABLE_LIST.size();
+    }
+
+    private void composeSummaryForImages(Context context,
+            @Nullable InputDevice currentInputDevice) {
+        if (currentInputDevice == null) {
+            return;
+        }
+        mComposedSummaryList.clear();
+        List<String> directionalLabelList = DIRECTIONAL_CHAR_KEYCODE_LIST.stream().map(
+                (key) -> getDisplayLabel(currentInputDevice, key)).toList();
+        mComposedSummaryList.add(context.getString(R.string.mouse_keys_directional_summary,
+                String.join(",", directionalLabelList)));
+        String leftClickLabel = getDisplayLabel(currentInputDevice, LEFT_CLICK_CHAR_KEYCODE);
+        mComposedSummaryList.add(
+                context.getString(R.string.mouse_keys_click_summary, leftClickLabel));
+        String pressHoldLabel = getDisplayLabel(currentInputDevice, PRESS_HOLD_CHAR_KEYCODE);
+        mComposedSummaryList.add(
+                context.getString(R.string.mouse_keys_press_hold_summary, pressHoldLabel));
+        String releaseLabel = getDisplayLabel(currentInputDevice, RELEASE_CHAR_KEYCODE);
+        mComposedSummaryList.add(
+                context.getString(R.string.mouse_keys_release_summary, releaseLabel));
+        List<String> toggleScrollLabelList = TOGGLE_SCROLL_CHAR_KEYCODE_LIST.stream().map(
+                (key) -> getDisplayLabel(currentInputDevice, key)).toList();
+        mComposedSummaryList.add(context.getString(R.string.mouse_keys_toggle_scroll_summary,
+                toggleScrollLabelList.getFirst(),
+                String.join(",", toggleScrollLabelList.subList(1, toggleScrollLabelList.size()))
+        ));
+        String rightClickLabel = getDisplayLabel(currentInputDevice, RIGHT_CLICK_CHAR_KEYCODE);
+        mComposedSummaryList.add(
+                context.getString(R.string.mouse_keys_release2_summary, rightClickLabel));
+    }
+
+    private String getDisplayLabel(InputDevice currentInputDevice, int keycode) {
+        return String.valueOf(currentInputDevice.getKeyCharacterMap().getDisplayLabel(
+                currentInputDevice.getKeyCodeForKeyLocation(keycode))).toLowerCase(Locale.ROOT);
+    }
+
+    public static class MouseKeyImageViewHolder extends RecyclerView.ViewHolder {
+        private final TextView mTextView;
+        private final Context mContext;
+
+        public MouseKeyImageViewHolder(View itemView, Context context) {
+            super(itemView);
+            mTextView = (TextView) itemView;
+            mContext = context;
+        }
+
+        void bindView(int drawableRes, String summary) {
+            mTextView.setText(summary);
+            mTextView.setCompoundDrawablesWithIntrinsicBounds(null,
+                    mContext.getDrawable(drawableRes), null, null);
+        }
+    }
+}
diff --git a/src/com/android/settings/inputmethod/MouseKeysMainPageFragment.java b/src/com/android/settings/inputmethod/MouseKeysMainPageFragment.java
new file mode 100644
index 0000000..dd9c1dd
--- /dev/null
+++ b/src/com/android/settings/inputmethod/MouseKeysMainPageFragment.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2024 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.inputmethod;
+
+import static com.android.settings.inputmethod.PhysicalKeyboardFragment.getHardKeyboards;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.hardware.input.InputManager;
+import android.os.Bundle;
+import android.view.InputDevice;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.preference.PreferenceScreen;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.internal.util.Preconditions;
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.keyboard.Flags;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.utils.ThreadUtils;
+import com.android.settingslib.widget.LayoutPreference;
+
+import java.util.List;
+
+@SearchIndexable
+public class MouseKeysMainPageFragment extends DashboardFragment
+        implements InputManager.InputDeviceListener {
+
+    private static final String TAG = "MouseKeysMainPageFragment";
+    private static final String KEY_MOUSE_KEY_LIST = "mouse_keys_list";
+
+    private InputManager mInputManager;
+    private LayoutPreference mMouseKeyImagesPreference;
+    @Nullable
+    private InputDevice mCurrentInputDevice;
+
+    @Override
+    public void onCreate(@NonNull Bundle bundle) {
+        super.onCreate(bundle);
+        mCurrentInputDevice = getInputDevice();
+        final PreferenceScreen screen = getPreferenceScreen();
+        mMouseKeyImagesPreference = screen.findPreference(KEY_MOUSE_KEY_LIST);
+        mInputManager = Preconditions.checkNotNull(getActivity()
+                .getSystemService(InputManager.class));
+        String title = mCurrentInputDevice == null ? getActivity().getString(R.string.mouse_keys)
+                : getActivity().getString(R.string.mouse_key_main_page_title,
+                        mCurrentInputDevice.getName());
+        getActivity().setTitle(title);
+        configureImagesPreference();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        finishEarlyIfNeeded();
+        mInputManager.registerInputDeviceListener(this, null);
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        mInputManager.unregisterInputDeviceListener(this);
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.PHYSICAL_KEYBOARD_A11Y;
+    }
+
+    @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.mouse_keys_main_page;
+    }
+
+    @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
+    @Override
+    public void onInputDeviceAdded(int deviceId) {
+        finishEarlyIfNeeded();
+    }
+
+    @Override
+    public void onInputDeviceRemoved(int deviceId) {
+        finishEarlyIfNeeded();
+    }
+
+    @Override
+    public void onInputDeviceChanged(int deviceId) {
+        finishEarlyIfNeeded();
+    }
+
+    private void finishEarlyIfNeeded() {
+        final Context context = getContext();
+        ThreadUtils.postOnBackgroundThread(() -> {
+            final List<PhysicalKeyboardFragment.HardKeyboardDeviceInfo> newHardKeyboards =
+                    getHardKeyboards(context);
+            if (newHardKeyboards.isEmpty()) {
+                getActivity().finish();
+            }
+        });
+    }
+
+    private void configureImagesPreference() {
+        final RecyclerView recyclerView = mMouseKeyImagesPreference.findViewById(
+                R.id.mouse_keys_image_recycler_list);
+        recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
+        recyclerView.setAdapter(new MouseKeysImageListAdapter(getActivity(), mCurrentInputDevice));
+    }
+
+    /**
+     * Priority of picking input device:
+     * 1. internal keyboard(built-in keyboard)
+     * 2. first keyboard in the list
+     */
+    @Nullable
+    private InputDevice getInputDevice() {
+        InputDevice inputDevice = null;
+        for (int deviceId : InputDevice.getDeviceIds()) {
+            final InputDevice device = InputDevice.getDevice(deviceId);
+            if (device == null || device.isVirtual() || !device.isFullKeyboard()) {
+                continue;
+            }
+            if (inputDevice == null) {
+                inputDevice = device;
+            } else if (!device.isExternal()) {
+                inputDevice = device;
+                break;
+            }
+        }
+        return inputDevice;
+    }
+
+    public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider(R.xml.mouse_keys_main_page) {
+                @Override
+                protected boolean isPageSearchEnabled(Context context) {
+                    return Flags.keyboardAndTouchpadA11yNewPageEnabled()
+                            && !getHardKeyboards(context).isEmpty();
+                }
+            };
+}
diff --git a/src/com/android/settings/network/NetworkProviderScreen.kt b/src/com/android/settings/network/NetworkProviderScreen.kt
new file mode 100644
index 0000000..fa3ed78
--- /dev/null
+++ b/src/com/android/settings/network/NetworkProviderScreen.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2024 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.network
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class NetworkProviderScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider {
+    override val key: String
+        get() = KEY
+
+    override val title: Int
+        get() = R.string.provider_internet_settings
+
+    override val icon: Int
+        get() = R.drawable.ic_settings_wireless
+
+    override val keywords: Int
+        get() = R.string.keywords_internet
+
+    override fun isAvailable(context: Context) =
+        context.resources.getBoolean(R.bool.config_show_internet_settings)
+
+    override fun isFlagEnabled(context: Context) = Flags.catalystInternetSettings()
+
+    override fun hasCompleteHierarchy() = false
+
+    override fun fragmentClass() = NetworkProviderSettings::class.java
+
+    override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+    companion object {
+        const val KEY = "internet_settings"
+    }
+}
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index b268461..455201a 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -1508,4 +1508,9 @@
             return android.R.attr.colorControlNormal;
         }
     }
+
+    @Override
+    public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+        return NetworkProviderScreen.KEY;
+    }
 }
diff --git a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
index 99683a8..77f4e1c 100644
--- a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
+++ b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
@@ -224,7 +224,10 @@
         }
 
         private val BooleanKeysWhichNotFollowingsNamingConventions =
-            listOf(CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
+            listOf(
+                CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS,
+                CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            )
 
         private fun checkBooleanKey(key: String) {
             check(key.endsWith("_bool") || key in BooleanKeysWhichNotFollowingsNamingConventions) {
diff --git a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
index 220218c..a37a12b 100644
--- a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
+++ b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
@@ -17,6 +17,7 @@
 package com.android.settings.network.telephony
 
 import android.content.Context
+import android.telephony.CarrierConfigManager
 import android.telephony.SubscriptionManager
 import android.telephony.TelephonyManager
 import android.telephony.data.ApnSetting
@@ -45,7 +46,7 @@
     private var subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID
     private var telephonyManager: TelephonyManager =
         context.getSystemService(TelephonyManager::class.java)!!
-
+    private val carrierConfigRepository = CarrierConfigRepository(context)
     private var preferenceScreen: PreferenceScreen? = null
 
     fun init(subId: Int) {
@@ -54,7 +55,13 @@
     }
 
     override fun getAvailabilityStatus() =
-        if (getAvailabilityStatus(telephonyManager, subId, getDefaultDataSubId)) AVAILABLE
+        if (getAvailabilityStatus(
+                telephonyManager,
+                subId,
+                getDefaultDataSubId,
+                carrierConfigRepository
+            )
+        ) AVAILABLE
         else CONDITIONALLY_UNAVAILABLE
 
     override fun displayPreference(screen: PreferenceScreen) {
@@ -92,11 +99,14 @@
             telephonyManager: TelephonyManager,
             subId: Int,
             getDefaultDataSubId: () -> Int,
+            carrierConfigRepository: CarrierConfigRepository,
         ): Boolean {
             return SubscriptionManager.isValidSubscriptionId(subId) &&
                 !telephonyManager.isDataEnabled &&
                 telephonyManager.isApnMetered(ApnSetting.TYPE_MMS) &&
-                !isFallbackDataEnabled(telephonyManager, subId, getDefaultDataSubId())
+                !isFallbackDataEnabled(telephonyManager, subId, getDefaultDataSubId()) &&
+                carrierConfigRepository.getBoolean(
+                    subId, CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL)
         }
 
         private fun isFallbackDataEnabled(
@@ -118,11 +128,16 @@
         ) : MobileNetworkSettingsSearchItem {
             private var telephonyManager: TelephonyManager =
                 context.getSystemService(TelephonyManager::class.java)!!
+            private val carrierConfigRepository = CarrierConfigRepository(context)
 
             @VisibleForTesting
             fun isAvailable(subId: Int): Boolean =
                 getAvailabilityStatus(
-                    telephonyManager.createForSubscriptionId(subId), subId, getDefaultDataSubId)
+                    telephonyManager.createForSubscriptionId(subId),
+                    subId,
+                    getDefaultDataSubId,
+                    carrierConfigRepository
+                )
 
             override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
                 if (!isAvailable(subId)) return null
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index a16f4b5..4ae51ab 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -219,7 +219,7 @@
         setProgressBarVisible(true);
         mNetworkScanJob = mNetworkScanRepository.launchNetworkScan(getViewLifecycleOwner(),
                 (networkScanResult) -> {
-                    if (isPreferenceScreenEnabled()) {
+                    if (isPreferenceScreenEnabled() && !isFinishingOrDestroyed()) {
                         scanResultHandler(networkScanResult);
                     }
 
diff --git a/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java b/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
index fe90a2a..2dc5b2d 100644
--- a/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
+++ b/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
@@ -46,8 +46,6 @@
                 restrictedSwitchPreference.setVisible(true);
                 if (mUserCaps.mDisallowAddUserSetByAdmin) {
                     restrictedSwitchPreference.setDisabledByAdmin(mUserCaps.mEnforcedAdmin);
-                } else if (mUserCaps.mDisallowAddUser) {
-                    restrictedSwitchPreference.setVisible(false);
                 }
             } else {
                 restrictedSwitchPreference.setDisabledByAdmin(
@@ -62,7 +60,11 @@
         if (!mUserCaps.isAdmin()) {
             return DISABLED_FOR_USER;
         } else if (android.multiuser.Flags.newMultiuserSettingsUx()) {
-            return AVAILABLE;
+            if (mUserCaps.mDisallowAddUser && !mUserCaps.mDisallowAddUserSetByAdmin) {
+                return DISABLED_FOR_USER;
+            } else {
+                return AVAILABLE;
+            }
         } else if (mUserCaps.disallowAddUser() || mUserCaps.disallowAddUserSetByAdmin()) {
             return DISABLED_FOR_USER;
         } else {
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index e5581d3..dddbd63 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -54,9 +54,9 @@
 import com.android.internal.telephony.flags.Flags;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;
-import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.network.ims.WifiCallingQueryImsState;
 import com.android.settings.network.telephony.wificalling.IWifiCallingRepository;
 import com.android.settings.network.telephony.wificalling.WifiCallingRepository;
@@ -70,7 +70,7 @@
  * This is the inner class of {@link WifiCallingSettings} fragment.
  * The preference screen lets you enable/disable Wi-Fi Calling and change Wi-Fi Calling mode.
  */
-public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
+public class WifiCallingSettingsForSub extends DashboardFragment
         implements OnCheckedChangeListener,
         Preference.OnPreferenceChangeListener {
     private static final String TAG = "WifiCallingForSub";
@@ -266,8 +266,6 @@
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        addPreferencesFromResource(R.xml.wifi_calling_settings);
-
         // SubId should always be specified when creating this fragment. Either through
         // fragment.setArguments() or through savedInstanceState.
         if (getArguments() != null && getArguments().containsKey(FRAGMENT_BUNDLE_SUBID)) {
@@ -447,6 +445,11 @@
     }
 
     @Override
+    protected int getPreferenceScreenResId() {
+        return R.xml.wifi_calling_settings;
+    }
+
+    @Override
     public void onPause() {
         super.onPause();
         Context context = getActivity();
@@ -571,6 +574,11 @@
         }
     }
 
+    @Override
+    protected String getLogTag() {
+        return TAG;
+    }
+
     private void updateButtonWfcMode(boolean wfcEnabled,
             int wfcMode, int wfcRoamingMode) {
         mButtonWfcMode.setSummary(getWfcModeSummary(wfcMode));
diff --git a/tests/Enable16KbTests/Android.bp b/tests/Enable16KbTests/Android.bp
index 7e1d32c..72826bb 100644
--- a/tests/Enable16KbTests/Android.bp
+++ b/tests/Enable16KbTests/Android.bp
@@ -53,7 +53,7 @@
         "compatibility-host-util",
         "compatibility-tradefed",
     ],
-    data: [
+    device_common_data: [
         ":test_16kb_app",
     ],
     test_suites: ["general-tests"],
diff --git a/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionScreenTest.kt b/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionScreenTest.kt
index 6d7164e..67fbc1a 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionScreenTest.kt
+++ b/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionScreenTest.kt
@@ -27,7 +27,9 @@
 @RunWith(AndroidJUnit4::class)
 class ColorAndMotionScreenTest : CatalystScreenTestCase() {
     override val preferenceScreenCreator: PreferenceScreenCreator = ColorAndMotionScreen()
-    override val flagName: String = Flags.FLAG_CATALYST_ACCESSIBILITY_COLOR_AND_MOTION
+
+    override val flagName: String
+        get() = Flags.FLAG_CATALYST_ACCESSIBILITY_COLOR_AND_MOTION
 
     override fun migration() {}
 
@@ -35,4 +37,4 @@
     fun key() {
         assertThat(preferenceScreenCreator.key).isEqualTo(ColorAndMotionScreen.KEY)
     }
-}
\ No newline at end of file
+}
diff --git a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
index a934cba..f55cbb4 100644
--- a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
@@ -16,8 +16,9 @@
 
 package com.android.settings.applications.contacts;
 
-import static android.provider.ContactsContract.Settings.KEY_DEFAULT_ACCOUNT;
-import static android.provider.ContactsContract.Settings.QUERY_DEFAULT_ACCOUNT_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_DEFAULT_ACCOUNT_STATE;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
+import static android.provider.ContactsContract.Settings;
 
 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
 import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
@@ -28,25 +29,26 @@
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 
-
 import android.accounts.Account;
 import android.accounts.AccountManager;
+import android.content.ContentProviderClient;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.platform.test.annotations.EnableFlags;
+import android.platform.test.annotations.RequiresFlagsDisabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
 import android.platform.test.flag.junit.SetFlagsRule;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
 
 import com.android.settings.R;
 import com.android.settings.flags.Flags;
 import com.android.settings.testutils.shadow.ShadowAuthenticationHelper;
 
 import org.junit.Before;
-import android.platform.test.annotations.RequiresFlagsDisabled;
-import android.platform.test.flag.junit.CheckFlagsRule;
-import android.platform.test.flag.junit.DeviceFlagsValueProvider;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -62,11 +64,6 @@
 
     private static final String CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY =
             "contacts_default_account";
-    private static final Account TEST_ACCOUNT1 = new Account("test@gmail.com", "type1");
-
-    private static final Account TEST_ACCOUNT2 = new Account("test@samsung.com", "type2");
-
-    private static final Account TEST_ACCOUNT3 = new Account("LABEL3", "type3");
 
     @Rule
     public final MockitoRule mockito = MockitoJUnit.rule();
@@ -84,6 +81,9 @@
     private ContentResolver mContentResolver;
 
     @Mock
+    private ContentProviderClient mContentProviderClient;
+
+    @Mock
     private Resources mResources;
 
     @Mock
@@ -94,9 +94,15 @@
     @Before
     public void setUp() throws Exception {
         when(mContext.getContentResolver()).thenReturn(mContentResolver);
+        when(mContentResolver.acquireContentProviderClient(
+                eq(ContactsContract.AUTHORITY_URI))).thenReturn(mContentProviderClient);
         when(mContext.getSystemService(eq(Context.ACCOUNT_SERVICE))).thenReturn(mAccountManager);
         when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(new Account[]{});
-
+        Bundle bundle = new Bundle();
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
         mPreferenceController = new ContactsStoragePreferenceController(mContext,
                 CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
     }
@@ -104,13 +110,39 @@
     @Test
     @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
     public void getAvailabilityStatus_flagIsOn_shouldReturnAvailable() {
-
         assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
     }
 
     @Test
     @RequiresFlagsDisabled(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
     public void getAvailabilityStatus_flagIsOff_shouldReturnConditionallyUnavailable() {
+        assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
+                CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
+    public void getAvailabilityStatus_illegalStateExceptionThrown_shouldReturnConditionallyUnavailable()
+            throws Exception {
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenThrow(new IllegalStateException());
+
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
+        assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
+                CONDITIONALLY_UNAVAILABLE);
+    }
+
+    @Test
+    @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
+    public void getAvailabilityStatus_runtimeExceptionThrown_shouldReturnConditionallyUnavailable()
+            throws Exception {
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenThrow(new RuntimeException());
+
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
 
         assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
                 CONDITIONALLY_UNAVAILABLE);
@@ -118,43 +150,77 @@
 
     @Test
     public void getSummary_noAccountIsSetAsDefault_shouldReturnNoAccountSetSummary() {
-        Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, null);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
         when(mContext.getResources()).thenReturn(mResources);
-        when(mResources.getString(eq(R.string.contacts_storage_no_account_set))).thenReturn(
+        when(mResources.getString(eq(R.string.contacts_storage_no_account_set_summary))).thenReturn(
                 "No default set");
 
+        // Fetch the default account from CP2.
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
         assertThat(mPreferenceController.getSummary()).isEqualTo("No default set");
     }
 
     @Test
-    public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName() {
+    public void getSummary_localAccountIsSetAsDefault_shouldReturnLocalAccountSetSummary()
+            throws Exception {
         Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT1);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
+        when(mContext.getResources()).thenReturn(mResources);
+        when(mResources.getString(eq(R.string.contacts_storage_local_account_summary))).thenReturn(
+                "Device only");
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
+        assertThat(mPreferenceController.getSummary()).isEqualTo("Device only");
+    }
+
+    @Test
+    public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName()
+            throws Exception {
+        Bundle bundle = new Bundle();
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+        bundle.putString(Settings.ACCOUNT_TYPE, "type1");
+        bundle.putString(Settings.ACCOUNT_NAME, "test@gmail.com");
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
 
         assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL1 | test@gmail.com");
     }
 
     @Test
-    public void getSummary_samsungAccountIsSetAsDefault_shouldReturnSamsungAccountTypeAndAccountName() {
+    public void getSummary_samsungAccountIsSetAsDefault_shouldReturnSamsungAccountTypeAndAccountName()
+            throws Exception {
         Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT2);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+        bundle.putString(Settings.ACCOUNT_TYPE, "type2");
+        bundle.putString(Settings.ACCOUNT_NAME, "test@samsung.com");
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
 
         assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL2 | test@samsung.com");
     }
 
     @Test
-    public void getSummary_accountLabelSameAsAccountName_onlyReturnAccountName() {
+    public void getSummary_accountLabelSameAsAccountName_onlyReturnAccountName() throws Exception {
         Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT3);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+        bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+        bundle.putString(Settings.ACCOUNT_TYPE, "type3");
+        bundle.putString(Settings.ACCOUNT_NAME, "LABEL3");
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(bundle);
+        mPreferenceController = new ContactsStoragePreferenceController(mContext,
+                CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
 
         // Since package name and account name is the same, we only return account name.
         assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL3");
diff --git a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
index 785ef4a..a8c86e1 100644
--- a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
@@ -15,16 +15,17 @@
  */
 package com.android.settings.applications.contacts;
 
-import static android.provider.ContactsContract.Settings.KEY_DEFAULT_ACCOUNT;
-import static android.provider.ContactsContract.Settings.QUERY_DEFAULT_ACCOUNT_METHOD;
-import static android.provider.ContactsContract.Settings.SET_DEFAULT_ACCOUNT_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_DEFAULT_ACCOUNT_STATE;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_ELIGIBLE_DEFAULT_ACCOUNTS;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
 import static android.provider.Settings.ACTION_ADD_ACCOUNT;
 import static android.provider.Settings.EXTRA_ACCOUNT_TYPES;
 
 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.eq;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
@@ -33,14 +34,17 @@
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.app.settings.SettingsEnums;
+import android.content.ContentProviderClient;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
 import android.provider.SearchIndexableResource;
 
+import androidx.preference.Preference;
 import androidx.preference.PreferenceManager;
 import androidx.preference.PreferenceScreen;
 import androidx.test.core.app.ApplicationProvider;
@@ -63,6 +67,7 @@
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
@@ -76,6 +81,8 @@
 
     private static final Account TEST_ACCOUNT2 = new Account("test@samsung.com", "type2");
 
+    private static final Account TEST_ACCOUNT3 = new Account("test@outlook.com", "type3");
+
     @Rule
     public final MockitoRule mockito = MockitoJUnit.rule();
     @Spy
@@ -83,8 +90,7 @@
     @Mock
     private ContentResolver mContentResolver;
     @Mock
-    private AccountManager mAccountManager;
-
+    private ContentProviderClient mContentProviderClient;
     private PreferenceManager mPreferenceManager;
     private TestContactsStorageSettings mContactsStorageSettings;
     private PreferenceScreen mScreen;
@@ -92,8 +98,8 @@
     @Before
     public void setUp() throws Exception {
         mContactsStorageSettings = spy(new TestContactsStorageSettings(mContext, mContentResolver));
-        when(mContext.getSystemService(eq(Context.ACCOUNT_SERVICE))).thenReturn(mAccountManager);
-        when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(new Account[]{});
+        when(mContentResolver.acquireContentProviderClient(
+                eq(ContactsContract.AUTHORITY_URI))).thenReturn(mContentProviderClient);
         mPreferenceManager = new PreferenceManager(mContext);
         when(mContactsStorageSettings.getPreferenceManager()).thenReturn(mPreferenceManager);
         mScreen = spy(new PreferenceScreen(mContext, /* attrs= */ null));
@@ -115,12 +121,17 @@
     }
 
     @Test
-    public void verifyDeviceOnlyPreference_onClick_setDefaultAccountToNull() {
-        when(mAccountManager.getAccounts()).thenReturn(new Account[]{});
-        Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, null);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+    public void verifyDeviceOnlyPreference_onClick_setDefaultAccountToNull() throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                new ArrayList<>());
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
 
         PreferenceScreen settingScreen = mPreferenceManager.inflateFromResource(mContext,
                 R.xml.contacts_storage_settings, mScreen);
@@ -139,18 +150,27 @@
 
         assertThat(deviceOnlyPreference.isChecked()).isTrue();
         ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
-        verify(mContentResolver).call(eq(ContactsContract.AUTHORITY_URI),
-                eq(SET_DEFAULT_ACCOUNT_METHOD), any(), captor.capture());
+        verify(mContentProviderClient).call(eq(SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                captor.capture());
         Bundle accountBundle = captor.getValue();
         assertThat(accountBundle.getString(ContactsContract.Settings.ACCOUNT_NAME)).isNull();
         assertThat(accountBundle.getString(ContactsContract.Settings.ACCOUNT_TYPE)).isNull();
     }
 
     @Test
-    public void verifyAddAccountPreference_onClick_startAddAccountActivity() {
-        when(mAccountManager.getAccounts()).thenReturn(new Account[]{});
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(Bundle.EMPTY);
+    public void verifyAddAccountPreference_eligibleAccountsAvailable_startAddAccountActivityOnClick()
+            throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                new ArrayList<>());
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
+        mContactsStorageSettings.setEligibleAccountTypes(new String[]{"com.google"});
 
         mContactsStorageSettings.refreshUI();
 
@@ -167,16 +187,45 @@
         assertThat(addAccountIntent.getComponent().getClassName()).isEqualTo(
                 AddAccountSettings.class.getCanonicalName());
         String[] eligibleAccounts = (String[]) addAccountIntent.getExtra(EXTRA_ACCOUNT_TYPES);
-        assertThat(eligibleAccounts).isEmpty();
+        assertThat(List.of(eligibleAccounts)).containsExactly("com.google");
     }
 
     @Test
-    public void verifyEligibleAccountPreference_onClick_setSelectedDefaultAccount() {
-        when(mAccountManager.getAccounts()).thenReturn(new Account[]{TEST_ACCOUNT1, TEST_ACCOUNT2});
-        Bundle bundle = new Bundle();
-        bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT2);
-        when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
-                eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+    public void verifyAddAccountPreference_noEligibleAccountsAvailable_dontShowPreference()
+            throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                new ArrayList<>());
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
+        mContactsStorageSettings.setEligibleAccountTypes(new String[]{});
+
+        mContactsStorageSettings.refreshUI();
+
+        Preference addAccountPreference = mScreen.findPreference(PREF_KEY_ADD_ACCOUNT);
+        assertThat(addAccountPreference).isNull();
+    }
+
+    @Test
+    public void verifyEligibleAccountPreference_onClick_setSelectedDefaultAccount()
+            throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        ArrayList<Account> eligibleAccounts = new ArrayList<>(
+                List.of(TEST_ACCOUNT1, TEST_ACCOUNT2));
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                eligibleAccounts);
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
 
         mContactsStorageSettings.refreshUI();
 
@@ -197,8 +246,8 @@
         assertThat(account2Preference.isChecked()).isTrue();
 
         ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
-        verify(mContentResolver).call(eq(ContactsContract.AUTHORITY_URI),
-                eq(SET_DEFAULT_ACCOUNT_METHOD), any(), captor.capture());
+        verify(mContentProviderClient).call(eq(SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                captor.capture());
         Bundle setAccountBundle = captor.getValue();
         assertThat(setAccountBundle.getString(ContactsContract.Settings.ACCOUNT_NAME)).isEqualTo(
                 "test@samsung.com");
@@ -207,6 +256,49 @@
     }
 
     @Test
+    public void verifyAccountPreference_defaultAccountIsNotEligibleCloudAccount_createNewDefaultAccountPreference()
+            throws Exception {
+        Bundle currentDefaultAccount = new Bundle();
+        currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+                DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+        currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_NAME, TEST_ACCOUNT3.name);
+        currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_TYPE, TEST_ACCOUNT3.type);
+        when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+                any())).thenReturn(currentDefaultAccount);
+        Bundle eligibleAccountBundle = new Bundle();
+        ArrayList<Account> eligibleAccounts = new ArrayList<>(
+                List.of(TEST_ACCOUNT1, TEST_ACCOUNT2));
+        eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+                eligibleAccounts);
+        when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+                any())).thenReturn(eligibleAccountBundle);
+
+        mContactsStorageSettings.refreshUI();
+
+        SelectorWithWidgetPreference account1Preference = mScreen.findPreference(
+                String.valueOf(TEST_ACCOUNT1.hashCode()));
+        assertThat(account1Preference.getTitle()).isEqualTo("LABEL1");
+        assertThat(account1Preference.getSummary()).isEqualTo("test@gmail.com");
+        assertThat(account1Preference.getIcon()).isNotNull();
+
+        SelectorWithWidgetPreference account2Preference = mScreen.findPreference(
+                String.valueOf(TEST_ACCOUNT2.hashCode()));
+        assertThat(account2Preference.getTitle()).isEqualTo("LABEL2");
+        assertThat(account2Preference.getSummary()).isEqualTo("test@samsung.com");
+        assertThat(account2Preference.getIcon()).isNotNull();
+
+        SelectorWithWidgetPreference account3Preference = mScreen.findPreference(
+                String.valueOf(TEST_ACCOUNT3.hashCode()));
+        assertThat(account3Preference.getTitle()).isEqualTo("LABEL3");
+        assertThat(account3Preference.getSummary()).isEqualTo("test@outlook.com");
+        assertThat(account3Preference.getIcon()).isNotNull();
+
+        assertThat(account1Preference.isChecked()).isFalse();
+        assertThat(account2Preference.isChecked()).isFalse();
+        assertThat(account3Preference.isChecked()).isTrue();
+    }
+
+    @Test
     public void searchIndexProvider_shouldIndexResource() {
         final List<SearchIndexableResource> indexRes =
                 ContactsStorageSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(
@@ -220,6 +312,7 @@
     private static class TestContactsStorageSettings extends ContactsStorageSettings {
         private final Context mContext;
         private final ContentResolver mContentResolver;
+        private String[] mEligibleAccountTypes;
 
         TestContactsStorageSettings(Context context, ContentResolver contentResolver) {
             mContext = context;
@@ -236,5 +329,16 @@
             // Override it so we can access this method in test
             return mContentResolver;
         }
+
+        @Override
+        String[] getEligibleAccountTypes() {
+            return mEligibleAccountTypes == null ? Resources.getSystem().getStringArray(
+                    com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes)
+                    : mEligibleAccountTypes;
+        }
+
+        public void setEligibleAccountTypes(String[] eligibleAccountTypes) {
+            mEligibleAccountTypes = eligibleAccountTypes;
+        }
     }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
index 2f20b42..1fed13f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
@@ -110,7 +110,6 @@
         mDataProcessManager =
                 new DataProcessManager(
                         mContext,
-                        /* handler= */ null,
                         mUserIdsSeries,
                         /* isFromPeriodJob= */ false,
                         /* rawStartTimestamp= */ 0L,
@@ -131,7 +130,6 @@
         final DataProcessManager dataProcessManager =
                 new DataProcessManager(
                         mContext,
-                        /* handler= */ null,
                         mUserIdsSeries,
                         /* callbackFunction= */ null);
         assertThat(dataProcessManager.getShowScreenOnTime()).isFalse();
@@ -257,7 +255,6 @@
         final DataProcessManager dataProcessManager =
                 new DataProcessManager(
                         mContext,
-                        /* handler= */ null,
                         mUserIdsSeries,
                         /* isFromPeriodJob= */ false,
                         /* rawStartTimestamp= */ 2L,
@@ -349,7 +346,6 @@
         assertThat(
                         DataProcessManager.getBatteryLevelData(
                                 mContext,
-                                /* handler= */ null,
                                 mUserIdsSeries,
                                 /* isFromPeriodJob= */ false,
                                 /* asyncResponseDelegate= */ null))
@@ -357,7 +353,6 @@
         assertThat(
                         DataProcessManager.getBatteryLevelData(
                                 mContext,
-                                /* handler= */ null,
                                 mUserIdsSeries,
                                 /* isFromPeriodJob= */ true,
                                 /* asyncResponseDelegate= */ null))
@@ -379,7 +374,6 @@
         final BatteryLevelData resultData =
                 DataProcessManager.getBatteryLevelData(
                         mContext,
-                        /* handler= */ null,
                         mUserIdsSeries,
                         /* isFromPeriodJob= */ false,
                         /* asyncResponseDelegate= */ null);
@@ -408,7 +402,6 @@
         final BatteryLevelData resultData =
                 DataProcessManager.getBatteryLevelData(
                         mContext,
-                        /* handler= */ null,
                         mUserIdsSeries,
                         /* isFromPeriodJob= */ false,
                         /* asyncResponseDelegate= */ null);
diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderScreenTest.kt b/tests/robotests/src/com/android/settings/network/NetworkProviderScreenTest.kt
new file mode 100644
index 0000000..d8888c5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/NetworkProviderScreenTest.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2024 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.network
+
+import android.content.ContextWrapper
+import android.content.res.Resources
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.stub
+
+@RunWith(AndroidJUnit4::class)
+class NetworkProviderScreenTest : CatalystScreenTestCase() {
+    override val preferenceScreenCreator = NetworkProviderScreen()
+
+    override val flagName: String
+        get() = Flags.FLAG_CATALYST_INTERNET_SETTINGS
+
+    private val mockResources = mock<Resources>()
+
+    private val context =
+        object : ContextWrapper(appContext) {
+            override fun getResources(): Resources = mockResources
+        }
+
+    @Test
+    fun key() {
+        assertThat(preferenceScreenCreator.key).isEqualTo(NetworkProviderScreen.KEY)
+    }
+
+    @Test
+    fun isAvailable_showInternetSettings_shouldReturnTrue() {
+        mockResources.stub { on { getBoolean(anyInt()) } doReturn true }
+
+        assertThat(preferenceScreenCreator.isAvailable(context)).isTrue()
+    }
+
+    @Test
+    fun isAvailable_notShowInternetSettings_shouldReturnFalse() {
+        mockResources.stub { on { getBoolean(anyInt()) } doReturn false }
+
+        assertThat(preferenceScreenCreator.isAvailable(context)).isFalse()
+    }
+
+    override fun migration() {}
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
index 4440bc9..f34042d 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
@@ -90,6 +90,7 @@
     private static final String PREFERENCE_NO_OPTIONS_DESC = "no_options_description";
     private static final String TEST_EMERGENCY_ADDRESS_CARRIER_APP =
             "com.android.settings/.wifi.calling.TestEmergencyAddressCarrierApp";
+    private static final String PREFERENCE_EMERGENCY_ADDRESS = "emergency_address_key";
 
     private TestFragment mFragment;
     private Context mContext;
@@ -138,6 +139,7 @@
         doReturn(mContext.getResources()).when(mFragment).getResources();
         doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
         doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(anyInt());
+        doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner();
         final Bundle bundle = new Bundle();
         when(mFragment.getArguments()).thenReturn(bundle);
         doNothing().when(mFragment).addPreferencesFromResource(anyInt());
@@ -380,19 +382,22 @@
 
         @Override
         public <T extends Preference> T findPreference(CharSequence key) {
-            if (SWITCH_BAR.equals(key)) {
+            if (SWITCH_BAR.contentEquals(key)) {
                 return (T) mSwitchPref;
             }
-            if (BUTTON_WFC_MODE.equals(key)) {
+            if (BUTTON_WFC_MODE.contentEquals(key)) {
                 return (T) mButtonWfcMode;
             }
-            if (BUTTON_WFC_ROAMING_MODE.equals(key)) {
+            if (BUTTON_WFC_ROAMING_MODE.contentEquals(key)) {
                 return (T) mButtonWfcRoamingMode;
             }
-            if (PREFERENCE_NO_OPTIONS_DESC.equals(key)) {
+            if (PREFERENCE_NO_OPTIONS_DESC.contentEquals(key)) {
                 return (T) mDescriptionView;
             }
-            return (T) mock(ListWithEntrySummaryPreference.class);
+            if (PREFERENCE_EMERGENCY_ADDRESS.contentEquals(key)) {
+                return (T) mUpdateAddress;
+            }
+            return null;
         }
 
         @Override
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
index 4d53260..75c1913 100644
--- a/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
@@ -17,6 +17,7 @@
 package com.android.settings.network.telephony
 
 import android.content.Context
+import android.telephony.CarrierConfigManager
 import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
 import android.telephony.TelephonyManager
 import android.telephony.data.ApnSetting
@@ -26,6 +27,7 @@
 import com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE
 import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem
 import com.google.common.truth.Truth.assertThat
+import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.mockito.kotlin.doReturn
@@ -63,6 +65,21 @@
         getDefaultDataSubId = { defaultDataSubId },
     )
 
+    @Before
+    fun setUp() {
+        CarrierConfigRepository.resetForTest()
+        CarrierConfigRepository.setBooleanForTest(
+            subId = SUB_1_ID,
+            key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            value = true,
+        )
+        CarrierConfigRepository.setBooleanForTest(
+            subId = SUB_2_ID,
+            key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            value = true,
+        )
+    }
+
     @Test
     fun getAvailabilityStatus_invalidSubscription_unavailable() {
         controller.init(INVALID_SUBSCRIPTION_ID)
@@ -165,6 +182,27 @@
     }
 
     @Test
+    fun getAvailabilityStatus_carrierConfigEnabledMmsFalse_unavailable() {
+        defaultDataSubId = SUB_2_ID
+        mockTelephonyManager2.stub {
+            on { isDataEnabled } doReturn false
+            on {
+                isMobileDataPolicyEnabled(TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH)
+            } doReturn true
+        }
+        CarrierConfigRepository.setBooleanForTest(
+            subId = SUB_2_ID,
+            key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            value = false,
+        )
+        controller.init(SUB_2_ID)
+
+        val availabilityStatus = controller.getAvailabilityStatus()
+
+        assertThat(availabilityStatus).isEqualTo(CONDITIONALLY_UNAVAILABLE)
+    }
+
+    @Test
     fun searchIsAvailable_notDefaultDataAndDataOnAndAutoDataSwitchOn_unavailable() {
         mockTelephonyManager1.stub {
             on { isDataEnabled } doReturn true
@@ -201,6 +239,27 @@
     }
 
     @Test
+    fun searchIsAvailable_carrierConfigEnabledMmsFalse_unavailable() {
+        defaultDataSubId = SUB_2_ID
+        mockTelephonyManager2.stub {
+            on { isDataEnabled } doReturn false
+            on {
+                isMobileDataPolicyEnabled(TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH)
+            } doReturn true
+        }
+        CarrierConfigRepository.setBooleanForTest(
+            subId = SUB_2_ID,
+            key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+            value = false,
+        )
+        controller.init(SUB_2_ID)
+
+        val availabilityStatus = controller.getAvailabilityStatus()
+
+        assertThat(availabilityStatus).isEqualTo(CONDITIONALLY_UNAVAILABLE)
+    }
+
+    @Test
     fun isChecked_whenMmsNotAlwaysAllowed_returnFalse() {
         mockTelephonyManager2.stub {
             on {
diff --git a/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java b/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
index 0e51733..a3f82b5 100644
--- a/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
+++ b/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
@@ -31,6 +31,7 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 
+import androidx.test.annotation.UiThreadTest;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
 import androidx.test.platform.app.InstrumentationRegistry;
 
@@ -90,6 +91,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void noAvailableAlternativeFragmentAvailable_defaultFragmentSet() {
         when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
                 .thenReturn(false);
@@ -99,6 +101,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void alternativeFragmentAvailable_alternativeFragmentSet() {
         when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
                 .thenReturn(true);
@@ -110,6 +113,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void noAvailableAlternativeFragmentAvailable_alternativeFragmentNotValid() {
         when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
                 .thenReturn(false);
@@ -118,6 +122,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void alternativeFragmentAvailable_alternativeFragmentIsValid() {
         when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
                 .thenReturn(true);
@@ -128,6 +133,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void onCreate_whenSafetyCenterEnabled_redirectsToSafetyCenter() {
         when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(true);
         final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -139,6 +145,7 @@
     }
 
     @Test
+    @UiThreadTest
     public void onCreate_whenSafetyCenterDisabled_doesntRedirectToSafetyCenter() {
         when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(false);