Merge "Add a new toggle for Bluetooth while driving."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a36ec8b..3bb04d3 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -36,6 +36,7 @@
     <uses-permission android:name="com.android.certinstaller.INSTALL_AS_USER" />
     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     <uses-permission android:name="android.permission.TETHER_PRIVILEGED" />
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
     <uses-permission android:name="android.permission.READ_PHONE_STATE" />
@@ -1011,7 +1012,7 @@
                   android:taskAffinity="com.android.settings"
                   android:parentActivityName="Settings">
             <intent-filter android:priority="1">
-                <action android:name="android.settings.DEVICE_HEALTH_SETTINGS" />
+                <action android:name="android.settings.DEVICE_INFO_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
             <intent-filter>
@@ -1027,7 +1028,7 @@
             <meta-data android:name="com.android.settings.title"
                        android:resource="@string/about_settings" />
             <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.MeCardFragment" />
+                       android:value="com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment" />
             <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
                        android:value="true" />
         </activity>
@@ -2228,12 +2229,15 @@
                 android:label="@string/power_usage_summary_title"
                 android:icon="@drawable/ic_settings_battery"
                 android:enabled="false">
-            <!-- TODO(b/69867246): add priority for this intent-filter -->
-            <intent-filter>
+            <intent-filter android:priority="1">
                 <action android:name="android.intent.action.POWER_USAGE_SUMMARY" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <!-- TODO(b/69867246): add shortcut intent-filter  -->
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="com.android.settings.SHORTCUT" />
+            </intent-filter>
             <intent-filter android:priority="8">
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
@@ -2255,15 +2259,10 @@
         <activity android:name=".Settings$PowerUsageSummaryLegacyActivity"
                   android:label="@string/power_usage_summary_title"
                   android:icon="@drawable/ic_settings_battery">
-            <intent-filter android:priority="1">
+            <intent-filter>
                 <action android:name="android.intent.action.POWER_USAGE_SUMMARY" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="com.android.settings.SHORTCUT" />
-            </intent-filter>
             <intent-filter android:priority="8">
                 <action android:name="com.android.settings.action.SETTINGS" />
             </intent-filter>
@@ -2714,10 +2713,6 @@
         <!-- Show channel group-level notification settings (group passed in as extras) -->
         <activity android:name="Settings$ChannelGroupNotificationSettingsActivity"
                   android:exported="true">
-            <intent-filter android:priority="1">
-                <action android:name="android.settings.CHANNEL_GROUP_NOTIFICATION_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -3228,99 +3223,6 @@
             android:permission="android.permission.DUMP"
             android:enabled="@bool/config_has_help" />
 
-
-        <!-- Activities for moves/gestures suggestions -->
-        <activity
-            android:name=".Settings$DoubleTapPowerSuggestionActivity"
-            android:label="@string/double_tap_power_for_camera_title"
-            android:icon="@drawable/ic_settings_gestures">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.GESTURE" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.dismiss"
-                       android:value="4,8,30" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.gestures.DoubleTapPowerSettings"/>
-            <meta-data android:name="com.android.settings.title"
-                       android:resource="@string/double_tap_power_for_camera_suggestion_title" />
-            <meta-data android:name="com.android.settings.summary"
-                       android:resource="@string/double_tap_power_for_camera_suggestion_summary" />
-        </activity>
-
-        <activity
-            android:name=".Settings$DoubleTwistSuggestionActivity"
-            android:label="@string/double_twist_for_camera_mode_title"
-            android:icon="@drawable/ic_settings_gestures">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.GESTURE" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.dismiss"
-                       android:value="4,8,30" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.gestures.DoubleTwistGestureSettings"/>
-            <meta-data android:name="com.android.settings.title"
-                       android:resource="@string/double_twist_for_camera_suggestion_title" />
-            <meta-data android:name="com.android.settings.summary"
-                       android:resource="@string/double_twist_for_camera_suggestion_summary" />
-        </activity>
-
-        <activity
-            android:name=".Settings$AmbientDisplaySuggestionActivity"
-            android:label="@string/ambient_display_title"
-            android:icon="@drawable/ic_settings_gestures">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.GESTURE" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.dismiss"
-                       android:value="9,13,30" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.gestures.DoubleTapScreenSettings"/>
-            <meta-data android:name="com.android.settings.title"
-                       android:resource="@string/ambient_display_title" />
-            <meta-data android:name="com.android.settings.summary"
-                       android:resource="@string/ambient_display_suggestion_summary" />
-        </activity>
-
-        <activity
-            android:name=".Settings$AmbientDisplayPickupSuggestionActivity"
-            android:label="@string/ambient_display_pickup_title"
-            android:icon="@drawable/ic_settings_gestures">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.GESTURE" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.dismiss"
-                       android:value="9,13,30" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.gestures.PickupGestureSettings"/>
-            <meta-data android:name="com.android.settings.title"
-                       android:resource="@string/ambient_display_pickup_title" />
-            <meta-data android:name="com.android.settings.summary"
-                       android:resource="@string/ambient_display_pickup_suggestion_summary" />
-        </activity>
-
-        <activity
-            android:name=".Settings$SwipeToNotificationSuggestionActivity"
-            android:label="@string/fingerprint_swipe_for_notifications_title"
-            android:icon="@drawable/ic_settings_gestures">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="com.android.settings.suggested.category.GESTURE" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.dismiss"
-                       android:value="9,13,30" />
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.gestures.SwipeToNotificationSettings"/>
-            <meta-data android:name="com.android.settings.title"
-                       android:resource="@string/fingerprint_swipe_for_notifications_suggestion_title" />
-            <meta-data android:name="com.android.settings.summary"
-                       android:resource="@string/fingerprint_swipe_for_notifications_suggestion_summary" />
-        </activity>
-        <!-- End activities for moves/gestures suggestions -->
-
         <activity android:name=".applications.autofill.AutofillPickerActivity"
                 android:excludeFromRecents="true"
                 android:launchMode="singleInstance"
@@ -3358,6 +3260,17 @@
                        android:value="true" />
         </activity>
 
+        <activity android:name="Settings$DirectoryAccessSettingsActivity"
+                android:label="@string/directory_access"
+                android:taskAffinity="">
+            <intent-filter>
+                <action android:name="android.settings.STORAGE_VOLUME_ACCESS_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.applications.manageapplications.ManageApplications" />
+        </activity>
+
         <provider android:name=".slices.SettingsSliceProvider"
                   android:authorities="com.android.settings.slices"
                   android:exported="true">
diff --git a/res/layout/dialog_sim_status.xml b/res/layout/dialog_sim_status.xml
index 66b17d7..66d583b 100644
--- a/res/layout/dialog_sim_status.xml
+++ b/res/layout/dialog_sim_status.xml
@@ -141,5 +141,18 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="@string/device_info_not_available"/>
+
+        <TextView
+            style="@style/device_info_dialog_label"
+            android:id="@+id/esim_id_label"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/status_esim_id"/>
+        <TextView
+            style="@style/device_info_dialog_value"
+            android:id="@+id/esim_id_value"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/device_info_not_available"/>
     </LinearLayout>
 </ScrollView>
diff --git a/res/layout/zen_mode_settings_button.xml b/res/layout/zen_mode_settings_button.xml
index 82989fc..4fe522d7 100644
--- a/res/layout/zen_mode_settings_button.xml
+++ b/res/layout/zen_mode_settings_button.xml
@@ -30,7 +30,7 @@
         android:layout_width="0dp"
         android:layout_weight="1"
         android:layout_height="wrap_content"
-        android:layout_gravity="center"
+        android:layout_gravity="left"
         android:text="@string/zen_mode_button_turn_on"
         android:paddingEnd="8dp" />
 
@@ -40,7 +40,7 @@
         android:layout_width="0dp"
         android:layout_weight="1"
         android:layout_height="wrap_content"
-        android:layout_gravity="center"
+        android:layout_gravity="left"
         android:text="@string/zen_mode_button_turn_off"
         android:paddingEnd="8dp" />
 
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 7ab9afb..cb6f9be 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -266,14 +266,16 @@
         <item>PWD</item>
     </string-array>
 
-   <!-- Wi-Fi AP band settings.  Either 2.4GHz or 5GHz. -->
+   <!-- Wi-Fi AP band settings.  Either Auto, 2.4GHz or 5GHz. -->
    <!-- Note that adding/removing/moving the items will need wifi settings code change. -->
     <string-array name="wifi_ap_band_config_full">
+        <item>@string/wifi_ap_choose_auto</item>
         <item>@string/wifi_ap_choose_2G</item>
         <item>@string/wifi_ap_choose_5G</item>
     </string-array>
 
     <string-array name="wifi_ap_band_config_2G_only">
+        <item>@string/wifi_ap_choose_auto</item>
         <item>@string/wifi_ap_choose_2G</item>
     </string-array>
 
diff --git a/res/values/bools.xml b/res/values/bools.xml
index e4a57ab..ab8a6fd 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -155,4 +155,7 @@
 
     <!-- Whether assist_and_voice_input should be shown or not. -->
     <bool name="config_show_assist_and_voice_input">true</bool>
+
+    <!-- Whether system_update_settings should be shown or not. -->
+    <bool name="config_show_system_update_settings">true</bool>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d4071ed..16ac128 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -106,13 +106,9 @@
     <!-- Dashboard tile image margin start / end -->
     <dimen name="dashboard_tile_image_margin">24dp</dimen>
 
-    <!-- SwitchBar margin start / end -->
-    <dimen name="switchbar_margin_start">16dp</dimen>
-    <dimen name="switchbar_margin_end">16dp</dimen>
-
     <!-- SwitchBar sub settings margin start / end -->
     <dimen name="switchbar_subsettings_margin_start">72dp</dimen>
-    <dimen name="switchbar_subsettings_margin_end">24dp</dimen>
+    <dimen name="switchbar_subsettings_margin_end">16dp</dimen>
 
     <!-- The following two margins need to match, with the caveat that
          the second should be negative. The second one ensures that the icons and text
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3e90522..1fc8e41 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -788,6 +788,10 @@
     <string name="security_enable_widgets_title">Enable widgets</string>
     <!-- Summary for settings checkbox to disable widgets when the setting has been disabled by an installed device admin [CHAR LIMIT=50] -->
     <string name="security_enable_widgets_disabled_summary">Disabled by admin</string>
+    <!-- Text shown for the title of the lockdown option -->
+    <string name="lockdown_settings_title">Show lockdown option</string>
+    <!-- Text shown for the description of the lockdown option -->
+    <string name="lockdown_settings_summary">Display power button option that turns off extended access and fingerprint unlocking.</string>
     <!-- Text shown for summary of owner info setting (if none set) [CHAR LIMIT=40]-->
     <string name="owner_info_settings_summary">None</string>
     <!-- Description of how many characters are used in owner info [CHAR LIMIT=40]-->
@@ -1116,14 +1120,18 @@
 
     <!-- Security Picker --><skip />
 
-    <!-- Title for suggested actions for screen lock -->
-    <string name="suggested_lock_settings_title">Set screen lock</string>
+    <!-- Title for suggested actions for screen lock [CHAR LIMIT=34] -->
+    <string name="suggested_lock_settings_title">Set screen lock for security</string>
 
-    <!-- Summary for suggested actions for screen lock -->
-    <string name="suggested_lock_settings_summary">Protect your device</string>
+    <!-- Summary for suggested actions for screen lock (tablet) -->
+    <string name="suggested_lock_settings_summary" product="tablet">Prevent others from using your tablet</string>
+    <!-- Summary for suggested actions for screen lock (device) -->
+    <string name="suggested_lock_settings_summary" product="device">Prevent others from using your device</string>
+    <!-- Summary for suggested actions for screen lock (phone) -->
+    <string name="suggested_lock_settings_summary" product="default">Prevent others from using your phone</string>
 
-    <!-- Title for suggested actions for settings up a fingerprint lock -->
-    <string name="suggested_fingerprint_lock_settings_title">Use fingerprint</string>
+    <!-- Title for suggested actions for settings up a fingerprint lock [CHAR LIMIT=34] -->
+    <string name="suggested_fingerprint_lock_settings_title">Unlock with fingerprint</string>
 
     <!-- Summary for suggested actions for settings up a fingerprint lock -->
     <string name="suggested_fingerprint_lock_settings_summary">Unlock with your fingerprint</string>
@@ -1941,6 +1949,8 @@
     <string name="wifi_show_password">Show password</string>
     <!-- Label for the RadioGroup to choose wifi ap band -->
     <string name="wifi_ap_band_config">Select AP Band</string>
+    <!-- Label for the radio button to choose wifi ap channel automatically-->
+    <string name="wifi_ap_choose_auto">Auto</string>
     <!-- Label for the radio button to choose wifi ap 2.4 GHz band -->
     <string name="wifi_ap_choose_2G">2.4 GHz Band</string>
     <!-- Label for the radio button to choose wifi ap 5GHz band -->
@@ -2247,7 +2257,7 @@
     <!-- Title of suggestion to turn on wifi calling [CHAR LIMIT=30] -->
     <string name="wifi_calling_suggestion_title">Turn on Wi-Fi Calling</string>
     <!-- Summary of suggestion to turn on wifi calling [CHAR LIMIT=60] -->
-    <string name="wifi_calling_suggestion_summary">Use Wi-Fi instead of mobile network</string>
+    <string name="wifi_calling_suggestion_summary">Extend coverage by calling over Wi-Fi</string>
     <!-- Title of WFC preference item [CHAR LIMIT=30] -->
     <string name="wifi_calling_mode_title">Calling preference</string>
     <!-- Title of WFC preference selection dialog [CHAR LIMIT=30] -->
@@ -2755,6 +2765,8 @@
     <string name="status_latest_area_info">Operator info</string>
     <!-- About phone, status item title. The status of data access.  For example, the value may be "Connected" -->
     <string name="status_data_state">Mobile network state</string>
+    <!-- About phone, status item title. The ID of embedded SIM card. -->
+    <string name="status_esim_id">EID</string>
     <!-- About phone, status item title. The status of whether we have service.  for example, the value may be "In service" -->
     <string name="status_service_state">Service state</string>
     <!-- About phone, status item title. The  current cell tower signal strength -->
@@ -5588,10 +5600,12 @@
     <string name="add_account_label">Add account</string>
     <!-- Label for the state of the work profile [CHAR LIMIT=80] -->
     <string name="managed_profile_not_available_label">Work profile isn\u2019t available yet</string>
-    <!-- Account Settings. The preference title for enabling work mode -->
-    <string name="work_mode_label">Work mode</string>
-    <!-- Account Settings. The preference summary for enabling work mode -->
-    <string name="work_mode_summary">Allow work profile to function, including apps, background sync, and related features</string>
+    <!-- This string is the title of a setting. If a user taps the setting, they can turn their work profile on or off. The work profile is a section of their phone that's managed by their employer. "Work" is an adjective. -->
+    <string name="work_mode_label">Work profile</string>
+    <!-- This string is located under a setting and describes what the setting does. It's letting a user know whether their work profile is on or off, and they can use the setting to turn it on or off. The work profile is a section of their phone that's managed by their employer. "Work" is an adjective.-->
+    <string name="work_mode_on_summary">Managed by your organization</string>
+    <!-- This string is located under a setting and describes what the setting does. It's letting a user know whether their work profile is on or off, and they can use the setting to turn it on or off. The work profile is a section of their phone that's managed by their employer. "Work" is an adjective.-->
+    <string name="work_mode_off_summary">Apps and notifications are off</string>
     <!-- Button label to remove the work profile [CHAR LIMIT=35] -->
     <string name="remove_managed_profile_label">Remove work profile</string>
     <!-- Data synchronization settings screen, title of setting that controls whether background data should be used [CHAR LIMIT=30] -->
@@ -6437,6 +6451,7 @@
     <string name="help_uri_process_stats_summary" translatable="false"></string>
     <string name="help_uri_process_stats_apps" translatable="false"></string>
     <string name="help_uri_private_dns" translatable="false"></string>
+    <string name="help_uri_about_phone_v2" translatable="false"></string>
 
     <!-- User account title [CHAR LIMIT=30] -->
     <string name="user_account_title">Account for content</string>
@@ -6845,6 +6860,9 @@
     <!-- Sound: Title for the Do not Disturb option and associated settings page. [CHAR LIMIT=50]-->
     <string name="zen_mode_settings_title">Do Not Disturb</string>
 
+    <!-- Do not disturb: Title for the Do not Disturb dialog to turn on Do not disturb. [CHAR LIMIT=50]-->
+    <string name="zen_mode_settings_turn_on_dialog_title">Turn on Do Not Disturb</string>
+
     <!-- Do not disturb: Title for the behaviors option and associated settings page. [CHAR LIMIT=30] -->
     <string name="zen_mode_behavior_settings_title">Behavior</string>
 
@@ -6872,11 +6890,11 @@
     <!--  Do not disturb: Title for a specific zen mode automatic rule in settings. [CHAR LIMIT=30] -->
     <string name="zen_mode_automatic_rule_settings_page_title">Automatic rule</string>
 
-    <!--  Do not disturb: Title for the zen mode automation option Suggestion. [CHAR LIMIT=50] -->
-    <string name="zen_mode_automation_suggestion_title">Set Do Not Disturb rules</string>
+    <!--  Do not disturb: Title for the zen mode automation option Suggestion. [CHAR LIMIT=34] -->
+    <string name="zen_mode_automation_suggestion_title">Silence phone at certain times</string>
 
     <!--  Do not disturb: Summary for the zen mode automation option Suggestion. [CHAR LIMIT=NONE] -->
-    <string name="zen_mode_automation_suggestion_summary">Limit sounds &amp; vibrations at certain times</string>
+    <string name="zen_mode_automation_suggestion_summary">Set Do Not Disturb rules</string>
 
     <!--  Do not disturb: Switch toggle to toggle whether to use an automatic dnd rule or not [CHAR LIMIT=40] -->
     <string name="zen_mode_use_automatic_rule">Use rule</string>
@@ -6902,6 +6920,9 @@
     <!--  Do not disturb: Button to add new automatic rule to DND. [CHAR LIMIT=30] -->
     <string name="zen_mode_add">Add</string>
 
+    <!--  Do not disturb: Label for button in enable zen dialog that will turn on zen mode. [CHAR LIMIT=30] -->
+    <string name="zen_mode_enable_dialog_turn_on">Turn on</string>
+
     <!--  Do not disturb: Label for button that will turn on zen mode. [CHAR LIMIT=30] -->
     <string name="zen_mode_button_turn_on">Turn on now</string>
 
@@ -6920,6 +6941,12 @@
     <!-- [CHAR LIMIT=110] Zen mode settings footer: Footer how DND was triggered by an app -->
     <string name="zen_mode_settings_dnd_automatic_rule_app">Do Not Disturb was automatically turned on by an app (<xliff:g id="app_name" example="Android Services">%s</xliff:g>)</string>
 
+    <!--[CHAR LIMIT=40] Zen Interruption level: Priority.  -->
+    <string name="zen_interruption_level_priority">Priority only</string>
+
+    <!-- [CHAR LIMIT=20] Accessibility string for current zen mode and selected exit condition. A template that simply concatenates existing mode string and the current condition description.  -->
+    <string name="zen_mode_and_condition"><xliff:g id="zen_mode" example="Priority interruptions only">%1$s</xliff:g>. <xliff:g id="exit_condition" example="For one hour">%2$s</xliff:g></string>
+
     <!-- Work Sounds: Work sound settings section header.  [CHAR LIMIT=50] -->
     <string name="sound_work_settings">Work profile sounds</string>
 
@@ -8418,7 +8445,7 @@
     <string name="night_display_suggestion_title">Set Night Light schedule</string>
 
     <!--  Night display: Summary for the night display option Suggestion (renamed "Night Light" with title caps). [CHAR LIMIT=NONE] -->
-    <string name="night_display_suggestion_summary">Tint screen amber to help you fall asleep</string>
+    <string name="night_display_suggestion_summary">Automatically tint screen every night</string>
 
     <!-- Title of condition that night display is on (renamed "Night Light" with title caps). [CHAR LIMIT=30] -->
     <string name="condition_night_display_title">Night Light is on</string>
@@ -8840,9 +8867,6 @@
     <!-- Title for settings suggestion for double tap power for camera [CHAR LIMIT=60] -->
     <string name="double_tap_power_for_camera_suggestion_title">Open camera quickly</string>
 
-    <!-- Summary for settings suggestion for double tap power for camera [CHAR LIMIT=60] -->
-    <string name="double_tap_power_for_camera_suggestion_summary">Press power button twice to open camera</string>
-
     <!-- Title text for double twist for camera mode [CHAR LIMIT=60]-->
     <string name="double_twist_for_camera_mode_title">Flip camera</string>
 
@@ -8852,13 +8876,6 @@
     <!-- Title for settings suggestion for double twist for camera [CHAR LIMIT=60] -->
     <string name="double_twist_for_camera_suggestion_title">Take selfies faster</string>
 
-    <!-- Summary for settings suggestion for double twist for camera (phone) [CHAR LIMIT=60] -->
-    <string name="double_twist_for_camera_suggestion_summary" product="default">Double-twist phone for selfie mode</string>
-    <!-- Summary for settings suggestion for double twist for camera (tablet) [CHAR LIMIT=60] -->
-    <string name="double_twist_for_camera_suggestion_summary" product="tablet">Double-twist tablet for selfie mode</string>
-    <!-- Summary for settings suggestion for double twist for camera (device) [CHAR LIMIT=60] -->
-    <string name="double_twist_for_camera_suggestion_summary" product="device">Double-twist device for selfie mode</string>
-
     <!-- Preference and settings suggestion title text for ambient display double tap (phone) [CHAR LIMIT=60]-->
     <string name="ambient_display_title" product="default">Double-tap to check phone</string>
     <!-- Preference and settings suggestion title text for ambient display double tap (tablet) [CHAR LIMIT=60]-->
@@ -8869,9 +8886,6 @@
     <!-- Summary text for ambient display double tap [CHAR LIMIT=NONE]-->
     <string name="ambient_display_summary">To check time, notification icons, and other info, double-tap your screen.</string>
 
-    <!-- Summary for settings suggestion for double tap power for camera [CHAR LIMIT=60] -->
-    <string name="ambient_display_suggestion_summary">Check notifications when screen is off</string>
-
     <!-- Preference and settings suggestion title text for ambient display pick up (phone) [CHAR LIMIT=60]-->
     <string name="ambient_display_pickup_title" product="default">Lift to check phone</string>
     <!-- Preference and settings suggestion title text for ambient display pick up (tablet) [CHAR LIMIT=60]-->
@@ -8886,9 +8900,6 @@
     <!-- Summary text for ambient display (device) [CHAR LIMIT=NONE]-->
     <string name="ambient_display_pickup_summary" product="device">To check time, notification icons, and other info, pick up your device.</string>
 
-    <!-- Summary for settings suggestion for ambient display pick up [CHAR LIMIT=60] -->
-    <string name="ambient_display_pickup_suggestion_summary">Check notifications when screen is off</string>
-
     <!-- Title text for swiping downwards on fingerprint sensor for notifications [CHAR LIMIT=80]-->
     <string name="fingerprint_swipe_for_notifications_title">Swipe fingerprint for notifications</string>
     <!-- Title text for fingerprint gesture preference screen [CHAR LIMIT=25] -->
@@ -8904,9 +8915,6 @@
     <!-- Title for settings suggestion for fingerprint swipe for notifications [CHAR LIMIT=60] -->
     <string name="fingerprint_swipe_for_notifications_suggestion_title">See notifications quickly</string>
 
-    <!-- Summary for settings suggestion for fingerprint swipe for notifications [CHAR LIMIT=60] -->
-    <string name="fingerprint_swipe_for_notifications_suggestion_summary">Swipe down on the fingerprint sensor</string>
-
     <!-- Title text for the assist gesture [CHAR LIMIT=60] DO NOT TRANSLATE -->
     <string name="assist_gesture_title" translatable="false"></string>
 
@@ -9230,15 +9238,15 @@
     <string name="account_confirmation_package"></string>
 
     <!-- Title for the new About Phone screen [CHAR LIMIT=40] -->
-    <string name="me_card_title" product="default">My Phone</string>
+    <string name="my_device_info_title" product="default">My Phone</string>
     <!-- Title for the new About Phone screen [CHAR LIMIT=40] -->
-    <string name="me_card_title" product="tablet">My Tablet</string>
+    <string name="my_device_info_title" product="tablet">My Tablet</string>
     <!-- Title for the new About Phone screen [CHAR LIMIT=40] -->
-    <string name="me_card_title" product="device">My Device</string>
+    <string name="my_device_info_title" product="device">My Device</string>
     <!-- Title for preference showing the primary account on the device [CHAR LIMIT=60]-->
-    <string name="me_card_account_preference_title">Account</string>
+    <string name="my_device_info_account_preference_title">Account</string>
     <!-- Title for preference showing the name of the device. [CHAR LIMIT=60]-->
-    <string name="me_card_device_name_preference_title">Device name</string>
+    <string name="my_device_info_device_name_preference_title">Device name</string>
 
     <!-- Settings item title for automatic Bluetooth on while driving preference [CHAR LIMIT=35] -->
     <string name="bluetooth_on_while_driving_pref">Use Bluetooth when driving</string>
diff --git a/res/xml/managed_profile_settings.xml b/res/xml/managed_profile_settings.xml
index 58fcd88..c283e13 100644
--- a/res/xml/managed_profile_settings.xml
+++ b/res/xml/managed_profile_settings.xml
@@ -20,14 +20,13 @@
 
     <SwitchPreference
         android:key="work_mode"
-        android:summary="@string/work_mode_summary"
-        android:title="@string/work_mode_label"/>
+        android:title="@string/work_mode_label"
+        android:summary="@string/summary_placeholder"/>
 
     <com.android.settingslib.RestrictedSwitchPreference
         android:key="contacts_search"
         android:summary="@string/managed_profile_contact_search_summary"
         android:title="@string/managed_profile_contact_search_title"
-        settings:useAdditionalSummary="true"
-        />
+        settings:useAdditionalSummary="true"/>
 
 </PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/me_card.xml b/res/xml/me_card.xml
deleted file mode 100644
index 2d8c21f..0000000
--- a/res/xml/me_card.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  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.
-  -->
-
-<PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:key="me_card_pref_screen"
-    android:title="@string/me_card_title">
-
-    <com.android.settings.applications.LayoutPreference
-        android:key="me_card_header"
-        android:order="0"
-        android:layout="@layout/settings_entity_header"
-        android:selectable="false"/>
-
-    <!-- Account name -->
-    <Preference
-        android:key="account"
-        android:order="1"
-        android:title="@string/me_card_account_preference_title"
-        android:summary="@string/summary_placeholder"/>
-
-    <!-- Phone number -->
-    <Preference
-        android:key="phone_number"
-        android:order="2"
-        android:title="@string/status_number"
-        android:summary="@string/summary_placeholder"/>
-
-    <!-- Device name -->
-    <Preference
-        android:key="device_name"
-        android:order="3"
-        android:title="@string/me_card_device_name_preference_title"
-        android:summary="@string/summary_placeholder"/>
-
-</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
new file mode 100644
index 0000000..673b2a5
--- /dev/null
+++ b/res/xml/my_device_info.xml
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  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.
+  -->
+
+<PreferenceScreen
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
+    android:key="my_device_info_pref_screen"
+    android:title="@string/my_device_info_title"
+    settings:initialExpandedChildrenCount="4">
+
+    <com.android.settings.applications.LayoutPreference
+        android:key="my_device_info_header"
+        android:order="0"
+        android:layout="@layout/settings_entity_header"
+        android:selectable="false"/>
+
+    <!-- Account name -->
+    <Preference
+        android:key="account"
+        android:order="1"
+        android:title="@string/my_device_info_account_preference_title"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- Phone number -->
+    <Preference
+        android:key="phone_number"
+        android:order="2"
+        android:title="@string/status_number"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- Device name -->
+    <Preference
+        android:key="device_name"
+        android:order="3"
+        android:title="@string/my_device_info_device_name_preference_title"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- SIM status -->
+    <Preference
+        android:key="sim_status"
+        android:order="4"
+        android:title="@string/sim_status_title"
+        settings:keywords="@string/keywords_sim_status"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- Model & hardware -->
+    <Preference
+        android:key="device_model"
+        android:order="21"
+        android:title="@string/hardware_info"
+        settings:keywords="@string/keywords_model_and_hardware"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- IMEI -->
+    <Preference
+        android:key="imei_info"
+        android:order="22"
+        android:title="@string/status_imei"
+        settings:keywords="@string/keywords_imei_info"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- Android version -->
+    <Preference
+        android:key="firmware_version"
+        android:order="32"
+        android:title="@string/firmware_version"
+        settings:keywords="@string/keywords_android_version"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- IMS registration -->
+    <Preference
+        android:key="ims_reg_state"
+        android:order="33"
+        android:title="@string/ims_reg_title"
+        android:summary="@string/summary_placeholder"/>
+
+    <!--IP address -->
+    <Preference
+        android:key="wifi_ip_address"
+        android:order="34"
+        android:title="@string/wifi_ip_address"
+        android:summary="@string/summary_placeholder"
+        settings:allowDividerAbove="true"/>
+
+    <!-- Wi-Fi MAC address -->
+    <Preference
+        android:key="wifi_mac_address"
+        android:order="35"
+        android:title="@string/status_wifi_mac_address"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- Bluetooth address -->
+    <Preference
+        android:key="bt_address"
+        android:order="36"
+        android:title="@string/status_bt_address"
+        android:summary="@string/summary_placeholder"/>
+
+
+    <!-- Legal information -->
+    <Preference
+        android:key="legal_container"
+        android:order="37"
+        android:title="@string/legal_information"
+        android:fragment="com.android.settings.LegalSettings"
+        settings:allowDividerAbove="true"/>
+
+    <!-- Regulatory labels -->
+    <Preference
+        android:key="regulatory_info"
+        android:order="38"
+        android:title="@string/regulatory_labels">
+        <intent android:action="android.settings.SHOW_REGULATORY_INFO"/>
+    </Preference>
+
+    <!-- Safety & regulatory manual -->
+    <Preference
+        android:key="safety_info"
+        android:order="39"
+        android:title="@string/safety_and_regulatory_info">
+        <intent android:action="android.settings.SHOW_SAFETY_AND_REGULATORY_INFO"/>
+    </Preference>
+
+    <!-- Manual -->
+    <Preference
+        android:key="manual"
+        android:order="40"
+        android:title="@string/manual">
+        <intent android:action="android.settings.SHOW_MANUAL"/>
+    </Preference>
+
+    <!-- Feedback on the device -->
+    <Preference
+        android:key="device_feedback"
+        android:order="41"
+        android:title="@string/device_feedback"/>
+
+    <!-- Device FCC equipment id -->
+    <Preference
+        android:key="fcc_equipment_id"
+        android:order="42"
+        android:title="@string/fcc_equipment_id"
+        android:summary="@string/summary_placeholder"/>
+
+    <!-- Build number -->
+    <Preference
+        android:key="build_number"
+        android:order="43"
+        android:title="@string/build_number"
+        android:summary="@string/summary_placeholder"
+        settings:allowDividerAbove="true"/>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/security_lockscreen_settings.xml b/res/xml/security_lockscreen_settings.xml
index 7a45bec..6faedd7 100644
--- a/res/xml/security_lockscreen_settings.xml
+++ b/res/xml/security_lockscreen_settings.xml
@@ -33,6 +33,11 @@
         android:title="@string/owner_info_settings_title"
         android:summary="@string/owner_info_settings_summary" />
 
+    <SwitchPreference
+        android:key="security_setting_lockdown_enabled"
+        android:title="@string/lockdown_settings_title"
+        android:summary="@string/lockdown_settings_summary" />
+
     <PreferenceCategory
         android:key="security_setting_lock_screen_notif_work_header"
         android:title="@string/profile_section_header">
diff --git a/src/com/android/settings/ApnPreference.java b/src/com/android/settings/ApnPreference.java
index 4e89efc..9a6eeaf 100755
--- a/src/com/android/settings/ApnPreference.java
+++ b/src/com/android/settings/ApnPreference.java
@@ -16,6 +16,7 @@
 
 package com.android.settings;
 
+import static android.provider.Telephony.Carriers.CONTENT_URI;
 import static android.provider.Telephony.Carriers.FILTERED_URI;
 
 import android.content.ContentUris;
@@ -36,6 +37,7 @@
 public class ApnPreference extends Preference implements
         CompoundButton.OnCheckedChangeListener, OnClickListener {
     final static String TAG = "ApnPreference";
+    private boolean mDpcEnforced = false;
 
     private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
 
@@ -119,7 +121,8 @@
             Context context = getContext();
             if (context != null) {
                 int pos = Integer.parseInt(getKey());
-                Uri url = ContentUris.withAppendedId(FILTERED_URI, pos);
+                Uri url = ContentUris.withAppendedId(
+                        mDpcEnforced ? FILTERED_URI : CONTENT_URI, pos);
                 Intent editIntent = new Intent(Intent.ACTION_EDIT, url);
                 editIntent.putExtra(ApnSettings.SUB_ID, mSubId);
                 context.startActivity(editIntent);
@@ -138,4 +141,8 @@
     public void setSubId(int subId) {
         mSubId = subId;
     }
+
+    public void setDpcEnforced(boolean enforced) {
+        mDpcEnforced = enforced;
+    }
 }
diff --git a/src/com/android/settings/ApnSettings.java b/src/com/android/settings/ApnSettings.java
index 3628121..2c22a79 100755
--- a/src/com/android/settings/ApnSettings.java
+++ b/src/com/android/settings/ApnSettings.java
@@ -16,6 +16,7 @@
 
 package com.android.settings;
 
+import static android.provider.Telephony.Carriers.CONTENT_URI;
 import static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI;
 import static android.provider.Telephony.Carriers.FILTERED_URI;
 
@@ -291,6 +292,7 @@
 
             mSelectedKey = getSelectedApnKey();
             cursor.moveToFirst();
+            boolean enforced = isDpcApnEnforced();
             while (!cursor.isAfterLast()) {
                 String name = cursor.getString(NAME_INDEX);
                 String apn = cursor.getString(APN_INDEX);
@@ -307,6 +309,7 @@
                 pref.setPersistent(false);
                 pref.setOnPreferenceChangeListener(this);
                 pref.setSubId(subId);
+                pref.setDpcEnforced(enforced);
 
                 boolean selectable = ((type == null) || !type.equals("mms"));
                 pref.setSelectable(selectable);
@@ -398,7 +401,7 @@
     @Override
     public boolean onPreferenceTreeClick(Preference preference) {
         int pos = Integer.parseInt(preference.getKey());
-        Uri url = ContentUris.withAppendedId(FILTERED_URI, pos);
+        Uri url = ContentUris.withAppendedId(isDpcApnEnforced() ? FILTERED_URI : CONTENT_URI, pos);
         startActivity(new Intent(Intent.ACTION_EDIT, url));
         return true;
     }
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index 0e337f6..b7fb694 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -75,7 +75,7 @@
 public class MasterClear extends InstrumentedPreferenceFragment {
     private static final String TAG = "MasterClear";
 
-    private static final int KEYGUARD_REQUEST = 55;
+    @VisibleForTesting static final int KEYGUARD_REQUEST = 55;
     @VisibleForTesting static final int CREDENTIAL_CONFIRM_REQUEST = 56;
 
     private static final String KEY_SHOW_ESIM_RESET_CHECKBOX
@@ -118,11 +118,16 @@
                 request, res.getText(R.string.master_clear_title));
     }
 
+    @VisibleForTesting
+    boolean isValidRequestCode(int requestCode) {
+        return !((requestCode != KEYGUARD_REQUEST) && (requestCode != CREDENTIAL_CONFIRM_REQUEST));
+    }
+
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
 
-        if (requestCode != KEYGUARD_REQUEST || requestCode != CREDENTIAL_CONFIRM_REQUEST) {
+        if (!isValidRequestCode(requestCode)) {
             return;
         }
 
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 4503b64..dcf7ed5 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -16,7 +16,6 @@
 
 package com.android.settings;
 
-import static com.android.settings.core.FeatureFlags.BATTERY_SETTINGS_V2;
 import static com.android.settings.core.FeatureFlags.CONNECTED_DEVICE_V2;
 
 import android.os.Bundle;
@@ -134,16 +133,8 @@
     public static class AppWriteSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AdvancedAppsActivity extends SettingsActivity { /* empty */ }
 
-    public static class ManageExternalSourcesActivity extends SettingsActivity {
-        /* empty */ }
+    public static class ManageExternalSourcesActivity extends SettingsActivity {/* empty */ }
     public static class ManageAppExternalSourcesActivity extends SettingsActivity { /* empty */ }
-    public static class DoubleTapPowerSuggestionActivity extends SettingsActivity { /* empty */ }
-    public static class DoubleTwistSuggestionActivity extends SettingsActivity { /* empty */ }
-    public static class AmbientDisplaySuggestionActivity extends SettingsActivity { /* empty */ }
-    public static class AmbientDisplayPickupSuggestionActivity extends SettingsActivity {
-        /* empty */ }
-    public static class SwipeToNotificationSuggestionActivity extends SettingsActivity {
-        /* empty */ }
     public static class WallpaperSettingsActivity extends SettingsActivity { /* empty */ }
     public static class ManagedProfileSettingsActivity extends SettingsActivity { /* empty */ }
     public static class DeletionHelperActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/accounts/ManagedProfileSettings.java b/src/com/android/settings/accounts/ManagedProfileSettings.java
index 3ea7cf7..0933042 100644
--- a/src/com/android/settings/accounts/ManagedProfileSettings.java
+++ b/src/com/android/settings/accounts/ManagedProfileSettings.java
@@ -104,8 +104,7 @@
 
     private void loadDataAndPopulateUi() {
         if (mWorkModePreference != null) {
-            mWorkModePreference.setChecked(
-                    !mUserManager.isQuietModeEnabled(mManagedUser));
+            updateWorkModePreference();
         }
 
         if (mContactPrefrence != null) {
@@ -124,6 +123,14 @@
         return MetricsProto.MetricsEvent.ACCOUNTS_WORK_PROFILE_SETTINGS;
     }
 
+    private void updateWorkModePreference() {
+        boolean isWorkModeOn = !mUserManager.isQuietModeEnabled(mManagedUser);
+        mWorkModePreference.setChecked(isWorkModeOn);
+        mWorkModePreference.setSummary(isWorkModeOn
+                ? R.string.work_mode_on_summary
+                : R.string.work_mode_off_summary);
+    }
+
 
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
@@ -159,8 +166,7 @@
                     || action.equals(Intent.ACTION_MANAGED_PROFILE_UNAVAILABLE)) {
                 if (intent.getIntExtra(Intent.EXTRA_USER_HANDLE,
                         UserHandle.USER_NULL) == mManagedUser.getIdentifier()) {
-                    mWorkModePreference.setChecked(
-                            !mUserManager.isQuietModeEnabled(mManagedUser));
+                    updateWorkModePreference();
                 }
                 return;
             }
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
index fe19b95..05c1eff 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionFeatureProviderImpl.java
@@ -30,20 +30,10 @@
 
 import com.android.internal.logging.nano.MetricsProto;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.Settings.AmbientDisplayPickupSuggestionActivity;
-import com.android.settings.Settings.AmbientDisplaySuggestionActivity;
-import com.android.settings.Settings.DoubleTapPowerSuggestionActivity;
-import com.android.settings.Settings.DoubleTwistSuggestionActivity;
 import com.android.settings.Settings.NightDisplaySuggestionActivity;
-import com.android.settings.Settings.SwipeToNotificationSuggestionActivity;
 import com.android.settings.core.instrumentation.MetricsFeatureProvider;
 import com.android.settings.fingerprint.FingerprintEnrollSuggestionActivity;
 import com.android.settings.fingerprint.FingerprintSuggestionActivity;
-import com.android.settings.gestures.DoubleTapPowerPreferenceController;
-import com.android.settings.gestures.DoubleTapScreenPreferenceController;
-import com.android.settings.gestures.DoubleTwistPreferenceController;
-import com.android.settings.gestures.PickupGesturePreferenceController;
-import com.android.settings.gestures.SwipeToNotificationPreferenceController;
 import com.android.settings.overlay.FeatureFactory;
 import com.android.settings.password.ScreenLockSuggestionActivity;
 import com.android.settings.support.NewDeviceIntroSuggestionActivity;
@@ -98,21 +88,6 @@
             return hasUsedNightDisplay(context);
         } else if (className.equals(NewDeviceIntroSuggestionActivity.class.getName())) {
             return NewDeviceIntroSuggestionActivity.isSuggestionComplete(context);
-        } else if (className.equals(DoubleTapPowerSuggestionActivity.class.getName())) {
-            return DoubleTapPowerPreferenceController
-                    .isSuggestionComplete(context, getSharedPrefs(context));
-        } else if (className.equals(DoubleTwistSuggestionActivity.class.getName())) {
-            return DoubleTwistPreferenceController
-                    .isSuggestionComplete(context, getSharedPrefs(context));
-        } else if (className.equals(AmbientDisplaySuggestionActivity.class.getName())) {
-            return DoubleTapScreenPreferenceController
-                    .isSuggestionComplete(context, getSharedPrefs(context));
-        } else if (className.equals(AmbientDisplayPickupSuggestionActivity.class.getName())) {
-            return PickupGesturePreferenceController
-                    .isSuggestionComplete(context, getSharedPrefs(context));
-        } else if (className.equals(SwipeToNotificationSuggestionActivity.class.getName())) {
-            return SwipeToNotificationPreferenceController
-                    .isSuggestionComplete(context, getSharedPrefs(context));
         }
         return false;
     }
diff --git a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
index a061f82..2806275 100644
--- a/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SystemUpdatePreferenceController.java
@@ -47,7 +47,8 @@
 
     @Override
     public int getAvailabilityStatus() {
-        return mUm.isAdminUser()
+        return mContext.getResources().getBoolean(R.bool.config_show_system_update_settings)
+                && mUm.isAdminUser()
                 ? AVAILABLE
                 : DISABLED_UNSUPPORTED;
     }
diff --git a/src/com/android/settings/MeCardFragment.java b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
similarity index 61%
rename from src/com/android/settings/MeCardFragment.java
rename to src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
index 9790fd5..a301807 100644
--- a/src/com/android/settings/MeCardFragment.java
+++ b/src/com/android/settings/deviceinfo/aboutphone/MyDeviceInfoFragment.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package com.android.settings;
+package com.android.settings.deviceinfo.aboutphone;
 
 import android.app.Activity;
 import android.app.Fragment;
@@ -23,13 +23,32 @@
 import android.os.Bundle;
 import android.os.UserManager;
 import android.provider.SearchIndexableResource;
+import android.telephony.TelephonyManager;
 import android.view.View;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.Utils;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.deviceinfo.BluetoothAddressPreferenceController;
 import com.android.settings.deviceinfo.BrandedAccountPreferenceController;
+import com.android.settings.deviceinfo.BuildNumberPreferenceController;
+import com.android.settings.deviceinfo.DeviceModelPreferenceController;
+import com.android.settings.deviceinfo.FccEquipmentIdPreferenceController;
+import com.android.settings.deviceinfo.FeedbackPreferenceController;
+import com.android.settings.deviceinfo.ImsStatusPreferenceController;
+import com.android.settings.deviceinfo.IpAddressPreferenceController;
+import com.android.settings.deviceinfo.ManualPreferenceController;
 import com.android.settings.deviceinfo.PhoneNumberPreferenceController;
+import com.android.settings.deviceinfo.RegulatoryInfoPreferenceController;
+import com.android.settings.deviceinfo.SafetyInfoPreferenceController;
+import com.android.settings.deviceinfo.WifiMacAddressPreferenceController;
+import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController;
+import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController;
+import com.android.settings.deviceinfo.simstatus.SimStatusPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settings.search.Indexable;
 import com.android.settings.widget.EntityHeaderController;
@@ -40,10 +59,11 @@
 import java.util.Arrays;
 import java.util.List;
 
-public class MeCardFragment extends DashboardFragment implements Indexable {
+public class MyDeviceInfoFragment extends DashboardFragment {
     private static final String LOG_TAG = "MeCardFragment";
 
-    private static final String KEY_ME_CARD_HEADER = "me_card_header";
+    private static final String KEY_MY_DEVICE_INFO_HEADER = "my_device_info_header";
+    private static final String KEY_LEGAL_CONTAINER = "legal_container";
 
     @Override
     public int getMetricsCategory() {
@@ -68,7 +88,7 @@
 
     @Override
     protected int getPreferenceScreenResId() {
-        return R.xml.me_card;
+        return R.xml.my_device_info;
     }
 
     @Override
@@ -82,6 +102,21 @@
         final List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new PhoneNumberPreferenceController(context));
         controllers.add(new BrandedAccountPreferenceController(context));
+        controllers.add(new SimStatusPreferenceController(context, fragment));
+        controllers.add(new DeviceModelPreferenceController(context, fragment));
+        controllers.add(new ImeiInfoPreferenceController(context, fragment));
+        controllers.add(new FirmwareVersionPreferenceController(context, fragment));
+        controllers.add(new ImsStatusPreferenceController(context, lifecycle));
+        controllers.add(new IpAddressPreferenceController(context, lifecycle));
+        controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
+        controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
+        controllers.add(new RegulatoryInfoPreferenceController(context));
+        controllers.add(new SafetyInfoPreferenceController(context));
+        controllers.add(new ManualPreferenceController(context));
+        controllers.add(new FeedbackPreferenceController(fragment, context));
+        controllers.add(new FccEquipmentIdPreferenceController(context));
+        controllers.add(
+                new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
         // TODO: Add preference controller for getting the device name.
         return controllers;
     }
@@ -89,7 +124,7 @@
     private void initHeader() {
         // TODO: Migrate into its own controller.
         final LayoutPreference headerPreference =
-                (LayoutPreference) getPreferenceScreen().findPreference(KEY_ME_CARD_HEADER);
+                (LayoutPreference) getPreferenceScreen().findPreference(KEY_MY_DEVICE_INFO_HEADER);
         final View appSnippet = headerPreference.findViewById(R.id.entity_header);
         final Activity context = getActivity();
         final Bundle bundle = getArguments();
@@ -123,7 +158,7 @@
                 public List<SearchIndexableResource> getXmlResourcesToIndex(
                         Context context, boolean enabled) {
                     final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.me_card;
+                    sir.xmlResId = R.xml.my_device_info;
                     return Arrays.asList(sir);
                 }
 
@@ -133,5 +168,13 @@
                     return buildPreferenceControllers(context, null /*activity */,
                             null /* fragment */, null /* lifecycle */);
                 }
+
+                @Override
+                public List<String> getNonIndexableKeys(Context context) {
+                    List<String> keys = super.getNonIndexableKeys(context);
+                    // The legal container is duplicated, so we ignore it here.
+                    keys.add(KEY_LEGAL_CONTAINER);
+                    return keys;
+                }
             };
 }
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
index 91440f7..af898d5 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
@@ -26,6 +26,7 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.PersistableBundle;
 import android.os.UserHandle;
@@ -41,10 +42,12 @@
 import android.telephony.TelephonyManager;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
+import android.telephony.euicc.EuiccManager;
 import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.settings.R;
+import com.android.settings.wrapper.EuiccManagerWrapper;
 import com.android.settingslib.DeviceInfoUtils;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -81,6 +84,8 @@
     final static int ICCID_INFO_LABEL_ID = R.id.icc_id_label;
     @VisibleForTesting
     final static int ICCID_INFO_VALUE_ID = R.id.icc_id_value;
+    @VisibleForTesting
+    final static int EID_INFO_VALUE_ID = R.id.esim_id_value;
 
     private final static String CB_AREA_INFO_RECEIVED_ACTION =
             "com.android.cellbroadcastreceiver.CB_AREA_INFO_RECEIVED";
@@ -92,6 +97,7 @@
     private final SubscriptionInfo mSubscriptionInfo;
     private final TelephonyManager mTelephonyManager;
     private final CarrierConfigManager mCarrierConfigManager;
+    private final EuiccManagerWrapper mEuiccManager;
     private final Resources mRes;
     private final Context mContext;
 
@@ -116,7 +122,6 @@
         }
     };
 
-
     private PhoneStateListener mPhoneStateListener;
 
     public SimStatusDialogController(@NonNull SimStatusDialogFragment dialog, Lifecycle lifecycle,
@@ -128,6 +133,7 @@
                 TELEPHONY_SERVICE);
         mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(
                 CARRIER_CONFIG_SERVICE);
+        mEuiccManager = new EuiccManagerWrapper(mContext);
 
         mRes = mContext.getResources();
 
@@ -137,6 +143,8 @@
     }
 
     public void initialize() {
+        updateEid();
+
         if (mSubscriptionInfo == null) {
             return;
         }
@@ -363,6 +371,10 @@
         }
     }
 
+    private void updateEid() {
+        mDialog.setText(EID_INFO_VALUE_ID, mEuiccManager.getEid());
+    }
+
     private SubscriptionInfo getPhoneSubscriptionInfo(int slotId) {
         final List<SubscriptionInfo> subscriptionInfoList = SubscriptionManager.from(
                 mContext).getActiveSubscriptionInfoList();
diff --git a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java
index bdaaa3a..e09a8a3 100644
--- a/src/com/android/settings/fuelgauge/RestrictedAppDetails.java
+++ b/src/com/android/settings/fuelgauge/RestrictedAppDetails.java
@@ -20,11 +20,9 @@
 import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
-import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.support.v14.preference.PreferenceFragment;
-import android.support.v14.preference.SwitchPreference;
 import android.support.v7.preference.CheckBoxPreference;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceGroup;
@@ -36,9 +34,7 @@
 import com.android.settings.SettingsActivity;
 import com.android.settings.Utils;
 import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.fuelgauge.anomaly.Anomaly;
-import com.android.settings.fuelgauge.anomaly.AnomalyDialogFragment;
-import com.android.settings.fuelgauge.anomaly.AnomalyPreference;
+import com.android.settings.widget.AppCheckBoxPreference;
 import com.android.settingslib.core.AbstractPreferenceController;
 
 import java.util.List;
@@ -120,7 +116,7 @@
         final Context context = getPrefContext();
 
         for (int i = 0, size = mPackageOpsList.size(); i < size; i++) {
-            final CheckBoxPreference checkBoxPreference = new CheckBoxPreference(context);
+            final CheckBoxPreference checkBoxPreference = new AppCheckBoxPreference(context);
             final AppOpsManager.PackageOps packageOps = mPackageOpsList.get(i);
             try {
                 final ApplicationInfo applicationInfo = mPackageManager.getApplicationInfo(
@@ -128,6 +124,10 @@
                 checkBoxPreference.setChecked(true);
                 checkBoxPreference.setTitle(mPackageManager.getApplicationLabel(applicationInfo));
                 checkBoxPreference.setKey(packageOps.getPackageName());
+                checkBoxPreference.setIcon(
+                        Utils.getBadgedIcon(mIconDrawableFactory, mPackageManager,
+                                packageOps.getPackageName(),
+                                UserHandle.getUserId(packageOps.getUid())));
                 checkBoxPreference.setOnPreferenceChangeListener((pref, value) -> {
                     // change the toggle
                     final int mode = (Boolean) value ? AppOpsManager.MODE_IGNORED
diff --git a/src/com/android/settings/location/LocationEnabler.java b/src/com/android/settings/location/LocationEnabler.java
index 4dcdac0..28ee213 100644
--- a/src/com/android/settings/location/LocationEnabler.java
+++ b/src/com/android/settings/location/LocationEnabler.java
@@ -34,8 +34,10 @@
 import com.android.settingslib.core.lifecycle.events.OnResume;
 
 import static com.android.settingslib.Utils.updateLocationMode;
+import static com.android.settingslib.Utils.updateLocationEnabled;
 import static com.android.settingslib.RestrictedLockUtils.checkIfRestrictionEnforced;
 
+
 /**
  * A class that listens to location settings change and modifies location settings
  * settings.
@@ -106,6 +108,25 @@
         }
     }
 
+    void setLocationEnabled(boolean enabled) {
+        final int currentMode = Settings.Secure.getInt(mContext.getContentResolver(),
+            Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
+
+        if (isRestricted()) {
+            // Location toggling disabled by user restriction. Read the current location mode to
+            // update the location master switch.
+            if (Log.isLoggable(TAG, Log.INFO)) {
+                Log.i(TAG, "Restricted user, not setting location mode");
+            }
+            if (mListener != null) {
+                mListener.onLocationModeChanged(currentMode, true);
+            }
+            return;
+        }
+        updateLocationEnabled(mContext, enabled, UserHandle.myUserId());
+        refreshLocationMode();
+    }
+
     void setLocationMode(int mode) {
         final int currentMode = Settings.Secure.getInt(mContext.getContentResolver(),
                 Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index d0fca16..85c049d 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -47,15 +47,8 @@
  * <ul>
  *     <li>Platform location controls</li>
  *     <ul>
- *         <li>In switch bar: location master switch. Used to toggle
- *         {@link android.provider.Settings.Secure#LOCATION_MODE} between
- *         {@link android.provider.Settings.Secure#LOCATION_MODE_OFF} and another location mode.
+ *         <li>In switch bar: location master switch. Used to toggle location on and off.
  *         </li>
- *         <li>Mode preference: only available if the master switch is on, selects between
- *         {@link android.provider.Settings.Secure#LOCATION_MODE} of
- *         {@link android.provider.Settings.Secure#LOCATION_MODE_HIGH_ACCURACY},
- *         {@link android.provider.Settings.Secure#LOCATION_MODE_BATTERY_SAVING}, or
- *         {@link android.provider.Settings.Secure#LOCATION_MODE_SENSORS_ONLY}.</li>
  *     </ul>
  *     <li>Recent location requests: automatically populated by {@link RecentLocationApps}</li>
  *     <li>Location services: multi-app settings provided from outside the Android framework. Each
diff --git a/src/com/android/settings/location/LocationSwitchBarController.java b/src/com/android/settings/location/LocationSwitchBarController.java
index 6522dc7..ca1932f 100644
--- a/src/com/android/settings/location/LocationSwitchBarController.java
+++ b/src/com/android/settings/location/LocationSwitchBarController.java
@@ -96,9 +96,6 @@
      */
     @Override
     public void onSwitchChanged(Switch switchView, boolean isChecked) {
-        mLocationEnabler.setLocationMode(isChecked
-                ? android.provider.Settings.Secure.LOCATION_MODE_PREVIOUS
-                : android.provider.Settings.Secure.LOCATION_MODE_OFF);
+        mLocationEnabler.setLocationEnabled(isChecked);
     }
-
 }
diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java
index ef0f40b..333e060 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -176,15 +176,6 @@
             } else {
                 groupCategory.setTitle(group.getName());
                 groupCategory.setKey(group.getId());
-                Bundle groupArgs = new Bundle();
-                groupArgs.putInt(AppInfoBase.ARG_PACKAGE_UID, mUid);
-                groupArgs.putString(AppInfoBase.ARG_PACKAGE_NAME, mPkg);
-                groupArgs.putString(Settings.EXTRA_CHANNEL_GROUP_ID, group.getId());
-                Intent channelIntent = Utils.onBuildStartFragmentIntent(getActivity(),
-                        ChannelGroupNotificationSettings.class.getName(),
-                        groupArgs, null, R.string.notification_group_title,
-                        null, false, getMetricsCategory());
-                groupCategory.setIntent(channelIntent);
                 populateGroupToggle(groupCategory, group);
             }
 
diff --git a/src/com/android/settings/notification/EnableZenModeDialog.java b/src/com/android/settings/notification/EnableZenModeDialog.java
new file mode 100644
index 0000000..f683a21
--- /dev/null
+++ b/src/com/android/settings/notification/EnableZenModeDialog.java
@@ -0,0 +1,467 @@
+package com.android.settings.notification;
+
+/*
+ * 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.
+ */
+
+import static android.util.Log.wtf;
+
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.AlarmManager;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.Settings;
+import android.service.notification.Condition;
+import android.service.notification.ZenModeConfig;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.ScrollView;
+import android.widget.TextView;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.Objects;
+
+public class EnableZenModeDialog extends InstrumentedDialogFragment {
+
+    private static final String TAG = "EnableZenModeDialog";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    private static final int[] MINUTE_BUCKETS = ZenModeConfig.MINUTE_BUCKETS;
+    private static final int MIN_BUCKET_MINUTES = MINUTE_BUCKETS[0];
+    private static final int MAX_BUCKET_MINUTES = MINUTE_BUCKETS[MINUTE_BUCKETS.length - 1];
+    private static final int DEFAULT_BUCKET_INDEX = Arrays.binarySearch(MINUTE_BUCKETS, 60);
+
+    @VisibleForTesting
+    public static final int FOREVER_CONDITION_INDEX = 0;
+    @VisibleForTesting
+    public static final int COUNTDOWN_CONDITION_INDEX = 1;
+    @VisibleForTesting
+    public static final int COUNTDOWN_ALARM_CONDITION_INDEX = 2;
+    @VisibleForTesting
+    protected Activity mActivity;
+
+    private static final int SECONDS_MS = 1000;
+    private static final int MINUTES_MS = 60 * SECONDS_MS;
+
+    @VisibleForTesting
+    protected Uri mForeverId;
+    private int mBucketIndex = -1;
+
+    private AlarmManager mAlarmManager;
+    private int mUserId;
+    private boolean mAttached;
+
+    @VisibleForTesting
+    protected Context mContext;
+
+    private RadioGroup mZenRadioGroup;
+    @VisibleForTesting
+    protected LinearLayout mZenRadioGroupContent;
+    private int MAX_MANUAL_DND_OPTIONS = 3;
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        NotificationManager noMan = (NotificationManager) getContext().
+                getSystemService(Context.NOTIFICATION_SERVICE);
+        mContext = getContext();
+        mForeverId =  Condition.newId(mContext).appendPath("forever").build();
+        mAlarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);
+        mUserId = mContext.getUserId();
+        mAttached = false;
+
+        final AlertDialog.Builder builder = new AlertDialog.Builder(getContext())
+                .setTitle(R.string.zen_mode_settings_turn_on_dialog_title)
+                .setNegativeButton(R.string.cancel, null)
+                .setPositiveButton(R.string.zen_mode_enable_dialog_turn_on,
+                        new DialogInterface.OnClickListener() {
+                            @Override
+                            public void onClick(DialogInterface dialog, int which) {
+                                int checkedId = mZenRadioGroup.getCheckedRadioButtonId();
+                                ConditionTag tag = getConditionTagAt(checkedId);
+
+                                if (isForever(tag.condition)) {
+                                    MetricsLogger.action(getContext(),
+                                            MetricsProto.MetricsEvent.
+                                                    NOTIFICATION_ZEN_MODE_TOGGLE_ON_FOREVER);
+                                } else if (isAlarm(tag.condition)) {
+                                    MetricsLogger.action(getContext(),
+                                            MetricsProto.MetricsEvent.
+                                                    NOTIFICATION_ZEN_MODE_TOGGLE_ON_ALARM);
+                                } else if (isCountdown(tag.condition)) {
+                                    MetricsLogger.action(getContext(),
+                                            MetricsProto.MetricsEvent.
+                                                    NOTIFICATION_ZEN_MODE_TOGGLE_ON_COUNTDOWN);
+                                } else {
+                                    wtf(TAG, "Invalid manual condition: " + tag.condition);
+                                }
+                                // always triggers priority-only dnd with chosen condition
+                                noMan.setZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS,
+                                        getRealConditionId(tag.condition), TAG);
+                            }
+                        });
+
+        View contentView = getContentView();
+        bindConditions(forever());
+        builder.setView(contentView);
+        return builder.create();
+    }
+
+    private void hideAllConditions() {
+        final int N = mZenRadioGroupContent.getChildCount();
+        for (int i = 0; i < N; i++) {
+            mZenRadioGroupContent.getChildAt(i).setVisibility(View.GONE);
+        }
+    }
+
+    protected View getContentView() {
+        if (mActivity == null) {
+            mActivity = getActivity();
+        }
+        final LayoutInflater inflater = mActivity.getLayoutInflater();
+        View contentView = inflater.inflate(R.layout.zen_mode_turn_on_dialog_container, null);
+        ScrollView container = (ScrollView) contentView.findViewById(R.id.container);
+
+        mZenRadioGroup = container.findViewById(R.id.zen_radio_buttons);
+        mZenRadioGroupContent = container.findViewById(R.id.zen_radio_buttons_content);
+
+        for (int i = 0; i < MAX_MANUAL_DND_OPTIONS; i++) {
+            final View radioButton = inflater.inflate(R.layout.zen_mode_radio_button,
+                    mZenRadioGroup, false);
+            mZenRadioGroup.addView(radioButton);
+            radioButton.setId(i);
+
+            final View radioButtonContent = inflater.inflate(R.layout.zen_mode_condition,
+                    mZenRadioGroupContent, false);
+            radioButtonContent.setId(i + MAX_MANUAL_DND_OPTIONS);
+            mZenRadioGroupContent.addView(radioButtonContent);
+        }
+        hideAllConditions();
+        return contentView;
+    }
+
+    @Override
+    public int getMetricsCategory() {
+       return MetricsProto.MetricsEvent.NOTIFICATION_ZEN_MODE_ENABLE_DIALOG;
+    }
+
+    @VisibleForTesting
+    protected void bind(final Condition condition, final View row, final int rowId) {
+        if (condition == null) throw new IllegalArgumentException("condition must not be null");
+        final boolean enabled = condition.state == Condition.STATE_TRUE;
+        final ConditionTag tag = row.getTag() != null ? (ConditionTag) row.getTag() :
+                new ConditionTag();
+        row.setTag(tag);
+        final boolean first = tag.rb == null;
+        if (tag.rb == null) {
+            tag.rb = (RadioButton) mZenRadioGroup.getChildAt(rowId);
+        }
+        tag.condition = condition;
+        final Uri conditionId = getConditionId(tag.condition);
+        if (DEBUG) Log.d(TAG, "bind i=" + mZenRadioGroupContent.indexOfChild(row) + " first="
+                + first + " condition=" + conditionId);
+        tag.rb.setEnabled(enabled);
+        tag.rb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                if (isChecked) {
+                    tag.rb.setChecked(true);
+                    if (DEBUG) Log.d(TAG, "onCheckedChanged " + conditionId);
+                    MetricsLogger.action(mContext,
+                            MetricsProto.MetricsEvent.QS_DND_CONDITION_SELECT);
+                    announceConditionSelection(tag);
+                }
+            }
+        });
+
+        updateUi(tag, row, condition, enabled, rowId, conditionId);
+        row.setVisibility(View.VISIBLE);
+    }
+
+    @VisibleForTesting
+    protected ConditionTag getConditionTagAt(int index) {
+        return (ConditionTag) mZenRadioGroupContent.getChildAt(index).getTag();
+    }
+
+    @VisibleForTesting
+    protected void bindConditions(Condition c) {
+        // forever
+        bind(forever(), mZenRadioGroupContent.getChildAt(FOREVER_CONDITION_INDEX),
+                FOREVER_CONDITION_INDEX);
+        if (c == null) {
+            bindGenericCountdown();
+            bindNextAlarm(getTimeUntilNextAlarmCondition());
+        } else if (isForever(c)) {
+            getConditionTagAt(FOREVER_CONDITION_INDEX).rb.setChecked(true);
+            bindGenericCountdown();
+            bindNextAlarm(getTimeUntilNextAlarmCondition());
+        } else {
+            if (isAlarm(c)) {
+                bindGenericCountdown();
+                bindNextAlarm(c);
+                getConditionTagAt(COUNTDOWN_ALARM_CONDITION_INDEX).rb.setChecked(true);
+            } else if (isCountdown(c)) {
+                bindNextAlarm(getTimeUntilNextAlarmCondition());
+                bind(c, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX),
+                        COUNTDOWN_CONDITION_INDEX);
+                getConditionTagAt(COUNTDOWN_CONDITION_INDEX).rb.setChecked(true);
+            } else {
+                wtf(TAG, "Invalid manual condition: " + c);
+            }
+        }
+    }
+
+    public static Uri getConditionId(Condition condition) {
+        return condition != null ? condition.id : null;
+    }
+
+    public Condition forever() {
+        Uri foreverId = Condition.newId(mContext).appendPath("forever").build();
+        return new Condition(foreverId, foreverSummary(mContext), "", "", 0 /*icon*/,
+                Condition.STATE_TRUE, 0 /*flags*/);
+    }
+
+    public long getNextAlarm() {
+        final AlarmManager.AlarmClockInfo info = mAlarmManager.getNextAlarmClock(mUserId);
+        return info != null ? info.getTriggerTime() : 0;
+    }
+
+    @VisibleForTesting
+    protected boolean isAlarm(Condition c) {
+        return c != null && ZenModeConfig.isValidCountdownToAlarmConditionId(c.id);
+    }
+
+    @VisibleForTesting
+    protected boolean isCountdown(Condition c) {
+        return c != null && ZenModeConfig.isValidCountdownConditionId(c.id);
+    }
+
+    private boolean isForever(Condition c) {
+        return c != null && mForeverId.equals(c.id);
+    }
+
+    private Uri getRealConditionId(Condition condition) {
+        return isForever(condition) ? null : getConditionId(condition);
+    }
+
+    private String foreverSummary(Context context) {
+        return context.getString(com.android.internal.R.string.zen_mode_forever);
+    }
+
+    private static void setToMidnight(Calendar calendar) {
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+    }
+
+    // Returns a time condition if the next alarm is within the next week.
+    @VisibleForTesting
+    protected Condition getTimeUntilNextAlarmCondition() {
+        GregorianCalendar weekRange = new GregorianCalendar();
+        setToMidnight(weekRange);
+        weekRange.add(Calendar.DATE, 6);
+        final long nextAlarmMs = getNextAlarm();
+        if (nextAlarmMs > 0) {
+            GregorianCalendar nextAlarm = new GregorianCalendar();
+            nextAlarm.setTimeInMillis(nextAlarmMs);
+            setToMidnight(nextAlarm);
+
+            if (weekRange.compareTo(nextAlarm) >= 0) {
+                return ZenModeConfig.toNextAlarmCondition(mContext, nextAlarmMs,
+                        ActivityManager.getCurrentUser());
+            }
+        }
+        return null;
+    }
+
+    @VisibleForTesting
+    protected void bindGenericCountdown() {
+        mBucketIndex = DEFAULT_BUCKET_INDEX;
+        Condition countdown = ZenModeConfig.toTimeCondition(mContext,
+                MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
+        if (!mAttached || getConditionTagAt(COUNTDOWN_CONDITION_INDEX).condition == null) {
+            bind(countdown, mZenRadioGroupContent.getChildAt(COUNTDOWN_CONDITION_INDEX),
+                    COUNTDOWN_CONDITION_INDEX);
+        }
+    }
+
+    private void updateUi(ConditionTag tag, View row, Condition condition,
+            boolean enabled, int rowId, Uri conditionId) {
+        if (tag.lines == null) {
+            tag.lines = row.findViewById(android.R.id.content);
+        }
+        if (tag.line1 == null) {
+            tag.line1 = (TextView) row.findViewById(android.R.id.text1);
+        }
+
+        if (tag.line2 == null) {
+            tag.line2 = (TextView) row.findViewById(android.R.id.text2);
+        }
+
+        final String line1 = !TextUtils.isEmpty(condition.line1) ? condition.line1
+                : condition.summary;
+        final String line2 = condition.line2;
+        tag.line1.setText(line1);
+        if (TextUtils.isEmpty(line2)) {
+            tag.line2.setVisibility(View.GONE);
+        } else {
+            tag.line2.setVisibility(View.VISIBLE);
+            tag.line2.setText(line2);
+        }
+        tag.lines.setEnabled(enabled);
+        tag.lines.setAlpha(enabled ? 1 : .4f);
+
+        tag.lines.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                tag.rb.setChecked(true);
+            }
+        });
+
+        // minus button
+        final ImageView button1 = (ImageView) row.findViewById(android.R.id.button1);
+        button1.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                onClickTimeButton(row, tag, false /*down*/, rowId);
+            }
+        });
+
+        // plus button
+        final ImageView button2 = (ImageView) row.findViewById(android.R.id.button2);
+        button2.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                onClickTimeButton(row, tag, true /*up*/, rowId);
+            }
+        });
+
+        final long time = ZenModeConfig.tryParseCountdownConditionId(conditionId);
+        if (rowId == COUNTDOWN_CONDITION_INDEX && time > 0) {
+            button1.setVisibility(View.VISIBLE);
+            button2.setVisibility(View.VISIBLE);
+            if (mBucketIndex > -1) {
+                button1.setEnabled(mBucketIndex > 0);
+                button2.setEnabled(mBucketIndex < MINUTE_BUCKETS.length - 1);
+            } else {
+                final long span = time - System.currentTimeMillis();
+                button1.setEnabled(span > MIN_BUCKET_MINUTES * MINUTES_MS);
+                final Condition maxCondition = ZenModeConfig.toTimeCondition(mContext,
+                        MAX_BUCKET_MINUTES, ActivityManager.getCurrentUser());
+                button2.setEnabled(!Objects.equals(condition.summary, maxCondition.summary));
+            }
+
+            button1.setAlpha(button1.isEnabled() ? 1f : .5f);
+            button2.setAlpha(button2.isEnabled() ? 1f : .5f);
+        } else {
+            button1.setVisibility(View.GONE);
+            button2.setVisibility(View.GONE);
+        }
+    }
+
+    @VisibleForTesting
+    protected void bindNextAlarm(Condition c) {
+        View alarmContent = mZenRadioGroupContent.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX);
+        ConditionTag tag = (ConditionTag) alarmContent.getTag();
+
+        if (c != null && (!mAttached || tag == null || tag.condition == null)) {
+            bind(c, alarmContent, COUNTDOWN_ALARM_CONDITION_INDEX);
+        }
+
+        // hide the alarm radio button if there isn't a "next alarm condition"
+        tag = (ConditionTag) alarmContent.getTag();
+        boolean showAlarm = tag != null && tag.condition != null;
+        mZenRadioGroup.getChildAt(COUNTDOWN_ALARM_CONDITION_INDEX).setVisibility(
+                showAlarm ? View.VISIBLE : View.GONE);
+        alarmContent.setVisibility(showAlarm ? View.VISIBLE : View.GONE);
+    }
+
+    private void onClickTimeButton(View row, ConditionTag tag, boolean up, int rowId) {
+        MetricsLogger.action(mContext, MetricsProto.MetricsEvent.QS_DND_TIME, up);
+        Condition newCondition = null;
+        final int N = MINUTE_BUCKETS.length;
+        if (mBucketIndex == -1) {
+            // not on a known index, search for the next or prev bucket by time
+            final Uri conditionId = getConditionId(tag.condition);
+            final long time = ZenModeConfig.tryParseCountdownConditionId(conditionId);
+            final long now = System.currentTimeMillis();
+            for (int i = 0; i < N; i++) {
+                int j = up ? i : N - 1 - i;
+                final int bucketMinutes = MINUTE_BUCKETS[j];
+                final long bucketTime = now + bucketMinutes * MINUTES_MS;
+                if (up && bucketTime > time || !up && bucketTime < time) {
+                    mBucketIndex = j;
+                    newCondition = ZenModeConfig.toTimeCondition(mContext,
+                            bucketTime, bucketMinutes, ActivityManager.getCurrentUser(),
+                            false /*shortVersion*/);
+                    break;
+                }
+            }
+            if (newCondition == null) {
+                mBucketIndex = DEFAULT_BUCKET_INDEX;
+                newCondition = ZenModeConfig.toTimeCondition(mContext,
+                        MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
+            }
+        } else {
+            // on a known index, simply increment or decrement
+            mBucketIndex = Math.max(0, Math.min(N - 1, mBucketIndex + (up ? 1 : -1)));
+            newCondition = ZenModeConfig.toTimeCondition(mContext,
+                    MINUTE_BUCKETS[mBucketIndex], ActivityManager.getCurrentUser());
+        }
+        bind(newCondition, row, rowId);
+        tag.rb.setChecked(true);
+        announceConditionSelection(tag);
+    }
+
+    private void announceConditionSelection(ConditionTag tag) {
+        // condition will always be priority-only
+        String modeText = mContext.getString(R.string.zen_interruption_level_priority);
+        if (tag.line1 != null) {
+            mZenRadioGroupContent.announceForAccessibility(mContext.getString(
+                    R.string.zen_mode_and_condition, modeText, tag.line1.getText()));
+        }
+    }
+
+    // used as the view tag on condition rows
+    @VisibleForTesting
+    protected static class ConditionTag {
+        public RadioButton rb;
+        public View lines;
+        public TextView line1;
+        public TextView line2;
+        public Condition condition;
+    }
+}
diff --git a/src/com/android/settings/notification/NotificationSettingsBase.java b/src/com/android/settings/notification/NotificationSettingsBase.java
index 2a7e7d5..8b0ed46 100644
--- a/src/com/android/settings/notification/NotificationSettingsBase.java
+++ b/src/com/android/settings/notification/NotificationSettingsBase.java
@@ -168,14 +168,7 @@
         mChannel = (args != null && args.containsKey(Settings.EXTRA_CHANNEL_ID)) ?
                 mBackend.getChannel(mPkg, mUid, args.getString(Settings.EXTRA_CHANNEL_ID)) : null;
 
-        NotificationChannelGroup group =
-                (args != null && args.containsKey(Settings.EXTRA_CHANNEL_GROUP_ID))
-                        ? mBackend.getGroupWithChannels(mPkg, mUid,
-                        args.getString(Settings.EXTRA_CHANNEL_GROUP_ID))
-                        : null;
-        if (group != null) {
-            mChannelGroup = new NotificationChannelGroupWrapper(group);
-        }
+        NotificationChannelGroup group = null;
 
         mSuspendedAppsAdmin = RestrictedLockUtils.checkIfApplicationIsSuspended(
                 mContext, mPkg, mUserId);
diff --git a/src/com/android/settings/notification/ZenModeButtonPreferenceController.java b/src/com/android/settings/notification/ZenModeButtonPreferenceController.java
index f5169f0..da540f4 100644
--- a/src/com/android/settings/notification/ZenModeButtonPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeButtonPreferenceController.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.notification;
 
+import android.app.FragmentManager;
 import android.content.Context;
 import android.provider.Settings;
 import android.support.v7.preference.Preference;
@@ -31,12 +32,16 @@
 public class ZenModeButtonPreferenceController extends AbstractZenModePreferenceController
         implements PreferenceControllerMixin {
 
+    private static final String TAG = "EnableZenModeButton";
     protected static final String KEY = "zen_mode_settings_button_container";
     private Button mZenButtonOn;
     private Button mZenButtonOff;
+    private FragmentManager mFragment;
 
-    public ZenModeButtonPreferenceController(Context context, Lifecycle lifecycle) {
+    public ZenModeButtonPreferenceController(Context context, Lifecycle lifecycle, FragmentManager
+            fragment) {
         super(context, KEY, lifecycle);
+        mFragment = fragment;
     }
 
     @Override
@@ -56,11 +61,8 @@
         if (null == mZenButtonOn) {
             mZenButtonOn = (Button) ((LayoutPreference) preference)
                     .findViewById(R.id.zen_mode_settings_turn_on_button);
-            mZenButtonOn.setOnClickListener(v -> {
-                mMetricsFeatureProvider.action(mContext,
-                        MetricsProto.MetricsEvent.ACTION_ZEN_TOGGLE_DND_BUTTON, true);
-                mBackend.setZenMode(Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
-            });
+            mZenButtonOn.setOnClickListener(v ->
+                    new EnableZenModeDialog().show(mFragment, TAG));
         }
 
         if (null == mZenButtonOff) {
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 1ee20d3..a6145c4 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -17,6 +17,7 @@
 package com.android.settings.notification;
 
 import android.app.AutomaticZenRule;
+import android.app.FragmentManager;
 import android.app.NotificationManager;
 import android.app.NotificationManager.Policy;
 import android.content.Context;
@@ -50,7 +51,7 @@
 
     @Override
     protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
-        return buildPreferenceControllers(context, getLifecycle());
+        return buildPreferenceControllers(context, getLifecycle(), getFragmentManager());
     }
 
     @Override
@@ -59,11 +60,11 @@
     }
 
     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
-            Lifecycle lifecycle) {
+            Lifecycle lifecycle, FragmentManager fragmentManager) {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
         controllers.add(new ZenModeBehaviorPreferenceController(context, lifecycle));
         controllers.add(new ZenModeAutomationPreferenceController(context));
-        controllers.add(new ZenModeButtonPreferenceController(context, lifecycle));
+        controllers.add(new ZenModeButtonPreferenceController(context, lifecycle, fragmentManager));
         controllers.add(new ZenModeSettingsFooterPreferenceController(context, lifecycle));
         return controllers;
     }
@@ -211,7 +212,7 @@
                 @Override
                 public List<AbstractPreferenceController> getPreferenceControllers(Context
                         context) {
-                    return buildPreferenceControllers(context, null);
+                    return buildPreferenceControllers(context, null, null);
                 }
             };
 }
diff --git a/src/com/android/settings/search/SearchIndexableResourcesImpl.java b/src/com/android/settings/search/SearchIndexableResourcesImpl.java
index 4067e6b..034cbd0 100644
--- a/src/com/android/settings/search/SearchIndexableResourcesImpl.java
+++ b/src/com/android/settings/search/SearchIndexableResourcesImpl.java
@@ -21,7 +21,7 @@
 import com.android.settings.DateTimeSettings;
 import com.android.settings.DisplaySettings;
 import com.android.settings.LegalSettings;
-import com.android.settings.MeCardFragment;
+import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment;
 import com.android.settings.accessibility.MagnificationPreferenceFragment;
@@ -174,7 +174,7 @@
         addIndex(ZenModeAutomationSettings.class);
         addIndex(NightDisplaySettings.class);
         addIndex(SmartBatterySettings.class);
-        addIndex(MeCardFragment.class);
+        addIndex(MyDeviceInfoFragment.class);
     }
 
     @Override
diff --git a/src/com/android/settings/security/LockdownButtonPreferenceController.java b/src/com/android/settings/security/LockdownButtonPreferenceController.java
new file mode 100644
index 0000000..8960502
--- /dev/null
+++ b/src/com/android/settings/security/LockdownButtonPreferenceController.java
@@ -0,0 +1,61 @@
+/*
+ * 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.security;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.TwoStatePreference;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.TogglePreferenceController;
+
+public class LockdownButtonPreferenceController extends TogglePreferenceController {
+
+    private static final String KEY_LOCKDOWN_ENALBED = "security_setting_lockdown_enabled";
+
+    private final LockPatternUtils mLockPatternUtils;
+
+    public LockdownButtonPreferenceController(Context context) {
+        super(context, KEY_LOCKDOWN_ENALBED);
+        mLockPatternUtils = new LockPatternUtils(context);
+    }
+
+    @Override
+    public int getAvailabilityStatus() {
+        if (mLockPatternUtils.isSecure(UserHandle.myUserId())) {
+            return BasePreferenceController.AVAILABLE;
+        } else {
+            return BasePreferenceController.DISABLED_FOR_USER;
+        }
+    }
+
+    @Override
+    public boolean isChecked() {
+        return Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0) != 0;
+    }
+
+    @Override
+    public boolean setChecked(boolean isChecked) {
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.LOCKDOWN_IN_POWER_MENU, isChecked ? 1 : 0);
+        return true;
+    }
+}
diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java
index df4ca30..7054181 100644
--- a/src/com/android/settings/security/LockscreenDashboardFragment.java
+++ b/src/com/android/settings/security/LockscreenDashboardFragment.java
@@ -93,6 +93,8 @@
         mOwnerInfoPreferenceController =
                 new OwnerInfoPreferenceController(context, this, lifecycle);
         controllers.add(mOwnerInfoPreferenceController);
+        controllers.add(new LockdownButtonPreferenceController(context));
+
         return controllers;
     }
 
@@ -122,6 +124,7 @@
                             KEY_ADD_USER_FROM_LOCK_SCREEN));
                     controllers.add(new OwnerInfoPreferenceController(
                             context, null /* fragment */, null /* lifecycle */));
+                    controllers.add(new LockdownButtonPreferenceController(context));
                     return controllers;
                 }
 
diff --git a/src/com/android/settings/widget/AppCheckBoxPreference.java b/src/com/android/settings/widget/AppCheckBoxPreference.java
new file mode 100644
index 0000000..9cb1d78
--- /dev/null
+++ b/src/com/android/settings/widget/AppCheckBoxPreference.java
@@ -0,0 +1,38 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.support.v7.preference.CheckBoxPreference;
+import android.util.AttributeSet;
+
+import com.android.settings.R;
+
+/**
+ * {@link CheckBoxPreference} that used only to display app
+ */
+public class AppCheckBoxPreference extends CheckBoxPreference {
+    public AppCheckBoxPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setLayoutResource(R.layout.preference_app);
+    }
+
+    public AppCheckBoxPreference(Context context) {
+        super(context);
+        setLayoutResource(R.layout.preference_app);
+    }
+}
diff --git a/src/com/android/settings/widget/SettingsAppWidgetProvider.java b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
index 7dacaf5..5ccfc1b 100644
--- a/src/com/android/settings/widget/SettingsAppWidgetProvider.java
+++ b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.widget;
 
+import android.app.ActivityManager;
 import android.app.PendingIntent;
 import android.appwidget.AppWidgetManager;
 import android.appwidget.AppWidgetProvider;
@@ -33,10 +34,12 @@
 import android.os.Handler;
 import android.os.IPowerManager;
 import android.os.PowerManager;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserManager;
 import android.provider.Settings;
+import android.provider.Settings.Secure;
 import android.util.Log;
 import android.widget.RemoteViews;
 
@@ -561,27 +564,14 @@
                     final UserManager um =
                             (UserManager) context.getSystemService(Context.USER_SERVICE);
                     if (!um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) {
-                        int currentMode = Settings.Secure.getInt(resolver,
-                                Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
-                        int mode = Settings.Secure.LOCATION_MODE_HIGH_ACCURACY;
-                        switch (currentMode) {
-                            case Settings.Secure.LOCATION_MODE_HIGH_ACCURACY:
-                                mode = Settings.Secure.LOCATION_MODE_BATTERY_SAVING;
-                                break;
-                            case Settings.Secure.LOCATION_MODE_BATTERY_SAVING:
-                                mode = Settings.Secure.LOCATION_MODE_HIGH_ACCURACY;
-                                break;
-                            case Settings.Secure.LOCATION_MODE_SENSORS_ONLY:
-                                mode = Settings.Secure.LOCATION_MODE_OFF;
-                                break;
-                            case Settings.Secure.LOCATION_MODE_OFF:
-                                mode = Settings.Secure.LOCATION_MODE_PREVIOUS;
-                                break;
-                        }
-                        Settings.Secure.putInt(resolver, Settings.Secure.LOCATION_MODE, mode);
-                        return mode != Settings.Secure.LOCATION_MODE_OFF;
+                        LocationManager lm =
+                                (LocationManager) context.getSystemService(
+                                        Context.LOCATION_SERVICE);
+                        boolean currentLocationEnabled = lm.isLocationEnabled();
+                        lm.setLocationEnabledForUser(
+                                !currentLocationEnabled, Process.myUserHandle());
+                        return lm.isLocationEnabled();
                     }
-
                     return getActualState(context) == STATE_ENABLED;
                 }
 
diff --git a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
index 1e299ab..4c47a0d 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceController.java
@@ -18,6 +18,7 @@
 
 import static android.net.wifi.WifiConfiguration.AP_BAND_2GHZ;
 import static android.net.wifi.WifiConfiguration.AP_BAND_5GHZ;
+import static android.net.wifi.WifiConfiguration.AP_BAND_ANY;
 
 import android.content.Context;
 import android.net.wifi.WifiConfiguration;
@@ -32,7 +33,8 @@
     private static final String TAG = "WifiTetherApBandPref";
     private static final String PREF_KEY = "wifi_tether_network_ap_band";
     private static final String[] BAND_VALUES =
-            {String.valueOf(AP_BAND_2GHZ), String.valueOf(AP_BAND_5GHZ)};
+            {String.valueOf(AP_BAND_ANY), String.valueOf(AP_BAND_2GHZ),
+                    String.valueOf(AP_BAND_5GHZ)};
 
     private final String[] mBandEntries;
     private int mBandIndex;
@@ -65,7 +67,7 @@
         } else {
             preference.setEntries(mBandEntries);
             preference.setEntryValues(BAND_VALUES);
-            preference.setSummary(mBandEntries[mBandIndex]);
+            preference.setSummary(mBandEntries[mBandIndex + 1]);
             preference.setValue(String.valueOf(mBandIndex));
         }
     }
@@ -78,7 +80,8 @@
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         mBandIndex = Integer.parseInt((String) newValue);
-        preference.setSummary(mBandEntries[mBandIndex]);
+        Log.d(TAG, "Band preference changed, updating band index to " + mBandIndex);
+        preference.setSummary(mBandEntries[mBandIndex + 1]);
         mListener.onTetherConfigUpdated();
         return true;
     }
diff --git a/src/com/android/settings/wrapper/EuiccManagerWrapper.java b/src/com/android/settings/wrapper/EuiccManagerWrapper.java
new file mode 100644
index 0000000..2a51526
--- /dev/null
+++ b/src/com/android/settings/wrapper/EuiccManagerWrapper.java
@@ -0,0 +1,49 @@
+/*
+ * 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.wrapper;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.telephony.euicc.EuiccManager;
+
+/**
+ * This class replicates a subset of the {@link android.telephony.euicc.EuiccManager}.
+ * The interface exists so that we can use a thin wrapper around the EuiccManager in
+ * production code and a mock in tests.
+ */
+public class EuiccManagerWrapper {
+
+    private final EuiccManager mEuiccManager;
+
+    public EuiccManagerWrapper(Context context) {
+        mEuiccManager = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE);
+    }
+
+    /**
+     * Returns the EID identifying the eUICC hardware.
+     *
+     * <p>Requires that the calling app has carrier privileges on the active subscription on the
+     * eUICC.
+     *
+     * @return the EID. May be null if {@link EuiccManager#isEnabled()} is false or the eUICC is not
+     * ready.
+     */
+    @Nullable
+    public String getEid() {
+        return mEuiccManager.getEid();
+    }
+}
diff --git a/tests/robotests/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml
index f437f96..e755f27 100644
--- a/tests/robotests/res/values-mcc999/config.xml
+++ b/tests/robotests/res/values-mcc999/config.xml
@@ -20,6 +20,7 @@
     <bool name="config_show_camera_laser_sensor">false</bool>
     <bool name="config_show_connectivity_monitor">false</bool>
     <bool name="config_display_recent_apps">false</bool>
+    <bool name="config_additional_system_update_setting_enable">true</bool>
     <bool name="config_show_wifi_settings">false</bool>
     <bool name="config_show_toggle_airplane">false</bool>
     <bool name="config_show_high_power_apps">false</bool>
@@ -54,5 +55,6 @@
     <bool name="config_show_vibrate_input_devices">false</bool>
     <bool name="config_show_color_correction_preference">false</bool>
     <bool name="config_show_color_inversion_preference">false</bool>
+    <bool name="config_show_system_update_settings">false</bool>
     <bool name="config_wifi_support_connected_mac_randomization">false</bool>
 </resources>
diff --git a/tests/robotests/src/com/android/settings/MasterClearTest.java b/tests/robotests/src/com/android/settings/MasterClearTest.java
index ac753c1..9bf3310 100644
--- a/tests/robotests/src/com/android/settings/MasterClearTest.java
+++ b/tests/robotests/src/com/android/settings/MasterClearTest.java
@@ -270,6 +270,13 @@
         assertThat(mMasterClear.tryShowAccountConfirmation()).isTrue();
     }
 
+    @Test
+    public void testIsValidRequestCode() {
+        assertThat(mMasterClear.isValidRequestCode(MasterClear.KEYGUARD_REQUEST)).isTrue();
+        assertThat(mMasterClear.isValidRequestCode(MasterClear.CREDENTIAL_CONFIRM_REQUEST)).isTrue();
+        assertThat(mMasterClear.isValidRequestCode(0)).isFalse();
+    }
+
     private void initScrollView(int height, int scrollY, int childBottom) {
         when(mScrollView.getHeight()).thenReturn(height);
         when(mScrollView.getScrollY()).thenReturn(scrollY);
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceControllerTest.java
new file mode 100644
index 0000000..e5708ba
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/AdditionalSystemUpdatePreferenceControllerTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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.deviceinfo;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AdditionalSystemUpdatePreferenceControllerTest {
+
+    private Context mContext;
+    private AdditionalSystemUpdatePreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mContext = RuntimeEnvironment.application;
+        mController = new AdditionalSystemUpdatePreferenceController(mContext);
+    }
+
+    @Test
+    public void displayPrefs_ifNotAvailable_shouldNotDisplay() {
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    @Config(qualifiers = "mcc999")
+    public void displayPrefs_ifAvailable_shouldDisplay() {
+        assertThat(mController.isAvailable()).isTrue();
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java
new file mode 100644
index 0000000..36f0662
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/MyDeviceInfoFragmentTest.java
@@ -0,0 +1,100 @@
+/*
+ * 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.deviceinfo;
+
+import static com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+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.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+import android.support.v7.preference.PreferenceScreen;
+import android.telephony.TelephonyManager;
+
+import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
+import com.android.settings.testutils.shadow.ShadowUserManager;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(
+        manifest = TestConfig.MANIFEST_PATH,
+        sdk = TestConfig.SDK_VERSION,
+        shadows = {ShadowConnectivityManager.class, ShadowUserManager.class}
+)
+public class MyDeviceInfoFragmentTest {
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private PreferenceScreen mScreen;
+    @Mock
+    private TelephonyManager mTelephonyManager;
+
+    private Context mContext;
+    private MyDeviceInfoFragment mSettings;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        FakeFeatureFactory.setupForTest();
+        mContext = RuntimeEnvironment.application;
+        mSettings = spy(new MyDeviceInfoFragment());
+
+        when(mSettings.getActivity()).thenReturn(mActivity);
+        when(mSettings.getContext()).thenReturn(mContext);
+        when(mActivity.getTheme()).thenReturn(mContext.getTheme());
+        when(mActivity.getResources()).thenReturn(mContext.getResources());
+        doNothing().when(mSettings).onCreatePreferences(any(), any());
+
+        doReturn(mScreen).when(mSettings).getPreferenceScreen();
+        when(mSettings.getPreferenceScreen()).thenReturn(mScreen);
+        ShadowApplication.getInstance().setSystemService(Context.TELEPHONY_SERVICE,
+                mTelephonyManager);
+    }
+
+    @Test
+    @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class,
+            SettingsShadowSystemProperties.class})
+    public void onCreate_fromSearch_shouldNotOverrideInitialExpandedCount() {
+        final Bundle args = new Bundle();
+        args.putString(EXTRA_FRAGMENT_ARG_KEY, "search_key");
+        mSettings.setArguments(args);
+
+        mSettings.onCreate(null /* icicle */);
+
+        verify(mScreen).setInitialExpandedChildrenCount(Integer.MAX_VALUE);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java
index 1fd5430..b5b84da 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/SystemUpdatePreferenceControllerTest.java
@@ -16,7 +16,9 @@
 package com.android.settings.deviceinfo;
 
 import static com.google.common.truth.Truth.assertThat;
+
 import static org.mockito.Answers.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -28,6 +30,7 @@
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowUserManager;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -36,29 +39,32 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(
+        manifest = TestConfig.MANIFEST_PATH,
+        sdk = TestConfig.SDK_VERSION,
+        shadows = {
+                ShadowUserManager.class
+        })
 public class SystemUpdatePreferenceControllerTest {
 
-    @Mock(answer = RETURNS_DEEP_STUBS)
-    private Context mContext;
-    @Mock
-    private UserManager mUserManager;
     @Mock
     private PreferenceScreen mScreen;
 
+    private Context mContext;
     private SystemUpdatePreferenceController mController;
     private Preference mPreference;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
 
-        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
         mController = new SystemUpdatePreferenceController(mContext);
         mPreference = new Preference(RuntimeEnvironment.application);
         mPreference.setKey(mController.getPreferenceKey());
@@ -66,12 +72,9 @@
     }
 
     @Test
-    public void updateNonIndexable_bothAvailable_shouldNotUpdate() {
+    public void updateNonIndexable_ifAvailable_shouldNotUpdate() {
         final List<String> keys = new ArrayList<>();
-        when(mUserManager.isAdminUser()).thenReturn(true);
-        when(mContext.getResources().getBoolean(
-                R.bool.config_additional_system_update_setting_enable))
-                .thenReturn(true);
+        ShadowUserManager.getShadow().setIsAdminUser(true);
 
         mController.updateNonIndexableKeys(keys);
 
@@ -79,7 +82,8 @@
     }
 
     @Test
-    public void updateNonIndexable_nothingAvailable_shouldUpdateWith2Prefs() {
+    public void updateNonIndexable_ifNotAvailable_shouldUpdate() {
+        ShadowUserManager.getShadow().setIsAdminUser(false);
         final List<String> keys = new ArrayList<>();
 
         mController.updateNonIndexableKeys(keys);
@@ -88,31 +92,37 @@
     }
 
     @Test
-    public void displayPrefs_nothingAvailable_shouldNotDisplay() {
+    public void displayPrefs_ifVisible_butNotAdminUser_shouldNotDisplay() {
+        ShadowUserManager.getShadow().setIsAdminUser(false);
         mController.displayPreference(mScreen);
 
         assertThat(mPreference.isVisible()).isFalse();
     }
 
     @Test
-    public void updateState_shouldSetToAndroidVersion() {
-        mController = new SystemUpdatePreferenceController(RuntimeEnvironment.application);
+    @Config(qualifiers = "mcc999")
+    public void displayPrefs_ifAdminUser_butNotVisible_shouldNotDisplay() {
+        ShadowUserManager.getShadow().setIsAdminUser(true);
+        mController.displayPreference(mScreen);
 
+        assertThat(mPreference.isVisible()).isFalse();
+    }
+
+    @Test
+    public void displayPrefs_ifAvailable_shouldDisplay() {
+        ShadowUserManager.getShadow().setIsAdminUser(true);
+
+        mController.displayPreference(mScreen);
+
+        assertThat(mPreference.isVisible()).isTrue();
+    }
+
+    @Test
+    public void updateState_shouldSetToAndroidVersion() {
         mController.updateState(mPreference);
 
         assertThat(mPreference.getSummary())
                 .isEqualTo(RuntimeEnvironment.application.getString(R.string.about_summary,
                         Build.VERSION.RELEASE));
     }
-
-    @Test
-    public void displayPrefs_oneAvailable_shouldDisplayOne() {
-        when(mContext.getResources().getBoolean(
-                R.bool.config_additional_system_update_setting_enable))
-                .thenReturn(true);
-
-        mController.displayPreference(mScreen);
-
-        assertThat(mPreference.isVisible()).isFalse();
-    }
-}
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
index cea4580..b10de63 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java
@@ -18,6 +18,7 @@
 
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController
         .CELLULAR_NETWORK_TYPE_VALUE_ID;
+import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.EID_INFO_VALUE_ID;
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController
         .ICCID_INFO_LABEL_ID;
 import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController
@@ -60,6 +61,7 @@
 import com.android.settings.R;
 import com.android.settings.TestConfig;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.wrapper.EuiccManagerWrapper;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
@@ -91,7 +93,8 @@
     private CarrierConfigManager mCarrierConfigManager;
     @Mock
     private PersistableBundle mPersistableBundle;
-
+    @Mock
+    private EuiccManagerWrapper mEuiccManager;
 
     private SimStatusDialogController mController;
     private Context mContext;
@@ -107,15 +110,18 @@
         mLifecycle = new Lifecycle(mLifecycleOwner);
         mController = spy(
                 new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */));
+        mEuiccManager = spy(new EuiccManagerWrapper(mContext));
         doReturn(mServiceState).when(mController).getCurrentServiceState();
         doReturn(0).when(mController).getDbm(any());
         doReturn(0).when(mController).getAsuLevel(any());
         doReturn(mPhoneStateListener).when(mController).getPhoneStateListener();
         doReturn("").when(mController).getPhoneNumber();
         doReturn(mSignalStrength).when(mController).getSignalStrength();
+        doReturn("").when(mEuiccManager).getEid();
         ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
         ReflectionHelpers.setField(mController, "mCarrierConfigManager", mCarrierConfigManager);
         ReflectionHelpers.setField(mController, "mSubscriptionInfo", mSubscriptionInfo);
+        ReflectionHelpers.setField(mController, "mEuiccManager", mEuiccManager);
         when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mPersistableBundle);
     }
 
@@ -273,4 +279,14 @@
 
         verify(mDialog).setText(ICCID_INFO_VALUE_ID, iccid);
     }
+
+    @Test
+    public void initialize_showEid_shouldSetEidToSetting() {
+        final String eid = "12351351231241";
+        doReturn(eid).when(mEuiccManager).getEid();
+
+        mController.initialize();
+
+        verify(mDialog).setText(EID_INFO_VALUE_ID, eid);
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
index a9de061..521ead4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedAppDetailsTest.java
@@ -28,6 +28,7 @@
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceCategory;
 import android.support.v7.preference.PreferenceManager;
+import android.util.IconDrawableFactory;
 
 import com.android.settings.TestConfig;
 
@@ -53,6 +54,8 @@
     private PackageManager mPackageManager;
     @Mock
     private ApplicationInfo mApplicationInfo;
+    @Mock
+    private IconDrawableFactory mIconDrawableFactory;
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private PreferenceManager mPreferenceManager;
     private RestrictedAppDetails mFragment;
@@ -68,6 +71,7 @@
         doReturn(mPreferenceManager).when(mFragment).getPreferenceManager();
         doReturn(mContext).when(mPreferenceManager).getContext();
         mFragment.mPackageManager = mPackageManager;
+        mFragment.mIconDrawableFactory = mIconDrawableFactory;
         mFragment.mPackageOpsList = new ArrayList<>();
         mFragment.mPackageOpsList.add(
                 new AppOpsManager.PackageOps(PACKAGE_NAME, UID, null /* entries */));
diff --git a/tests/robotests/src/com/android/settings/location/LocationEnablerTest.java b/tests/robotests/src/com/android/settings/location/LocationEnablerTest.java
index f456f41..8cc92cd 100644
--- a/tests/robotests/src/com/android/settings/location/LocationEnablerTest.java
+++ b/tests/robotests/src/com/android/settings/location/LocationEnablerTest.java
@@ -43,6 +43,7 @@
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settings.testutils.shadow.ShadowSecureSettings;
 import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.wrapper.LocationManagerWrapper;
 import java.util.ArrayList;
 import java.util.List;
 import org.junit.Before;
@@ -53,11 +54,15 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
 
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(manifest = TestConfig.MANIFEST_PATH,
         sdk = TestConfig.SDK_VERSION,
-        shadows = {ShadowSecureSettings.class})
+        shadows = {
+            ShadowSecureSettings.class,
+            LocationEnablerTest.ShadowLocationManagerWrapper.class})
 public class LocationEnablerTest {
 
     @Mock
@@ -124,7 +129,7 @@
     }
 
     @Test
-    public void isEnabled_locationONotRestricted_shouldReturnTrue() {
+    public void isEnabled_locationNotRestricted_shouldReturnTrue() {
         when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
 
         assertThat(mEnabler.isEnabled(Settings.Secure.LOCATION_MODE_BATTERY_SAVING)).isTrue();
@@ -178,14 +183,35 @@
         when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
         Settings.Secure.putInt(mContext.getContentResolver(),
                 Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_BATTERY_SAVING);
-
         mEnabler.setLocationMode(Settings.Secure.LOCATION_MODE_HIGH_ACCURACY);
 
         verify(mContext).sendBroadcastAsUser(
                 argThat(actionMatches(LocationManager.MODE_CHANGING_ACTION)),
                 eq(UserHandle.of(ActivityManager.getCurrentUser())),
                 eq(WRITE_SECURE_SETTINGS));
+    }
 
+    @Test
+    public void setLocationEnabled_notRestricted_shouldRefreshLocation() {
+        when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
+        Settings.Secure.putInt(mContext.getContentResolver(),
+            Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
+        mEnabler.setLocationEnabled(true);
+
+        verify(mEnabler).refreshLocationMode();
+    }
+
+    @Test
+    public void setLocationEnabled_notRestricted_shouldBroadcastUpdate() {
+        when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
+        Settings.Secure.putInt(mContext.getContentResolver(),
+            Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
+        mEnabler.setLocationEnabled(true);
+
+        verify(mContext).sendBroadcastAsUser(
+            argThat(actionMatches(LocationManager.MODE_CHANGING_ACTION)),
+            eq(UserHandle.of(ActivityManager.getCurrentUser())),
+            eq(WRITE_SECURE_SETTINGS));
     }
 
     @Test
@@ -241,5 +267,12 @@
         return intent -> TextUtils.equals(expected, intent.getAction());
     }
 
+    @Implements(value = LocationManagerWrapper.class)
+    public static class ShadowLocationManagerWrapper {
 
+        @Implementation
+        public void setLocationEnabledForUser(boolean enabled, UserHandle userHandle) {
+            // Do nothing
+        }
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/location/LocationSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/location/LocationSwitchBarControllerTest.java
index 6d824ac..4410d6f 100644
--- a/tests/robotests/src/com/android/settings/location/LocationSwitchBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/LocationSwitchBarControllerTest.java
@@ -88,18 +88,17 @@
     }
 
     @Test
-    public void onSwitchChanged_switchChecked_shouldSetPreviousLocationMode() {
+    public void onSwitchChanged_switchChecked_shouldSetLocationEnabled() {
         mController.onSwitchChanged(mSwitch, true);
 
-        verify(mEnabler).setLocationMode(
-                android.provider.Settings.Secure.LOCATION_MODE_PREVIOUS);
+        verify(mEnabler).setLocationEnabled(true);
     }
 
     @Test
-    public void onSwitchChanged_switchUnchecked_shouldSetLocationModeOff() {
+    public void onSwitchChanged_switchUnchecked_shouldSetLocationDisabled() {
         mController.onSwitchChanged(mSwitch, false);
 
-        verify(mEnabler).setLocationMode(android.provider.Settings.Secure.LOCATION_MODE_OFF);
+        verify(mEnabler).setLocationEnabled(false);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/notification/EnableZenModeDialogTest.java b/tests/robotests/src/com/android/settings/notification/EnableZenModeDialogTest.java
new file mode 100644
index 0000000..8b5ef79
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/EnableZenModeDialogTest.java
@@ -0,0 +1,152 @@
+/*
+ * 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.notification;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.Context;
+import android.net.Uri;
+import android.service.notification.Condition;
+import android.view.LayoutInflater;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class EnableZenModeDialogTest {
+    private EnableZenModeDialog mController;
+
+    @Mock
+    private Context mContext;
+    @Mock
+    private Activity mActivity;
+    @Mock
+    private Fragment mFragment;
+
+    private Context mShadowContext;
+    private LayoutInflater mLayoutInflater;
+    private Condition mCountdownCondition;
+    private Condition mAlarmCondition;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mShadowContext = RuntimeEnvironment.application;
+        when(mActivity.getApplicationContext()).thenReturn(mShadowContext);
+        when(mContext.getApplicationContext()).thenReturn(mContext);
+        when(mFragment.getContext()).thenReturn(mShadowContext);
+        mLayoutInflater = LayoutInflater.from(mShadowContext);
+        when(mActivity.getLayoutInflater()).thenReturn(mLayoutInflater);
+
+        mController = spy(new EnableZenModeDialog());
+        mController.mContext = mContext;
+        mController.mActivity = mActivity;
+        mController.mForeverId =  Condition.newId(mContext).appendPath("forever").build();
+        when(mContext.getString(com.android.internal.R.string.zen_mode_forever))
+                .thenReturn("testSummary");
+        mController.getContentView();
+
+        // these methods use static calls to ZenModeConfig which would normally fail in robotests,
+        // so instead do nothing:
+        doNothing().when(mController).bindGenericCountdown();
+        doReturn(null).when(mController).getTimeUntilNextAlarmCondition();
+        doNothing().when(mController).bindNextAlarm(any());
+
+        // as a result of doing nothing above, must bind manually:
+        Uri alarm =  Condition.newId(mContext).appendPath("alarm").build();
+        mAlarmCondition = new Condition(alarm, "alarm", "", "", 0, 0, 0);
+        Uri countdown =  Condition.newId(mContext).appendPath("countdown").build();
+        mCountdownCondition = new Condition(countdown, "countdown", "", "", 0, 0, 0);
+        mController.bind(mCountdownCondition,
+                mController.mZenRadioGroupContent.getChildAt(
+                EnableZenModeDialog.COUNTDOWN_CONDITION_INDEX),
+                EnableZenModeDialog.COUNTDOWN_CONDITION_INDEX);
+        mController.bind(mAlarmCondition,
+                mController.mZenRadioGroupContent.getChildAt(
+                EnableZenModeDialog.COUNTDOWN_ALARM_CONDITION_INDEX),
+                EnableZenModeDialog.COUNTDOWN_ALARM_CONDITION_INDEX);
+    }
+
+    @Test
+    public void testForeverChecked() {
+        mController.bindConditions(mController.forever());
+
+        assertTrue(mController.getConditionTagAt(EnableZenModeDialog.FOREVER_CONDITION_INDEX).rb
+                .isChecked());
+        assertFalse(mController.getConditionTagAt(EnableZenModeDialog.COUNTDOWN_CONDITION_INDEX).rb
+                .isChecked());
+        assertFalse(mController.getConditionTagAt(
+                EnableZenModeDialog.COUNTDOWN_ALARM_CONDITION_INDEX).rb.isChecked());
+    }
+
+    @Test
+    public void testNoneChecked() {
+        mController.bindConditions(null);
+        assertFalse(mController.getConditionTagAt(EnableZenModeDialog.FOREVER_CONDITION_INDEX).rb
+                .isChecked());
+        assertFalse(mController.getConditionTagAt(EnableZenModeDialog.COUNTDOWN_CONDITION_INDEX).rb
+                .isChecked());
+        assertFalse(mController.getConditionTagAt(
+                EnableZenModeDialog.COUNTDOWN_ALARM_CONDITION_INDEX).rb.isChecked());
+    }
+
+    @Test
+    public void testAlarmChecked() {
+        doReturn(false).when(mController).isCountdown(mAlarmCondition);
+        doReturn(true).when(mController).isAlarm(mAlarmCondition);
+
+        mController.bindConditions(mAlarmCondition);
+        assertFalse(mController.getConditionTagAt(EnableZenModeDialog.FOREVER_CONDITION_INDEX).rb
+                .isChecked());
+        assertFalse(mController.getConditionTagAt(EnableZenModeDialog.COUNTDOWN_CONDITION_INDEX).rb
+                .isChecked());
+        assertTrue(mController.getConditionTagAt(
+                EnableZenModeDialog.COUNTDOWN_ALARM_CONDITION_INDEX).rb.isChecked());
+    }
+
+    @Test
+    public void testCountdownChecked() {
+        doReturn(false).when(mController).isAlarm(mCountdownCondition);
+        doReturn(true).when(mController).isCountdown(mCountdownCondition);
+
+        mController.bindConditions(mCountdownCondition);
+        assertFalse(mController.getConditionTagAt(EnableZenModeDialog.FOREVER_CONDITION_INDEX).rb
+                .isChecked());
+        assertTrue(mController.getConditionTagAt(EnableZenModeDialog.COUNTDOWN_CONDITION_INDEX).rb
+                .isChecked());
+        assertFalse(mController.getConditionTagAt(
+                EnableZenModeDialog.COUNTDOWN_ALARM_CONDITION_INDEX).rb.isChecked());
+    }
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeButtonPreferenceControllerTest.java
index 862b8d0..ed42890 100644
--- a/tests/robotests/src/com/android/settings/notification/ZenModeButtonPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeButtonPreferenceControllerTest.java
@@ -26,6 +26,7 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.app.FragmentManager;
 import android.app.NotificationManager;
 import android.content.ContentResolver;
 import android.content.Context;
@@ -79,7 +80,8 @@
 
         mContext = shadowApplication.getApplicationContext();
         mContentResolver = RuntimeEnvironment.application.getContentResolver();
-        mController = new ZenModeButtonPreferenceController(mContext, mock(Lifecycle.class));
+        mController = new ZenModeButtonPreferenceController(mContext, mock(Lifecycle.class),
+                mock(FragmentManager.class));
         when(mNotificationManager.getNotificationPolicy()).thenReturn(mPolicy);
         ReflectionHelpers.setField(mController, "mBackend", mBackend);
         ReflectionHelpers.setField(mController, "mZenButtonOn", mZenButtonOn);
diff --git a/tests/robotests/src/com/android/settings/security/LockdownButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/LockdownButtonPreferenceControllerTest.java
new file mode 100644
index 0000000..7738f86
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/security/LockdownButtonPreferenceControllerTest.java
@@ -0,0 +1,98 @@
+/*
+ * 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.security;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.support.v14.preference.SwitchPreference;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class LockdownButtonPreferenceControllerTest {
+    @Mock
+    private LockPatternUtils mLockPatternUtils;
+    private SwitchPreference mPreference;
+
+    private Context mContext;
+    private LockdownButtonPreferenceController mController;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mPreference = new SwitchPreference(mContext);
+
+        mController = spy(new LockdownButtonPreferenceController(mContext));
+        ReflectionHelpers.setField(mController, "mLockPatternUtils", mLockPatternUtils);
+    }
+
+    @Test
+    public void isAvailable_lockSet_shouldReturnTrue() throws Exception {
+        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(true);
+        assertThat(mController.isAvailable()).isTrue();
+    }
+
+    @Test
+    public void isAvailable_lockUnset_shouldReturnFalse() throws Exception {
+        when(mLockPatternUtils.isSecure(anyInt())).thenReturn(false);
+        assertThat(mController.isAvailable()).isFalse();
+    }
+
+    @Test
+    public void onPreferenceChange_settingIsUpdated() throws Exception {
+        boolean state = Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0) != 0;
+        assertThat(mController.onPreferenceChange(mPreference, !state)).isTrue();
+        boolean newState = Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0) != 0;
+        assertThat(newState).isEqualTo(!state);
+    }
+
+    @Test
+    public void onSettingChange_preferenceIsUpdated() throws Exception {
+        boolean state = Settings.Secure.getInt(mContext.getContentResolver(),
+                Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0) != 0;
+        mController.updateState(mPreference);
+        assertThat(mPreference.isChecked()).isEqualTo(state);
+        Settings.Secure.putInt(mContext.getContentResolver(),
+                Settings.Secure.LOCKDOWN_IN_POWER_MENU, state ? 0 : 1);
+
+        mController.updateState(mPreference);
+        assertThat(mPreference.isChecked()).isEqualTo(!state);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java
new file mode 100644
index 0000000..d540a62
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/widget/AppCheckBoxPreferenceTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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.widget;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AppCheckBoxPreferenceTest {
+
+    private Context mContext;
+    private AppCheckBoxPreference mPreference;
+    private AppCheckBoxPreference mAttrPreference;
+
+    @Before
+    public void setUp() {
+        mContext = RuntimeEnvironment.application;
+        mPreference = new AppCheckBoxPreference(mContext);
+        mAttrPreference = new AppCheckBoxPreference(mContext, null /* attrs */);
+    }
+
+    @Test
+    public void testGetLayoutResource() {
+        assertThat(mPreference.getLayoutResource()).isEqualTo(R.layout.preference_app);
+        assertThat(mAttrPreference.getLayoutResource()).isEqualTo(R.layout.preference_app);
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
index 6832ca8..2a633d9 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
@@ -80,7 +80,7 @@
 
         mController.displayPreference(mScreen);
 
-        assertThat(mListPreference.getEntries().length).isEqualTo(2);
+        assertThat(mListPreference.getEntries().length).isEqualTo(3);
     }
 
     @Test
@@ -113,13 +113,18 @@
         when(mWifiManager.is5GHzBandSupported()).thenReturn(true);
 
         mController.displayPreference(mScreen);
+
+        // -1 is WifiConfiguration.AP_BAND_ANY, for 'Auto' option.
+        mController.onPreferenceChange(mListPreference, "-1");
+        assertThat(mController.getBandIndex()).isEqualTo(-1);
+
         mController.onPreferenceChange(mListPreference, "1");
         assertThat(mController.getBandIndex()).isEqualTo(1);
 
         mController.onPreferenceChange(mListPreference, "0");
         assertThat(mController.getBandIndex()).isEqualTo(0);
 
-        verify(mListener, times(2)).onTetherConfigUpdated();
+        verify(mListener, times(3)).onTetherConfigUpdated();
     }
 
     @Test
diff --git a/tests/unit/src/com/android/settings/applications/AppOpsSettingsTest.java b/tests/unit/src/com/android/settings/applications/AppOpsSettingsTest.java
index d89d4a3..17a1889 100644
--- a/tests/unit/src/com/android/settings/applications/AppOpsSettingsTest.java
+++ b/tests/unit/src/com/android/settings/applications/AppOpsSettingsTest.java
@@ -15,6 +15,9 @@
  */
 package com.android.settings.applications;
 
+import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+
 import android.app.AppOpsManager;
 import android.content.Context;
 import android.content.Intent;
@@ -95,7 +98,9 @@
      * Creates an intent for showing the permission settings for all apps.
      */
     private Intent createManageAllAppsIntent() {
-        return new Intent(mActivityAction);
+        final Intent intent = new Intent(mActivityAction);
+        intent.addFlags(FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
+        return intent;
     }
 
     /**
diff --git a/tests/unit/src/com/android/settings/notification/ChannelGroupNotificationSettingsTest.java b/tests/unit/src/com/android/settings/notification/ChannelGroupNotificationSettingsTest.java
deleted file mode 100644
index ce2c408..0000000
--- a/tests/unit/src/com/android/settings/notification/ChannelGroupNotificationSettingsTest.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.notification;
-
-import static android.app.NotificationManager.IMPORTANCE_HIGH;
-import static android.app.NotificationManager.IMPORTANCE_MIN;
-import static android.support.test.espresso.Espresso.onView;
-import static android.support.test.espresso.assertion.ViewAssertions.matches;
-import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
-import static android.support.test.espresso.matcher.ViewMatchers.withId;
-import static android.support.test.espresso.matcher.ViewMatchers.withText;
-
-import static org.hamcrest.Matchers.allOf;
-import static org.junit.Assert.fail;
-
-import android.app.INotificationManager;
-import android.app.Instrumentation;
-import android.app.NotificationChannel;
-import android.app.NotificationChannelGroup;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Process;
-import android.os.ServiceManager;
-import android.provider.Settings;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-@SmallTest
-public class ChannelGroupNotificationSettingsTest {
-
-    private Context mTargetContext;
-    private Instrumentation mInstrumentation;
-    private NotificationManager mNm;
-
-    @Before
-    public void setUp() {
-        mInstrumentation = InstrumentationRegistry.getInstrumentation();
-        mTargetContext = mInstrumentation.getTargetContext();
-        mNm  = (NotificationManager) mTargetContext.getSystemService(Context.NOTIFICATION_SERVICE);
-    }
-
-    @Test
-    public void launchNotificationSetting_displaysChannels() {
-        NotificationChannelGroup group =
-                new NotificationChannelGroup(this.getClass().getName(), this.getClass().getName());
-        group.setDescription("description");
-        NotificationChannel channel = new NotificationChannel(this.getClass().getName(),
-                "channel" + this.getClass().getName(), IMPORTANCE_MIN);
-        channel.setGroup(this.getClass().getName());
-        NotificationChannel channel2 = new NotificationChannel("2"+this.getClass().getName(),
-                "2channel" + this.getClass().getName(), IMPORTANCE_MIN);
-        channel2.setGroup(this.getClass().getName());
-
-        mNm.createNotificationChannelGroup(group);
-        mNm.createNotificationChannel(channel);
-        mNm.createNotificationChannel(channel2);
-
-        final Intent intent = new Intent(Settings.ACTION_CHANNEL_GROUP_NOTIFICATION_SETTINGS)
-                .putExtra(Settings.EXTRA_APP_PACKAGE, mTargetContext.getPackageName())
-                .putExtra(Settings.EXTRA_CHANNEL_GROUP_ID, group.getId());
-
-        mInstrumentation.startActivitySync(intent);
-
-        onView(allOf(withText(group.getName().toString()))).check(matches(isDisplayed()));
-        onView(allOf(withText(channel.getName().toString()))).check(
-                matches(isDisplayed()));
-        onView(allOf(withText(group.getDescription().toString()))).check(
-                matches(isDisplayed()));
-        onView(allOf(withText(channel2.getName().toString()))).check(
-                matches(isDisplayed()));
-        try {
-            onView(allOf(withText("Android is blocking this group of notifications from"
-                    + " appearing on this device"))).check(matches(isDisplayed()));
-            fail("Blocking footer erroneously appearing");
-        } catch (Exception e) {
-            // expected
-        }
-    }
-
-    @Test
-    public void launchNotificationSettings_blockedGroup() throws Exception {
-        NotificationChannelGroup blocked =
-                new NotificationChannelGroup("blocked", "blocked");
-        NotificationChannel channel =
-                new NotificationChannel("channel", "channel", IMPORTANCE_HIGH);
-        channel.setGroup(blocked.getId());
-        mNm.createNotificationChannelGroup(blocked);
-        mNm.createNotificationChannel(channel);
-
-        INotificationManager sINM = INotificationManager.Stub.asInterface(
-                ServiceManager.getService(Context.NOTIFICATION_SERVICE));
-        blocked.setBlocked(true);
-        sINM.updateNotificationChannelGroupForPackage(
-                mTargetContext.getPackageName(), Process.myUid(), blocked);
-
-        final Intent intent = new Intent(Settings.ACTION_CHANNEL_GROUP_NOTIFICATION_SETTINGS)
-                .putExtra(Settings.EXTRA_APP_PACKAGE, mTargetContext.getPackageName())
-                .putExtra(Settings.EXTRA_CHANNEL_GROUP_ID, blocked.getId());
-        mInstrumentation.startActivitySync(intent);
-
-        onView(allOf(withText("Off"), isDisplayed())).check(matches(isDisplayed()));
-        onView(allOf(withText("Android is blocking this group of notifications from"
-                + " appearing on this device"))).check(matches(isDisplayed()));
-
-        try {
-            onView(allOf(withText(channel.getName().toString()))).check(matches(isDisplayed()));
-            fail("settings appearing for blocked group");
-        } catch (Exception e) {
-            // expected
-        }
-    }
-}