Merge "Update Battery Saver schedule to add order to seekbar" into qt-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b7fd299..202335e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -102,13 +102,15 @@
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
 
+    <protected-broadcast android:name="com.android.settings.DELETE_SIM_PROFILE_RESULT"/>
+
     <application android:label="@string/settings_label"
             android:icon="@drawable/ic_launcher_settings"
             android:theme="@style/Theme.Settings"
             android:hardwareAccelerated="true"
             android:requiredForAllUsers="true"
             android:supportsRtl="true"
-            android:allowBackup="false"
+            android:backupAgent="com.android.settings.backup.SettingsBackupHelper"
             android:usesCleartextTraffic="true"
             android:defaultToDeviceProtectedStorage="true"
             android:directBootAware="true"
@@ -136,6 +138,7 @@
             <intent-filter android:priority="1">
                 <action android:name="android.settings.NETWORK_OPERATOR_SETTINGS" />
                 <action android:name="android.settings.DATA_ROAMING_SETTINGS" />
+                <action android:name="android.settings.MMS_MESSAGE_SETTING" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
@@ -845,6 +848,23 @@
             <meta-data android:name="com.android.settings.icon_tintable" android:value="true" />
         </activity>
 
+        <activity android:name=".wallpaper.StyleSuggestionActivity"
+                  android:label="@string/style_suggestion_title"
+                  android:icon="@drawable/ic_theme"
+                  android:theme="@android:style/Theme.NoDisplay">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.settings.suggested.category.FIRST_IMPRESSION" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.title"
+                       android:resource="@string/style_suggestion_title" />
+            <meta-data android:name="com.android.settings.summary"
+                       android:resource="@string/style_suggestion_summary" />
+            <meta-data android:name="com.android.settings.dismiss"
+                       android:value="3,7,30" />
+            <meta-data android:name="com.android.settings.icon_tintable" android:value="true" />
+        </activity>
+
         <activity
             android:name="Settings$ZenModeScheduleRuleSettingsActivity"
             android:exported="true"
@@ -1330,22 +1350,23 @@
         </activity-alias>
 
         <activity android:name=".applications.specialaccess.deviceadmin.DeviceAdminAdd"
-                android:label="@string/device_admin_add_title"
-                android:clearTaskOnLaunch="true">
+                  android:label="@string/device_admin_add_title"
+                  android:clearTaskOnLaunch="true">
             <intent-filter>
                 <action android:name="android.app.action.ADD_DEVICE_ADMIN" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
 
-        <activity-alias android:name="SetProfileOwner"
-                        android:label="@string/profile_owner_add_title"
-                        android:targetActivity=".applications.specialaccess.deviceadmin.DeviceAdminAdd">
+        <activity android:name=".applications.specialaccess.deviceadmin.ProfileOwnerAdd"
+                  android:excludeFromRecents="true"
+                  android:theme="@style/Transparent"
+                  android:clearTaskOnLaunch="true">
             <intent-filter android:priority="1000">
                 <action android:name="android.app.action.SET_PROFILE_OWNER" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-        </activity-alias>
+        </activity>
 
         <activity
             android:name="Settings$UsageAccessSettingsActivity"
@@ -2622,6 +2643,7 @@
         <receiver android:name=".sim.SimSelectNotification">
             <intent-filter>
                 <action android:name="android.telephony.action.PRIMARY_SUBSCRIPTION_LIST_CHANGED"/>
+                <action android:name="android.settings.ENABLE_MMS_DATA_REQUEST"/>
             </intent-filter>
         </receiver>
 
diff --git a/OWNERS b/OWNERS
index bed20a9..ccf8e81 100644
--- a/OWNERS
+++ b/OWNERS
@@ -6,10 +6,10 @@
 asargent@google.com
 dehboxturtle@google.com
 dhnishi@google.com
-dling@google.com
 edgarwang@google.com
 emilychuang@google.com
 jackqdyulei@google.com
+lindatseng@google.com
 mfritze@google.com
 rafftsai@google.com
 tmfang@google.com
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index e0a0206..1031071 100644
--- a/color-check-baseline.xml
+++ b/color-check-baseline.xml
@@ -37,6 +37,86 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:color=&quot;@color/notification_importance_selection_bg&quot; />"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/button_border_selected.xml"
+            line="20"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:color=&quot;@color/notification_importance_button_selected&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/button_border_selected.xml"
+            line="23"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:color=&quot;@color/notification_importance_button_selected&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/button_border_selected.xml"
+            line="23"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:color=&quot;@color/notification_importance_button_unselected&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/button_border_unselected.xml"
+            line="21"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="        android:color=&quot;@color/notification_importance_button_unselected&quot;/>"
+        errorLine2="        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/button_border_unselected.xml"
+            line="21"
+            column="9"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="                android:background=&quot;@color/lock_pattern_background&quot; />"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -53,11 +133,11 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="  &lt;color name=&quot;switch_bar_background&quot;>#dadce0&lt;/color>"
-        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="  &lt;color name=&quot;switchbar_switch_track_tint&quot;>#82000000&lt;/color>"
+        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-night/colors.xml"
-            line="19"
+            line="18"
             column="3"/>
     </issue>
 
@@ -85,8 +165,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="  &lt;color name=&quot;switchbar_switch_track_tint&quot;>#82000000&lt;/color>"
-        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="  &lt;color name=&quot;homepage_accessibility_background&quot;>#783BE5&lt;/color>"
+        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-night/colors.xml"
             line="20"
@@ -117,12 +197,12 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;crypt_keeper_clock_am_pm&quot;>#ff9a9a9a&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="  &lt;color name=&quot;homepage_support_background&quot;>#3F5FBD&lt;/color>"
+        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="res/values/colors.xml"
+            file="res/values-night/colors.xml"
             line="21"
-            column="5"/>
+            column="3"/>
     </issue>
 
     <issue
@@ -133,12 +213,12 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="  &lt;color name=&quot;homepage_accessibility_background&quot;>#783BE5&lt;/color>"
-        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;crypt_keeper_clock_am_pm&quot;>#ff9a9a9a&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
-            file="res/values-night/colors.xml"
-            line="22"
-            column="3"/>
+            file="res/values/colors.xml"
+            line="21"
+            column="5"/>
     </issue>
 
     <issue
@@ -165,7 +245,7 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="  &lt;color name=&quot;homepage_support_background&quot;>#3F5FBD&lt;/color>"
+        errorLine1="  &lt;color name=&quot;homepage_status_bar_color&quot;>#cc000000&lt;/color>"
         errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-night/colors.xml"
@@ -197,22 +277,6 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="  &lt;color name=&quot;homepage_status_bar_color&quot;>#cc000000&lt;/color>"
-        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values-night/colors.xml"
-            line="25"
-            column="3"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;setup_lock_pattern_view_success_color_dark&quot;>#ff84ffff&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -245,6 +309,22 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="  &lt;color name=&quot;notification_importance_button_selected&quot;>#AECBFA&lt;/color> &lt;!-- material blue 200 -->"
+        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values-night/colors.xml"
+            line="30"
+            column="3"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;setup_wizard_wifi_color_dark&quot;>#89ffffff&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -261,6 +341,22 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="  &lt;color name=&quot;notification_importance_button_unselected&quot;>#5F6368&lt;/color>"
+        errorLine2="  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values-night/colors.xml"
+            line="31"
+            column="3"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;setup_wizard_wifi_color_light&quot;>#89000000&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -485,27 +581,11 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;switch_bar_background&quot;>#757575&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="59"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;message_text_incoming&quot;>#ffffffff&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="61"
+            line="60"
             column="5"/>
     </issue>
 
@@ -521,7 +601,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="62"
+            line="61"
             column="5"/>
     </issue>
 
@@ -537,7 +617,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="63"
+            line="62"
             column="5"/>
     </issue>
 
@@ -553,7 +633,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="64"
+            line="63"
             column="5"/>
     </issue>
 
@@ -569,7 +649,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="65"
+            line="64"
             column="5"/>
     </issue>
 
@@ -585,23 +665,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="66"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;conversation_background&quot;>#eeeeee&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="67"
+            line="65"
             column="5"/>
     </issue>
 
@@ -617,7 +681,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="68"
+            line="66"
             column="5"/>
     </issue>
 
@@ -633,7 +697,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="69"
+            line="67"
             column="5"/>
     </issue>
 
@@ -649,7 +713,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="70"
+            line="68"
             column="5"/>
     </issue>
 
@@ -665,7 +729,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="71"
+            line="69"
             column="5"/>
     </issue>
 
@@ -681,7 +745,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="73"
+            line="71"
             column="5"/>
     </issue>
 
@@ -697,7 +761,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="76"
+            line="74"
             column="5"/>
     </issue>
 
@@ -713,7 +777,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="79"
+            line="77"
             column="5"/>
     </issue>
 
@@ -729,7 +793,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="82"
+            line="80"
             column="5"/>
     </issue>
 
@@ -745,7 +809,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="85"
+            line="83"
             column="5"/>
     </issue>
 
@@ -761,7 +825,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="86"
+            line="84"
             column="5"/>
     </issue>
 
@@ -777,7 +841,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="87"
+            line="85"
             column="5"/>
     </issue>
 
@@ -793,7 +857,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="88"
+            line="86"
             column="5"/>
     </issue>
 
@@ -809,7 +873,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="89"
+            line="87"
             column="5"/>
     </issue>
 
@@ -825,7 +889,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="90"
+            line="88"
             column="5"/>
     </issue>
 
@@ -841,7 +905,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="91"
+            line="89"
             column="5"/>
     </issue>
 
@@ -857,7 +921,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="92"
+            line="90"
             column="5"/>
     </issue>
 
@@ -873,7 +937,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="93"
+            line="91"
             column="5"/>
     </issue>
 
@@ -889,7 +953,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="94"
+            line="92"
             column="5"/>
     </issue>
 
@@ -905,7 +969,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="95"
+            line="93"
             column="5"/>
     </issue>
 
@@ -921,7 +985,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="96"
+            line="94"
             column="5"/>
     </issue>
 
@@ -937,7 +1001,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="97"
+            line="95"
             column="5"/>
     </issue>
 
@@ -953,7 +1017,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="98"
+            line="96"
             column="5"/>
     </issue>
 
@@ -969,7 +1033,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="99"
+            line="97"
             column="5"/>
     </issue>
 
@@ -985,7 +1049,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="100"
+            line="98"
             column="5"/>
     </issue>
 
@@ -997,11 +1061,11 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;homepage_card_stroke_color&quot;>#1f000000&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;contextual_card_stroke_color&quot;>#1f000000&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="102"
+            line="100"
             column="5"/>
     </issue>
 
@@ -1017,7 +1081,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="108"
+            line="106"
             column="5"/>
     </issue>
 
@@ -1033,7 +1097,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="113"
+            line="111"
             column="5"/>
     </issue>
 
@@ -1049,7 +1113,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="114"
+            line="112"
             column="5"/>
     </issue>
 
@@ -1065,7 +1129,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="115"
+            line="113"
             column="5"/>
     </issue>
 
@@ -1081,7 +1145,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="116"
+            line="114"
             column="5"/>
     </issue>
 
@@ -1097,7 +1161,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="117"
+            line="115"
             column="5"/>
     </issue>
 
@@ -1113,7 +1177,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="118"
+            line="116"
             column="5"/>
     </issue>
 
@@ -1129,7 +1193,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="121"
+            line="119"
             column="5"/>
     </issue>
 
@@ -1145,7 +1209,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="122"
+            line="120"
             column="5"/>
     </issue>
 
@@ -1161,7 +1225,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="123"
+            line="121"
             column="5"/>
     </issue>
 
@@ -1177,7 +1241,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="124"
+            line="122"
             column="5"/>
     </issue>
 
@@ -1193,7 +1257,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="125"
+            line="123"
             column="5"/>
     </issue>
 
@@ -1209,6 +1273,38 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
+            line="126"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;notification_silence_color&quot;>#FF32c1de&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="127"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;notification_alert_color&quot;>#FFF87B2B&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
             line="128"
             column="5"/>
     </issue>
@@ -1221,8 +1317,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;notification_silence_color&quot;>#fbbc04&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;notification_importance_button_unselected&quot;>#DADCE0&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="129"
@@ -1237,8 +1333,8 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;notification_alert_color&quot;>#30a751&lt;/color>"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="    &lt;color name=&quot;notification_importance_button_selected&quot;>#1967D2&lt;/color> &lt;!-- material blue 700 -->"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
             line="130"
@@ -1253,11 +1349,27 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="    &lt;color name=&quot;notification_importance_selection_bg&quot;>#FFFFFF&lt;/color>"
+        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/values/colors.xml"
+            line="131"
+            column="5"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    &lt;color name=&quot;homepage_status_bar_color&quot;>#ccFFFFFF&lt;/color>"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="136"
+            line="137"
             column="5"/>
     </issue>
 
@@ -1273,7 +1385,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="139"
+            line="140"
             column="5"/>
     </issue>
 
@@ -1289,7 +1401,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="140"
+            line="141"
             column="5"/>
     </issue>
 
@@ -1305,247 +1417,7 @@
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/colors.xml"
-            line="141"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_icon_1&quot;>#48a50e0e&lt;/color> &lt;!-- 72% Material Red 900 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="144"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_icon_2&quot;>#480d652d&lt;/color> &lt;!-- 72% Material Green 900 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="145"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_icon_3&quot;>#48e37400&lt;/color> &lt;!-- 72% Material Yellow 900 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="146"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_icon_4&quot;>#48b06000&lt;/color> &lt;!-- 72% Material Orange 900 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="147"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_icon_5&quot;>#489c166b&lt;/color> &lt;!-- 72% Material Pink 900 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="148"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_icon_6&quot;>#48681da8&lt;/color> &lt;!-- 72% Material Purple 900 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="149"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_icon_7&quot;>#48007b83&lt;/color> &lt;!-- 72% Material Cyan 900 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="150"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_bg_1&quot;>#fad2cf&lt;/color> &lt;!-- Material Red 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="152"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_bg_2&quot;>#ceead6&lt;/color> &lt;!-- Material Green 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="153"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_bg_3&quot;>#feefc3&lt;/color> &lt;!-- Material Yellow 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="154"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_bg_4&quot;>#fedfc8&lt;/color> &lt;!-- Material Orange 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="155"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_bg_5&quot;>#fdcfe8&lt;/color> &lt;!-- Material Pink 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="156"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_bg_6&quot;>#e9d2fd&lt;/color> &lt;!-- Material Purple 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="157"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_color_bg_7&quot;>#cbf0f8&lt;/color> &lt;!-- Material Cyan 100 -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="158"
-            column="5"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    &lt;color name=&quot;bt_outline_color&quot;>#1f000000&lt;/color> &lt;!-- icon outline color -->"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/values/colors.xml"
-            line="160"
+            line="142"
             column="5"/>
     </issue>
 
@@ -1701,6 +1573,102 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="                &lt;item android:color=&quot;#333E2723&quot; android:offset=&quot;0&quot;/>"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/ic_accessibility_magnification.xml"
+            line="30"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="                &lt;item android:color=&quot;#003E2723&quot; android:offset=&quot;1&quot;/>"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/ic_accessibility_magnification.xml"
+            line="31"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="                &lt;item android:color=&quot;#333E2723&quot; android:offset=&quot;0&quot;/>"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/ic_accessibility_magnification.xml"
+            line="39"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="                &lt;item android:color=&quot;#003E2723&quot; android:offset=&quot;1&quot;/>"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/ic_accessibility_magnification.xml"
+            line="40"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="                &lt;item android:color=&quot;#19FFFFFF&quot; android:offset=&quot;0&quot;/>"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/ic_accessibility_magnification.xml"
+            line="60"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+        errorLine1="                &lt;item android:color=&quot;#00FFFFFF&quot; android:offset=&quot;1&quot;/>"
+        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
+        <location
+            file="res/drawable/ic_accessibility_magnification.xml"
+            line="61"
+            column="23"/>
+    </issue>
+
+    <issue
+        id="HardCodedColor"
+        severity="Error"
+        message="Avoid using hardcoded color"
+        category="Correctness"
+        priority="4"
+        summary="Using hardcoded color"
+        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="                &lt;item android:color=&quot;#19263238&quot; android:offset=&quot;0.0&quot;/>"
         errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2101,27 +2069,11 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                    android:color=&quot;@color/notification_alert_color&quot;/>"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="                android:color=&quot;@color/notification_alert_color&quot; />"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/drawable/ic_notification_alert.xml"
-            line="27"
-            column="21"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                android:fillColor=&quot;@color/notification_alert_color&quot;"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/ic_notification_alert.xml"
-            line="39"
+            line="22"
             column="17"/>
     </issue>
 
@@ -2165,27 +2117,11 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                    android:color=&quot;@color/notification_silence_color&quot;/>"
-        errorLine2="                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
+        errorLine1="                android:color=&quot;@color/notification_silence_color&quot; />"
+        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/drawable/ic_notification_silence.xml"
-            line="27"
-            column="21"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                android:fillColor=&quot;@color/notification_silence_color&quot;"
-        errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/ic_notification_silence.xml"
-            line="39"
+            line="22"
             column="17"/>
     </issue>
 
@@ -2277,102 +2213,6 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                &lt;item android:color=&quot;#333E2723&quot; android:offset=&quot;0&quot;/>"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/ic_accessibility_magnification.xml"
-            line="30"
-            column="23"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                &lt;item android:color=&quot;#003E2723&quot; android:offset=&quot;1&quot;/>"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/ic_accessibility_magnification.xml"
-            line="31"
-            column="23"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                &lt;item android:color=&quot;#333E2723&quot; android:offset=&quot;0&quot;/>"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/ic_accessibility_magnification.xml"
-            line="39"
-            column="23"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                &lt;item android:color=&quot;#003E2723&quot; android:offset=&quot;1&quot;/>"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/ic_accessibility_magnification.xml"
-            line="40"
-            column="23"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                &lt;item android:color=&quot;#19FFFFFF&quot; android:offset=&quot;0&quot;/>"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/ic_accessibility_magnification.xml"
-            line="60"
-            column="23"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="                &lt;item android:color=&quot;#00FFFFFF&quot; android:offset=&quot;1&quot;/>"
-        errorLine2="                      ~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/ic_accessibility_magnification.xml"
-            line="61"
-            column="23"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="    android:background=&quot;#FF80CBC4&quot; >"
         errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2597,22 +2437,6 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="            android:background=&quot;@color/conversation_background&quot;"
-        errorLine2="            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/layout/screen_zoom_preview_1.xml"
-            line="31"
-            column="13"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="                app:iconTextColor=&quot;@color/message_icon_text_outgoing&quot;"
         errorLine2="                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
         <location
@@ -2793,7 +2617,7 @@
         errorLine2="                                                                                                                                                                        ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rXC/strings.xml"
-            line="2580"
+            line="2629"
             column="169"/>
     </issue>
 
@@ -2809,7 +2633,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rAU/strings.xml"
-            line="2581"
+            line="2632"
             column="64"/>
     </issue>
 
@@ -2825,7 +2649,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rCA/strings.xml"
-            line="2581"
+            line="2632"
             column="64"/>
     </issue>
 
@@ -2841,7 +2665,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rGB/strings.xml"
-            line="2581"
+            line="2632"
             column="64"/>
     </issue>
 
@@ -2857,7 +2681,7 @@
         errorLine2="                                                               ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values-en-rIN/strings.xml"
-            line="2581"
+            line="2632"
             column="64"/>
     </issue>
 
@@ -2873,7 +2697,7 @@
         errorLine2="                                   ~~~~~~~~~~~~~~~~~~~">
         <location
             file="res/values/strings.xml"
-            line="6020"
+            line="6134"
             column="36"/>
     </issue>
 
@@ -2949,7 +2773,7 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;strokeColor&quot;>@color/homepage_card_stroke_color&lt;/item>"
+        errorLine1="        &lt;item name=&quot;strokeColor&quot;>@color/contextual_card_stroke_color&lt;/item>"
         errorLine2="                                 ^">
         <location
             file="res/values/styles.xml"
@@ -2965,91 +2789,11 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;batteryGoodColor&quot;>@color/battery_good_color_light&lt;/item>"
-        errorLine2="                                      ^">
-        <location
-            file="res/values/themes.xml"
-            line="57"
-            column="39"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;batteryMaybeColor&quot;>@color/battery_maybe_color_light&lt;/item>"
-        errorLine2="                                       ^">
-        <location
-            file="res/values/themes.xml"
-            line="58"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;batteryBadColor&quot;>@color/battery_bad_color_light&lt;/item>"
-        errorLine2="                                     ^">
-        <location
-            file="res/values/themes.xml"
-            line="59"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;switchBarBackgroundColor&quot;>@color/switch_bar_background&lt;/item>"
-        errorLine2="                                              ^">
-        <location
-            file="res/values/themes.xml"
-            line="97"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;switchBarBackgroundColor&quot;>@color/switch_bar_background&lt;/item>"
-        errorLine2="                                              ^">
-        <location
-            file="res/values/themes.xml"
-            line="97"
-            column="47"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="        &lt;item name=&quot;android:trackTint&quot;>@color/switchbar_switch_track_tint&lt;/item>"
         errorLine2="                                       ^">
         <location
             file="res/values/themes.xml"
-            line="103"
+            line="99"
             column="40"/>
     </issue>
 
@@ -3065,7 +2809,7 @@
         errorLine2="                                       ^">
         <location
             file="res/values/themes.xml"
-            line="103"
+            line="99"
             column="40"/>
     </issue>
 
@@ -3081,7 +2825,7 @@
         errorLine2="                                            ^">
         <location
             file="res/values/themes.xml"
-            line="169"
+            line="167"
             column="45"/>
     </issue>
 
@@ -3097,7 +2841,7 @@
         errorLine2="                                                ^">
         <location
             file="res/values/themes.xml"
-            line="170"
+            line="168"
             column="49"/>
     </issue>
 
@@ -3113,7 +2857,7 @@
         errorLine2="                                            ^">
         <location
             file="res/values/themes.xml"
-            line="178"
+            line="176"
             column="45"/>
     </issue>
 
@@ -3129,7 +2873,7 @@
         errorLine2="                                                ^">
         <location
             file="res/values/themes.xml"
-            line="179"
+            line="177"
             column="49"/>
     </issue>
 
@@ -3141,54 +2885,6 @@
         priority="4"
         summary="Using hardcoded color"
         explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;batteryGoodColor&quot;>@color/battery_good_color_light&lt;/item>"
-        errorLine2="                                      ^">
-        <location
-            file="res/values/themes.xml"
-            line="195"
-            column="39"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;batteryMaybeColor&quot;>@color/battery_maybe_color_light&lt;/item>"
-        errorLine2="                                       ^">
-        <location
-            file="res/values/themes.xml"
-            line="196"
-            column="40"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="        &lt;item name=&quot;batteryBadColor&quot;>@color/battery_bad_color_light&lt;/item>"
-        errorLine2="                                     ^">
-        <location
-            file="res/values/themes.xml"
-            line="197"
-            column="38"/>
-    </issue>
-
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
         errorLine1="        &lt;item name=&quot;wifi_signal_color&quot;>@color/setup_wizard_wifi_color_dark&lt;/item>"
         errorLine2="                                       ^">
         <location
@@ -3357,20 +3053,4 @@
             column="5"/>
     </issue>
 
-    <issue
-        id="HardCodedColor"
-        severity="Error"
-        message="Avoid using hardcoded color"
-        category="Correctness"
-        priority="4"
-        summary="Using hardcoded color"
-        explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.&#xA;This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
-        errorLine1="    android:color=&quot;@color/notification_importance_button_unselected&quot;"
-        errorLine2="    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
-        <location
-            file="res/drawable/button_border_unselected.xml"
-            line="21"
-            column="10"/>
-    </issue>
-
 </issues>
diff --git a/res/drawable/button_border_selected.xml b/res/drawable/button_border_selected.xml
index 2681bf0..c2b947d 100644
--- a/res/drawable/button_border_selected.xml
+++ b/res/drawable/button_border_selected.xml
@@ -16,8 +16,10 @@
   -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
+    <solid
+        android:color="@color/notification_importance_selection_bg" />
     <stroke
-        android:width="2dp"
-        android:color="?android:attr/colorAccent"/>
+        android:width="1dp"
+        android:color="@color/notification_importance_button_selected"/>
     <corners android:radius="@dimen/rect_button_radius" />
-</shape>
\ No newline at end of file
+</shape>
diff --git a/res/drawable/button_border_unselected.xml b/res/drawable/button_border_unselected.xml
index 72e9076..2c2ef3d 100644
--- a/res/drawable/button_border_unselected.xml
+++ b/res/drawable/button_border_unselected.xml
@@ -17,8 +17,8 @@
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
     <stroke
-        android:width="2dp"
+        android:width="1dp"
         android:color="@color/notification_importance_button_unselected"/>
 
     <corners android:radius="@dimen/rect_button_radius" />
-</shape>
\ No newline at end of file
+</shape>
diff --git a/res/drawable/ic_arrow_down_24dp.xml b/res/drawable/ic_arrow_down_24dp.xml
new file mode 100644
index 0000000..8503511
--- /dev/null
+++ b/res/drawable/ic_arrow_down_24dp.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="?android:attr/colorControlNormal"
+        android:pathData="M12,16.41l-6.71,-6.7l1.42,-1.42l5.29,5.3l5.29,-5.3l1.42,1.42z"/>
+</vector>
diff --git a/res/drawable/ic_menu_add.xml b/res/drawable/ic_menu_add.xml
deleted file mode 100644
index 0313d62..0000000
--- a/res/drawable/ic_menu_add.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 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="24dp"
-    android:height="24dp"
-    android:viewportWidth="24.0"
-    android:viewportHeight="24.0"
-    android:tint="?android:attr/colorControlNormal">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M18,13h-5v5c0,0.55-0.45,1-1,1h0c-0.55,0-1-0.45-1-1v-5H6c-0.55,0-1-0.45-1-1v0c0-0.55,0.45-1,1-1h5V6c0-0.55,0.45-1,1-1h0
-c0.55,0,1,0.45,1,1v5h5c0.55,0,1,0.45,1,1v0C19,12.55,18.55,13,18,13z"/>
-</vector>
diff --git a/res/drawable/ic_menu_add_activated_tint.xml b/res/drawable/ic_menu_add_activated_tint.xml
new file mode 100644
index 0000000..afe6e10
--- /dev/null
+++ b/res/drawable/ic_menu_add_activated_tint.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2019 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+<com.android.settings.widget.TintDrawable
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:drawable="@drawable/ic_add_24dp"
+    android:tint="?android:attr/colorControlActivated" />
\ No newline at end of file
diff --git a/res/drawable/ic_settings_date_time.xml b/res/drawable/ic_settings_date_time.xml
index 1d2f3d3..c6fbbf9 100644
--- a/res/drawable/ic_settings_date_time.xml
+++ b/res/drawable/ic_settings_date_time.xml
@@ -20,6 +20,9 @@
         android:viewportHeight="24.0"
         android:tint="?android:attr/colorControlNormal">
     <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM11.75,6.1c-0.5,0 -0.75,0.32 -0.75,0.72L11,13l4.64,2.78c0.34,0.2 0.78,0.1 0.98,-0.24a0.71,0.71 0,0 0,-0.25 -0.99l-3.87,-2.3L12.5,6.82c0,-0.4 -0.25,-0.72 -0.75,-0.72z"/>
+        android:fillColor="@android:color/white"
+        android:pathData="M11.99,2.0C6.47,2.0 2.0,6.48 2.0,12.0s4.47,10.0 9.99,10.0C17.52,22.0 22.0,17.52 22.0,12.0S17.52,2.0 11.99,2.0zM12.0,20.0c-4.42,0.0 -8.0,-3.58 -8.0,-8.0s3.58,-8.0 8.0,-8.0 8.0,3.58 8.0,8.0 -3.58,8.0 -8.0,8.0z"/>
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12.5,7.0L11.0,7.0l0.0,6.0l5.25,3.1 0.75,-1.23 -4.5,-2.67z"/>
 </vector>
diff --git a/res/drawable/ic_settings_gestures.xml b/res/drawable/ic_settings_gestures.xml
index 4fe0bf3..c75e7c3 100644
--- a/res/drawable/ic_settings_gestures.xml
+++ b/res/drawable/ic_settings_gestures.xml
@@ -20,9 +20,6 @@
         android:viewportHeight="32.0"
         android:tint="?android:attr/colorControlNormal">
     <path
-        android:fillColor="#FF000000"
-        android:pathData="M20,20.2V24H6V5.3h8.7l2.4,-4H7.6c-2.2,0 -4,1.8 -4,4v21.3c0,2.2 1.8,4 4,4h10.7c2.2,0 4,-1.8 4,-4V14.9L20,20.2zM15.6,28h-5.3v-1.3h5.3V28z"/>
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M28.5,7l1.1,-2.4L32,3.5l-2.4,-1.1L28.5,0l-1.1,2.4L25,3.5l2.4,1.1L28.5,7zM21,7.4l-2.2,-4.8l-2.2,4.8l-4.8,2.2l4.8,2.2l2.2,4.8l2.2,-4.8l4.8,-2.2L21,7.4zM28.5,12.2l-1.1,2.4L25,15.6l2.4,1.1l1.1,2.4l1.1,-2.4l2.4,-1.1l-2.4,-1.1L28.5,12.2z"/>
+        android:fillColor="@android:color/white"
+        android:pathData="M4.59 6.89c0.7-0.71 1.4-1.35 1.71-1.22 0.5 0.2 0 1.03-0.3 1.52-0.25 0.42 -2.86 3.89-2.86 6.31 0 1.28 0.48 2.34 1.34 2.98 0.75 0.56 1.74 0.73 2.64 0.46 1.07-0.31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79-3.78 0.64 -5.38 3.67-5.38 5.37 0 1.7 1.44 3.09 3.21 3.09 1.63 0 4.29-1.33 4.69-6.1H21v-2.5h-2.47c-0.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-0.58 0.73 -2.06 2.48-2.29 2.72-0.25 0.3 -0.68 0.84 -1.11 0.84 -0.45 0-0.72-0.83-0.36-1.92 0.35 -1.09 1.4-2.86 1.85-3.52 0.78 -1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25c-0.36 0.36 -0.66 0.66 -0.88 0.93 l1.75 1.71zm9.29 11.66c-0.31 0-0.74-0.26-0.74-0.72 0-0.6 0.73 -2.2 2.87-2.76-0.3 2.69-1.43 3.48-2.13 3.48z" />
 </vector>
\ No newline at end of file
diff --git a/res/drawable/ic_theme.xml b/res/drawable/ic_theme.xml
new file mode 100644
index 0000000..4764ff1
--- /dev/null
+++ b/res/drawable/ic_theme.xml
@@ -0,0 +1,26 @@
+<!--
+     Copyright (C) 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<!-- This draws a paintbrush like shape -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24"
+        android:viewportHeight="24"
+        android:tint="?android:attr/colorAccent">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M4,2v9c0,1.65 1.35,3 3,3h2v6c0,1.1 0.9,2 2,2h2c1.1,0 2,-0.9 2,-2v-6h2c1.65,0 3,-1.35 3,-3V2C20,2 4,2 4,2zM11,20v-6h2v6H11zM18,11c0,0.55 -0.45,1 -1,1h-2H9H7c-0.55,0 -1,-0.45 -1,-1v-0.93h12V11zM18,8.07H6V4h2.81v2.15h2V4h2.38v2.15h2V4H18V8.07z"/>
+</vector>
diff --git a/res/layout/notif_importance_preference.xml b/res/layout/notif_importance_preference.xml
index bc0d5aa..3507675 100644
--- a/res/layout/notif_importance_preference.xml
+++ b/res/layout/notif_importance_preference.xml
@@ -21,53 +21,92 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:gravity="center"
+    android:padding="@dimen/notification_importance_toggle_marginTop"
     android:orientation="vertical">
 
-    <LinearLayout
-        android:id="@+id/buttons"
+    <RelativeLayout
+        android:id="@+id/alert"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginTop="@dimen/notification_importance_toggle_marginTop"
-        android:orientation="horizontal"
-        android:gravity="center">
+        android:padding="@dimen/notification_importance_button_padding"
+        android:clickable="true"
+        android:focusable="true">
+        <ImageView
+            android:id="@+id/alert_icon"
+            android:src="@drawable/ic_notification_alert"
+            android:background="@android:color/transparent"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:clickable="false"
+            android:focusable="false"/>
+        <TextView
+            android:id="@+id/alert_label"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:ellipsize="end"
+            android:maxLines="1"
+            android:clickable="false"
+            android:focusable="false"
+            android:layout_toEndOf="@id/alert_icon"
+            android:layout_marginStart="@dimen/notification_importance_drawable_padding"
+            android:textAppearance="@style/TextAppearance.NotificationImportanceButton.Unselected"
+            android:text="@string/notification_alert_title"/>
+        <TextView
+            android:id="@+id/alert_summary"
+            android:paddingTop="@dimen/notification_importance_button_padding"
+            android:text="@string/notification_channel_summary_default"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:clickable="false"
+            android:focusable="false"
+            android:ellipsize="end"
+            android:maxLines="2"
+            android:layout_below="@id/alert_icon"
+            android:textAppearance="@style/TextAppearance.NotificationImportanceDetail"/>
+    </RelativeLayout>
 
-            <Button
-                android:id="@+id/alert"
-                android:layout_width="wrap_content"
-                android:layout_height="@dimen/notification_importance_toggle_size"
-                android:minWidth="@dimen/notification_importance_button_width"
-                android:paddingStart="@dimen/notification_importance_button_horiz_padding"
-                android:paddingEnd="@dimen/notification_importance_button_horiz_padding"
-                android:drawablePadding="@dimen/notification_importance_drawable_padding"
-                android:foreground="@drawable/button_ripple_radius"
-                android:drawableLeft="@drawable/ic_notification_alert"
-                android:text="@string/notification_alert_title" />
-
-            <Button
-                android:id="@+id/silence"
-                android:layout_width="wrap_content"
-                android:layout_height="@dimen/notification_importance_toggle_size"
-                android:minWidth="@dimen/notification_importance_button_width"
-                android:paddingStart="@dimen/notification_importance_button_horiz_padding"
-                android:paddingEnd="@dimen/notification_importance_button_horiz_padding"
-                android:drawablePadding="@dimen/notification_importance_drawable_padding"
-                android:foreground="@drawable/button_ripple_radius"
-                android:layout_marginStart="@dimen/notification_importance_button_separation"
-                android:drawableLeft="@drawable/ic_notification_silence"
-                android:text="@string/notification_silence_title" />
-
-    </LinearLayout>
-
-    <TextView
-        android:id="@+id/description"
+    <RelativeLayout
+        android:id="@+id/silence"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:text="@string/notification_alert_title"
-        android:gravity="center"
-        android:layout_marginTop="@dimen/notification_importance_text_marginTop"
-        android:layout_marginBottom="@dimen/notification_importance_toggle_marginBottom"
-        android:paddingStart="@dimen/notification_importance_description_padding"
-        android:paddingEnd="@dimen/notification_importance_description_padding"
-        android:textAppearance="@style/TextAppearance.NotificationImportanceDetail" />
+        android:padding="@dimen/notification_importance_button_padding"
+        android:layout_marginTop="@dimen/notification_importance_button_separation"
+        android:clickable="true"
+        android:focusable="true">
+        <ImageView
+            android:id="@+id/silence_icon"
+            android:src="@drawable/ic_notification_silence"
+            android:background="@android:color/transparent"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:clickable="false"
+            android:focusable="false"/>
+        <TextView
+            android:id="@+id/silence_label"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:ellipsize="end"
+            android:maxLines="1"
+            android:clickable="false"
+            android:focusable="false"
+            android:layout_toEndOf="@id/silence_icon"
+            android:layout_marginStart="@dimen/notification_importance_drawable_padding"
+            android:textAppearance="@style/TextAppearance.NotificationImportanceButton.Unselected"
+            android:text="@string/notification_silence_title"/>
+        <TextView
+            android:id="@+id/silence_summary"
+            android:paddingTop="@dimen/notification_importance_button_padding"
+            android:text="@string/notification_channel_summary_default"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:clickable="false"
+            android:focusable="false"
+            android:ellipsize="end"
+            android:maxLines="2"
+            android:layout_below="@id/silence_icon"
+            android:textAppearance="@style/TextAppearance.NotificationImportanceDetail"/>
+    </RelativeLayout>
 
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/panel_slice_row.xml b/res/layout/panel_slice_row.xml
index 4e1184b..74dc412 100644
--- a/res/layout/panel_slice_row.xml
+++ b/res/layout/panel_slice_row.xml
@@ -22,8 +22,9 @@
 
     <androidx.slice.widget.SliceView
         android:id="@+id/slice_view"
+        style="@style/SliceViewStyle"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:paddingStart="20dp"
-        android:paddingEnd="20dp"/>
+        android:paddingStart="8dp"
+        android:paddingEnd="8dp"/>
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/profile_owner_add.xml b/res/layout/profile_owner_add.xml
new file mode 100644
index 0000000..84c51fd
--- /dev/null
+++ b/res/layout/profile_owner_add.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2019 The Android Open Source Project
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/active_layout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView android:id="@+id/add_msg_simplified"
+              android:layout_width="match_parent"
+              android:layout_height="0dp"
+              android:layout_weight="1"
+              android:scrollbars = "vertical"
+              android:padding="?dialogPreferredPadding"
+              android:gravity="center_vertical"/>
+
+    <TextView android:id="@+id/admin_warning_simplified"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:paddingStart="?dialogPreferredPadding"
+              android:paddingEnd="?dialogPreferredPadding"/>
+</LinearLayout>
diff --git a/res/menu/vpn.xml b/res/menu/vpn.xml
index a3b8090..cb11cad 100644
--- a/res/menu/vpn.xml
+++ b/res/menu/vpn.xml
@@ -18,6 +18,6 @@
     <item
         android:id="@+id/vpn_create"
         android:title="@string/vpn_create"
-        android:icon="@drawable/ic_menu_add"
+        android:icon="@drawable/ic_add_24dp"
         android:showAsAction="always" />
 </menu>
diff --git a/res/values-night/colors.xml b/res/values-night/colors.xml
index b7b30f5..4c43257 100644
--- a/res/values-night/colors.xml
+++ b/res/values-night/colors.xml
@@ -26,5 +26,8 @@
   <color name="search_bar_background">@*android:color/material_grey_800</color>
   <!-- Dialog background color -->
   <color name="dialog_background">@*android:color/material_grey_800</color>
+  <color name="notification_importance_selection_bg">@*android:color/material_grey_800</color>
+  <color name="notification_importance_button_selected">#AECBFA</color> <!-- material blue 200 -->
+  <color name="notification_importance_button_unselected">#5F6368</color>
 </resources>
 
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 1245b37..42fa3f9 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -126,7 +126,9 @@
     <color name="notification_block_color">#ffff0000</color>
     <color name="notification_silence_color">#FF32c1de</color>
     <color name="notification_alert_color">#FFF87B2B</color>
-    <color name="notification_importance_button_unselected">#FFDADCE0</color>
+    <color name="notification_importance_button_unselected">#DADCE0</color>
+    <color name="notification_importance_button_selected">#1967D2</color> <!-- material blue 700 -->
+    <color name="notification_importance_selection_bg">#FFFFFF</color>
 
     <!-- launcher icon color -->
     <color name="icon_launcher_setting_color">@*android:color/accent_device_default_light</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index c871ac8..a348f8a 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -79,6 +79,7 @@
     <dimen name="notification_importance_description_padding">20dp</dimen>
     <dimen name="notification_importance_description_text">14sp</dimen>
     <dimen name="notification_importance_button_text">16sp</dimen>
+    <dimen name="notification_importance_button_padding">14dp</dimen>
 
     <dimen name="zen_schedule_rule_checkbox_padding">7dp</dimen>
     <dimen name="zen_schedule_day_margin">17dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5609006..93b7fa2 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -933,26 +933,27 @@
     <!-- Button text to exit face wizard after everything is done [CHAR LIMIT=15] -->
     <string name="security_settings_face_enroll_done">Done</string>
     <!-- Title for a category shown for the face settings page. [CHAR LIMIT=20] -->
-    <string name="security_settings_face_settings_use_face_category">Use your face for</string>
+    <string name="security_settings_face_settings_use_face_category">Use face unlock for</string>
     <!-- Text shown on a toggle which allows or disallows the device to use face for unlocking the device. [CHAR LIMIT=20] -->
-    <string name="security_settings_face_settings_use_face_unlock_phone">Unlocking your device</string>
+    <string name="security_settings_face_settings_use_face_unlock_phone">Unlocking your phone</string>
     <!-- Text shown on a toggle which allows or disallows the device to use face authentication for apps. This will be presented to the user together with the context of security_settings_face_settings_use_face_category. [CHAR LIMIT=30] -->
     <string name="security_settings_face_settings_use_face_for_apps">App sign-in \u0026 payments</string>
+    <!-- Title for a category shown for the face settings page, followed by items that the user can toggle on/off to require/disable. -->
+    <string name="security_settings_face_settings_require_category">Require for face unlock</string>
     <!-- Text shown on a toggle which disables/enables face authentication, depending if the user's eyes are open. [CHAR LIMIT=30] -->
-    <string name="security_settings_face_settings_require_attention">Eyes open to unlock</string>
+    <string name="security_settings_face_settings_require_attention">Open eyes looking at screen</string>
     <!-- Text shown on the details of a toggle which disables/enables face authentication, depending if the user's eyes are open. [CHAR LIMIT=70] -->
-    <string name="security_settings_face_settings_require_attention_details">When using face authentication, your eyes must be open</string>
+    <string name="security_settings_face_settings_require_attention_details">To unlock the phone, always require looking at the screen with your eyes open</string>
     <!-- When authenticating in apps, always require confirmation (e.g. confirm button) after a face is authenticated. [CHAR LIMIT=50] -->
-    <string name="security_settings_face_settings_require_confirmation">Always require confirmation</string>
+    <string name="security_settings_face_settings_require_confirmation">Confirm button</string>
     <!-- When authenticating in apps, always require confirmation (e.g. confirm button) after a face is authenticated. [CHAR LIMIT=70] -->
-    <string name="security_settings_face_settings_require_confirmation_details">When authenticating in apps, always require confirmation</string>
+    <string name="security_settings_face_settings_require_confirmation_details">When authenticating for apps, always require confirmation</string>
     <!-- Button text in face settings which removes the user's faces from the device [CHAR LIMIT=20] -->
-    <string name="security_settings_face_settings_remove_face_data">Remove face data</string>
+    <string name="security_settings_face_settings_remove_face_data">Delete face data</string>
     <!-- Button text in face settings which lets the user enroll their face [CHAR LIMIT=40] -->
-    <string name="security_settings_face_settings_enroll">Set up face authentication</string>
+    <string name="security_settings_face_settings_enroll">Set up new face unlock</string>
     <!-- Text shown in face settings explaining what your face can be used for. [CHAR LIMIT=NONE] -->
-    <string name="security_settings_face_settings_footer">Your face can be used to unlock your device and access apps.
-        <annotation id="url">Learn more</annotation></string>
+    <string name="security_settings_face_settings_footer">Use Face unlock to unlock your device, sign in to apps, and confirm payments.\n\nKeep in mind:\nLooking at the phone can unlock it when you don\u2019t intend to.\n\nYour phone can be unlocked by someone else if it\u2019s held up to your face while your eyes are open.\n\nYour phone can be unlocked by someone who looks a lot like you, say, your child or an identical sibling.</string>
     <!-- Dialog title shown when the user removes an enrollment [CHAR LIMIT=35] -->
     <string name="security_settings_face_settings_remove_dialog_title">Delete face data?</string>
     <!-- Dialog contents shown when the user removes an enrollment [CHAR LIMIT=NONE] -->
@@ -1052,17 +1053,17 @@
     <!-- Content of the dialog shown when the user tries to skip fingerprint setup, asking them to confirm the action [CHAR LIMIT=NONE] -->
     <string name="setup_fingerprint_enroll_enrolling_skip_message">You\u2019ve chosen to use your fingerprint as one way to unlock your phone. If you skip now, you\u2019ll need to set this up later. Setup takes only a minute or so.</string>
     <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set fingerprint. (tablet) [CHAR LIMIT=NONE] -->
-    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet">Protect your tablet with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN or choose another screen lock option.</string>
+    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet">Protect your tablet with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN, pattern, or password.</string>
     <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set fingerprint. (device) [CHAR LIMIT=NONE] -->
-    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device">Protect your device with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN or choose another screen lock option.</string>
+    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device">Protect your device with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN, pattern, or password.</string>
     <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set fingerprint. (default) [CHAR LIMIT=NONE] -->
-    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default">Protect your phone with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN or choose another screen lock option.</string>
+    <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default">Protect your phone with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up fingerprint. Tap Cancel, then set a PIN, pattern, or password.</string>
     <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set face authentication. (tablet) [CHAR LIMIT=NONE] -->
-    <string name="face_lock_screen_setup_skip_dialog_text" product="tablet">Protect your tablet with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face authentication. Tap Cancel, then set a PIN or choose another screen lock option.</string>
+    <string name="face_lock_screen_setup_skip_dialog_text" product="tablet">Protect your tablet with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face authentication. Tap Cancel, then set a PIN, pattern, or password.</string>
     <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set face authentication. (device) [CHAR LIMIT=NONE] -->
-    <string name="face_lock_screen_setup_skip_dialog_text" product="device">Protect your device with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face authentication. Tap Cancel, then set a PIN or choose another screen lock option.</string>
+    <string name="face_lock_screen_setup_skip_dialog_text" product="device">Protect your device with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face authentication. Tap Cancel, then set a PIN, pattern, or password.</string>
     <!-- Dialog text shown when the user tries to skip setting up a screen lock, warning that they can't continue to set face authentication. (default) [CHAR LIMIT=NONE] -->
-    <string name="face_lock_screen_setup_skip_dialog_text" product="default">Protect your phone with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face authentication. Tap Cancel, then set a PIN or choose another screen lock option.</string>
+    <string name="face_lock_screen_setup_skip_dialog_text" product="default">Protect your phone with a screen lock option so no one will be able to use it if it is lost or stolen. You also need a screen lock option to set up face authentication. Tap Cancel, then set a PIN, pattern, or password.</string>
     <!-- Title of dialog shown when the user tries to skip setting up a PIN, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
     <string name="lock_screen_pin_skip_title">Skip PIN setup?</string>
     <!-- Title of dialog shown when the user tries to skip setting up a password, warning them of potential consequences of not doing so [CHAR LIMIT=48]-->
@@ -1786,6 +1787,9 @@
     <!--  Bluetooth device details. The body of a confirmation dialog for unpairing a paired device. -->
     <string name="bluetooth_unpair_dialog_body" product="device">Your device will no longer be paired with <xliff:g id="device_name">%1$s</xliff:g></string>
 
+    <!--  Bluetooth device details. The body of a confirmation dialog for unpairing a paired device. [CHAR LIMIT=NONE] -->
+    <string name="bluetooth_untethered_unpair_dialog_body"><xliff:g id="device_name" example="Jack's headphone">%1$s</xliff:g> will no longer be paired with any device linked to this account</string>
+
     <!--  Bluetooth device details. In the confirmation dialog for unpairing a paired device, this is the label on the button that will complete the unpairing action. -->
     <string name="bluetooth_unpair_dialog_forget_confirm_button">Forget device</string>
 
@@ -2317,8 +2321,9 @@
         <item quantity="one">1 subscription</item>
         <item quantity="other">%d subscriptions</item>
     </plurals>
-    <!-- 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. [CHAR LIMIT=60] -->
+    <!-- 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] -->
     <plurals name="wifi_saved_all_access_points_summary">
+        <item quantity="one">1 network &amp; subscription</item>
         <item quantity="other">%d networks &amp; subscriptions</item>
     </plurals>
     <!-- Wi-Fi settings screen, advanced, settings section.  This is a header shown above advanced wifi settings. [CHAR LIMIT=30] -->
@@ -2888,6 +2893,10 @@
     <string name="wallpaper_suggestion_summary">Personalize your screen</string>
     <!-- Wallpaper settings fragment title [CHAR LIMIT=30] -->
     <string name="wallpaper_settings_fragment_title">Choose wallpaper from</string>
+    <!-- Styles and Wallpaper settings title [CHAR_LIMIT=46] -->
+    <string name="style_suggestion_title">Customize your Pixel</string>
+    <!-- Styles and Wallpapers summary [CHAR_LIMIT=55] -->
+    <string name="style_suggestion_summary">Try different styles, wallpapers, clocks, and more</string>
     <!-- Display settings screen, trigger for screen saver options -->
     <string name="screensaver_settings_title">Screen saver</string>
     <!-- Display settings screen, summary fragment for screen saver options, activated when docked or asleep and charging -->
@@ -4885,13 +4894,13 @@
     <!-- Title for accessibility preference for configuring amount of time that has to pass after pointer stops moving before click action can be performed (if automatic click after pointer stops moving feature is enabled). [CHAR LIMIT=NONE] -->
     <string name="accessibility_autoclick_delay_preference_title">Delay before click</string>
     <!-- Title for accessibility preference screen for configuring vibrations. -->
-    <string name="accessibility_vibration_settings_title">Vibration</string>
+    <string name="accessibility_vibration_settings_title">Vibration &amp; haptic strength</string>
     <!-- Title for accessibility preference for configuring notification vibrations. -->
     <string name="accessibility_notification_vibration_title">Notification vibration</string>
     <!-- Title for accessibility preference for configuring ring vibrations. [CHAR LIMIT=NONE] -->
     <string name="accessibility_ring_vibration_title">Ring vibration</string>
     <!-- Title for accessibility preference for configuring touch feedback vibrations. -->
-    <string name="accessibility_touch_vibration_title">Touch vibration</string>
+    <string name="accessibility_touch_vibration_title">Touch feedback</string>
     <!-- Used in the acessibilty service settings to control turning on/off the service entirely -->
     <string name="accessibility_service_master_switch_title">Use service</string>
     <!-- Used in the Color correction settings screen to control turning on/off the feature entirely -->
@@ -6019,6 +6028,9 @@
     <string name="device_admin_warning">Activating this admin app will allow
         the app <xliff:g id="app_name">%1$s</xliff:g> to perform the
         following operations:</string>
+    <!-- Simplified device admin warning message [CHAR LIMIT=NONE]-->
+    <string name="device_admin_warning_simplified">This device will be managed and monitored by
+        <xliff:g id="app_name" example="Example Supervisor">%1$s</xliff:g>.</string>
     <!-- Device admin warning message about policies an admin can use -->
     <string name="device_admin_status">This admin app is active and allows
         the app <xliff:g id="app_name">%1$s</xliff:g> to perform the
@@ -6026,6 +6038,8 @@
 
     <!-- Title for screen to set a profile owner [CHAR LIMIT=40] -->
     <string name="profile_owner_add_title">Activate Profile Manager?</string>
+    <!-- Simplified title for dialog to set a profile owner [CHAR LIMIT=40] -->
+    <string name="profile_owner_add_title_simplified">Allow supervision?</string>
     <!-- Warning when trying to add a profile owner admin after setup has completed. [CHAR LIMIT=none] -->
     <string name="adding_profile_owner_warning">By proceeding, your user will be managed by your
         admin which may also be able to store associated data, in addition to your personal
@@ -6372,6 +6386,8 @@
 
     <!-- Option for indicating that a network being metered (expensive) should be determined automatically. [CHAR LIMIT=32] -->
     <string name="data_usage_metered_auto">Automatic</string>
+    <!-- Title for Network usage to control whether Wifi is metered or not [CHAR LIMIT=20] -->
+    <string name="wifi_metered_title">Network usage</string>
     <!-- Option for indicating that a network is metered (expensive). [CHAR LIMIT=32] -->
     <string name="data_usage_metered_yes">Metered</string>
     <!-- Option for indicating that a network is not metered (inexpensive). [CHAR LIMIT=32] -->
@@ -7330,6 +7346,9 @@
     <!-- Battery Saver: Search terms for battery saver schedule preference. Feel free to add additional terms when translating if appropriate [CHAR_LIMIT=NONE] -->
     <string name="keywords_battery_saver_schedule">routine, schedule, battery saver, power saver, battery, automatic, percent</string>
 
+    <!-- List of synonyms for the Add an account setting [CHAR_LIMIT=NONE] -->
+    <string name="keywords_add_an_account">work profile</string>
+
     <!-- Option title for the default sound, context based on screen -->
     <string name="default_sound">Default sound</string>
 
@@ -7802,7 +7821,7 @@
     <string name="profile_section_header">Work notifications</string>
 
     <!-- Configure Notifications: section header for prioritizer settings  [CHAR LIMIT=80] -->
-    <string name="smart_notifications_title">Smart notifications</string>
+    <string name="smart_notifications_title">Adaptive notifications</string>
 
     <!-- Configure Notifications: setting title [CHAR LIMIT=80] -->
     <string name="asst_capability_prioritizer_title">Automatic Prioritization</string>
@@ -7973,25 +7992,25 @@
 
     <!-- Channel summaries for the app notification page -->
 
-    <!-- [CHAR LIMIT=100] Notification Importance title: min importance level summary -->
+    <!-- [CHAR LIMIT=150] Notification Importance title: min importance level summary -->
     <string name="notification_channel_summary_min">In the pull-down shade, collapse notifications to one line</string>
 
-    <!-- [CHAR LIMIT=100] Notification Importance title: low importance level summary -->
-    <string name="notification_channel_summary_low">Always silent. Displays in pull-down shade.</string>
+    <!-- [CHAR LIMIT=150] Notification Importance title: low importance level summary -->
+    <string name="notification_channel_summary_low">Helps you focus with notifications only in the pull-down shade. Always silent.</string>
 
-    <!-- [CHAR LIMIT=100] Notification Importance title: low importance level summary -->
-    <string name="notification_channel_summary_low_status">Always silent. Displays in pull-down shade &amp; status bar.</string>
+    <!-- [CHAR LIMIT=150] Notification Importance title: low importance level summary -->
+    <string name="notification_channel_summary_low_status">Displays below priority notifications. Always silent.</string>
 
-    <!-- [CHAR LIMIT=100] Notification Importance title: low importance level summary -->
-    <string name="notification_channel_summary_low_lock">Always silent. Displays in pull-down shade &amp; on lock screen.</string>
+    <!-- [CHAR LIMIT=150] Notification Importance title: low importance level summary -->
+    <string name="notification_channel_summary_low_lock">Displays below priority notifications. Always silent.</string>
 
-    <!-- [CHAR LIMIT=100] Notification Importance title: low importance level summary -->
-    <string name="notification_channel_summary_low_status_lock">Always silent. Displays in pull-down shade, status bar &amp; on lock screen.</string>
+    <!-- [CHAR LIMIT=150] Notification Importance title: low importance level summary -->
+    <string name="notification_channel_summary_low_status_lock">Displays below priority notifications. Always silent.</string>
 
-    <!-- [CHAR LIMIT=100] Notification Importance title: normal importance level summary -->
-    <string name="notification_channel_summary_default">Makes sound and displays in pull-down shade, status bar &amp; on lock screen.</string>
+    <!-- [CHAR LIMIT=150] Notification Importance title: normal importance level summary -->
+    <string name="notification_channel_summary_default">Gets your attention with sound &amp; a status bar icon. Shows on lock screen.</string>
 
-    <!-- [CHAR LIMIT=100] Notification Importance title: high importance level summary -->
+    <!-- [CHAR LIMIT=150] Notification Importance title: high importance level summary -->
     <string name="notification_channel_summary_high">When device is unlocked, show notifications as a banner across the top of the screen</string>
 
     <!-- [CHAR LIMIT=100] Label for on/off toggle -->
@@ -11065,9 +11084,9 @@
     <string name="forget_passpoint_dialog_message">You may lose access to any remaining time or data. Check with your provider before removing.</string>
 
     <!-- Keywords for Content Capture feature [CHAR_LIMIT=none] -->
-    <string name="keywords_content_capture">content capture</string>
+    <string name="keywords_content_capture">content capture, app content</string>
     <!-- Title of the 'Content Capture' feature toggle in the Settings -> Privacy screen [CHAR LIMIT=none]-->
-    <string name="content_capture">Content Capture</string>
+    <string name="content_capture">App content</string>
     <!-- Description of the 'Content Capture' feature toggle in the Settings -> Privacy screen [CHAR LIMIT=NONE]-->
     <string name="content_capture_summary">Allow apps to send content to the Android system</string>
 
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 26d4aa8..951bb04 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -28,7 +28,7 @@
     <style name="Theme.Settings" parent="Theme.SettingsBase">
         <item name="preferenceTheme">@style/PreferenceTheme</item>
         <item name="android:listPreferredItemHeight">72dip</item>
-        <item name="homeAsUpIndicator">@drawable/ic_arrow_back</item>
+        <item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item>
 
         <item name="fingerprint_layout_theme">@style/FingerprintLayoutTheme</item>
         <item name="face_layout_theme">@style/FaceLayoutTheme</item>
diff --git a/res/xml/add_account_settings.xml b/res/xml/add_account_settings.xml
index 6b36f8d..01e7674 100644
--- a/res/xml/add_account_settings.xml
+++ b/res/xml/add_account_settings.xml
@@ -19,4 +19,5 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="add_account_screen"
     android:title="@string/header_add_an_account"
-    settings:controller="com.android.settings.accounts.ChooseAccountPreferenceController" />
+    settings:controller="com.android.settings.accounts.ChooseAccountPreferenceController"
+    settings:keywords="@string/keywords_add_an_account"/>
diff --git a/res/xml/bluetooth_screen.xml b/res/xml/bluetooth_screen.xml
index 5679cd4..42f71b3 100644
--- a/res/xml/bluetooth_screen.xml
+++ b/res/xml/bluetooth_screen.xml
@@ -28,7 +28,7 @@
     <com.android.settingslib.RestrictedPreference
         android:key="bluetooth_screen_add_bt_devices"
         android:title="@string/bluetooth_pairing_pref_title"
-        android:icon="@drawable/ic_menu_add"
+        android:icon="@drawable/ic_add_24dp"
         android:summary="@string/connected_device_add_device_summary"
         android:fragment="com.android.settings.bluetooth.BluetoothPairingDetail"
         settings:allowDividerAbove="true"
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index ae88d36..7acdc79 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -39,7 +39,7 @@
     <com.android.settingslib.RestrictedPreference
         android:key="add_bt_devices"
         android:title="@string/bluetooth_pairing_pref_title"
-        android:icon="@drawable/ic_menu_add"
+        android:icon="@drawable/ic_add_24dp"
         android:summary="@string/connected_device_add_device_summary"
         android:fragment="com.android.settings.bluetooth.BluetoothPairingDetail"
         settings:allowDividerAbove="true"
diff --git a/res/xml/mobile_network_list.xml b/res/xml/mobile_network_list.xml
index c2baf46..13f9a59 100644
--- a/res/xml/mobile_network_list.xml
+++ b/res/xml/mobile_network_list.xml
@@ -24,7 +24,7 @@
         android:key="add_more"
         settings:isPreferenceVisible="false"
         android:title="@string/mobile_network_list_add_more"
-        android:icon="@drawable/ic_menu_add"
+        android:icon="@drawable/ic_menu_add_activated_tint"
         android:order="100" >
         <intent android:action="android.telephony.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION">
             <extra android:name="android.telephony.euicc.extra.FORCE_PROVISION"
diff --git a/res/xml/mobile_network_settings_v2.xml b/res/xml/mobile_network_settings_v2.xml
index cc377bd..1ff8860 100644
--- a/res/xml/mobile_network_settings_v2.xml
+++ b/res/xml/mobile_network_settings_v2.xml
@@ -191,4 +191,10 @@
 
     </PreferenceCategory>
 
+    <Preference
+        android:key="erase_sim"
+        android:persistent="false"
+        android:title="@string/mobile_network_erase_sim"
+        settings:controller="com.android.settings.network.telephony.DeleteSimProfilePreferenceController" />
+
 </PreferenceScreen>
diff --git a/res/xml/security_settings_face.xml b/res/xml/security_settings_face.xml
index 39bf73b..fc812f4 100644
--- a/res/xml/security_settings_face.xml
+++ b/res/xml/security_settings_face.xml
@@ -42,7 +42,8 @@
     </PreferenceCategory>
 
     <PreferenceCategory
-        android:key="security_settings_face_manage_category">
+        android:key="security_settings_face_manage_category"
+        android:title="@string/security_settings_face_settings_require_category">
         <SwitchPreference
             android:key="security_settings_face_require_attention"
             android:title="@string/security_settings_face_settings_require_attention"
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index b01e1f3..269aa3a 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -30,7 +30,7 @@
     <com.android.settingslib.RestrictedPreference
         android:key="user_add"
         android:title="@string/user_add_user_or_profile_menu"
-        android:icon="@drawable/ic_menu_add"
+        android:icon="@drawable/ic_add_24dp"
         android:order="20"/>
 
     <com.android.settingslib.RestrictedSwitchPreference
diff --git a/res/xml/wifi_network_details_fragment.xml b/res/xml/wifi_network_details_fragment.xml
index 3218e0d..d45f9bc 100644
--- a/res/xml/wifi_network_details_fragment.xml
+++ b/res/xml/wifi_network_details_fragment.xml
@@ -58,7 +58,7 @@
     <DropDownPreference
         android:key="metered"
         android:icon="@drawable/ic_attach_money_black_24dp"
-        android:title="@string/data_usage_metered_yes"
+        android:title="@string/wifi_metered_title"
         android:entries="@array/wifi_metered_entries"
         android:entryValues="@array/wifi_metered_values"/>
 
diff --git a/res/xml/zen_mode_automation_settings.xml b/res/xml/zen_mode_automation_settings.xml
index dade454..467331d 100644
--- a/res/xml/zen_mode_automation_settings.xml
+++ b/res/xml/zen_mode_automation_settings.xml
@@ -27,7 +27,7 @@
 
     <Preference
         android:key="zen_mode_add_automatic_rule"
-        android:icon="@drawable/ic_menu_add"
+        android:icon="@drawable/ic_add_24dp"
         android:title="@string/zen_mode_add_rule"/>
 
 </PreferenceScreen>
diff --git a/src/com/android/settings/RadioInfo.java b/src/com/android/settings/RadioInfo.java
index e0ce1c0..fdc930e 100644
--- a/src/com/android/settings/RadioInfo.java
+++ b/src/com/android/settings/RadioInfo.java
@@ -40,6 +40,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.os.SystemProperties;
 import android.provider.Settings;
 import android.telephony.CarrierConfigManager;
 import android.telephony.CellIdentityCdma;
@@ -130,6 +131,13 @@
     private static final int CELL_INFO_LIST_RATE_DISABLED = Integer.MAX_VALUE;
     private static final int CELL_INFO_LIST_RATE_MAX = 0;
 
+    private static final String DSDS_MODE_PROPERTY = "ro.boot.hardware.dsds";
+
+    /**
+     * A value indicates the device is always on dsds mode.
+     * @see {@link #DSDS_MODE_PROPERTY}
+     */
+    private static final int ALWAYS_ON_DSDS_MODE = 1;
 
     private static final int IMS_VOLTE_PROVISIONED_CONFIG_ID =
         ImsConfig.ConfigConstants.VLT_SETTING_ENABLED;
@@ -497,7 +505,7 @@
         cbrsDataSwitch.setVisibility(isCbrsSupported() ? View.VISIBLE : View.GONE);
 
         dsdsSwitch = findViewById(R.id.dsds_switch);
-        if (isDsdsSupported()) {
+        if (isDsdsSupported() && !dsdsModeOnly()) {
             dsdsSwitch.setVisibility(View.VISIBLE);
             dsdsSwitch.setOnClickListener(v -> {
                 if (mTelephonyManager.doesSwitchMultiSimConfigTriggerReboot()) {
@@ -1694,6 +1702,14 @@
         mTelephonyManager.switchMultiSimConfig(dsdsSwitch.isChecked() ? 2 : 1);
     }
 
+    /**
+     * @return {@code True} if the device is only supported dsds mode.
+     */
+    private boolean dsdsModeOnly() {
+        String dsdsMode = SystemProperties.get(DSDS_MODE_PROPERTY);
+        return !TextUtils.isEmpty(dsdsMode) && Integer.parseInt(dsdsMode) == ALWAYS_ON_DSDS_MODE;
+    }
+
     DialogInterface.OnClickListener mOnDsdsDialogConfirmedListener =
             new DialogInterface.OnClickListener() {
         @Override
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index 7130435..1309cc2 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -351,7 +351,7 @@
         RestrictedPreference preference =
             new RestrictedPreference(mParent.getPreferenceManager().getContext());
         preference.setTitle(R.string.add_account_label);
-        preference.setIcon(R.drawable.ic_menu_add);
+        preference.setIcon(R.drawable.ic_add_24dp);
         preference.setOnPreferenceClickListener(this);
         preference.setOrder(ORDER_NEXT_TO_NEXT_TO_LAST);
         return preference;
diff --git a/src/com/android/settings/accounts/EmergencyInfoPreferenceController.java b/src/com/android/settings/accounts/EmergencyInfoPreferenceController.java
index 7dc80d0..5be829b 100644
--- a/src/com/android/settings/accounts/EmergencyInfoPreferenceController.java
+++ b/src/com/android/settings/accounts/EmergencyInfoPreferenceController.java
@@ -23,7 +23,6 @@
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.text.TextUtils;
-import android.util.FeatureFlagUtils;
 
 import androidx.preference.Preference;
 
@@ -35,9 +34,9 @@
 
 public class EmergencyInfoPreferenceController extends BasePreferenceController {
 
-    public static final String ACTION_EDIT_EMERGENCY_INFO = "android.settings.EDIT_EMERGENCY_INFO";
-
-    private static final String PACKAGE_NAME_EMERGENCY = "com.android.emergency";
+    public static String getIntentAction(Context context) {
+        return context.getResources().getString(R.string.config_emergency_intent_action);
+    }
 
     public EmergencyInfoPreferenceController(Context context, String preferenceKey) {
         super(context, preferenceKey);
@@ -85,19 +84,7 @@
                 ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
     }
 
-    private static String getIntentAction(Context context) {
-        if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SAFETY_HUB)) {
-            return context.getResources().getString(R.string.config_emergency_intent_action);
-        }
-
-        return ACTION_EDIT_EMERGENCY_INFO;
-    }
-
     private static String getPackageName(Context context) {
-        if (FeatureFlagUtils.isEnabled(context, FeatureFlagUtils.SAFETY_HUB)) {
-            return context.getResources().getString(R.string.config_emergency_package_name);
-        }
-
-        return PACKAGE_NAME_EMERGENCY;
+        return context.getResources().getString(R.string.config_emergency_package_name);
     }
 }
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index 56fa455..f07c66c 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -421,6 +421,10 @@
         for (GrantedUriPermission perm : perms) {
             String authority = perm.uri.getAuthority();
             ProviderInfo provider = pm.resolveContentProvider(authority, 0);
+            if (provider == null) {
+                continue;
+            }
+
             CharSequence app = provider.applicationInfo.loadLabel(pm);
             MutableInt count = uriCounters.get(app);
             if (count == null) {
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
index 49659ad..f1e7ac0 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
@@ -178,7 +178,7 @@
                     return true;
                 });
         preference.setTitle(R.string.print_menu_item_add_service);
-        preference.setIcon(R.drawable.ic_menu_add);
+        preference.setIcon(R.drawable.ic_add_24dp);
         preference.setOrder(Integer.MAX_VALUE -1);
         preference.setPersistent(false);
         return preference;
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
index 7e0ca24..0d0bd20 100644
--- a/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/DeviceAdminAdd.java
@@ -46,6 +46,7 @@
 import android.os.UserManager;
 import android.text.TextUtils;
 import android.text.TextUtils.TruncateAt;
+import android.text.method.ScrollingMovementMethod;
 import android.util.EventLog;
 import android.util.Log;
 import android.view.Display;
@@ -273,15 +274,63 @@
             }
         }
 
-        // If we're trying to add a profile owner and user setup hasn't completed yet, no
-        // need to prompt for permission. Just add and finish.
-        if (mAddingProfileOwner && !mDPM.hasUserSetupCompleted()) {
-            addAndFinish();
-            return;
-        }
-
         mAddMsgText = getIntent().getCharSequenceExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION);
 
+        if (mAddingProfileOwner) {
+            // If we're trying to add a profile owner and user setup hasn't completed yet, no
+            // need to prompt for permission. Just add and finish
+            if (!mDPM.hasUserSetupCompleted()) {
+                addAndFinish();
+                return;
+            }
+
+            // othewise, only the defined default supervision profile owner can be set after user
+            // setup.
+            final String supervisor = getString(
+                    com.android.internal.R.string.config_defaultSupervisionProfileOwnerComponent);
+            if (supervisor == null) {
+                Log.w(TAG, "Unable to set profile owner post-setup, no default supervisor"
+                        + "profile owner defined");
+                finish();
+                return;
+            }
+
+            final ComponentName supervisorComponent = ComponentName.unflattenFromString(
+                    supervisor);
+            if (who.compareTo(supervisorComponent) != 0) {
+                Log.w(TAG, "Unable to set non-default profile owner post-setup " + who);
+                finish();
+                return;
+            }
+
+            // Build and show the simplified dialog
+            final Dialog dialog = new AlertDialog.Builder(this)
+                    .setTitle(getText(R.string.profile_owner_add_title_simplified))
+                    .setView(R.layout.profile_owner_add)
+                    .setPositiveButton(R.string.allow, new DialogInterface.OnClickListener() {
+                        public void onClick(DialogInterface dialog, int which) {
+                            addAndFinish();
+                        }
+                    })
+                    .setNeutralButton(R.string.cancel, null)
+                    .setOnDismissListener(new DialogInterface.OnDismissListener() {
+                        public void onDismiss(DialogInterface dialogInterface) {
+                            finish();
+                        }
+                    })
+                    .create();
+            dialog.show();
+
+            mActionButton = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_POSITIVE);
+            mActionButton.setFilterTouchesWhenObscured(true);
+            mAddMsg = dialog.findViewById(R.id.add_msg_simplified);
+            mAddMsg.setMovementMethod(new ScrollingMovementMethod());
+            mAddMsg.setText(mAddMsgText);
+            mAdminWarning = dialog.findViewById(R.id.admin_warning_simplified);
+            mAdminWarning.setText(getString(R.string.device_admin_warning_simplified,
+                    mProfileOwnerName));
+            return;
+        }
         setContentView(R.layout.device_admin_add);
 
         mAdminIcon = (ImageView)findViewById(R.id.admin_icon);
@@ -501,7 +550,9 @@
     protected void onResume() {
         super.onResume();
         mActionButton.setEnabled(true);
-        updateInterface();
+        if (!mAddingProfileOwner) {
+            updateInterface();
+        }
         // As long as we are running, don't let anyone overlay stuff on top of the screen.
         mAppOps.setUserRestriction(AppOpsManager.OP_SYSTEM_ALERT_WINDOW, true, mToken);
         mAppOps.setUserRestriction(AppOpsManager.OP_TOAST_WINDOW, true, mToken);
@@ -571,9 +622,6 @@
         } catch (Resources.NotFoundException e) {
             mAdminDescription.setVisibility(View.GONE);
         }
-        if (mAddingProfileOwner) {
-            mProfileOwnerWarning.setVisibility(View.VISIBLE);
-        }
         if (mAddMsgText != null) {
             mAddMsg.setText(mAddMsgText);
             mAddMsg.setVisibility(View.VISIBLE);
@@ -634,11 +682,7 @@
             addDeviceAdminPolicies(true /* showDescription */);
             mAdminWarning.setText(getString(R.string.device_admin_warning,
                     mDeviceAdmin.getActivityInfo().applicationInfo.loadLabel(getPackageManager())));
-            if (mAddingProfileOwner) {
-                setTitle(getText(R.string.profile_owner_add_title));
-            } else {
-                setTitle(getText(R.string.add_device_admin_msg));
-            }
+            setTitle(getText(R.string.add_device_admin_msg));
             mActionButton.setText(getText(R.string.add_device_admin));
             if (isAdminUninstallable()) {
                 mUninstallButton.setVisibility(View.VISIBLE);
diff --git a/src/com/android/settings/applications/specialaccess/deviceadmin/ProfileOwnerAdd.java b/src/com/android/settings/applications/specialaccess/deviceadmin/ProfileOwnerAdd.java
new file mode 100644
index 0000000..6841ea4
--- /dev/null
+++ b/src/com/android/settings/applications/specialaccess/deviceadmin/ProfileOwnerAdd.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.applications.specialaccess.deviceadmin;
+
+import android.os.Bundle;
+
+/**
+ * ProfileOwnerAdd uses the DeviceAdminAdd logic to handle SET_PROFILE_OWNER intents
+ *
+ * TODO(b/131713071): Move profile owner add logic from DeviceAdminAdd to here
+ */
+public class ProfileOwnerAdd extends DeviceAdminAdd {
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+    }
+}
diff --git a/src/com/android/settings/backup/SettingsBackupHelper.java b/src/com/android/settings/backup/SettingsBackupHelper.java
new file mode 100644
index 0000000..92612b0
--- /dev/null
+++ b/src/com/android/settings/backup/SettingsBackupHelper.java
@@ -0,0 +1,89 @@
+/**
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.backup;
+
+import android.app.backup.BackupAgentHelper;
+import android.app.backup.BackupDataInputStream;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.BackupHelper;
+import android.os.ParcelFileDescriptor;
+
+import com.android.settings.shortcut.CreateShortcutPreferenceController;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Backup agent for Settings APK
+ */
+public class SettingsBackupHelper extends BackupAgentHelper {
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        addHelper("no-op", new NoOpHelper());
+    }
+
+    @Override
+    public void onRestoreFinished() {
+        super.onRestoreFinished();
+        CreateShortcutPreferenceController.updateRestoredShortcuts(this);
+    }
+
+    /**
+     * Backup helper which does not do anything. Having at least one helper ensures that the
+     * transport is not empty and onRestoreFinished is called eventually.
+     */
+    private static class NoOpHelper implements BackupHelper {
+
+        private final int VERSION_CODE = 1;
+
+        @Override
+        public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
+                ParcelFileDescriptor newState) {
+
+            try (FileOutputStream out = new FileOutputStream(newState.getFileDescriptor())) {
+                if (getVersionCode(oldState) != VERSION_CODE) {
+                    data.writeEntityHeader("dummy", 1);
+                    data.writeEntityData(new byte[1], 1);
+                }
+
+                // Write new version code
+                out.write(VERSION_CODE);
+                out.flush();
+            } catch (IOException e) { }
+        }
+
+        @Override
+        public void restoreEntity(BackupDataInputStream data) { }
+
+        @Override
+        public void writeNewStateDescription(ParcelFileDescriptor newState) { }
+
+        private int getVersionCode(ParcelFileDescriptor state) {
+            if (state == null) {
+                return 0;
+            }
+            try (FileInputStream in = new FileInputStream(state.getFileDescriptor())) {
+                return in.read();
+            } catch (IOException e) {
+                return 0;
+            }
+        }
+    }
+}
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
index 9a07821..ad0ae6f 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintSettings.java
@@ -396,7 +396,7 @@
             Preference addPreference = new Preference(root.getContext());
             addPreference.setKey(KEY_FINGERPRINT_ADD);
             addPreference.setTitle(R.string.fingerprint_add_title);
-            addPreference.setIcon(R.drawable.ic_menu_add);
+            addPreference.setIcon(R.drawable.ic_add_24dp);
             root.addPreference(addPreference);
             addPreference.setOnPreferenceChangeListener(this);
             updateAddPreference();
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
index ec5381c..74d3b6a 100644
--- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
@@ -29,6 +29,7 @@
 import android.text.TextUtils;
 import android.util.Pair;
 import android.util.TypedValue;
+import android.view.View;
 import android.widget.ImageView;
 
 import androidx.annotation.VisibleForTesting;
@@ -170,6 +171,8 @@
         final ImageView imageView = (ImageView) view.findViewById(android.R.id.icon);
         if (imageView != null) {
             imageView.setContentDescription(contentDescription);
+            // Set property to prevent Talkback from reading out.
+            imageView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
             imageView.setElevation(
                     getContext().getResources().getDimension(R.dimen.bt_icon_elevation));
         }
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java b/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
index 1c75669..d42a1be 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceController.java
@@ -66,7 +66,7 @@
         if (TextUtils.equals(getPreferenceKey(), preference.getKey()) && mFragment != null) {
             mMetricsFeatureProvider.action(mContext,
                     SettingsEnums.ACTION_BLUETOOTH_RENAME);
-            LocalDeviceNameDialogFragment.newInstance()
+            new LocalDeviceNameDialogFragment()
                     .show(mFragment.getFragmentManager(), LocalDeviceNameDialogFragment.TAG);
             return true;
         }
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingPreferenceController.java b/src/com/android/settings/bluetooth/BluetoothPairingPreferenceController.java
index 514c70f..c835586 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingPreferenceController.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingPreferenceController.java
@@ -76,7 +76,7 @@
     public Preference createBluetoothPairingPreference(int order) {
         mPreference = new Preference(mFragment.getPreferenceScreen().getContext());
         mPreference.setKey(KEY_PAIRING);
-        mPreference.setIcon(R.drawable.ic_menu_add);
+        mPreference.setIcon(R.drawable.ic_add_24dp);
         mPreference.setOrder(order);
         mPreference.setTitle(R.string.bluetooth_pairing_pref_title);
 
diff --git a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
index db6b832..6d8fb33 100644
--- a/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
+++ b/src/com/android/settings/bluetooth/ForgetDeviceDialogFragment.java
@@ -29,6 +29,7 @@
 
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settingslib.bluetooth.BluetoothUtils;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 import com.android.settingslib.bluetooth.LocalBluetoothManager;
 
@@ -72,13 +73,18 @@
         };
         Context context = getContext();
         mDevice = getDevice(context);
+        final boolean untetheredHeadset = BluetoothUtils.getBooleanMetaData(
+                mDevice.getDevice(), BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET);
+
         AlertDialog dialog = new AlertDialog.Builder(context)
                 .setPositiveButton(R.string.bluetooth_unpair_dialog_forget_confirm_button,
                         onConfirm)
                 .setNegativeButton(android.R.string.cancel, null)
                 .create();
         dialog.setTitle(R.string.bluetooth_unpair_dialog_title);
-        dialog.setMessage(context.getString(R.string.bluetooth_unpair_dialog_body,
+        dialog.setMessage(context.getString(untetheredHeadset
+                        ? R.string.bluetooth_untethered_unpair_dialog_body
+                        : R.string.bluetooth_unpair_dialog_body,
                 mDevice.getName()));
         return dialog;
     }
diff --git a/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragment.java b/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragment.java
index 5cf2ccc..c15dd04 100644
--- a/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragment.java
+++ b/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragment.java
@@ -31,10 +31,6 @@
     public static final String TAG = "LocalAdapterName";
     private BluetoothAdapter mBluetoothAdapter;
 
-    public static LocalDeviceNameDialogFragment newInstance() {
-        return new LocalDeviceNameDialogFragment();
-    }
-
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index bfa44e5..3590554 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -31,6 +31,7 @@
 import com.android.settings.notification.ZenSuggestionActivity;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ScreenLockSuggestionActivity;
+import com.android.settings.wallpaper.StyleSuggestionActivity;
 import com.android.settings.wallpaper.WallpaperSuggestionActivity;
 import com.android.settings.wifi.calling.WifiCallingSuggestionActivity;
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -62,6 +63,8 @@
         final String className = component.getClassName();
         if (className.equals(WallpaperSuggestionActivity.class.getName())) {
             return WallpaperSuggestionActivity.isSuggestionComplete(context);
+        } else if (className.equals(StyleSuggestionActivity.class.getName())) {
+            return StyleSuggestionActivity.isSuggestionComplete(context);
         } else if (className.equals(FingerprintSuggestionActivity.class.getName())) {
             return FingerprintSuggestionActivity.isSuggestionComplete(context);
         } else if (className.equals(FingerprintEnrollSuggestionActivity.class.getName())) {
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
index 6435468..be23f72 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
@@ -20,12 +20,25 @@
 import android.content.Context;
 import android.os.Bundle;
 import android.provider.SearchIndexableResource;
+import android.text.Annotation;
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.TextPaint;
+import android.text.TextUtils;
+import android.text.style.URLSpan;
+import android.view.View;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.fragment.app.Fragment;
 
 import com.android.settings.R;
 import com.android.settings.dashboard.DashboardFragment;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
+import com.android.settingslib.HelpUtils;
 import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.widget.FooterPreference;
 
 import java.util.Arrays;
 import java.util.List;
@@ -36,10 +49,14 @@
 @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
 public class BatterySaverSettings extends DashboardFragment {
     private static final String TAG = "BatterySaverSettings";
+    public static final String KEY_FOOTER_PREFERENCE = "footer_preference";
+    private SpannableStringBuilder mFooterText;
+    private String mHelpUri;
 
     @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
+    public void onStart() {
+        super.onStart();
+        setupFooter();
     }
 
     @Override
@@ -75,4 +92,82 @@
                     return Arrays.asList(sir);
                 }
             };
+
+    // Updates the footer for this page.
+    @VisibleForTesting
+    void setupFooter() {
+        mFooterText =  new SpannableStringBuilder(getText(
+                com.android.internal.R.string.battery_saver_description_with_learn_more));
+        mHelpUri = getString(R.string.help_url_battery_saver_settings);
+        if (!TextUtils.isEmpty(mHelpUri)) {
+            addHelpLink();
+        }
+    }
+
+    // Changes the text to include a learn more link if possible.
+    @VisibleForTesting
+    void addHelpLink() {
+        FooterPreference pref = getPreferenceScreen().findPreference(KEY_FOOTER_PREFERENCE);
+        if (pref != null) {
+            SupportPageLearnMoreSpan.linkify(mFooterText, this, mHelpUri);
+            pref.setTitle(mFooterText);
+        }
+    }
+
+    /**
+     * A {@link URLSpan} that opens a support page when clicked
+     */
+    public static class SupportPageLearnMoreSpan extends URLSpan {
+
+
+        private static final String ANNOTATION_URL = "url";
+        private final Fragment mFragment;
+        private final String mUriString;
+
+        public SupportPageLearnMoreSpan(Fragment fragment, String uriString) {
+            // sets the url to empty string so we can prevent any other span processing from
+            // from clearing things we need in this string.
+            super("");
+            mFragment = fragment;
+            mUriString = uriString;
+        }
+
+        @Override
+        public void onClick(View widget) {
+            if (mFragment != null) {
+                // launch the support page
+                mFragment.startActivityForResult(HelpUtils.getHelpIntent(mFragment.getContext(),
+                        mUriString, ""), 0);
+            }
+        }
+
+        @Override
+        public void updateDrawState(TextPaint ds) {
+            super.updateDrawState(ds);
+            // remove underline
+            ds.setUnderlineText(false);
+        }
+
+        /**
+         * This method takes a string and turns it into a url span that will launch a support page
+         * @param msg The text to turn into a link
+         * @param fragment The fragment which contains this span
+         * @param uriString The URI string of the help article to open when clicked
+         * @return A CharSequence containing the original text content as a url
+         */
+        public static CharSequence linkify(Spannable msg, Fragment fragment, String uriString) {
+            Annotation[] spans = msg.getSpans(0, msg.length(), Annotation.class);
+            for (Annotation annotation : spans) {
+                int start = msg.getSpanStart(annotation);
+                int end = msg.getSpanEnd(annotation);
+                if (ANNOTATION_URL.equals(annotation.getValue())) {
+                    SupportPageLearnMoreSpan link =
+                            new SupportPageLearnMoreSpan(fragment, uriString);
+                    msg.removeSpan(annotation);
+                    msg.setSpan(link, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+                }
+            }
+            return msg;
+        }
+    }
 }
diff --git a/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java b/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java
index 11ff094..337ad2e 100644
--- a/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java
+++ b/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceController.java
@@ -43,11 +43,6 @@
     }
 
     @Override
-    public boolean isSliceable() {
-        return TextUtils.equals(PREF_KEY_EDGE_TO_EDGE, getPreferenceKey());
-    }
-
-    @Override
     public void onRadioButtonClicked(RadioButtonPreference preference) {
         setNavBarInteractionMode(mOverlayManager, NAV_BAR_MODE_GESTURAL_OVERLAY);
         selectRadioButtonInGroup(PREF_KEY_EDGE_TO_EDGE, mPreferenceScreen);
diff --git a/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java
index 0b19784..728c5df 100644
--- a/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java
+++ b/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceController.java
@@ -43,11 +43,6 @@
     }
 
     @Override
-    public boolean isSliceable() {
-        return TextUtils.equals(PREF_KEY_LEGACY, getPreferenceKey());
-    }
-
-    @Override
     public void onRadioButtonClicked(RadioButtonPreference preference) {
         setNavBarInteractionMode(mOverlayManager, NAV_BAR_MODE_3BUTTON_OVERLAY);
         selectRadioButtonInGroup(PREF_KEY_LEGACY, mPreferenceScreen);
diff --git a/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java b/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java
index 26c2201..cf2886f 100644
--- a/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java
+++ b/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceController.java
@@ -43,11 +43,6 @@
     }
 
     @Override
-    public boolean isSliceable() {
-        return TextUtils.equals(PREF_KEY_SWIPE_UP, getPreferenceKey());
-    }
-
-    @Override
     public void onRadioButtonClicked(RadioButtonPreference preference) {
         setNavBarInteractionMode(mOverlayManager, NAV_BAR_MODE_2BUTTON_OVERLAY);
         selectRadioButtonInGroup(PREF_KEY_SWIPE_UP, mPreferenceScreen);
diff --git a/src/com/android/settings/homepage/contextualcards/deviceinfo/EmergencyInfoSlice.java b/src/com/android/settings/homepage/contextualcards/deviceinfo/EmergencyInfoSlice.java
index f8be2d6..10e87ff 100644
--- a/src/com/android/settings/homepage/contextualcards/deviceinfo/EmergencyInfoSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/deviceinfo/EmergencyInfoSlice.java
@@ -16,8 +16,6 @@
 
 package com.android.settings.homepage.contextualcards.deviceinfo;
 
-import static com.android.settings.accounts.EmergencyInfoPreferenceController.ACTION_EDIT_EMERGENCY_INFO;
-
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
@@ -29,6 +27,7 @@
 import androidx.slice.builders.SliceAction;
 
 import com.android.settings.R;
+import com.android.settings.accounts.EmergencyInfoPreferenceController;
 import com.android.settings.slices.CustomSliceRegistry;
 import com.android.settings.slices.CustomSliceable;
 
@@ -62,7 +61,7 @@
 
     @Override
     public Intent getIntent() {
-        return new Intent(ACTION_EDIT_EMERGENCY_INFO);
+        return new Intent(EmergencyInfoPreferenceController.getIntentAction(mContext));
     }
 
     @Override
diff --git a/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
index 761755c..d1051fe 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
@@ -30,6 +30,7 @@
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.util.ArrayMap;
+import android.view.View;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.annotation.WorkerThread;
@@ -112,9 +113,12 @@
                 continue;
             }
             final Drawable drawable = mContext.getDrawable(batteryTip.getIconId());
-            drawable.setColorFilter(new PorterDuffColorFilter(
-                    mContext.getResources().getColor(batteryTip.getIconTintColorId()),
-                    PorterDuff.Mode.SRC_IN));
+            final int iconTintColorId = batteryTip.getIconTintColorId();
+            if (iconTintColorId != View.NO_ID) {
+                drawable.setColorFilter(new PorterDuffColorFilter(
+                        mContext.getResources().getColor(iconTintColorId),
+                        PorterDuff.Mode.SRC_IN));
+            }
 
             final IconCompat icon = Utils.createIconWithDrawable(drawable);
             final SliceAction primaryAction = SliceAction.createDeeplink(getPrimaryAction(),
diff --git a/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java b/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
index f7b2bf5..cbe5ede 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/SliceFullCardRendererHelper.java
@@ -74,10 +74,10 @@
                 });
 
         // Customize slice view for Settings
-        cardHolder.sliceView.showTitleItems(true);
+        cardHolder.sliceView.setShowTitleItems(true);
         if (card.isLargeCard()) {
-            cardHolder.sliceView.showHeaderDivider(true);
-            cardHolder.sliceView.showActionDividers(true);
+            cardHolder.sliceView.setShowHeaderDivider(true);
+            cardHolder.sliceView.setShowActionDividers(true);
         }
     }
 
diff --git a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
index c8b5b6d..c37d2b5 100644
--- a/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/AvailableVirtualKeyboardFragment.java
@@ -16,20 +16,11 @@
 
 package com.android.settings.inputmethod;
 
-import android.annotation.DrawableRes;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.ServiceInfo;
 import android.content.res.Configuration;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.provider.SearchIndexableResource;
 import android.view.inputmethod.InputMethodInfo;
@@ -93,59 +84,12 @@
         return SettingsEnums.ENABLE_VIRTUAL_KEYBOARDS;
     }
 
-    @Nullable
-    private static Drawable loadDrawable(@NonNull final PackageManager packageManager,
-            @NonNull final String packageName, @DrawableRes final int resId,
-            @NonNull final ApplicationInfo applicationInfo) {
-        if (resId == 0) {
-            return null;
-        }
-        try {
-            return packageManager.getDrawable(packageName, resId, applicationInfo);
-        } catch (Exception e) {
-            return null;
-        }
-    }
-
-    @NonNull
-    private static Drawable getInputMethodIcon(@NonNull final PackageManager packageManager,
-            @NonNull final InputMethodInfo imi) {
-        final ServiceInfo si = imi.getServiceInfo();
-        final ApplicationInfo ai = si != null ? si.applicationInfo : null;
-        final String packageName = imi.getPackageName();
-        if (si == null || ai == null || packageName == null) {
-            return new ColorDrawable(Color.TRANSPARENT);
-        }
-        // We do not use ServiceInfo#loadLogo() and ServiceInfo#loadIcon here since those methods
-        // internally have some fallback rules, which we want to do manually.
-        Drawable drawable = loadDrawable(packageManager, packageName, si.logo, ai);
-        if (drawable != null) {
-            return drawable;
-        }
-        drawable = loadDrawable(packageManager, packageName, si.icon, ai);
-        if (drawable != null) {
-            return drawable;
-        }
-        // We do not use ApplicationInfo#loadLogo() and ApplicationInfo#loadIcon here since those
-        // methods internally have some fallback rules, which we want to do manually.
-        drawable = loadDrawable(packageManager, packageName, ai.logo, ai);
-        if (drawable != null) {
-            return drawable;
-        }
-        drawable = loadDrawable(packageManager, packageName, ai.icon, ai);
-        if (drawable != null) {
-            return drawable;
-        }
-        return new ColorDrawable(Color.TRANSPARENT);
-    }
-
     private void updateInputMethodPreferenceViews() {
         mInputMethodSettingValues.refreshAllInputMethodAndSubtypes();
         // Clear existing "InputMethodPreference"s
         mInputMethodPreferenceList.clear();
         List<String> permittedList = mDpm.getPermittedInputMethodsForCurrentUser();
         final Context context = getPrefContext();
-        final PackageManager packageManager = getActivity().getPackageManager();
         final List<InputMethodInfo> imis = mInputMethodSettingValues.getInputMethodList();
         final int numImis = (imis == null ? 0 : imis.size());
         for (int i = 0; i < numImis; ++i) {
@@ -154,7 +98,7 @@
                     || permittedList.contains(imi.getPackageName());
             final InputMethodPreference pref = new InputMethodPreference(
                     context, imi, true, isAllowedByOrganization, this);
-            pref.setIcon(getInputMethodIcon(packageManager, imi));
+            pref.setIcon(imi.loadIcon(context.getPackageManager()));
             mInputMethodPreferenceList.add(pref);
         }
         final Collator collator = Collator.getInstance();
diff --git a/src/com/android/settings/inputmethod/UserDictionarySettings.java b/src/com/android/settings/inputmethod/UserDictionarySettings.java
index c8fb625..67420a2 100644
--- a/src/com/android/settings/inputmethod/UserDictionarySettings.java
+++ b/src/com/android/settings/inputmethod/UserDictionarySettings.java
@@ -154,7 +154,7 @@
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
         MenuItem actionItem =
                 menu.add(0, OPTIONS_MENU_ADD, 0, R.string.user_dict_settings_add_menu_title)
-                        .setIcon(R.drawable.ic_menu_add);
+                        .setIcon(R.drawable.ic_add_24dp);
         actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM |
                 MenuItem.SHOW_AS_ACTION_WITH_TEXT);
     }
diff --git a/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java b/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java
index cb7831e..ef07d11 100644
--- a/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/VirtualKeyboardFragment.java
@@ -20,8 +20,6 @@
 import android.app.admin.DevicePolicyManager;
 import android.app.settings.SettingsEnums;
 import android.content.Context;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.provider.SearchIndexableResource;
@@ -48,7 +46,6 @@
 public final class VirtualKeyboardFragment extends SettingsPreferenceFragment implements Indexable {
 
     private static final String ADD_VIRTUAL_KEYBOARD_SCREEN = "add_virtual_keyboard_screen";
-    private static final Drawable NO_ICON = new ColorDrawable(Color.TRANSPARENT);
 
     private final ArrayList<InputMethodPreference> mInputMethodPreferenceList = new ArrayList<>();
     private InputMethodManager mImm;
@@ -89,14 +86,7 @@
             final InputMethodInfo imi = imis.get(i);
             final boolean isAllowedByOrganization = permittedList == null
                     || permittedList.contains(imi.getPackageName());
-            Drawable icon;
-            try {
-                // TODO: Consider other ways to retrieve an icon to show here.
-                icon = getActivity().getPackageManager().getApplicationIcon(imi.getPackageName());
-            } catch (Exception e) {
-                // TODO: Consider handling the error differently perhaps by showing default icons.
-                icon = NO_ICON;
-            }
+            final Drawable icon = imi.loadIcon(context.getPackageManager());
             final InputMethodPreference pref = new InputMethodPreference(
                     context,
                     imi,
diff --git a/src/com/android/settings/network/ApnSettings.java b/src/com/android/settings/network/ApnSettings.java
index c397600..f0603bb 100755
--- a/src/com/android/settings/network/ApnSettings.java
+++ b/src/com/android/settings/network/ApnSettings.java
@@ -351,7 +351,7 @@
             if (mAllowAddingApns) {
                 menu.add(0, MENU_NEW, 0,
                         getResources().getString(R.string.menu_new))
-                        .setIcon(R.drawable.ic_menu_add)
+                        .setIcon(R.drawable.ic_add_24dp)
                         .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
             }
             menu.add(0, MENU_RESTORE, 0,
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index e700329..ebac51f 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -59,7 +59,11 @@
         return subscriptions;
     }
 
-    private static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) {
+    @VisibleForTesting
+    static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) {
+        if (slotInfo == null)  {
+            return false;
+        }
         return !slotInfo.getIsEuicc() && !slotInfo.getIsActive() &&
                 slotInfo.getCardStateInfo() == CARD_STATE_INFO_PRESENT;
     }
diff --git a/src/com/android/settings/network/telephony/DeleteSimProfileConfirmationDialog.java b/src/com/android/settings/network/telephony/DeleteSimProfileConfirmationDialog.java
new file mode 100644
index 0000000..13bfa92
--- /dev/null
+++ b/src/com/android/settings/network/telephony/DeleteSimProfileConfirmationDialog.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.network.telephony;
+
+import android.app.Dialog;
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.telephony.SubscriptionInfo;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.app.AlertDialog;
+
+import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+public class DeleteSimProfileConfirmationDialog extends InstrumentedDialogFragment implements
+        DialogInterface.OnClickListener {
+    public static final String TAG = "confirm_delete_sim";
+    public static final String KEY_SUBSCRIPTION_INFO = "subscription_info";
+    private SubscriptionInfo mInfo;
+
+    public static DeleteSimProfileConfirmationDialog newInstance(SubscriptionInfo info) {
+        final DeleteSimProfileConfirmationDialog dialog =
+                new DeleteSimProfileConfirmationDialog();
+        final Bundle args = new Bundle();
+        args.putParcelable(KEY_SUBSCRIPTION_INFO, info);
+        dialog.setArguments(args);
+        return dialog;
+    }
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+        mInfo = getArguments().getParcelable(KEY_SUBSCRIPTION_INFO);
+        Context context = getContext();
+        final String message = context.getString(R.string.mobile_network_erase_sim_dialog_body,
+                mInfo.getCarrierName(), mInfo.getCarrierName());
+        return new AlertDialog.Builder(context)
+                .setTitle(R.string.mobile_network_erase_sim_dialog_title)
+                .setMessage(message)
+                .setNegativeButton(R.string.cancel, null)
+                .setPositiveButton(R.string.mobile_network_erase_sim_dialog_ok, this)
+                .create();
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        if (which == DialogInterface.BUTTON_POSITIVE) {
+            beginDeletionWithProgress();
+        }
+    }
+
+    @VisibleForTesting
+    void beginDeletionWithProgress() {
+        final DeleteSimProfileProgressDialog progress =
+                DeleteSimProfileProgressDialog.newInstance(mInfo.getSubscriptionId());
+        progress.setTargetFragment(getTargetFragment(), 0);
+        progress.show(getFragmentManager(), DeleteSimProfileProgressDialog.TAG);
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.DIALOG_DELETE_SIM_CONFIRMATION;
+    }
+}
diff --git a/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.java b/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.java
new file mode 100644
index 0000000..22ff2b6
--- /dev/null
+++ b/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceController.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony;
+
+import android.content.Context;
+import android.telephony.SubscriptionInfo;
+
+import androidx.fragment.app.Fragment;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.network.SubscriptionUtil;
+
+/** This controls a preference allowing the user to delete the profile for an eSIM. */
+public class DeleteSimProfilePreferenceController extends BasePreferenceController {
+
+    private SubscriptionInfo mSubscriptionInfo;
+    private Fragment mParentFragment;
+
+    public DeleteSimProfilePreferenceController(Context context, String preferenceKey) {
+        super(context, preferenceKey);
+    }
+
+    public void init(int subscriptionId, Fragment parentFragment) {
+        mParentFragment = parentFragment;
+
+        for (SubscriptionInfo info : SubscriptionUtil.getAvailableSubscriptions(
+                mContext)) {
+            if (info.getSubscriptionId() == subscriptionId && info.isEmbedded()) {
+                mSubscriptionInfo = info;
+                break;
+            }
+        }
+    }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        final Preference pref = screen.findPreference(getPreferenceKey());
+        pref.setOnPreferenceClickListener(p -> {
+            final DeleteSimProfileConfirmationDialog dialogFragment =
+                    DeleteSimProfileConfirmationDialog.newInstance(mSubscriptionInfo);
+            dialogFragment.setTargetFragment(mParentFragment, 0);
+            dialogFragment.show(mParentFragment.getFragmentManager(),
+                    DeleteSimProfileConfirmationDialog.TAG);
+            return true;
+        });
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        if (mSubscriptionInfo != null) {
+            return AVAILABLE;
+        } else {
+            return CONDITIONALLY_UNAVAILABLE;
+        }
+    }
+
+}
diff --git a/src/com/android/settings/network/telephony/DeleteSimProfileProgressDialog.java b/src/com/android/settings/network/telephony/DeleteSimProfileProgressDialog.java
new file mode 100644
index 0000000..c176f3c
--- /dev/null
+++ b/src/com/android/settings/network/telephony/DeleteSimProfileProgressDialog.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.network.telephony;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.app.PendingIntent;
+import android.app.ProgressDialog;
+import android.app.settings.SettingsEnums;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.telephony.euicc.EuiccManager;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+
+import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+public class DeleteSimProfileProgressDialog extends InstrumentedDialogFragment {
+    public static final String TAG = "delete_sim_progress";
+
+    // Note that this must be listed in AndroidManfiest.xml in a <protected-broadcast> tag
+    @VisibleForTesting
+    static final String PENDING_INTENT =
+            "com.android.settings.DELETE_SIM_PROFILE_RESULT";
+    private static final int PENDING_INTENT_REQUEST_CODE = 1;
+    private static final String KEY_SUBSCRIPTION_ID = "subscription_id";
+    @VisibleForTesting
+    static final String KEY_DELETE_STARTED = "delete_started";
+
+    private boolean mDeleteStarted;
+    private BroadcastReceiver mReceiver;
+
+    public static DeleteSimProfileProgressDialog newInstance(int subscriptionId) {
+        final DeleteSimProfileProgressDialog dialog = new DeleteSimProfileProgressDialog();
+        final Bundle args = new Bundle();
+        args.putInt(KEY_SUBSCRIPTION_ID, subscriptionId);
+        dialog.setArguments(args);
+        return dialog;
+    }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putBoolean(KEY_DELETE_STARTED, mDeleteStarted);
+    }
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
+        if (savedInstanceState != null) {
+            mDeleteStarted = savedInstanceState.getBoolean(KEY_DELETE_STARTED, false);
+        }
+        final Context context = getContext();
+        final ProgressDialog progressDialog = new ProgressDialog(context);
+        progressDialog.setMessage(
+                context.getString(R.string.mobile_network_erase_sim_dialog_progress));
+
+        mReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                dismiss();
+                final Activity activity = getActivity();
+                if (activity != null && !activity.isFinishing()) {
+                    activity.finish();
+                }
+            }
+        };
+        context.registerReceiver(mReceiver, new IntentFilter(PENDING_INTENT));
+
+        if (!mDeleteStarted) {
+            final PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
+                    PENDING_INTENT_REQUEST_CODE, new Intent(PENDING_INTENT),
+                    PendingIntent.FLAG_ONE_SHOT);
+
+            final EuiccManager euiccManager = context.getSystemService(EuiccManager.class);
+            final int subId = getArguments().getInt(KEY_SUBSCRIPTION_ID);
+            euiccManager.deleteSubscription(subId, pendingIntent);
+            mDeleteStarted = true;
+        }
+
+        return progressDialog;
+    }
+
+    @Override
+    public void onDismiss(@NonNull DialogInterface dialog) {
+        if (mReceiver != null) {
+            final Context context = getContext();
+            if (context != null) {
+                context.unregisterReceiver(mReceiver);
+            }
+            mReceiver = null;
+        }
+    }
+
+    @Override
+    public int getMetricsCategory() {
+        return SettingsEnums.DIALOG_DELETE_SIM_PROGRESS;
+    }
+}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index eb00b9f..e18971d 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -138,6 +138,7 @@
             use(BillingCyclePreferenceController.class).init(mSubId);
             use(MmsMessagePreferenceController.class).init(mSubId);
             use(DisabledSubscriptionController.class).init(getLifecycle(), mSubId);
+            use(DeleteSimProfilePreferenceController.class).init(mSubId, this);
         }
         use(MobileDataPreferenceController.class).init(getFragmentManager(), mSubId);
         use(RoamingPreferenceController.class).init(getFragmentManager(), mSubId);
diff --git a/src/com/android/settings/notification/ImportancePreference.java b/src/com/android/settings/notification/ImportancePreference.java
index 687782b..f48882d 100644
--- a/src/com/android/settings/notification/ImportancePreference.java
+++ b/src/com/android/settings/notification/ImportancePreference.java
@@ -20,10 +20,16 @@
 import static android.app.NotificationManager.IMPORTANCE_HIGH;
 import static android.app.NotificationManager.IMPORTANCE_LOW;
 import static android.app.NotificationManager.IMPORTANCE_MIN;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
 
 import android.content.Context;
 import android.graphics.drawable.Drawable;
+import android.transition.AutoTransition;
+import android.transition.TransitionManager;
 import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.TextView;
 
@@ -38,11 +44,12 @@
     private int mImportance;
     private boolean mDisplayInStatusBar;
     private boolean mDisplayOnLockscreen;
-    private Button mSilenceButton;
-    private Button mAlertButton;
+    private View mSilenceButton;
+    private View mAlertButton;
     private Context mContext;
     Drawable selectedBackground;
     Drawable unselectedBackground;
+    private static final int BUTTON_ANIM_TIME_MS = 100;
 
     public ImportancePreference(Context context, AttributeSet attrs,
             int defStyleAttr, int defStyleRes) {
@@ -89,13 +96,12 @@
     }
 
     @Override
-    public void onBindViewHolder(PreferenceViewHolder holder) {
+    public void onBindViewHolder(final PreferenceViewHolder holder) {
         super.onBindViewHolder(holder);
         holder.itemView.setClickable(false);
 
-        TextView textView = (TextView) holder.findViewById(R.id.description);
-        mSilenceButton = (Button) holder.findViewById(R.id.silence);
-        mAlertButton = (Button) holder.findViewById(R.id.alert);
+        mSilenceButton = holder.findViewById(R.id.silence);
+        mAlertButton = holder.findViewById(R.id.alert);
 
         if (!mIsConfigurable) {
             mSilenceButton.setEnabled(false);
@@ -114,34 +120,41 @@
                 mAlertButton.setBackground(selectedBackground);
                 break;
         }
-        setImportanceSummary(textView, mImportance);
+        setImportanceSummary((ViewGroup) holder.itemView, mImportance, false);
 
         mSilenceButton.setOnClickListener(v -> {
             callChangeListener(IMPORTANCE_LOW);
             mAlertButton.setBackground(unselectedBackground);
+            mAlertButton.setSelected(false);
             mSilenceButton.setBackground(selectedBackground);
-            mSilenceButton.setTextAppearance(
-                    R.style.TextAppearance_NotificationImportanceButton_Selected);
-            mAlertButton.setTextAppearance(
-                    R.style.TextAppearance_NotificationImportanceButton_Unselected);
-            setImportanceSummary(textView, IMPORTANCE_LOW);
+            mSilenceButton.setSelected(true);
+            setImportanceSummary((ViewGroup) holder.itemView, IMPORTANCE_LOW, true);
         });
         mAlertButton.setOnClickListener(v -> {
             callChangeListener(IMPORTANCE_DEFAULT);
             mSilenceButton.setBackground(unselectedBackground);
+            mSilenceButton.setSelected(false);
             mAlertButton.setBackground(selectedBackground);
-            mAlertButton.setTextAppearance(
-                    R.style.TextAppearance_NotificationImportanceButton_Selected);
-            mSilenceButton.setTextAppearance(
-                    R.style.TextAppearance_NotificationImportanceButton_Unselected);
-            setImportanceSummary(textView, IMPORTANCE_DEFAULT);
+            mAlertButton.setSelected(true);
+            setImportanceSummary((ViewGroup) holder.itemView, IMPORTANCE_DEFAULT, true);
         });
     }
 
-    void setImportanceSummary(TextView view, int importance) {
+    void setImportanceSummary(ViewGroup parent, int importance, boolean fromUser) {
+        if (fromUser) {
+            AutoTransition transition = new AutoTransition();
+            transition.setDuration(BUTTON_ANIM_TIME_MS);
+            TransitionManager.beginDelayedTransition(parent, transition);
+        }
         if (importance >= IMPORTANCE_DEFAULT) {
+            parent.findViewById(R.id.silence_summary).setVisibility(GONE);
+            TextView view = parent.findViewById(R.id.alert_summary);
             view.setText(R.string.notification_channel_summary_default);
+            view.setVisibility(VISIBLE);
         } else {
+            parent.findViewById(R.id.alert_summary).setVisibility(GONE);
+            TextView view = parent.findViewById(R.id.silence_summary);
+            view.setVisibility(VISIBLE);
             if (mDisplayInStatusBar) {
                  if (mDisplayOnLockscreen) {
                      view.setText(R.string.notification_channel_summary_low_status_lock);
diff --git a/src/com/android/settings/notification/ImportancePreferenceController.java b/src/com/android/settings/notification/ImportancePreferenceController.java
index 46b2ec6..dc59275 100644
--- a/src/com/android/settings/notification/ImportancePreferenceController.java
+++ b/src/com/android/settings/notification/ImportancePreferenceController.java
@@ -22,6 +22,7 @@
 import android.app.NotificationChannel;
 import android.content.Context;
 import android.media.RingtoneManager;
+import android.provider.Settings;
 
 import com.android.settings.core.PreferenceControllerMixin;
 
@@ -64,7 +65,8 @@
             pref.setConfigurable(!mChannel.isImportanceLockedByOEM());
             pref.setImportance(mChannel.getImportance());
             pref.setDisplayInStatusBar(mBackend.showSilentInStatusBar(mContext.getPackageName()));
-            // TODO: b/128445911 pass along lock screen setting
+            pref.setDisplayOnLockscreen(Settings.Secure.getInt(mContext.getContentResolver(),
+                    Settings.Secure.LOCK_SCREEN_SHOW_SILENT_NOTIFICATIONS, 0) == 1);
         }
     }
 
diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java
index 955d4f7..09a0a27 100644
--- a/src/com/android/settings/print/PrintSettingsFragment.java
+++ b/src/com/android/settings/print/PrintSettingsFragment.java
@@ -242,7 +242,7 @@
         }
         Preference preference = new Preference(getPrefContext());
         preference.setTitle(R.string.print_menu_item_add_service);
-        preference.setIcon(R.drawable.ic_menu_add);
+        preference.setIcon(R.drawable.ic_add_24dp);
         preference.setOrder(ORDER_LAST);
         preference.setIntent(addNewServiceIntent);
         preference.setPersistent(false);
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index 9b9de5f..6b95b92 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -38,11 +38,6 @@
 import android.view.View;
 import android.widget.ImageView;
 
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceGroup;
-
 import com.android.settings.R;
 import com.android.settings.Settings.TetherSettingsActivity;
 import com.android.settings.core.BasePreferenceController;
@@ -54,6 +49,11 @@
 import java.util.Comparator;
 import java.util.List;
 
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceGroup;
+
 /**
  * {@link BasePreferenceController} that populates a list of widgets that Settings app support.
  */
@@ -143,24 +143,7 @@
     @VisibleForTesting
     Intent createResultIntent(Intent shortcutIntent, ResolveInfo resolveInfo,
             CharSequence label) {
-        final ActivityInfo activityInfo = resolveInfo.activityInfo;
-
-        final Icon maskableIcon;
-        if (activityInfo.icon != 0 && activityInfo.applicationInfo != null) {
-            maskableIcon = Icon.createWithAdaptiveBitmap(createIcon(
-                    activityInfo.applicationInfo, activityInfo.icon,
-                    R.layout.shortcut_badge_maskable,
-                    mContext.getResources().getDimensionPixelSize(R.dimen.shortcut_size_maskable)));
-        } else {
-            maskableIcon = Icon.createWithResource(mContext, R.drawable.ic_launcher_settings);
-        }
-        final String shortcutId = SHORTCUT_ID_PREFIX +
-                shortcutIntent.getComponent().flattenToShortString();
-        ShortcutInfo info = new ShortcutInfo.Builder(mContext, shortcutId)
-                .setShortLabel(label)
-                .setIntent(shortcutIntent)
-                .setIcon(maskableIcon)
-                .build();
+        ShortcutInfo info = createShortcutInfo(mContext, shortcutIntent, resolveInfo, label);
         Intent intent = mShortcutManager.createShortcutResultIntent(info);
         if (intent == null) {
             intent = new Intent();
@@ -170,8 +153,10 @@
                 .putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent)
                 .putExtra(Intent.EXTRA_SHORTCUT_NAME, label);
 
+        final ActivityInfo activityInfo = resolveInfo.activityInfo;
         if (activityInfo.icon != 0) {
             intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, createIcon(
+                    mContext,
                     activityInfo.applicationInfo,
                     activityInfo.icon,
                     R.layout.shortcut_badge,
@@ -217,15 +202,40 @@
                 info.activityInfo.name);
     }
 
-    private Intent buildShortcutIntent(ResolveInfo info) {
+    private static Intent buildShortcutIntent(ResolveInfo info) {
         return new Intent(SHORTCUT_PROBE)
                 .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP)
                 .setClassName(info.activityInfo.packageName, info.activityInfo.name);
     }
 
-    private Bitmap createIcon(ApplicationInfo app, int resource, int layoutRes, int size) {
-        final Context context = new ContextThemeWrapper(mContext, android.R.style.Theme_Material);
-        final View view = LayoutInflater.from(context).inflate(layoutRes, null);
+    private static ShortcutInfo createShortcutInfo(Context context, Intent shortcutIntent,
+            ResolveInfo resolveInfo, CharSequence label) {
+        final ActivityInfo activityInfo = resolveInfo.activityInfo;
+
+        final Icon maskableIcon;
+        if (activityInfo.icon != 0 && activityInfo.applicationInfo != null) {
+            maskableIcon = Icon.createWithAdaptiveBitmap(createIcon(
+                    context,
+                    activityInfo.applicationInfo, activityInfo.icon,
+                    R.layout.shortcut_badge_maskable,
+                    context.getResources().getDimensionPixelSize(R.dimen.shortcut_size_maskable)));
+        } else {
+            maskableIcon = Icon.createWithResource(context, R.drawable.ic_launcher_settings);
+        }
+        final String shortcutId = SHORTCUT_ID_PREFIX +
+                shortcutIntent.getComponent().flattenToShortString();
+        return new ShortcutInfo.Builder(context, shortcutId)
+                .setShortLabel(label)
+                .setIntent(shortcutIntent)
+                .setIcon(maskableIcon)
+                .build();
+    }
+
+    private static Bitmap createIcon(Context context, ApplicationInfo app, int resource,
+            int layoutRes, int size) {
+        final Context themedContext = new ContextThemeWrapper(context,
+                android.R.style.Theme_Material);
+        final View view = LayoutInflater.from(themedContext).inflate(layoutRes, null);
         final int spec = View.MeasureSpec.makeMeasureSpec(size, View.MeasureSpec.EXACTLY);
         view.measure(spec, spec);
         final Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),
@@ -234,14 +244,15 @@
 
         Drawable iconDrawable;
         try {
-            iconDrawable = mPackageManager.getResourcesForApplication(app).getDrawable(resource);
+            iconDrawable = context.getPackageManager().getResourcesForApplication(app)
+                    .getDrawable(resource);
             if (iconDrawable instanceof LayerDrawable) {
                 iconDrawable = ((LayerDrawable) iconDrawable).getDrawable(1);
             }
             ((ImageView) view.findViewById(android.R.id.icon)).setImageDrawable(iconDrawable);
         } catch (PackageManager.NameNotFoundException e) {
             Log.w(TAG, "Cannot load icon from app " + app + ", returning a default icon");
-            Icon icon = Icon.createWithResource(mContext, R.drawable.ic_launcher_settings);
+            Icon icon = Icon.createWithResource(context, R.drawable.ic_launcher_settings);
             ((ImageView) view.findViewById(android.R.id.icon)).setImageIcon(icon);
         }
 
@@ -250,12 +261,24 @@
         return bitmap;
     }
 
-    private static final Comparator<ResolveInfo> SHORTCUT_COMPARATOR =
-            new Comparator<ResolveInfo>() {
+    public static void updateRestoredShortcuts(Context context) {
+        ShortcutManager sm = context.getSystemService(ShortcutManager.class);
+        List<ShortcutInfo> updatedShortcuts = new ArrayList<>();
+        for (ShortcutInfo si : sm.getPinnedShortcuts()) {
+            if (si.getId().startsWith(SHORTCUT_ID_PREFIX)) {
+                ResolveInfo ri = context.getPackageManager().resolveActivity(si.getIntent(), 0);
 
-                @Override
-                public int compare(ResolveInfo i1, ResolveInfo i2) {
-                    return i1.priority - i2.priority;
+                if (ri != null) {
+                    updatedShortcuts.add(createShortcutInfo(context, buildShortcutIntent(ri), ri,
+                            si.getShortLabel()));
                 }
-            };
+            }
+        }
+        if (!updatedShortcuts.isEmpty()) {
+            sm.updateShortcuts(updatedShortcuts);
+        }
+    }
+
+    private static final Comparator<ResolveInfo> SHORTCUT_COMPARATOR =
+            (i1, i2) -> i1.priority - i2.priority;
 }
diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java
index 3179e6a..911d0e8 100644
--- a/src/com/android/settings/sim/SimSelectNotification.java
+++ b/src/com/android/settings/sim/SimSelectNotification.java
@@ -16,12 +16,18 @@
 
 package com.android.settings.sim;
 
+import static android.provider.Settings.ENABLE_MMS_DATA_REQUEST_REASON_INCOMING_MMS;
+import static android.provider.Settings.ENABLE_MMS_DATA_REQUEST_REASON_OUTGOING_MMS;
+import static android.provider.Settings.EXTRA_ENABLE_MMS_DATA_REQUEST_REASON;
+import static android.provider.Settings.EXTRA_SUB_ID;
 import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE;
 import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_ALL;
 import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA;
 import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE;
 import static android.telephony.TelephonyManager.EXTRA_SUBSCRIPTION_ID;
+import static android.telephony.data.ApnSetting.TYPE_MMS;
 
+import android.app.Notification;
 import android.app.NotificationChannel;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -32,28 +38,97 @@
 import android.provider.Settings;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.util.Log;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.R;
-import com.android.settings.Settings.SimSettingsActivity;
-
-import androidx.core.app.NotificationCompat;
+import com.android.settings.network.telephony.MobileNetworkActivity;
 
 public class SimSelectNotification extends BroadcastReceiver {
     private static final String TAG = "SimSelectNotification";
-    private static final int NOTIFICATION_ID = 1;
+    @VisibleForTesting
+    public static final int SIM_SELECT_NOTIFICATION_ID = 1;
+    @VisibleForTesting
+    public static final int ENABLE_MMS_NOTIFICATION_ID = 2;
 
-    private static final String SIM_SELECT_NOTIFICATION_CHANNEL =
+    @VisibleForTesting
+    public static final String SIM_SELECT_NOTIFICATION_CHANNEL =
             "sim_select_notification_channel";
 
+    @VisibleForTesting
+    public static final String ENABLE_MMS_NOTIFICATION_CHANNEL =
+            "enable_mms_notification_channel";
+
     @Override
     public void onReceive(Context context, Intent intent) {
-        if (!TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED.equals(intent.getAction())) {
+        String action = intent.getAction();
+
+        if (action == null) {
+            Log.w(TAG, "Received unexpected intent with null action.");
             return;
         }
+
+        switch (action) {
+            case TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED:
+                onPrimarySubscriptionListChanged(context, intent);
+                break;
+            case Settings.ACTION_ENABLE_MMS_DATA_REQUEST:
+                onEnableMmsDataRequest(context, intent);
+                break;
+            default:
+                Log.w(TAG, "Received unexpected intent " + intent.getAction());
+        }
+    }
+
+    private void onEnableMmsDataRequest(Context context, Intent intent) {
+        // Getting subId from extra.
+        int subId = intent.getIntExtra(EXTRA_SUB_ID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        if (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID) {
+            subId = SubscriptionManager.getDefaultSmsSubscriptionId();
+        }
+
+        SubscriptionManager subscriptionManager = ((SubscriptionManager) context.getSystemService(
+                Context.TELEPHONY_SUBSCRIPTION_SERVICE));
+        if (!subscriptionManager.isActiveSubId(subId)) {
+            Log.w(TAG, "onEnableMmsDataRequest invalid sub ID " + subId);
+            return;
+        }
+
+        // Getting request reason from extra, which will determine the notification title.
+        CharSequence notificationTitle = null;
+        int requestReason = intent.getIntExtra(EXTRA_ENABLE_MMS_DATA_REQUEST_REASON, -1);
+        if (requestReason == ENABLE_MMS_DATA_REQUEST_REASON_INCOMING_MMS) {
+            notificationTitle = context.getResources().getText(
+                    R.string.enable_receiving_mms_notification_title);
+        } else if (requestReason == ENABLE_MMS_DATA_REQUEST_REASON_OUTGOING_MMS) {
+            notificationTitle = context.getResources().getText(
+                    R.string.enable_sending_mms_notification_title);
+        } else {
+            Log.w(TAG, "onEnableMmsDataRequest invalid request reason " + requestReason);
+            return;
+        }
+
+        TelephonyManager tm = ((TelephonyManager) context.getSystemService(
+                Context.TELEPHONY_SERVICE)).createForSubscriptionId(subId);
+
+        if (tm.isDataEnabledForApn(TYPE_MMS)) {
+            Log.w(TAG, "onEnableMmsDataRequest MMS data already enabled on sub ID " + subId);
+            return;
+        }
+
+        CharSequence notificationSummary = context.getResources().getString(
+                R.string.enable_mms_notification_summary, tm.getSimOperatorName());
+
+        cancelEnableMmsNotification(context);
+
+        createEnableMmsNotification(context, notificationTitle, notificationSummary, subId);
+    }
+
+    private void onPrimarySubscriptionListChanged(Context context, Intent intent) {
         // Cancel any previous notifications
-        cancelNotification(context);
+        cancelSimSelectNotification(context);
         // Create a notification to tell the user that some defaults are missing
-        createNotification(context);
+        createSimSelectNotification(context);
 
         int dialogType = intent.getIntExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE,
                 EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE);
@@ -76,20 +151,20 @@
         }
     }
 
-    private void createNotification(Context context){
+    private void createSimSelectNotification(Context context){
         final Resources resources = context.getResources();
 
         NotificationChannel notificationChannel = new NotificationChannel(
                 SIM_SELECT_NOTIFICATION_CHANNEL,
-                resources.getString(R.string.sim_selection_channel_title),
+                resources.getText(R.string.sim_selection_channel_title),
                 NotificationManager.IMPORTANCE_LOW);
 
-        NotificationCompat.Builder builder =
-                new NotificationCompat.Builder(context, SIM_SELECT_NOTIFICATION_CHANNEL)
+        Notification.Builder builder =
+                new Notification.Builder(context, SIM_SELECT_NOTIFICATION_CHANNEL)
                 .setSmallIcon(R.drawable.ic_sim_card_alert_white_48dp)
                 .setColor(context.getColor(R.color.sim_noitification))
-                .setContentTitle(resources.getString(R.string.sim_notification_title))
-                .setContentText(resources.getString(R.string.sim_notification_summary));
+                .setContentTitle(resources.getText(R.string.sim_notification_title))
+                .setContentText(resources.getText(R.string.sim_notification_summary));
         Intent resultIntent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
         resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         PendingIntent resultPendingIntent = PendingIntent.getActivity(context, 0, resultIntent,
@@ -98,12 +173,51 @@
         NotificationManager notificationManager =
                 (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
         notificationManager.createNotificationChannel(notificationChannel);
-        notificationManager.notify(NOTIFICATION_ID, builder.build());
+        notificationManager.notify(SIM_SELECT_NOTIFICATION_ID, builder.build());
     }
 
-    public static void cancelNotification(Context context) {
+    public static void cancelSimSelectNotification(Context context) {
         NotificationManager notificationManager =
                 (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
-        notificationManager.cancel(NOTIFICATION_ID);
+        notificationManager.cancel(SIM_SELECT_NOTIFICATION_ID);
+    }
+
+    private void createEnableMmsNotification(Context context, CharSequence titleString,
+            CharSequence notificationSummary, int subId) {
+        final Resources resources = context.getResources();
+
+        NotificationChannel notificationChannel = new NotificationChannel(
+                ENABLE_MMS_NOTIFICATION_CHANNEL,
+                resources.getText(R.string.enable_mms_notification_channel_title),
+                NotificationManager.IMPORTANCE_HIGH);
+
+        Notification.Builder builder =
+                new Notification.Builder(context, ENABLE_MMS_NOTIFICATION_CHANNEL)
+                        .setSmallIcon(R.drawable.ic_settings_24dp)
+                        .setColor(context.getColor(R.color.sim_noitification))
+                        .setContentTitle(titleString)
+                        .setContentText(notificationSummary)
+                        .setStyle(new Notification.BigTextStyle().bigText(notificationSummary));
+
+        // Create the pending intent that will lead to the subscription setting page.
+        Intent resultIntent = new Intent(Settings.ACTION_MMS_MESSAGE_SETTING);
+        resultIntent.setClass(context, MobileNetworkActivity.class);
+        resultIntent.putExtra(Settings.EXTRA_SUB_ID, subId);
+        resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        PendingIntent resultPendingIntent = PendingIntent.getActivity(context, 0, resultIntent,
+                PendingIntent.FLAG_CANCEL_CURRENT);
+        builder.setContentIntent(resultPendingIntent);
+
+        // Notify the notification.
+        NotificationManager notificationManager =
+                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+        notificationManager.createNotificationChannel(notificationChannel);
+        notificationManager.notify(ENABLE_MMS_NOTIFICATION_ID, builder.build());
+    }
+
+    private void cancelEnableMmsNotification(Context context) {
+        NotificationManager notificationManager =
+                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+        notificationManager.cancel(ENABLE_MMS_NOTIFICATION_ID);
     }
 }
diff --git a/src/com/android/settings/sim/SimSettings.java b/src/com/android/settings/sim/SimSettings.java
index e43c6a5..1222913 100644
--- a/src/com/android/settings/sim/SimSettings.java
+++ b/src/com/android/settings/sim/SimSettings.java
@@ -101,7 +101,7 @@
         mSimCards = (PreferenceScreen)findPreference(SIM_CARD_CATEGORY);
         mAvailableSubInfos = new ArrayList<SubscriptionInfo>(mNumSlots);
         mSelectableSubInfos = new ArrayList<SubscriptionInfo>();
-        SimSelectNotification.cancelNotification(getActivity());
+        SimSelectNotification.cancelSimSelectNotification(getActivity());
     }
 
     private final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener
diff --git a/src/com/android/settings/sound/AudioSwitchPreferenceController.java b/src/com/android/settings/sound/AudioSwitchPreferenceController.java
index 0da0f21..5b70d16 100644
--- a/src/com/android/settings/sound/AudioSwitchPreferenceController.java
+++ b/src/com/android/settings/sound/AudioSwitchPreferenceController.java
@@ -17,7 +17,6 @@
 package com.android.settings.sound;
 
 import static android.media.AudioManager.STREAM_DEVICES_CHANGED_ACTION;
-import static android.media.MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY;
 
 import android.bluetooth.BluetoothDevice;
 import android.content.BroadcastReceiver;
@@ -29,7 +28,6 @@
 import android.media.AudioDeviceInfo;
 import android.media.AudioManager;
 import android.media.MediaRouter;
-import android.media.MediaRouter.Callback;
 import android.os.Handler;
 import android.os.Looper;
 import android.util.FeatureFlagUtils;
@@ -76,7 +74,6 @@
     protected AudioSwitchCallback mAudioSwitchPreferenceCallback;
 
     private final AudioManagerAudioDeviceCallback mAudioManagerAudioDeviceCallback;
-    private final MediaRouterCallback mMediaRouterCallback;
     private final WiredHeadsetBroadcastReceiver mReceiver;
     private final Handler mHandler;
     private LocalBluetoothManager mLocalBluetoothManager;
@@ -92,7 +89,6 @@
         mHandler = new Handler(Looper.getMainLooper());
         mAudioManagerAudioDeviceCallback = new AudioManagerAudioDeviceCallback();
         mReceiver = new WiredHeadsetBroadcastReceiver();
-        mMediaRouterCallback = new MediaRouterCallback();
         mConnectedDevices = new ArrayList<>();
         final FutureTask<LocalBluetoothManager> localBtManagerFutureTask = new FutureTask<>(
                 // Avoid StrictMode ThreadPolicy violation
@@ -210,12 +206,12 @@
      * get A2dp devices on all states
      * (STATE_DISCONNECTED, STATE_CONNECTING, STATE_CONNECTED,  STATE_DISCONNECTING)
      */
-    protected List<BluetoothDevice> getConnectableA2dpDevices() {
+    protected List<BluetoothDevice> getConnectedA2dpDevices() {
         final A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile();
         if (a2dpProfile == null) {
             return new ArrayList<>();
         }
-        return a2dpProfile.getConnectableDevices();
+        return a2dpProfile.getConnectedDevices();
     }
 
     /**
@@ -242,31 +238,6 @@
     }
 
     /**
-     * get hearing aid profile devices on all states
-     * (STATE_DISCONNECTED, STATE_CONNECTING, STATE_CONNECTED,  STATE_DISCONNECTING)
-     * exclude other devices with same hiSyncId.
-     */
-    protected List<BluetoothDevice> getConnectableHearingAidDevices() {
-        final List<BluetoothDevice> connectedDevices = new ArrayList<>();
-        final HearingAidProfile hapProfile = mProfileManager.getHearingAidProfile();
-        if (hapProfile == null) {
-            return connectedDevices;
-        }
-        final List<Long> devicesHiSyncIds = new ArrayList<>();
-        final List<BluetoothDevice> devices = hapProfile.getConnectableDevices();
-        for (BluetoothDevice device : devices) {
-            final long hiSyncId = hapProfile.getHiSyncId(device);
-            // device with same hiSyncId should not be shown in the UI.
-            // So do not add it into connectedDevices.
-            if (!devicesHiSyncIds.contains(hiSyncId)) {
-                devicesHiSyncIds.add(hiSyncId);
-                connectedDevices.add(device);
-            }
-        }
-        return connectedDevices;
-    }
-
-    /**
      * Find active hearing aid device
      */
     protected BluetoothDevice findActiveHearingAidDevice() {
@@ -299,7 +270,6 @@
     private void register() {
         mLocalBluetoothManager.getEventManager().registerCallback(this);
         mAudioManager.registerAudioDeviceCallback(mAudioManagerAudioDeviceCallback, mHandler);
-        mMediaRouter.addCallback(ROUTE_TYPE_REMOTE_DISPLAY, mMediaRouterCallback);
 
         // Register for misc other intent broadcasts.
         IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
@@ -310,7 +280,6 @@
     private void unregister() {
         mLocalBluetoothManager.getEventManager().unregisterCallback(this);
         mAudioManager.unregisterAudioDeviceCallback(mAudioManagerAudioDeviceCallback);
-        mMediaRouter.removeCallback(mMediaRouterCallback);
         mContext.unregisterReceiver(mReceiver);
     }
 
@@ -338,49 +307,4 @@
             }
         }
     }
-
-    /** Callback for cast device events. */
-    private class MediaRouterCallback extends Callback {
-        @Override
-        public void onRouteSelected(MediaRouter router, int type, MediaRouter.RouteInfo info) {
-        }
-
-        @Override
-        public void onRouteUnselected(MediaRouter router, int type, MediaRouter.RouteInfo info) {
-        }
-
-        @Override
-        public void onRouteAdded(MediaRouter router, MediaRouter.RouteInfo info) {
-            if (info != null && !info.isDefault()) {
-                // cast mode
-                updateState(mPreference);
-            }
-        }
-
-        @Override
-        public void onRouteRemoved(MediaRouter router, MediaRouter.RouteInfo info) {
-        }
-
-        @Override
-        public void onRouteChanged(MediaRouter router, MediaRouter.RouteInfo info) {
-            if (info != null && !info.isDefault()) {
-                // cast mode
-                updateState(mPreference);
-            }
-        }
-
-        @Override
-        public void onRouteGrouped(MediaRouter router, MediaRouter.RouteInfo info,
-                MediaRouter.RouteGroup group, int index) {
-        }
-
-        @Override
-        public void onRouteUngrouped(MediaRouter router, MediaRouter.RouteInfo info,
-                MediaRouter.RouteGroup group) {
-        }
-
-        @Override
-        public void onRouteVolumeChanged(MediaRouter router, MediaRouter.RouteInfo info) {
-        }
-    }
 }
diff --git a/src/com/android/settings/sound/MediaOutputPreferenceController.java b/src/com/android/settings/sound/MediaOutputPreferenceController.java
index 47810f7..1831ad6 100644
--- a/src/com/android/settings/sound/MediaOutputPreferenceController.java
+++ b/src/com/android/settings/sound/MediaOutputPreferenceController.java
@@ -16,9 +16,6 @@
 
 package com.android.settings.sound;
 
-import static android.media.AudioManager.STREAM_MUSIC;
-import static android.media.AudioSystem.DEVICE_OUT_REMOTE_SUBMIX;
-
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.content.Intent;
@@ -56,13 +53,6 @@
             return;
         }
 
-        if (isStreamFromOutputDevice(STREAM_MUSIC, DEVICE_OUT_REMOTE_SUBMIX)) {
-            // In cast mode, disable switch entry.
-            mPreference.setVisible(false);
-            preference.setSummary(mContext.getText(R.string.media_output_summary_unavailable));
-            return;
-        }
-
         if (Utils.isAudioModeOngoingCall(mContext)) {
             // Ongoing call status, switch entry for media will be disabled.
             mPreference.setVisible(false);
@@ -71,19 +61,19 @@
             return;
         }
 
-        boolean deviceConnectable = false;
+        boolean deviceConnected = false;
         BluetoothDevice activeDevice = null;
         // Show preference if there is connected or previously connected device
         // Find active device and set its name as the preference's summary
-        List<BluetoothDevice> connectableA2dpDevices = getConnectableA2dpDevices();
-        List<BluetoothDevice> connectableHADevices = getConnectableHearingAidDevices();
+        List<BluetoothDevice> connectedA2dpDevices = getConnectedA2dpDevices();
+        List<BluetoothDevice> connectedHADevices = getConnectedHearingAidDevices();
         if (mAudioManager.getMode() == AudioManager.MODE_NORMAL
-                && ((connectableA2dpDevices != null && !connectableA2dpDevices.isEmpty())
-                || (connectableHADevices != null && !connectableHADevices.isEmpty()))) {
-            deviceConnectable = true;
+                && ((connectedA2dpDevices != null && !connectedA2dpDevices.isEmpty())
+                || (connectedHADevices != null && !connectedHADevices.isEmpty()))) {
+            deviceConnected = true;
             activeDevice = findActiveDevice();
         }
-        mPreference.setVisible(deviceConnectable);
+        mPreference.setVisible(deviceConnected);
         mPreference.setSummary((activeDevice == null) ?
                 mContext.getText(R.string.media_output_default_summary) :
                 activeDevice.getAliasName());
diff --git a/src/com/android/settings/wallpaper/StyleSuggestionActivity.java b/src/com/android/settings/wallpaper/StyleSuggestionActivity.java
new file mode 100644
index 0000000..376724b
--- /dev/null
+++ b/src/com/android/settings/wallpaper/StyleSuggestionActivity.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.wallpaper;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+public class StyleSuggestionActivity extends StyleSuggestionActivityBase {
+
+    @VisibleForTesting
+    public static boolean isSuggestionComplete(Context context) {
+        if (!isWallpaperServiceEnabled(context)) {
+            return true;
+        }
+
+        final String currentTheme = Settings.Secure.getStringForUser(context.getContentResolver(),
+                Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES, context.getUserId());
+        if (TextUtils.isEmpty(currentTheme)) {
+            // Empty value means the user has not visited the styles tab yet
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/src/com/android/settings/wallpaper/StyleSuggestionActivityBase.java b/src/com/android/settings/wallpaper/StyleSuggestionActivityBase.java
new file mode 100644
index 0000000..abbf3dc
--- /dev/null
+++ b/src/com/android/settings/wallpaper/StyleSuggestionActivityBase.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.wallpaper;
+
+import android.app.Activity;
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import androidx.annotation.VisibleForTesting;
+
+import com.android.settings.R;
+import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.display.WallpaperPreferenceController;
+
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
+public abstract class StyleSuggestionActivityBase extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        final PackageManager pm = getPackageManager();
+        final Intent intent = new Intent()
+                .setComponent(new WallpaperPreferenceController(this, "dummy key")
+                        .getComponentName())
+                .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+
+        // passing the necessary extra to next page
+        WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
+
+        addExtras(intent);
+
+        if (pm.resolveActivity(intent, 0) != null) {
+            startActivity(intent);
+        } else {
+            startFallbackSuggestion();
+        }
+
+        finish();
+    }
+
+    /**
+     * Add any extras to the intent before launching the wallpaper activity
+     * @param intent
+     */
+    protected void addExtras(Intent intent) { }
+
+    @VisibleForTesting
+    void startFallbackSuggestion() {
+        // fall back to default wallpaper picker
+        new SubSettingLauncher(this)
+                .setDestination(WallpaperTypeSettings.class.getName())
+                .setTitleRes(R.string.wallpaper_suggestion_title)
+                .setSourceMetricsCategory(SettingsEnums.DASHBOARD_SUMMARY)
+                .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
+                .launch();
+    }
+
+    protected static boolean isWallpaperServiceEnabled(Context context) {
+        return context.getResources().getBoolean(
+                com.android.internal.R.bool.config_enableWallpaperService);
+    }
+}
diff --git a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
index fe23d74..57222f1 100644
--- a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
+++ b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
@@ -16,63 +16,31 @@
 
 package com.android.settings.wallpaper;
 
-import android.app.Activity;
 import android.app.WallpaperManager;
-import android.app.settings.SettingsEnums;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
 
 import androidx.annotation.VisibleForTesting;
 
-import com.android.settings.R;
-import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.display.WallpaperPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.search.SearchIndexableRaw;
 import com.android.settingslib.search.SearchIndexable;
 
-import com.google.android.setupcompat.util.WizardManagerHelper;
-
 import java.util.ArrayList;
 import java.util.List;
 
 @SearchIndexable
-public class WallpaperSuggestionActivity extends Activity implements Indexable {
+public class WallpaperSuggestionActivity extends StyleSuggestionActivityBase implements Indexable {
+
+    private static final String WALLPAPER_FLAVOR_EXTRA = "com.android.launcher3.WALLPAPER_FLAVOR";
+    private static final String WALLPAPER_FOCUS = "focus_wallpaper";
 
     @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        final PackageManager pm = getPackageManager();
-        final Intent intent = new Intent()
-                .setComponent(new WallpaperPreferenceController(this, "dummy key")
-                        .getComponentName())
-                .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
-
-        // passing the necessary extra to next page
-        WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
-
-        if (pm.resolveActivity(intent, 0) != null) {
-            startActivity(intent);
-        } else {
-            startFallbackSuggestion();
-        }
-
-        finish();
-    }
-
-    @VisibleForTesting
-    void startFallbackSuggestion() {
-        // fall back to default wallpaper picker
-        new SubSettingLauncher(this)
-                .setDestination(WallpaperTypeSettings.class.getName())
-                .setTitleRes(R.string.wallpaper_suggestion_title)
-                .setSourceMetricsCategory(SettingsEnums.DASHBOARD_SUMMARY)
-                .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
-                .launch();
+    protected void addExtras(Intent intent) {
+        intent.putExtra(WALLPAPER_FLAVOR_EXTRA, WALLPAPER_FOCUS);
     }
 
     @VisibleForTesting
@@ -85,11 +53,6 @@
         return manager.getWallpaperId(WallpaperManager.FLAG_SYSTEM) > 0;
     }
 
-    private static boolean isWallpaperServiceEnabled(Context context) {
-        return context.getResources().getBoolean(
-                com.android.internal.R.bool.config_enableWallpaperService);
-    }
-
     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
                 private static final String SUPPORT_SEARCH_INDEX_KEY = "wallpaper_type";
diff --git a/src/com/android/settings/wifi/AddWifiNetworkPreference.java b/src/com/android/settings/wifi/AddWifiNetworkPreference.java
index 03a80a4..8216f86 100644
--- a/src/com/android/settings/wifi/AddWifiNetworkPreference.java
+++ b/src/com/android/settings/wifi/AddWifiNetworkPreference.java
@@ -43,7 +43,7 @@
 
         setLayoutResource(com.android.settingslib.R.layout.preference_access_point);
         setWidgetLayoutResource(R.layout.wifi_button_preference_widget);
-        setIcon(R.drawable.ic_menu_add);
+        setIcon(R.drawable.ic_add_24dp);
         setTitle(R.string.wifi_add_network);
 
         mScanIconDrawable = getDrawable(R.drawable.ic_scan_24dp);
diff --git a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
index 341b227..5f4e9d0 100644
--- a/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiMeteredPreferenceController.java
@@ -24,19 +24,22 @@
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.DropDownPreference;
 import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
 import com.android.settings.core.BasePreferenceController;
+import com.android.settings.wifi.WifiDialog;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 /**
  * {@link AbstractPreferenceController} that controls whether the wifi network is metered or not
  */
 public class WifiMeteredPreferenceController extends BasePreferenceController implements
-        Preference.OnPreferenceChangeListener {
+        Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
 
     private static final String KEY_WIFI_METERED = "metered";
     private WifiConfiguration mWifiConfiguration;
     private WifiManager mWifiManager;
+    private Preference mPreference;
 
     public WifiMeteredPreferenceController(Context context, WifiConfiguration wifiConfiguration) {
         super(context, KEY_WIFI_METERED);
@@ -81,4 +84,25 @@
     private void updateSummary(DropDownPreference preference, int meteredOverride) {
         preference.setSummary(preference.getEntries()[meteredOverride]);
     }
+
+    @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mPreference = screen.findPreference(getPreferenceKey());
+    }
+
+    @Override
+    public void onSubmit(WifiDialog dialog) {
+        if (dialog.getController() != null) {
+            final WifiConfiguration newConfig = dialog.getController().getConfig();
+            if (newConfig == null || mWifiConfiguration == null) {
+                return;
+            }
+
+            if (newConfig.meteredOverride != mWifiConfiguration.meteredOverride) {
+                mWifiConfiguration = newConfig;
+                onPreferenceChange(mPreference, String.valueOf(newConfig.meteredOverride));
+            }
+        }
+    }
 }
diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
index 10d1d48..b645d60 100644
--- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
+++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
@@ -47,12 +47,14 @@
  * <p>The AccessPoint should be saved to the intent Extras when launching this class via
  * {@link AccessPoint#saveWifiState(Bundle)} in order to properly render this page.
  */
-public class WifiNetworkDetailsFragment extends DashboardFragment {
+public class WifiNetworkDetailsFragment extends DashboardFragment implements
+        WifiDialog.WifiDialogListener {
 
     private static final String TAG = "WifiNetworkDetailsFrg";
 
     private AccessPoint mAccessPoint;
     private WifiDetailPreferenceController mWifiDetailPreferenceController;
+    private List<WifiDialog.WifiDialogListener> mWifiDialogListeners = new ArrayList<>();
 
     @Override
     public void onAttach(Context context) {
@@ -89,7 +91,7 @@
                 || mAccessPoint == null) {
             return null;
         }
-        return WifiDialog.createModal(getActivity(), mWifiDetailPreferenceController, mAccessPoint,
+        return WifiDialog.createModal(getActivity(), this, mAccessPoint,
                 WifiConfigUiBase.MODE_MODIFY);
     }
 
@@ -135,15 +137,31 @@
 
         controllers.add(mWifiDetailPreferenceController);
         controllers.add(new AddDevicePreferenceController(context).init(mAccessPoint));
-        controllers.add(new WifiMeteredPreferenceController(context, mAccessPoint.getConfig()));
-        WifiPrivacyPreferenceController privacyController = new WifiPrivacyPreferenceController(
-                context);
+
+        final WifiMeteredPreferenceController meteredPreferenceController =
+                new WifiMeteredPreferenceController(context, mAccessPoint.getConfig());
+        controllers.add(meteredPreferenceController);
+
+        final WifiPrivacyPreferenceController privacyController =
+                new WifiPrivacyPreferenceController(context);
         privacyController.setWifiConfiguration(mAccessPoint.getConfig());
         privacyController.setIsEphemeral(mAccessPoint.isEphemeral());
         privacyController.setIsPasspoint(
                 mAccessPoint.isPasspoint() || mAccessPoint.isPasspointConfig());
         controllers.add(privacyController);
 
+        // Sets callback listener for wifi dialog.
+        mWifiDialogListeners.add(mWifiDetailPreferenceController);
+        mWifiDialogListeners.add(privacyController);
+        mWifiDialogListeners.add(meteredPreferenceController);
+
         return controllers;
     }
+
+    @Override
+    public void onSubmit(WifiDialog dialog) {
+        for (WifiDialog.WifiDialogListener listener : mWifiDialogListeners) {
+            listener.onSubmit(dialog);
+        }
+    }
 }
diff --git a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
index 7bec411..950cc13 100644
--- a/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiPrivacyPreferenceController.java
@@ -18,16 +18,17 @@
 
 import android.content.Context;
 import android.net.wifi.WifiConfiguration;
+import android.net.wifi.WifiInfo;
 import android.net.wifi.WifiManager;
-import android.util.FeatureFlagUtils;
 
 import androidx.annotation.VisibleForTesting;
 import androidx.preference.DropDownPreference;
 import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
 
 import com.android.settings.R;
 import com.android.settings.core.BasePreferenceController;
-import com.android.settings.core.FeatureFlags;
+import com.android.settings.wifi.WifiDialog;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 /**
@@ -35,13 +36,14 @@
  * or not
  */
 public class WifiPrivacyPreferenceController extends BasePreferenceController implements
-        Preference.OnPreferenceChangeListener {
+        Preference.OnPreferenceChangeListener, WifiDialog.WifiDialogListener {
 
     private static final String KEY_WIFI_PRIVACY = "privacy";
     private WifiConfiguration mWifiConfiguration;
     private WifiManager mWifiManager;
     private boolean mIsEphemeral = false;
     private boolean mIsPasspoint = false;
+    private Preference mPreference;
 
     public WifiPrivacyPreferenceController(Context context) {
         super(context, KEY_WIFI_PRIVACY);
@@ -69,6 +71,12 @@
     }
 
     @Override
+    public void displayPreference(PreferenceScreen screen) {
+        super.displayPreference(screen);
+        mPreference = screen.findPreference(getPreferenceKey());
+    }
+
+    @Override
     public void updateState(Preference preference) {
         final DropDownPreference dropDownPreference = (DropDownPreference) preference;
         final int randomizationLevel = getRandomizationValue();
@@ -87,9 +95,13 @@
         if (mWifiConfiguration != null) {
             mWifiConfiguration.macRandomizationSetting = Integer.parseInt((String) newValue);
             mWifiManager.updateNetwork(mWifiConfiguration);
-            // To activate changing, we need reconnect network. WiFi will auto connect to current
-            // network after disconnect().
-            mWifiManager.disconnect();
+
+            // To activate changing, we need to reconnect network. WiFi will auto connect to
+            // current network after disconnect(). Only needed when this is connected network.
+            final WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
+            if (wifiInfo != null && wifiInfo.getNetworkId() == mWifiConfiguration.networkId) {
+                mWifiManager.disconnect();
+            }
         }
         updateSummary((DropDownPreference) preference, Integer.parseInt((String) newValue));
         return true;
@@ -133,4 +145,19 @@
         final int prefMacRandomized = translateMacRandomizedValueToPrefValue(macRandomized);
         preference.setSummary(preference.getEntries()[prefMacRandomized]);
     }
+
+    @Override
+    public void onSubmit(WifiDialog dialog) {
+        if (dialog.getController() != null) {
+            final WifiConfiguration newConfig = dialog.getController().getConfig();
+            if (newConfig == null || mWifiConfiguration == null) {
+                return;
+            }
+
+            if (newConfig.macRandomizationSetting != mWifiConfiguration.macRandomizationSetting) {
+                mWifiConfiguration = newConfig;
+                onPreferenceChange(mPreference, String.valueOf(newConfig.macRandomizationSetting));
+            }
+        }
+    }
 }
diff --git a/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java b/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
index 2bf411a..fa2dc99 100644
--- a/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiNetworkListFragment.java
@@ -148,7 +148,7 @@
         mFakeNetworkPreference.setTitle("fake network");
 
         mAddPreference = new Preference(getPrefContext());
-        mAddPreference.setIcon(R.drawable.ic_menu_add);
+        mAddPreference.setIcon(R.drawable.ic_add_24dp);
         mAddPreference.setTitle(R.string.wifi_add_network);
 
         mUserBadgeCache = new AccessPointPreference.UserBadgeCache(getPackageManager());
diff --git a/tests/robotests/res/values/overlayable_icons_test.xml b/tests/robotests/res/values/overlayable_icons_test.xml
index 575f798..bf87f3b 100644
--- a/tests/robotests/res/values/overlayable_icons_test.xml
+++ b/tests/robotests/res/values/overlayable_icons_test.xml
@@ -24,6 +24,7 @@
     <item>@drawable/ic_android</item>
     <item>@drawable/ic_apps</item>
     <item>@drawable/ic_arrow_back</item>
+    <item>@drawable/ic_arrow_down_24dp</item>
     <item>@drawable/ic_battery_charging_full</item>
     <item>@drawable/ic_battery_saver_accent_24dp</item>
     <item>@drawable/ic_battery_status_bad_24dp</item>
@@ -33,6 +34,7 @@
     <item>@drawable/ic_cancel</item>
     <item>@drawable/ic_cast_24dp</item>
     <item>@drawable/ic_cellular_off</item>
+    <item>@drawable/ic_chevron_right_24dp</item>
     <item>@drawable/ic_content_copy_grey600_24dp</item>
     <item>@drawable/ic_data_saver</item>
     <item>@drawable/ic_delete</item>
@@ -48,10 +50,11 @@
     <item>@drawable/ic_gray_scale_24dp</item>
     <item>@drawable/ic_headset_24dp</item>
     <item>@drawable/ic_help</item>
+    <item>@drawable/ic_help_actionbar</item>
     <item>@drawable/ic_homepage_search</item>
+    <item>@drawable/ic_info_outline_24</item>
     <item>@drawable/ic_local_movies</item>
     <item>@drawable/ic_local_phone_24_lib</item>
-    <item>@drawable/ic_lock</item>
     <item>@drawable/ic_media_stream</item>
     <item>@drawable/ic_media_stream_off</item>
     <item>@drawable/ic_network_cell</item>
@@ -59,8 +62,11 @@
     <item>@drawable/ic_notifications_off_24dp</item>
     <item>@drawable/ic_phone_info</item>
     <item>@drawable/ic_photo_library</item>
+    <item>@drawable/ic_search_24dp</item>
+    <item>@drawable/ic_settings_accent</item>
     <item>@drawable/ic_settings_accessibility</item>
     <item>@drawable/ic_settings_accounts</item>
+    <item>@drawable/ic_settings_backup</item>
     <item>@drawable/ic_settings_battery_white</item>
     <item>@drawable/ic_settings_data_usage</item>
     <item>@drawable/ic_settings_date_time</item>
@@ -77,12 +83,14 @@
     <item>@drawable/ic_settings_system_dashboard_white</item>
     <item>@drawable/ic_settings_wireless</item>
     <item>@drawable/ic_settings_wireless_white</item>
+    <item>@drawable/ic_storage</item>
     <item>@drawable/ic_storage_white</item>
     <item>@drawable/ic_suggestion_night_display</item>
+    <item>@drawable/ic_sync</item>
+    <item>@drawable/ic_system_update</item>
     <item>@drawable/ic_videogame_vd_theme_24</item>
     <item>@drawable/ic_volume_ringer_vibrate</item>
     <item>@drawable/ic_volume_up_24dp</item>
     <item>@drawable/ic_vpn_key</item>
-    <item>@drawable/ic_wifi_tethering</item>
   </array>
 </resources>
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java
index dfad37a..36f01e0 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java
@@ -73,7 +73,7 @@
         Preference pref = mController.createBluetoothPairingPreference(ORDER);
 
         assertThat(pref.getKey()).isEqualTo(BluetoothPairingPreferenceController.KEY_PAIRING);
-        DrawableTestHelper.assertDrawableResId(pref.getIcon(), R.drawable.ic_menu_add);
+        DrawableTestHelper.assertDrawableResId(pref.getIcon(), R.drawable.ic_add_24dp);
         assertThat(pref.getOrder()).isEqualTo(ORDER);
         assertThat(pref.getTitle())
                 .isEqualTo(mContext.getString(R.string.bluetooth_pairing_pref_title));
diff --git a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
index 44ffa54..b4f4f97 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
@@ -25,10 +25,15 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.FragmentActivity;
 
+import com.android.settings.R;
 import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 import com.android.settingslib.bluetooth.CachedBluetoothDevice;
 
 import org.junit.Before;
@@ -39,33 +44,46 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
 import org.robolectric.shadows.ShadowDialog;
+import org.robolectric.shadows.androidx.fragment.FragmentController;
 
 @RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowAlertDialogCompat.class})
 public class ForgetDeviceDialogFragmentTest {
 
+    private static final String DEVICE_NAME = "Nightshade";
+
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private CachedBluetoothDevice mCachedDevice;
+    @Mock
+    private BluetoothDevice mBluetoothDevice;
 
     private ForgetDeviceDialogFragment mFragment;
     private FragmentActivity mActivity;
     private AlertDialog mDialog;
+    private Context mContext;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+
+        mContext = RuntimeEnvironment.application;
         FakeFeatureFactory.setupForTest();
         String deviceAddress = "55:66:77:88:99:AA";
         when(mCachedDevice.getAddress()).thenReturn(deviceAddress);
+        when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
+        when(mCachedDevice.getName()).thenReturn(DEVICE_NAME);
         mFragment = spy(ForgetDeviceDialogFragment.newInstance(deviceAddress));
         doReturn(mCachedDevice).when(mFragment).getDevice(any());
         mActivity = Robolectric.setupActivity(FragmentActivity.class);
-        mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commit();
-        mDialog = (AlertDialog) ShadowDialog.getLatestDialog();
     }
 
     @Test
     public void cancelDialog() {
+        initDialog();
+
         mDialog.getButton(AlertDialog.BUTTON_NEGATIVE).performClick();
         verify(mCachedDevice, never()).unpair();
         assertThat(mActivity.isFinishing()).isFalse();
@@ -73,8 +91,43 @@
 
     @Test
     public void confirmDialog() {
+        initDialog();
+
         mDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
         verify(mCachedDevice).unpair();
         assertThat(mActivity.isFinishing()).isTrue();
     }
+
+    @Test
+    public void createDialog_untetheredDevice_showUntetheredMessage() {
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
+                .thenReturn("true".getBytes());
+
+        FragmentController.setupFragment(mFragment, FragmentActivity.class,
+                0 /* containerViewId */, null /* bundle */);
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
+
+        assertThat(shadowDialog.getMessage()).isEqualTo(
+                mContext.getString(R.string.bluetooth_untethered_unpair_dialog_body, DEVICE_NAME));
+    }
+
+    @Test
+    public void createDialog_normalDevice_showNormalMessage() {
+        when(mBluetoothDevice.getMetadata(BluetoothDevice.METADATA_IS_UNTETHERED_HEADSET))
+                .thenReturn("false".getBytes());
+
+        FragmentController.setupFragment(mFragment, FragmentActivity.class,
+                0 /* containerViewId */, null /* bundle */);
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
+
+        assertThat(shadowDialog.getMessage()).isEqualTo(
+                mContext.getString(R.string.bluetooth_unpair_dialog_body, DEVICE_NAME));
+    }
+
+    private void initDialog() {
+        mActivity.getSupportFragmentManager().beginTransaction().add(mFragment, null).commit();
+        mDialog = (AlertDialog) ShadowDialog.getLatestDialog();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragmentTest.java
deleted file mode 100644
index 9a6ad91..0000000
--- a/tests/robotests/src/com/android/settings/bluetooth/LocalDeviceNameDialogFragmentTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.bluetooth;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.view.View;
-import android.view.inputmethod.InputMethodManager;
-
-import androidx.appcompat.app.AlertDialog;
-import androidx.fragment.app.FragmentActivity;
-
-import com.android.settings.R;
-import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
-import com.android.settingslib.bluetooth.LocalBluetoothManager;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.androidx.fragment.FragmentController;
-import org.robolectric.util.ReflectionHelpers;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = ShadowAlertDialogCompat.class)
-public class LocalDeviceNameDialogFragmentTest {
-
-    @Mock
-    private InputMethodManager mInputMethodManager;
-
-    private Context mContext;
-    private LocalDeviceNameDialogFragment mFragment;
-
-    @Before
-    public void setUp() {
-        MockitoAnnotations.initMocks(this);
-        mContext = spy(RuntimeEnvironment.application);
-        doReturn(mInputMethodManager).when(mContext).getSystemService(Context.INPUT_METHOD_SERVICE);
-
-        mFragment = spy(LocalDeviceNameDialogFragment.newInstance());
-        when(mFragment.getContext()).thenReturn(mContext);
-    }
-
-    @After
-    public void tearDown() {
-        ReflectionHelpers.setStaticField(LocalBluetoothManager.class, "sInstance", null);
-    }
-
-    @Test
-    @Ignore("b/120505691")
-    public void dialogTriggersShowSoftInput() {
-        FragmentController.setupFragment(mFragment, FragmentActivity.class, 0 /* containerViewId */,
-                null /* bundle */);
-        AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
-        assertThat(dialog).isNotNull();
-        View view = dialog.findViewById(R.id.edittext);
-        verify(mInputMethodManager).showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettingsTest.java
new file mode 100644
index 0000000..7cb57a3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettingsTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.fuelgauge.batterysaver;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import androidx.preference.PreferenceScreen;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class BatterySaverSettingsTest {
+    BatterySaverSettings mFragment;
+    @Mock
+    PreferenceScreen mScreen;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mFragment = spy(new BatterySaverSettings());
+        doReturn(mScreen).when(mFragment).getPreferenceScreen();
+    }
+
+
+    @Test
+    public void setupFooter_linkAddedWhenAppropriate() {
+        doReturn("").when(mFragment).getText(anyInt());
+        doReturn("").when(mFragment).getString(anyInt());
+        mFragment.setupFooter();
+        verify(mFragment, never()).addHelpLink();
+
+        doReturn("testString").when(mFragment).getText(anyInt());
+        doReturn("testString").when(mFragment).getString(anyInt());
+        mFragment.setupFooter();
+        verify(mFragment, atLeastOnce()).addHelpLink();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java
index 740ff2c..a23f8da 100644
--- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationEdgeToEdgePreferenceControllerTest.java
@@ -180,8 +180,8 @@
     }
 
     @Test
-    public void isSliceableCorrectKey_returnsTrue() {
-        assertThat(mController.isSliceable()).isTrue();
+    public void isSliceable_returnsFalse() {
+        assertThat(mController.isSliceable()).isFalse();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
index 2c4f88a..dc9e3d9 100644
--- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationLegacyPreferenceControllerTest.java
@@ -182,8 +182,8 @@
     }
 
     @Test
-    public void isSliceableCorrectKey_returnsTrue() {
-        assertThat(mController.isSliceable()).isTrue();
+    public void isSliceable_returnsFalse() {
+        assertThat(mController.isSliceable()).isFalse();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
index 177d498..955ea0c 100644
--- a/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/SystemNavigationSwipeUpPreferenceControllerTest.java
@@ -180,8 +180,8 @@
     }
 
     @Test
-    public void isSliceableCorrectKey_returnsTrue() {
-        assertThat(mController.isSliceable()).isTrue();
+    public void isSliceable_returnsFalse() {
+        assertThat(mController.isSliceable()).isFalse();
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
index c647914..40b955c 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -187,4 +187,9 @@
         assertThat(subs).isNotNull();
         assertThat(subs).hasSize(2);
     }
+
+    @Test
+    public void isInactiveInsertedPSim_nullSubInfo_doesNotCrash() {
+        assertThat(SubscriptionUtil.isInactiveInsertedPSim(null)).isFalse();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfileConfirmationDialogTest.java b/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfileConfirmationDialogTest.java
new file mode 100644
index 0000000..9b6f551
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfileConfirmationDialogTest.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.network.telephony;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.telephony.SubscriptionInfo;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.androidx.fragment.FragmentController;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowAlertDialogCompat.class)
+public class DeleteSimProfileConfirmationDialogTest {
+    @Mock
+    private SubscriptionInfo mSubscriptionInfo;
+
+    private DeleteSimProfileConfirmationDialog mDialogFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mDialogFragment = spy(DeleteSimProfileConfirmationDialog.newInstance(mSubscriptionInfo));
+        doNothing().when(mDialogFragment).beginDeletionWithProgress();
+    }
+
+    @Test
+    public void showDialog_dialogCancelled_deleteNotCalled() {
+        FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
+                0 /* containerViewId */,
+                null /* bundle */);
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();
+        verify(mDialogFragment, never()).beginDeletionWithProgress();
+    }
+
+    @Test
+    public void showDialog_dialogOk_deleteWasCalled() {
+        FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
+                0 /* containerViewId */,
+                null /* bundle */);
+        final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+        dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
+        verify(mDialogFragment).beginDeletionWithProgress();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceControllerTest.java
new file mode 100644
index 0000000..21fd19b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfilePreferenceControllerTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.telephony.SubscriptionInfo;
+import android.telephony.euicc.EuiccManager;
+
+import androidx.fragment.app.Fragment;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.network.SubscriptionUtil;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+@RunWith(RobolectricTestRunner.class)
+public class DeleteSimProfilePreferenceControllerTest {
+    private static final String PREF_KEY = "delete_profile_key";
+    private static final int SUB_ID = 1234;
+    private static final int OTHER_ID = 5678;
+
+    @Mock
+    private Fragment mFragment;
+
+    @Mock
+    private SubscriptionInfo mSubscriptionInfo;
+    @Mock
+    private PreferenceScreen mScreen;
+
+    private Context mContext;
+    private Preference mPreference;
+    private DeleteSimProfilePreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
+
+        SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(mSubscriptionInfo));
+        when(mSubscriptionInfo.getSubscriptionId()).thenReturn(SUB_ID);
+        when(mSubscriptionInfo.isEmbedded()).thenReturn(true);
+
+        mPreference = new Preference(mContext);
+        mPreference.setKey(PREF_KEY);
+        when(mScreen.findPreference(PREF_KEY)).thenReturn(mPreference);
+
+        mController = new DeleteSimProfilePreferenceController(mContext, PREF_KEY);
+    }
+
+    @After
+    public void tearDown() {
+        SubscriptionUtil.setAvailableSubscriptionsForTesting(null);
+    }
+
+    @Test
+    public void getAvailabilityStatus_noSubs_notAvailable() {
+        SubscriptionUtil.setAvailableSubscriptionsForTesting(new ArrayList<>());
+        mController.init(SUB_ID, mFragment);
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void getAvailabilityStatus_physicalSim_notAvailable() {
+        when(mSubscriptionInfo.isEmbedded()).thenReturn(false);
+        mController.init(SUB_ID, mFragment);
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void getAvailabilityStatus_unknownSim_notAvailable() {
+        when(mSubscriptionInfo.getSubscriptionId()).thenReturn(OTHER_ID);
+        mController.init(SUB_ID, mFragment);
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void getAvailabilityStatus_knownEsim_isAvailable() {
+        mController.init(SUB_ID, mFragment);
+        assertThat(mController.isAvailable()).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfileProgressDialogTest.java b/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfileProgressDialogTest.java
new file mode 100644
index 0000000..aebcc46
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/telephony/DeleteSimProfileProgressDialogTest.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.network.telephony;
+
+import static com.android.settings.network.telephony.DeleteSimProfileProgressDialog.KEY_DELETE_STARTED;
+import static com.android.settings.network.telephony.DeleteSimProfileProgressDialog.PENDING_INTENT;
+
+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.ArgumentMatchers.notNull;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.Dialog;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.telephony.euicc.EuiccManager;
+
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowAlertDialogCompat.class)
+public class DeleteSimProfileProgressDialogTest {
+    private static final int SUB_ID = 111;
+
+    @Mock
+    private FragmentActivity mActivity;
+    @Mock
+    private Fragment mTargetFragment;
+    @Mock
+    private EuiccManager mEuiccManager;
+
+    private Context mContext;
+    private DeleteSimProfileProgressDialog mDialogFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
+
+        when(mContext.getSystemService(EuiccManager.class)).thenReturn(mEuiccManager);
+        mDialogFragment = spy(DeleteSimProfileProgressDialog.newInstance(SUB_ID));
+        when(mDialogFragment.getContext()).thenReturn(mContext);
+        when(mDialogFragment.getTargetFragment()).thenReturn(mTargetFragment);
+        when(mDialogFragment.getActivity()).thenReturn(mActivity);
+    }
+
+    @Test
+    public void onCreateDialog_firstShowing_deleteStartedAndRecordedInOutState() {
+        mDialogFragment.onCreateDialog(null);
+        verify(mEuiccManager).deleteSubscription(eq(SUB_ID), notNull());
+
+        final Bundle outState = new Bundle();
+        mDialogFragment.onSaveInstanceState(outState);
+        assertThat(outState.containsKey(KEY_DELETE_STARTED)).isTrue();
+        assertThat(outState.getBoolean(KEY_DELETE_STARTED)).isTrue();
+    }
+
+    @Test
+    public void showDialog_secondShowing_deleteNotStarted() {
+        final Bundle inState = new Bundle();
+        inState.putBoolean(KEY_DELETE_STARTED, true);
+        mDialogFragment.onCreateDialog(inState);
+
+        verify(mEuiccManager, never()).deleteSubscription(anyInt(), any());
+
+        final Bundle outState = new Bundle();
+        mDialogFragment.onSaveInstanceState(outState);
+        assertThat(outState.containsKey(KEY_DELETE_STARTED)).isTrue();
+        assertThat(outState.getBoolean(KEY_DELETE_STARTED)).isTrue();
+    }
+
+    @Test
+    public void showDialog_pendingIntentReceiverFired_activityFinished() {
+        mDialogFragment.onCreateDialog(null);
+
+        final ArgumentCaptor<PendingIntent> intentCaptor = ArgumentCaptor.forClass(
+                PendingIntent.class);
+        verify(mEuiccManager).deleteSubscription(eq(SUB_ID), intentCaptor.capture());
+        assertThat(intentCaptor.getValue()).isNotNull();
+
+        final ArgumentCaptor<BroadcastReceiver> receiverCaptor = ArgumentCaptor.forClass(
+                BroadcastReceiver.class);
+        verify(mContext).registerReceiver(receiverCaptor.capture(), any(IntentFilter.class));
+
+        doNothing().when(mDialogFragment).dismiss();
+        receiverCaptor.getValue().onReceive(mContext, new Intent(PENDING_INTENT));
+        verify(mDialogFragment).dismiss();
+        verify(mActivity).finish();
+    }
+
+    @Test
+    public void onDismiss_receiverUnregistered() {
+        Dialog dialog = mDialogFragment.onCreateDialog(null);
+        final ArgumentCaptor<BroadcastReceiver> receiverCaptor = ArgumentCaptor.forClass(
+                BroadcastReceiver.class);
+        verify(mContext).registerReceiver(receiverCaptor.capture(), any(IntentFilter.class));
+
+        mDialogFragment.onDismiss(dialog);
+        verify(mContext).unregisterReceiver(eq(receiverCaptor.getValue()));
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/ImportancePreferenceTest.java b/tests/robotests/src/com/android/settings/notification/ImportancePreferenceTest.java
index 63bc828..b4379aa 100644
--- a/tests/robotests/src/com/android/settings/notification/ImportancePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ImportancePreferenceTest.java
@@ -29,7 +29,10 @@
 import android.content.Context;
 import android.graphics.drawable.Drawable;
 import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
 import android.widget.Button;
+import android.widget.LinearLayout;
 import android.widget.TextView;
 
 import com.android.settings.R;
@@ -110,8 +113,8 @@
         assertThat(holder.itemView.findViewById(R.id.alert).getBackground()).isEqualTo(selected);
         assertThat(holder.itemView.findViewById(R.id.silence).getBackground())
                 .isEqualTo(unselected);
-        assertThat(((TextView) holder.itemView.findViewById(R.id.description)).getText()).isEqualTo(
-                mContext.getString(R.string.notification_channel_summary_default));
+        assertThat(((TextView) holder.itemView.findViewById(R.id.alert_summary)).getText())
+                .isEqualTo(mContext.getString(R.string.notification_channel_summary_default));
     }
 
     @Test
@@ -129,28 +132,32 @@
         preference.setImportance(IMPORTANCE_DEFAULT);
         preference.onBindViewHolder(holder);
 
-        Button silenceButton = holder.itemView.findViewById(R.id.silence);
+        View silenceButton = holder.itemView.findViewById(R.id.silence);
 
         silenceButton.callOnClick();
 
         assertThat(holder.itemView.findViewById(R.id.alert).getBackground()).isEqualTo(unselected);
         assertThat(holder.itemView.findViewById(R.id.silence).getBackground()).isEqualTo(selected);
-        assertThat(((TextView) holder.itemView.findViewById(R.id.description)).getText()).isEqualTo(
-                mContext.getString(R.string.notification_channel_summary_low));
 
         verify(preference, times(1)).callChangeListener(IMPORTANCE_LOW);
     }
 
     @Test
     public void setImportanceSummary_status() {
+        ViewGroup parent = new LinearLayout(mContext);
         TextView tv = new TextView(mContext);
+        tv.setId(R.id.silence_summary);
+        parent.addView(tv);
+        TextView other = new TextView(mContext);
+        other.setId(R.id.alert_summary);
+        parent.addView(other);
 
         final ImportancePreference preference = spy(new ImportancePreference(mContext));
 
         preference.setDisplayInStatusBar(true);
         preference.setDisplayOnLockscreen(false);
 
-        preference.setImportanceSummary(tv, IMPORTANCE_LOW);
+        preference.setImportanceSummary(parent, IMPORTANCE_LOW, true);
 
         assertThat(tv.getText()).isEqualTo(
                 mContext.getString(R.string.notification_channel_summary_low_status));
@@ -158,14 +165,20 @@
 
     @Test
     public void setImportanceSummary_lock() {
+        ViewGroup parent = new LinearLayout(mContext);
         TextView tv = new TextView(mContext);
+        tv.setId(R.id.silence_summary);
+        parent.addView(tv);
+        TextView other = new TextView(mContext);
+        other.setId(R.id.alert_summary);
+        parent.addView(other);
 
         final ImportancePreference preference = spy(new ImportancePreference(mContext));
 
         preference.setDisplayInStatusBar(false);
         preference.setDisplayOnLockscreen(true);
 
-        preference.setImportanceSummary(tv, IMPORTANCE_LOW);
+        preference.setImportanceSummary(parent, IMPORTANCE_LOW, true);
 
         assertThat(tv.getText()).isEqualTo(
                 mContext.getString(R.string.notification_channel_summary_low_lock));
@@ -173,14 +186,20 @@
 
     @Test
     public void setImportanceSummary_statusLock() {
+        ViewGroup parent = new LinearLayout(mContext);
         TextView tv = new TextView(mContext);
+        tv.setId(R.id.silence_summary);
+        parent.addView(tv);
+        TextView other = new TextView(mContext);
+        other.setId(R.id.alert_summary);
+        parent.addView(other);
 
         final ImportancePreference preference = spy(new ImportancePreference(mContext));
 
         preference.setDisplayInStatusBar(true);
         preference.setDisplayOnLockscreen(true);
 
-        preference.setImportanceSummary(tv, IMPORTANCE_LOW);
+        preference.setImportanceSummary(parent, IMPORTANCE_LOW, true);
 
         assertThat(tv.getText()).isEqualTo(
                 mContext.getString(R.string.notification_channel_summary_low_status_lock));
@@ -188,14 +207,20 @@
 
     @Test
     public void setImportanceSummary_statusLock_default() {
+        ViewGroup parent = new LinearLayout(mContext);
         TextView tv = new TextView(mContext);
+        tv.setId(R.id.alert_summary);
+        parent.addView(tv);
+        TextView other = new TextView(mContext);
+        other.setId(R.id.silence_summary);
+        parent.addView(other);
 
         final ImportancePreference preference = spy(new ImportancePreference(mContext));
 
         preference.setDisplayInStatusBar(true);
         preference.setDisplayOnLockscreen(true);
 
-        preference.setImportanceSummary(tv, IMPORTANCE_DEFAULT);
+        preference.setImportanceSummary(parent, IMPORTANCE_DEFAULT, true);
 
         assertThat(tv.getText()).isEqualTo(
                 mContext.getString(R.string.notification_channel_summary_default));
diff --git a/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java b/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java
new file mode 100644
index 0000000..69c0919
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.settings.sim;
+
+
+import static android.app.NotificationManager.IMPORTANCE_HIGH;
+import static android.provider.Settings.ENABLE_MMS_DATA_REQUEST_REASON_INCOMING_MMS;
+import static android.provider.Settings.ENABLE_MMS_DATA_REQUEST_REASON_OUTGOING_MMS;
+import static android.provider.Settings.EXTRA_ENABLE_MMS_DATA_REQUEST_REASON;
+import static android.provider.Settings.EXTRA_SUB_ID;
+import static android.telephony.data.ApnSetting.TYPE_MMS;
+
+import static com.android.settings.sim.SimSelectNotification.ENABLE_MMS_NOTIFICATION_CHANNEL;
+import static com.android.settings.sim.SimSelectNotification.ENABLE_MMS_NOTIFICATION_ID;
+
+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.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.res.Resources;
+import android.provider.Settings;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+
+import com.android.settings.R;
+
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(shadows = ShadowAlertDialogCompat.class)
+public class SimSelectNotificationTest {
+    @Mock
+    private Context mContext;
+    @Mock
+    private NotificationManager mNotificationManager;
+    @Mock
+    private TelephonyManager mTelephonyManager;
+    @Mock
+    private SubscriptionManager mSubscriptionManager;
+    @Mock
+    private PackageManager mPackageManager;
+    @Mock
+    private Resources mResources;
+
+    private String mFakeOperatorName = "fake_operator_name";
+    private CharSequence mFakeNotificationChannelTitle = "fake_notification_channel_title";
+    private CharSequence mFakeNotificationTitle = "fake_notification_title";
+    private String mFakeNotificationSummary = "fake_notification_Summary";
+
+    private int mSubId = 1;
+
+    SimSelectNotification mSimSelectNotification = new SimSelectNotification();
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getSystemService(Context.NOTIFICATION_SERVICE))
+                .thenReturn(mNotificationManager);
+        when(mContext.getSystemService(Context.TELEPHONY_SERVICE))
+                .thenReturn(mTelephonyManager);
+        when(mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE))
+                .thenReturn(mSubscriptionManager);
+        when(mContext.getApplicationInfo()).thenReturn(new ApplicationInfo());
+        when(mContext.getPackageManager()).thenReturn(mPackageManager);
+        when(mPackageManager.checkPermission(any(), any()))
+                .thenReturn(PackageManager.PERMISSION_GRANTED);
+
+        when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
+        when(mTelephonyManager.getSimOperatorName()).thenReturn(mFakeOperatorName);
+        when(mTelephonyManager.isDataEnabledForApn(TYPE_MMS)).thenReturn(false);
+        when(mSubscriptionManager.isActiveSubId(mSubId)).thenReturn(true);
+        when(mContext.getResources()).thenReturn(mResources);
+
+        when(mResources.getText(R.string.enable_sending_mms_notification_title))
+                .thenReturn(mFakeNotificationTitle);
+        when(mResources.getText(R.string.enable_mms_notification_channel_title))
+                .thenReturn(mFakeNotificationChannelTitle);
+        when(mResources.getString(R.string.enable_mms_notification_summary,
+                mFakeOperatorName)).thenReturn(mFakeNotificationSummary);
+    }
+
+    @Test
+    public void onReceiveEnableMms_notificationShouldSend() {
+        Intent intent = new Intent(Settings.ACTION_ENABLE_MMS_DATA_REQUEST);
+        intent.putExtra(EXTRA_SUB_ID, mSubId);
+        intent.putExtra(EXTRA_ENABLE_MMS_DATA_REQUEST_REASON,
+                ENABLE_MMS_DATA_REQUEST_REASON_OUTGOING_MMS);
+
+        mSimSelectNotification.onReceive(mContext, intent);
+
+        // Capture the notification channel created and verify its fields.
+        ArgumentCaptor<NotificationChannel> nc = ArgumentCaptor.forClass(NotificationChannel.class);
+        verify(mNotificationManager).createNotificationChannel(nc.capture());
+
+        assertThat(nc.getValue().getId()).isEqualTo(ENABLE_MMS_NOTIFICATION_CHANNEL);
+        assertThat(nc.getValue().getName()).isEqualTo(mFakeNotificationChannelTitle);
+        assertThat(nc.getValue().getImportance()).isEqualTo(IMPORTANCE_HIGH);
+
+        // Capture the notification it notifies and verify its fields.
+        ArgumentCaptor<Notification> notification = ArgumentCaptor.forClass(Notification.class);
+        verify(mNotificationManager).notify(
+                eq(ENABLE_MMS_NOTIFICATION_ID), notification.capture());
+        assertThat(notification.getValue().extras.getCharSequence(Notification.EXTRA_TITLE))
+                .isEqualTo(mFakeNotificationTitle);
+        assertThat(notification.getValue().extras.getCharSequence(Notification.EXTRA_BIG_TEXT))
+                .isEqualTo(mFakeNotificationSummary);
+        assertThat(notification.getValue().contentIntent).isNotNull();
+    }
+
+    @Test
+    public void onReceiveEnableMms_NoExtra_notificationShouldNotSend() {
+        Intent intent = new Intent(Settings.ACTION_ENABLE_MMS_DATA_REQUEST);
+
+        // EXTRA_SUB_ID and EXTRA_ENABLE_MMS_DATA_REQUEST_REASON are required.
+        mSimSelectNotification.onReceive(mContext, intent);
+        verify(mNotificationManager, never()).createNotificationChannel(any());
+    }
+
+    @Test
+    public void onReceiveEnableMms_MmsDataAlreadyEnabled_notificationShouldNotSend() {
+        when(mTelephonyManager.isDataEnabledForApn(TYPE_MMS)).thenReturn(true);
+        Intent intent = new Intent(Settings.ACTION_ENABLE_MMS_DATA_REQUEST);
+        intent.putExtra(EXTRA_SUB_ID, mSubId);
+        intent.putExtra(EXTRA_ENABLE_MMS_DATA_REQUEST_REASON,
+                ENABLE_MMS_DATA_REQUEST_REASON_INCOMING_MMS);
+
+        // If MMS data is already enabled, there's no need to trigger the notification.
+        mSimSelectNotification.onReceive(mContext, intent);
+        verify(mNotificationManager, never()).createNotificationChannel(any());
+    }
+}
+
diff --git a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
index 7fcd3d2..51264c1 100644
--- a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
@@ -109,7 +109,7 @@
     private BluetoothDevice mRightBluetoothHapDevice;
     private LocalBluetoothManager mLocalBluetoothManager;
     private MediaOutputPreferenceController mController;
-    private List<BluetoothDevice> mProfileConnectableDevices;
+    private List<BluetoothDevice> mProfileConnectedDevices;
     private List<BluetoothDevice> mHearingAidActiveDevices;
 
     @Before
@@ -150,7 +150,7 @@
         mController = new MediaOutputPreferenceController(mContext, TEST_KEY);
         mScreen = spy(new PreferenceScreen(mContext, null));
         mPreference = new Preference(mContext);
-        mProfileConnectableDevices = new ArrayList<>();
+        mProfileConnectedDevices = new ArrayList<>();
         mHearingAidActiveDevices = new ArrayList<>(2);
 
         when(mScreen.getPreferenceManager()).thenReturn(mock(PreferenceManager.class));
@@ -172,11 +172,11 @@
      * Preference should be invisible
      */
     @Test
-    public void updateState_withoutConnectableBtDevice_preferenceInvisible() {
+    public void updateState_withoutConnectedBtDevice_preferenceInvisible() {
         mShadowAudioManager.setOutputDevice(DEVICE_OUT_EARPIECE);
         mAudioManager.setMode(AudioManager.MODE_NORMAL);
-        mProfileConnectableDevices.clear();
-        when(mA2dpProfile.getConnectableDevices()).thenReturn(mProfileConnectableDevices);
+        mProfileConnectedDevices.clear();
+        when(mA2dpProfile.getConnectedDevices()).thenReturn(mProfileConnectedDevices);
         mPreference.setVisible(true);
 
         assertThat(mPreference.isVisible()).isTrue();
@@ -185,16 +185,16 @@
     }
 
     /**
-     * A2DP Bluetooth device(s) are connectable, no matter active or inactive
+     * A2DP Bluetooth device(s) are connected, no matter active or inactive
      * Preference should be visible
      */
     @Test
-    public void updateState_withConnectableBtDevice_preferenceVisible() {
+    public void updateState_withConnectedBtDevice_preferenceVisible() {
         mShadowAudioManager.setOutputDevice(DEVICE_OUT_BLUETOOTH_A2DP);
         mAudioManager.setMode(AudioManager.MODE_NORMAL);
-        mProfileConnectableDevices.clear();
-        mProfileConnectableDevices.add(mBluetoothDevice);
-        when(mA2dpProfile.getConnectableDevices()).thenReturn(mProfileConnectableDevices);
+        mProfileConnectedDevices.clear();
+        mProfileConnectedDevices.add(mBluetoothDevice);
+        when(mA2dpProfile.getConnectedDevices()).thenReturn(mProfileConnectedDevices);
         assertThat(mPreference.isVisible()).isFalse();
 
         // Without Active Bluetooth Device
@@ -208,17 +208,17 @@
     }
 
     /**
-     * A2DP Bluetooth device(s) are connectable, but no device is set as activated
+     * A2DP Bluetooth device(s) are connected, but no device is set as activated
      * Preference summary should be "This device"
      */
     @Test
-    public void updateState_withConnectableBtDevice_withoutActiveBtDevice_setDefaultSummary() {
+    public void updateState_withConnectedBtDevice_withoutActiveBtDevice_setDefaultSummary() {
         mShadowAudioManager.setOutputDevice(DEVICE_OUT_EARPIECE);
         mAudioManager.setMode(AudioManager.MODE_NORMAL);
-        mProfileConnectableDevices.clear();
-        mProfileConnectableDevices.add(mBluetoothDevice);
-        mProfileConnectableDevices.add(mSecondBluetoothDevice);
-        when(mA2dpProfile.getConnectableDevices()).thenReturn(mProfileConnectableDevices);
+        mProfileConnectedDevices.clear();
+        mProfileConnectedDevices.add(mBluetoothDevice);
+        mProfileConnectedDevices.add(mSecondBluetoothDevice);
+        when(mA2dpProfile.getConnectedDevices()).thenReturn(mProfileConnectedDevices);
         when(mA2dpProfile.getActiveDevice()).thenReturn(null);
 
         assertThat(mPreference.getSummary()).isNull();
@@ -235,10 +235,10 @@
     public void updateState_withActiveBtDevice_setActivatedDeviceName() {
         mShadowAudioManager.setOutputDevice(DEVICE_OUT_BLUETOOTH_A2DP);
         mAudioManager.setMode(AudioManager.MODE_NORMAL);
-        mProfileConnectableDevices.clear();
-        mProfileConnectableDevices.add(mBluetoothDevice);
-        mProfileConnectableDevices.add(mSecondBluetoothDevice);
-        when(mA2dpProfile.getConnectableDevices()).thenReturn(mProfileConnectableDevices);
+        mProfileConnectedDevices.clear();
+        mProfileConnectedDevices.add(mBluetoothDevice);
+        mProfileConnectedDevices.add(mSecondBluetoothDevice);
+        when(mA2dpProfile.getConnectedDevices()).thenReturn(mProfileConnectedDevices);
         when(mA2dpProfile.getActiveDevice()).thenReturn(mBluetoothDevice);
 
         assertThat(mPreference.getSummary()).isNull();
@@ -248,16 +248,16 @@
 
 
     /**
-     * Hearing Aid device(s) are connectable, no matter active or inactive
+     * Hearing Aid device(s) are connected, no matter active or inactive
      * Preference should be visible
      */
     @Test
-    public void updateState_withConnectableHADevice_preferenceVisible() {
+    public void updateState_withConnectedHADevice_preferenceVisible() {
         mShadowAudioManager.setOutputDevice(DEVICE_OUT_HEARING_AID);
         mAudioManager.setMode(AudioManager.MODE_NORMAL);
         mHearingAidActiveDevices.clear();
         mHearingAidActiveDevices.add(mLeftBluetoothHapDevice);
-        when(mHearingAidProfile.getConnectableDevices()).thenReturn(mHearingAidActiveDevices);
+        when(mHearingAidProfile.getConnectedDevices()).thenReturn(mHearingAidActiveDevices);
         assertThat(mPreference.isVisible()).isFalse();
 
         // Without Active Hearing Aid Device
@@ -280,7 +280,7 @@
         mAudioManager.setMode(AudioManager.MODE_NORMAL);
         mHearingAidActiveDevices.clear();
         mHearingAidActiveDevices.add(mLeftBluetoothHapDevice);
-        when(mHearingAidProfile.getConnectableDevices()).thenReturn(mHearingAidActiveDevices);
+        when(mHearingAidProfile.getConnectedDevices()).thenReturn(mHearingAidActiveDevices);
         when(mHearingAidProfile.getActiveDevices()).thenReturn(mHearingAidActiveDevices);
 
         assertThat(mPreference.getSummary()).isNull();
@@ -332,22 +332,6 @@
                 mContext.getText(R.string.media_out_summary_ongoing_call_state));
     }
 
-    /**
-     * Media stream is captured by something else (cast device):
-     * Preference should be invisible
-     * Preference summary should be "unavailable"
-     */
-    @Test
-    public void updateState_mediaStreamIsCapturedByCast_shouldDisableAndSetDefaultSummary() {
-        mShadowAudioManager.setOutputDevice(DEVICE_OUT_REMOTE_SUBMIX);
-
-        mController.updateState(mPreference);
-
-        assertThat(mPreference.isVisible()).isFalse();
-        String defaultString = mContext.getString(R.string.media_output_summary_unavailable);
-        assertThat(mPreference.getSummary()).isEqualTo(defaultString);
-    }
-
     @Test
     public void findActiveDevice_onlyA2dpDeviceActive_returnA2dpDevice() {
         when(mLocalBluetoothProfileManager.getHearingAidProfile()).thenReturn(null);
diff --git a/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java
new file mode 100644
index 0000000..120c780
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wallpaper/StyleSuggestionActivityTest.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.settings.wallpaper;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.Settings;
+
+import com.android.settings.testutils.shadow.ShadowSecureSettings;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+
+@RunWith(RobolectricTestRunner.class)
+public class StyleSuggestionActivityTest {
+
+    @Mock
+    private Context mContext;
+    @Mock
+    private Resources mResources;
+    @Mock
+    private ContentResolver mContentResolver;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        when(mContext.getResources()).thenReturn(mResources);
+        when(mContext.getContentResolver()).thenReturn(mContentResolver);
+    }
+
+    @Test
+    public void wallpaperServiceEnabled_no_shouldReturnTrue() {
+        when(mResources.getBoolean(com.android.internal.R.bool.config_enableWallpaperService))
+                .thenReturn(false);
+        assertThat(StyleSuggestionActivity.isSuggestionComplete(mContext)).isTrue();
+    }
+
+    @Test
+    @Config(shadows = ShadowSecureSettings.class)
+    public void hasStyleSet_yes_shouldReturnTrue() {
+        when(mResources.getBoolean(com.android.internal.R.bool.config_enableWallpaperService))
+                .thenReturn(true);
+
+        Settings.Secure.putString(mContentResolver,
+                Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES, "test");
+        assertThat(StyleSuggestionActivity.isSuggestionComplete(mContext)).isTrue();
+    }
+
+    @Test
+    @Config(shadows = ShadowSecureSettings.class)
+    public void hasStyleSet_no_shouldReturnFalse() {
+        when(mResources.getBoolean(com.android.internal.R.bool.config_enableWallpaperService))
+                .thenReturn(true);
+
+        Settings.Secure.putString(mContentResolver,
+                Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES, null);
+        assertThat(StyleSuggestionActivity.isSuggestionComplete(mContext)).isFalse();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
index 363e046..4bcc15f 100644
--- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
@@ -50,6 +50,7 @@
 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -169,6 +170,7 @@
     }
 
     @Test
+    @Ignore
     public void testDisabledPackageShownAsDisabled() {
         DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mContext, mPackageManager,
                 createApplicationInfo(DEFAULT_PACKAGE_NAME), "disabled");
@@ -181,6 +183,7 @@
     }
 
     @Test
+    @Ignore
     public void testEnabledPackageShownAsEnabled() {
         String disabledReason = "";
         DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mContext, mPackageManager,
@@ -194,6 +197,7 @@
     }
 
     @Test
+    @Ignore
     public void testDisabledPackageShowsDisabledReasonSummary() {
         String disabledReason = "disabled";
         DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mContext, mPackageManager,
@@ -208,6 +212,7 @@
     }
 
     @Test
+    @Ignore
     public void testEnabledPackageShowsEmptySummary() {
         DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mContext, mPackageManager,
                 createApplicationInfo(DEFAULT_PACKAGE_NAME), null);
diff --git a/tests/uitests/src/com/android/settings/ui/AccessibilitySettingsTests.java b/tests/uitests/src/com/android/settings/ui/AccessibilitySettingsTests.java
deleted file mode 100644
index 2fdee5c..0000000
--- a/tests/uitests/src/com/android/settings/ui/AccessibilitySettingsTests.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Copyright (C) 2018 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.ui;
-
-import android.metrics.MetricsReader;
-import android.os.RemoteException;
-import android.platform.test.annotations.Presubmit;
-import android.provider.Settings;
-import android.support.test.metricshelper.MetricsAsserts;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.Direction;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.Until;
-import android.system.helpers.SettingsHelper;
-import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-
-public class AccessibilitySettingsTests extends InstrumentationTestCase {
-
-    private static final String SETTINGS_PACKAGE = "com.android.settings";
-    private static final int TIMEOUT = 2000;
-    private UiDevice mDevice;
-    private MetricsReader mMetricsReader;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        mDevice = UiDevice.getInstance(getInstrumentation());
-        try {
-            mDevice.setOrientationNatural();
-        } catch (RemoteException e) {
-            throw new RuntimeException("failed to freeze device orientaion", e);
-        }
-        mMetricsReader = new MetricsReader();
-        // Clear out old logs
-        mMetricsReader.checkpoint();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        // Need to finish settings activity
-        mDevice.pressBack();
-        mDevice.pressHome();
-        mDevice.waitForIdle();
-        super.tearDown();
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testHighContrastTextOn() throws Exception {
-        verifyAccessibilitySettingOnOrOff("High contrast text",
-                Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, 0, 1);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testHighContrastTextOff() throws Exception {
-        verifyAccessibilitySettingOnOrOff("High contrast text",
-               Settings.Secure.ACCESSIBILITY_HIGH_TEXT_CONTRAST_ENABLED, 1, 0);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testPowerButtonEndsCallOn() throws Exception {
-        verifyAccessibilitySettingOnOrOff("Power button ends call",
-                Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, 1, 2);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testPowerButtonEndsCallOff() throws Exception {
-        verifyAccessibilitySettingOnOrOff("Power button ends call",
-                Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, 2, 1);
-    }
-
-    /* Suppressing these four tests. The settings don't play
-     * nice with Settings.System.putInt or Settings.Secure.putInt.
-     * Need further clarification. Filed bug b/27792029
-     */
-    @Suppress
-    @MediumTest
-    public void testAutoRotateScreenOn() throws Exception {
-        verifyAccessibilitySettingOnOrOff("Auto-rotate screen",
-               Settings.System.ACCELEROMETER_ROTATION, 0, 1);
-    }
-
-    @Suppress
-    @MediumTest
-    public void testAutoRotateScreenOff() throws Exception {
-       verifyAccessibilitySettingOnOrOff("Auto-rotate screen",
-               Settings.System.ACCELEROMETER_ROTATION, 1, 0);
-    }
-
-    @Suppress
-    @MediumTest
-    public void testMonoAudioOn() throws Exception {
-        verifyAccessibilitySettingOnOrOff("Mono audio",
-               Settings.System.MASTER_MONO, 0, 1);
-    }
-
-    @Suppress
-    @MediumTest
-    public void testMonoAudioOff() throws Exception {
-         verifyAccessibilitySettingOnOrOff("Mono audio",
-                Settings.System.MASTER_MONO, 1, 0);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testLargeMousePointerOn() throws Exception {
-         verifyAccessibilitySettingOnOrOff("Large mouse pointer",
-                 Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, 0, 1);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testLargeMousePointerOff() throws Exception {
-         verifyAccessibilitySettingOnOrOff("Large mouse pointer",
-                 Settings.Secure.ACCESSIBILITY_LARGE_POINTER_ICON, 1, 0);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testColorCorrection() throws Exception {
-        verifySettingToggleAfterScreenLoad("Color correction",
-                Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
-        MetricsAsserts.assertHasVisibilityLog("Missing color correction log",
-                mMetricsReader, MetricsEvent.ACCESSIBILITY_TOGGLE_DALTONIZER, true);
-    }
-
-    // Suppressing this test, since UiAutomator + talkback don't play nice
-    @Suppress
-    @MediumTest
-    public void testTalkback() throws Exception {
-        verifySettingToggleAfterScreenLoad("TalkBack",
-                Settings.Secure.ACCESSIBILITY_ENABLED);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testCaptions() throws Exception {
-         verifySettingToggleAfterScreenLoad("Captions",
-                 Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED);
-        MetricsAsserts.assertHasVisibilityLog("Missing captions log",
-                mMetricsReader, MetricsEvent.ACCESSIBILITY_CAPTION_PROPERTIES, true);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testMagnificationGesture() throws Exception {
-        verifySettingToggleAfterScreenLoad("Magnification", "Magnify with triple-tap",
-                 Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED);
-        MetricsAsserts.assertHasVisibilityLog("Missing magnification log",
-                mMetricsReader, MetricsEvent.ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION, true);
-    }
-
-    @MediumTest
-    public void testClickAfterPointerStopsMoving() throws Exception {
-         verifySettingToggleAfterScreenLoad("Click after pointer stops moving",
-                  Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED);
-    }
-
-    @MediumTest
-    public void testAccessibilitySettingsLoadLog() throws Exception {
-        launchAccessibilitySettings();
-        MetricsAsserts.assertHasVisibilityLog("Missing accessibility settings load log",
-                mMetricsReader, MetricsEvent.ACCESSIBILITY, true);
-    }
-
-    public void launchAccessibilitySettings() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(),
-                Settings.ACTION_ACCESSIBILITY_SETTINGS);
-    }
-
-    private void verifyAccessibilitySettingOnOrOff(String settingText,
-            String settingFlag, int initialFlagValue, int expectedFlagValue)
-            throws Exception {
-        Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(),
-                settingFlag, initialFlagValue);
-        launchAccessibilitySettings();
-        UiObject2 settingsTitle = findItemOnScreen(settingText);
-        settingsTitle.click();
-        Thread.sleep(TIMEOUT);
-        int settingValue = Settings.Secure
-                .getInt(getInstrumentation().getContext().getContentResolver(), settingFlag);
-        assertEquals(settingText + " not correctly set after toggle",
-                expectedFlagValue, settingValue);
-    }
-
-    private void verifySettingToggleAfterScreenLoad(String settingText, String settingFlag)
-            throws Exception {
-        verifySettingToggleAfterScreenLoad(settingText, null, settingFlag);
-    }
-
-    private void verifySettingToggleAfterScreenLoad
-            (String settingText, String subSetting, String settingFlag) throws Exception {
-        // Load accessibility settings
-        launchAccessibilitySettings();
-        Settings.Secure.putInt(getInstrumentation().getContext().getContentResolver(),
-                settingFlag, 0);
-        Thread.sleep(TIMEOUT);
-        // Tap on setting required
-        UiObject2 settingTitle = findItemOnScreen(settingText);
-        // Load screen
-        settingTitle.click();
-        Thread.sleep(TIMEOUT);
-        if (subSetting != null) {
-            UiObject2 subSettingObject = findItemOnScreen(subSetting);
-            subSettingObject.click();
-            Thread.sleep(TIMEOUT);
-        }
-        // Toggle value
-        UiObject2 settingToggle =  mDevice.wait(Until.findObject(By.text("Off")),
-                            TIMEOUT);
-        settingToggle.click();
-        dismissOpenDialog();
-        Thread.sleep(TIMEOUT);
-        // Assert new value
-        int settingValue = Settings.Secure.
-                getInt(getInstrumentation().getContext().getContentResolver(), settingFlag);
-        assertEquals(settingText + " value not set correctly", 1, settingValue);
-        // Toogle value
-        settingToggle.click();
-        dismissOpenDialog();
-        mDevice.pressBack();
-        Thread.sleep(TIMEOUT);
-        // Assert reset to old value
-        settingValue = Settings.Secure.
-                getInt(getInstrumentation().getContext().getContentResolver(), settingFlag);
-        assertEquals(settingText + " value not set correctly", 0, settingValue);
-    }
-
-    private UiObject2 findItemOnScreen(String item) throws Exception {
-        int count = 0;
-        UiObject2 settingsPanel = mDevice.wait(Until.findObject
-                (By.res(SETTINGS_PACKAGE, "list")), TIMEOUT);
-        while (settingsPanel.fling(Direction.UP) && count < 3) {
-            count++;
-        }
-        count = 0;
-        UiObject2 setting = null;
-        while(count < 3 && setting == null) {
-            setting = mDevice.wait(Until.findObject(By.text(item)), TIMEOUT);
-            if (setting == null) {
-                settingsPanel.scroll(Direction.DOWN, 1.0f);
-            }
-            count++;
-        }
-        return setting;
-    }
-
-    private void dismissOpenDialog() throws Exception {
-        UiObject2 okButton = mDevice.wait(Until.findObject
-                (By.res("android:id/button1")), TIMEOUT*2);
-        if (okButton != null) {
-            okButton.click();
-        }
-    }
-}
diff --git a/tests/uitests/src/com/android/settings/ui/BluetoothNetworkSettingsTests.java b/tests/uitests/src/com/android/settings/ui/BluetoothNetworkSettingsTests.java
deleted file mode 100644
index d41be9c..0000000
--- a/tests/uitests/src/com/android/settings/ui/BluetoothNetworkSettingsTests.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2018 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.ui;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothManager;
-import android.content.Context;
-import android.content.Intent;
-import android.metrics.MetricsReader;
-import android.os.RemoteException;
-import android.platform.test.annotations.Presubmit;
-import android.provider.Settings;
-import android.support.test.metricshelper.MetricsAsserts;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.BySelector;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.Until;
-import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-
-public class BluetoothNetworkSettingsTests extends InstrumentationTestCase {
-
-    private static final String SETTINGS_PACKAGE = "com.android.settings";
-    private static final int TIMEOUT = 2000;
-    private static final int LONG_TIMEOUT = 40000;
-    private UiDevice mDevice;
-    private MetricsReader mMetricsReader;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        mDevice = UiDevice.getInstance(getInstrumentation());
-        try {
-            mDevice.setOrientationNatural();
-        } catch (RemoteException e) {
-            throw new RuntimeException("failed to freeze device orientaion", e);
-        }
-        mMetricsReader = new MetricsReader();
-        // Clear out old logs
-        mMetricsReader.checkpoint();
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mDevice.pressBack();
-        mDevice.pressHome();
-        mDevice.waitForIdle();
-        super.tearDown();
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testBluetoothEnabled() throws Exception {
-        verifyBluetoothOnOrOff(true);
-        MetricsAsserts.assertHasActionLog("missing bluetooth toggle log",
-                mMetricsReader, MetricsEvent.ACTION_BLUETOOTH_TOGGLE);
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testBluetoothDisabled() throws Exception {
-        verifyBluetoothOnOrOff(false);
-        MetricsAsserts.assertHasActionLog("missing bluetooth toggle log",
-                mMetricsReader, MetricsEvent.ACTION_BLUETOOTH_TOGGLE);
-    }
-
-    @MediumTest
-    public void testRenameOption() throws Exception {
-        launchBluetoothSettings();
-        verifyUiObjectClicked(By.text("Device name"), "Rename preference");
-        verifyUiObjectClicked(By.text("CANCEL"), "CANCEL button");
-
-        MetricsAsserts.assertHasActionLog("missing bluetooth rename device log",
-                mMetricsReader, MetricsEvent.ACTION_BLUETOOTH_RENAME);
-        MetricsAsserts.assertHasVisibilityLog("missing bluetooth rename dialog log",
-                mMetricsReader, MetricsEvent.DIALOG_BLUETOOTH_RENAME, true);
-    }
-
-    @MediumTest
-    public void testReceivedFilesOption() throws Exception {
-        launchBluetoothSettings();
-        verifyUiObjectClicked(By.text("Received files"), "Received files preference");
-
-        MetricsAsserts.assertHasActionLog("missing bluetooth received files log",
-                mMetricsReader, MetricsEvent.ACTION_BLUETOOTH_FILES);
-    }
-
-    @MediumTest
-    public void testHelpFeedbackOverflowOption() throws Exception {
-        launchBluetoothSettings();
-
-        // Verify help & feedback
-        assertNotNull("Help & feedback item not found under Bluetooth Settings",
-                mDevice.wait(Until.findObject(By.desc("Help & feedback")), TIMEOUT));
-    }
-
-    public void launchBluetoothSettings() throws Exception {
-        Intent btIntent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
-        btIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        getInstrumentation().getContext().startActivity(btIntent);
-        Thread.sleep(TIMEOUT * 2);
-    }
-
-    /**
-     * Find the {@link UiObject2} by {@code itemSelector} and try to click it if possible.
-     *
-     * If not find, throw assertion error
-     * @param itemSelector used to find the {@link UiObject2}
-     * @param text the description of the {@link UiObject2}
-     */
-    private void verifyUiObjectClicked(BySelector itemSelector, String text) throws Exception {
-        UiObject2 uiObject2 = mDevice.wait(Until.findObject(itemSelector), TIMEOUT);
-        assertNotNull(text + "is not present in bluetooth settings page", uiObject2);
-        uiObject2.click();
-    }
-
-    /**
-     * Toggles the Bluetooth switch and verifies that the change is reflected in Settings
-     *
-     * @param verifyOn set to whether you want the setting turned On or Off
-     */
-    private void verifyBluetoothOnOrOff(boolean verifyOn) throws Exception {
-        String switchText = "ON";
-        BluetoothAdapter bluetoothAdapter = ((BluetoothManager) getInstrumentation().getContext()
-                .getSystemService(Context.BLUETOOTH_SERVICE)).getAdapter();
-        if (verifyOn) {
-            switchText = "OFF";
-            bluetoothAdapter.disable();
-        } else {
-            bluetoothAdapter.enable();
-        }
-        launchBluetoothSettings();
-        mDevice.wait(Until
-                .findObject(By.res(SETTINGS_PACKAGE, "switch_widget").text(switchText)), TIMEOUT)
-                .click();
-        Thread.sleep(TIMEOUT);
-        String bluetoothValue =
-                Settings.Global.getString(getInstrumentation().getContext().getContentResolver(),
-                        Settings.Global.BLUETOOTH_ON);
-        if (verifyOn) {
-            assertEquals("1", bluetoothValue);
-        } else {
-            assertEquals("0", bluetoothValue);
-        }
-    }
-}
diff --git a/tests/uitests/src/com/android/settings/ui/DisplaySettingsTest.java b/tests/uitests/src/com/android/settings/ui/DisplaySettingsTest.java
deleted file mode 100644
index 0b7402d..0000000
--- a/tests/uitests/src/com/android/settings/ui/DisplaySettingsTest.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (C) 2018 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.ui;
-
-import android.content.ContentResolver;
-import android.platform.test.annotations.Presubmit;
-import android.provider.Settings;
-import android.support.test.uiautomator.By;
-import android.support.test.uiautomator.UiDevice;
-import android.support.test.uiautomator.UiObject2;
-import android.support.test.uiautomator.Until;
-import android.system.helpers.SettingsHelper;
-import android.system.helpers.SettingsHelper.SettingsType;
-import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.MediumTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-import java.util.regex.Pattern;
-
-public class DisplaySettingsTest extends InstrumentationTestCase {
-
-    private static final String PAGE = Settings.ACTION_DISPLAY_SETTINGS;
-    private static final int TIMEOUT = 2000;
-    private static final FontSetting FONT_SMALL = new FontSetting("Small", 0.85f);
-    private static final FontSetting FONT_NORMAL = new FontSetting("Default", 1.00f);
-    private static final FontSetting FONT_LARGE = new FontSetting("Large", 1.15f);
-    private static final FontSetting FONT_HUGE = new FontSetting("Largest", 1.30f);
-
-    private UiDevice mDevice;
-    private ContentResolver mResolver;
-    private SettingsHelper mHelper;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        mDevice = UiDevice.getInstance(getInstrumentation());
-        mDevice.setOrientationNatural();
-        mResolver = getInstrumentation().getContext().getContentResolver();
-        mHelper = new SettingsHelper();
-    }
-
-    @Override
-    public void tearDown() throws Exception {
-        // reset settings we touched that may impact others
-        Settings.System.putFloat(mResolver, Settings.System.FONT_SCALE, 1.00f);
-        mDevice.waitForIdle();
-        super.tearDown();
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testAdaptiveBrightness() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        Thread.sleep(1000);
-
-        assertTrue(mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, "Adaptive brightness",
-                Settings.System.SCREEN_BRIGHTNESS_MODE));
-        assertTrue(mHelper.verifyToggleSetting(SettingsType.SYSTEM, PAGE, "Adaptive brightness",
-                Settings.System.SCREEN_BRIGHTNESS_MODE));
-    }
-
-
-    // blocked on b/27487224
-    @MediumTest
-    @Suppress
-    public void testDaydreamToggle() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        clickMore();
-        Pattern p = Pattern.compile("On|Off");
-        mHelper.clickSetting("Screen saver");
-        Thread.sleep(1000);
-        try {
-            assertTrue(mHelper.verifyToggleSetting(SettingsType.SECURE, PAGE, p,
-                    Settings.Secure.SCREENSAVER_ENABLED, false));
-            assertTrue(mHelper.verifyToggleSetting(SettingsType.SECURE, PAGE, p,
-                    Settings.Secure.SCREENSAVER_ENABLED, false));
-        } finally {
-            mDevice.pressBack();
-        }
-    }
-
-    @MediumTest
-    public void testAccelRotation() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        clickMore();
-        Thread.sleep(4000);
-        int currentAccelSetting = Settings.System.getInt(
-                mResolver, Settings.System.ACCELEROMETER_ROTATION);
-        mHelper.clickSetting("Auto-rotate screen");
-        int newAccelSetting = Settings.System.getInt(
-                mResolver, Settings.System.ACCELEROMETER_ROTATION);
-        assertTrue("Accelorometer setting unchanged after toggle", currentAccelSetting != newAccelSetting);
-        mHelper.clickSetting("Auto-rotate screen");
-        int revertedAccelSetting = Settings.System.getInt(
-                mResolver, Settings.System.ACCELEROMETER_ROTATION);
-        assertTrue("Accelorometer setting unchanged after toggle", revertedAccelSetting != newAccelSetting);
-    }
-
-    @MediumTest
-    public void testDaydream() throws Exception {
-        Settings.Secure.putInt(mResolver, Settings.Secure.SCREENSAVER_ENABLED, 1);
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        clickMore();
-        mHelper.scrollVert(false);
-        mDevice.wait(Until.findObject(By.text("Screen saver")), TIMEOUT).click();
-        try {
-            assertTrue(mHelper.verifyRadioSetting(SettingsType.SECURE, PAGE,
-                    "Current screen saver", "Clock", Settings.Secure.SCREENSAVER_COMPONENTS,
-                    "com.google.android.deskclock/com.android.deskclock.Screensaver"));
-            assertTrue(mHelper.verifyRadioSetting(SettingsType.SECURE, PAGE,
-                    "Current screen saver", "Colors", Settings.Secure.SCREENSAVER_COMPONENTS,
-                    "com.android.dreams.basic/com.android.dreams.basic.Colors"));
-            assertTrue(mHelper.verifyRadioSetting(SettingsType.SECURE, PAGE,
-                    "Current screen saver", "Photos", Settings.Secure.SCREENSAVER_COMPONENTS,
-                    "com.google.android.apps.photos/com.google.android.apps.photos.daydream"
-                            + ".PhotosDreamService"));
-        } finally {
-            mDevice.pressBack();
-            Thread.sleep(2000);
-        }
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testSleep15Seconds() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE,
-                "Sleep", "15 seconds", Settings.System.SCREEN_OFF_TIMEOUT, "15000"));
-    }
-
-    @MediumTest
-    public void testSleep30Seconds() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE,
-                "Sleep", "30 seconds", Settings.System.SCREEN_OFF_TIMEOUT, "30000"));
-    }
-
-    @MediumTest
-    public void testSleep1Minute() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE,
-                "Sleep", "1 minute", Settings.System.SCREEN_OFF_TIMEOUT, "60000"));
-    }
-
-    @MediumTest
-    public void testSleep2Minutes() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE,
-                "Sleep", "2 minutes", Settings.System.SCREEN_OFF_TIMEOUT, "120000"));
-    }
-
-    @MediumTest
-    public void testSleep5Minutes() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE,
-                "Sleep", "5 minutes", Settings.System.SCREEN_OFF_TIMEOUT, "300000"));
-    }
-
-    @MediumTest
-    public void testSleep10Minutes() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE,
-                "Sleep", "10 minutes", Settings.System.SCREEN_OFF_TIMEOUT, "600000"));
-    }
-
-    @MediumTest
-    public void testSleep30Minutes() throws Exception {
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        mHelper.scrollVert(true);
-        assertTrue(mHelper.verifyRadioSetting(SettingsType.SYSTEM, PAGE,
-                "Sleep", "30 minutes", Settings.System.SCREEN_OFF_TIMEOUT, "1800000"));
-    }
-
-    @Presubmit
-    @MediumTest
-    public void testFontSizeLarge() throws Exception {
-        verifyFontSizeSetting(1.00f, FONT_LARGE);
-        // Leaving the font size at large can make later tests fail, so reset it
-        Settings.System.putFloat(mResolver, Settings.System.FONT_SCALE, 1.00f);
-        // It takes a second for the new font size to be picked up
-        Thread.sleep(2000);
-    }
-
-    @MediumTest
-    public void testFontSizeDefault() throws Exception {
-        verifyFontSizeSetting(1.15f, FONT_NORMAL);
-    }
-
-    @MediumTest
-    public void testFontSizeLargest() throws Exception {
-        verifyFontSizeSetting(1.00f, FONT_HUGE);
-        // Leaving the font size at huge can make later tests fail, so reset it
-        Settings.System.putFloat(mResolver, Settings.System.FONT_SCALE, 1.00f);
-        // It takes a second for the new font size to be picked up
-        Thread.sleep(2000);
-    }
-
-    @MediumTest
-    public void testFontSizeSmall() throws Exception {
-        verifyFontSizeSetting(1.00f, FONT_SMALL);
-    }
-
-    private void verifyFontSizeSetting(float resetValue, FontSetting setting)
-            throws Exception {
-        Settings.System.putFloat(mResolver, Settings.System.FONT_SCALE, resetValue);
-        SettingsHelper.launchSettingsPage(getInstrumentation().getContext(), PAGE);
-        clickMore();
-        mHelper.clickSetting("Font size");
-        try {
-            mDevice.wait(Until.findObject(By.desc(setting.getName())), TIMEOUT).click();
-            Thread.sleep(1000);
-            float changedValue = Settings.System.getFloat(
-                    mResolver, Settings.System.FONT_SCALE);
-            assertEquals(setting.getSize(), changedValue, 0.0001);
-        } finally {
-            // Make sure to back out of the font menu
-            mDevice.pressBack();
-        }
-    }
-
-    private void clickMore() throws InterruptedException {
-        UiObject2 more = mDevice.wait(Until.findObject(By.text("Advanced")), TIMEOUT);
-        if (more != null) {
-            more.click();
-            Thread.sleep(TIMEOUT);
-        }
-    }
-
-    private static class FontSetting {
-        private final String mSizeName;
-        private final float mSizeVal;
-
-        public FontSetting(String sizeName, float sizeVal) {
-            mSizeName = sizeName;
-            mSizeVal = sizeVal;
-        }
-
-        public String getName() {
-            return mSizeName;
-        }
-
-        public float getSize() {
-            return mSizeVal;
-        }
-    }
-}