Merge "DO NOT MERGE DND settings redesign" into pi-dev
am: e9211d58d2

Change-Id: I23dd32b66fa5ba2630af0dec7e20c6e6099ad90a
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 9beec69..e8e45e3 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -727,6 +727,10 @@
                 <action android:name="android.settings.ZEN_MODE_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
+            <intent-filter android:priority="1">
+                <action android:name="android.settings.ZEN_MODE_PRIORITY_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" />
@@ -753,23 +757,6 @@
         </activity>
 
         <activity
-            android:name="Settings$ZenModeBehaviorSettingsActivity"
-            android:label="@string/zen_mode_behavior_settings_title"
-            android:icon="@drawable/ic_settings_notifications"
-            android:exported="true"
-            android:taskAffinity="com.android.settings"
-            android:parentActivityName="Settings">
-            <intent-filter android:priority="1">
-                <action android:name="android.settings.ZEN_MODE_PRIORITY_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                android:value="com.android.settings.notification.ZenModeBehaviorSettings" />
-            <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
-                android:value="true" />
-        </activity>
-
-        <activity
             android:name="Settings$ZenModeAutomationSettingsActivity"
             android:label="@string/zen_mode_automation_settings_title"
             android:icon="@drawable/ic_settings_notifications"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index cc4b1c4..d844712 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7223,24 +7223,23 @@
     <!--  Do not disturb: Subtitle for the Visual signals option to toggle on/off visual signals/alerts when the screen is on/when screen is off. [CHAR LIMIT=30] -->
     <string name="zen_mode_visual_signals_settings_subtitle">Allow visual signals</string>
 
-    <!-- Do not disturb: restrict notifications title [CHAR LIMIT=60] -->
-    <string name="zen_mode_restrict_notifications_screen_title">Restrict notifications</string>
+    <!-- Do not disturb: zen settings screens category title [CHAR LIMIT=100] -->
+    <string name="zen_mode_settings_category">When Do Not Disturb is turned on</string>
+
     <!-- Do not disturb: restrict notifications title [CHAR LIMIT=60] -->
     <string name="zen_mode_restrict_notifications_title">Notifications</string>
-    <!-- Do not disturb: restrict notifications category title [CHAR LIMIT=100] -->
-    <string name="zen_mode_restrict_notifications_category">When Do Not Disturb is turned on</string>
     <!-- Do not disturb: Mute notifications option [CHAR LIMIT=60] -->
-    <string name="zen_mode_restrict_notifications_mute">Mute notifications</string>
+    <string name="zen_mode_restrict_notifications_mute">Show notifications silently</string>
     <!-- Do not disturb:Mute notifications summary [CHAR LIMIT=NONE] -->
-    <string name="zen_mode_restrict_notifications_mute_summary">Show notifications but mute sounds &amp; vibrations</string>
+    <string name="zen_mode_restrict_notifications_mute_summary">Notifications will be muted</string>
     <!-- Do not disturb:Mute notifications footer [CHAR LIMIT=NONE] -->
-    <string name="zen_mode_restrict_notifications_mute_footer">When new notifications arrive your phone won\u2019t make a sound or vibration</string>
+    <string name="zen_mode_restrict_notifications_mute_footer">When notifications arrive, your phone won\u2019t make a sound or vibrate.</string>
     <!-- Do not disturb: Hide notifications option [CHAR LIMIT=60] -->
-    <string name="zen_mode_restrict_notifications_hide">Hide &amp; mute notifications</string>
+    <string name="zen_mode_restrict_notifications_hide">Hide notifications</string>
     <!-- Do not disturb: Hide notifications summary [CHAR LIMIT=NONE] -->
-    <string name="zen_mode_restrict_notifications_hide_summary">Notifications will not appear at all</string>
+    <string name="zen_mode_restrict_notifications_hide_summary">You won\u2019t see new or existing notifications</string>
     <!-- Do not disturb: Hide notifications footer [CHAR LIMIT=NONE] -->
-    <string name="zen_mode_restrict_notifications_hide_footer">You won\u2019t see new or existing notifications when Do Not Disturb is on. However, notifications needed for basic phone activity and status will still appear.</string>
+    <string name="zen_mode_restrict_notifications_hide_footer">Your phone won\u2019t show new or existing notifications, and won\u2019t make a sound or vibrate. Notifications won\u2019t appear when you swipe down from the top of your screen.\n\nKeep in mind, critical notifications for phone activity and status will still appear.</string>
     <!-- Do not disturb: Custom settings option [CHAR LIMIT=60] -->
     <string name="zen_mode_restrict_notifications_custom">Custom</string>
     <!-- Do not disturb: restrict notifications page, menu option [CHAR LIMIT=60] -->
@@ -7360,6 +7359,35 @@
         <item quantity="other"><xliff:g id="on_count" example="3">%d</xliff:g> rules can turn on automatically</item>
     </plurals>
 
+    <!-- Do not disturb settings, category header [CHAR LIMIT=100]-->
+    <string name="zen_category_behavior">Behavior</string>
+    <!-- Do not disturb settings, category header [CHAR LIMIT=100]-->
+    <string name="zen_category_exceptions">Exceptions</string>
+    <!-- Do not disturb settings, category header [CHAR LIMIT=100]-->
+    <string name="zen_category_schedule">Schedule</string>
+
+    <!-- Do not disturb settings, sound and vibrations title [CHAR LIMIT=100]-->
+    <string name="zen_sound_title">Sound &amp; vibration</string>
+    <!-- Do not disturb settings, sound and vibrations screen footer [CHAR LIMIT=NONE]-->
+    <string name="zen_sound_footer">When Do Not Disturb is on, sound and vibration will be muted, except for the items you allow above.</string>
+    <!-- Do not disturb settings, sound and vibrations screen category [CHAR LIMIT=100]-->
+    <string name="zen_sound_category_title">Mute all except</string>
+    <!-- Do not disturb settings, sound and vibrations summary [CHAR LIMIT=100]-->
+    <string name="zen_sound_all_muted">Muted</string>
+    <!-- Do not disturb settings, sound and vibrations summary [CHAR LIMIT=100]-->
+    <string name="zen_sound_none_muted">Not muted</string>
+    <!-- Do not disturb settings, sound and vibrations summary [CHAR LIMIT=100]-->
+    <string name="zen_sound_one_allowed">Muted, but allow <xliff:g id="sound_type" example="alarms">%1$s</xliff:g></string>
+    <!-- Do not disturb settings, sound and vibrations summary [CHAR LIMIT=100]-->
+    <string name="zen_sound_two_allowed">Muted, but allow <xliff:g id="sound_type" example="alarms">%1$s</xliff:g> and <xliff:g id="sound_type" example="media">%2$s</xliff:g></string>
+    <!-- Do not disturb settings, sound and vibrations summary [CHAR LIMIT=100]-->
+    <string name="zen_sound_three_allowed">Muted, but allow <xliff:g id="sound_type" example="alarms">%1$s</xliff:g>, <xliff:g id="sound_type" example="alarms">%2$s</xliff:g>, and <xliff:g id="sound_type" example="media">%3$s</xliff:g></string>
+
+    <!-- Do not disturb settings, messages, events and reminders title [CHAR LIMIT=100]-->
+    <string name="zen_msg_event_reminder_title">Messages, events &amp; reminders</string>
+    <!-- Do not disturb settings, messages, events and reminders footer [CHAR LIMIT=NONE]-->
+    <string name="zen_msg_event_reminder_footer">When Do Not Disturb is on, messages, reminders, and events will muted, except for the items you allow above. You can adjust messages settings to allow your friends, family, or other contacts to reach you.</string>
+
     <!-- Do not disturb onboarding dialog, accept new settings [CHAR LIMIT=30]-->
     <string name="zen_onboarding_ok">Update</string>
     <!-- Do not disturb onboarding dialog, do not accept new settings [CHAR LIMIT=30]-->
@@ -7891,14 +7919,17 @@
     <!-- [CHAR LIMIT=20] Zen mode settings: Calls option -->
     <string name="zen_mode_calls">Calls</string>
 
+    <!-- [CHAR LIMIT=20] Zen mode settings: Calls screen footer -->
+    <string name="zen_mode_calls_footer">When Do Not Disturb is on, incoming calls are blocked. You can adjust settings to allow your friends, family, or other contacts to reach you.</string>
+
     <!-- [CHAR LIMIT=20] Zen mode settings: Messages option -->
     <string name="zen_mode_messages">Messages</string>
 
     <!-- [CHAR LIMIT=50] Zen mode settings: All messages summary -->
-    <string name="zen_mode_all_messages">All messages</string>
+    <string name="zen_mode_all_messages">Messages</string>
 
     <!-- [CHAR LIMIT=50] Zen mode settings: Selected messages summary -->
-    <string name="zen_mode_selected_messages">Selected messages</string>
+    <string name="zen_mode_selected_messages">Some messages</string>
 
     <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From anyone -->
     <string name="zen_mode_from_anyone">From anyone</string>
@@ -7909,6 +7940,15 @@
     <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From starred contacts only -->
     <string name="zen_mode_from_starred">From starred contacts only</string>
 
+    <!-- Do not disturb settings, calls summary [CHAR LIMIT=100]-->
+    <string name="zen_calls_summary_starred_repeat">From starred contacts and repeat callers</string>
+
+    <!-- Do not disturb settings, calls summary [CHAR LIMIT=100]-->
+    <string name="zen_calls_summary_contacts_repeat">From contacts and repeat callers</string>
+
+    <!-- Do not disturb settings, calls summary [CHAR LIMIT=100]-->
+    <string name="zen_calls_summary_repeat_only">From repeat callers only</string>
+
     <!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: None -->
     <string name="zen_mode_from_none">None</string>
 
@@ -7928,14 +7968,23 @@
     <string name="zen_mode_events">Events</string>
 
     <!-- [CHAR LIMIT=50] Zen mode settings: All callers summary -->
-    <string name="zen_mode_all_callers">All callers</string>
+    <string name="zen_mode_all_callers">anyone</string>
 
     <!-- [CHAR LIMIT=50] Zen mode settings: Selected callers summary -->
-    <string name="zen_mode_selected_callers">Selected callers</string>
+    <string name="zen_mode_contacts_callers">contacts</string>
+
+    <!-- [CHAR LIMIT=50] Zen mode settings: Selected callers summary -->
+    <string name="zen_mode_starred_callers">starred contacts</string>
 
     <!-- [CHAR LIMIT=50] Zen mode settings: Repeat callers option -->
     <string name="zen_mode_repeat_callers">Repeat callers</string>
 
+    <!-- [CHAR LIMIT=50] Zen mode settings: calls summary -->
+    <string name="zen_mode_calls_summary_one">From <xliff:g id="caller type" example="contacts">%1$s</xliff:g> only</string>
+
+    <!-- [CHAR LIMIT=50] Zen mode settings: calls summary -->
+    <string name="zen_mode_calls_summary_two">From <xliff:g id="caller type" example="starred contacts">%1$s</xliff:g> and <xliff:g id="callert tpye" example="repeat callers">%2$s</xliff:g></string>
+
     <!-- [CHAR LIMIT=200] Zen mode settings: Repeat callers option summary -->
     <string name="zen_mode_repeat_callers_summary">If the same person calls a second time within a <xliff:g id="minutes">%d</xliff:g> minute period</string>
 
diff --git a/res/xml/zen_mode_behavior_settings.xml b/res/xml/zen_mode_behavior_settings.xml
deleted file mode 100644
index 8426d91..0000000
--- a/res/xml/zen_mode_behavior_settings.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     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.
--->
-
-<PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:settings="http://schemas.android.com/apk/res-auto"
-    android:key="zen_mode_behavior_settings_page"
-    android:title="@string/zen_mode_behavior_settings_title" >
-
-   <!-- Alarms -->
-   <SwitchPreference
-       android:key="zen_mode_alarms"
-       android:title="@string/zen_mode_alarms"/>
-
-   <!-- Media -->
-   <SwitchPreference
-       android:key="zen_mode_media"
-       android:title="@string/zen_mode_media"/>
-
-   <!-- System -->
-   <SwitchPreference
-       android:key="zen_mode_system"
-       android:title="@string/zen_mode_system"/>
-
-   <!-- Reminders -->
-   <SwitchPreference
-       android:key="zen_mode_reminders"
-       android:title="@string/zen_mode_reminders"/>
-
-   <!-- Events -->
-   <SwitchPreference
-       android:key="zen_mode_events"
-       android:title="@string/zen_mode_events"/>
-
-   <!-- Messages -->
-   <ListPreference
-       android:key="zen_mode_messages"
-       android:title="@string/zen_mode_messages"
-       android:entries="@array/zen_mode_contacts_entries"
-       android:entryValues="@array/zen_mode_contacts_values"/>
-
-   <!-- Calls -->
-   <ListPreference
-       android:key="zen_mode_calls"
-       android:title="@string/zen_mode_calls"
-       android:entries="@array/zen_mode_contacts_entries"
-       android:entryValues="@array/zen_mode_contacts_values"/>
-
-   <!-- Repeat callers -->
-   <SwitchPreference
-       android:key="zen_mode_repeat_callers"
-       android:title="@string/zen_mode_repeat_callers" />
-
-    <com.android.settingslib.widget.FooterPreference />
-
-</PreferenceScreen>
diff --git a/res/xml/zen_mode_calls_settings.xml b/res/xml/zen_mode_calls_settings.xml
new file mode 100644
index 0000000..d9e47f3
--- /dev/null
+++ b/res/xml/zen_mode_calls_settings.xml
@@ -0,0 +1,42 @@
+<?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="zen_mode_calls_settings_page"
+    android:title="@string/zen_mode_calls" >
+
+   <PreferenceCategory
+       android:title="@string/zen_mode_settings_category">
+      <!-- Calls -->
+      <ListPreference
+          android:key="zen_mode_calls"
+          android:title="@string/zen_mode_calls"
+          android:entries="@array/zen_mode_contacts_entries"
+          android:entryValues="@array/zen_mode_contacts_values"/>
+
+      <!-- TODO: setting that links to contacts or placeholder for external app -->
+
+      <!-- Repeat callers -->
+      <SwitchPreference
+          android:key="zen_mode_repeat_callers"
+          android:title="@string/zen_mode_repeat_callers" />
+   </PreferenceCategory>
+
+   <com.android.settingslib.widget.FooterPreference/>
+
+</PreferenceScreen>
diff --git a/res/xml/zen_mode_msg_event_reminder_settings.xml b/res/xml/zen_mode_msg_event_reminder_settings.xml
new file mode 100644
index 0000000..866f333
--- /dev/null
+++ b/res/xml/zen_mode_msg_event_reminder_settings.xml
@@ -0,0 +1,45 @@
+<?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="zen_mode_msg_event_reminder_settings_page"
+    android:title="@string/zen_msg_event_reminder_title" >
+
+   <PreferenceCategory
+      android:title="@string/zen_mode_settings_category">
+      <!-- Messages -->
+      <ListPreference
+          android:key="zen_mode_messages"
+          android:title="@string/zen_mode_messages"
+          android:entries="@array/zen_mode_contacts_entries"
+          android:entryValues="@array/zen_mode_contacts_values"/>
+
+      <!-- Reminders -->
+      <SwitchPreference
+          android:key="zen_mode_reminders"
+          android:title="@string/zen_mode_reminders"/>
+
+      <!-- Events -->
+      <SwitchPreference
+          android:key="zen_mode_events"
+          android:title="@string/zen_mode_events"/>
+   </PreferenceCategory>
+
+   <com.android.settingslib.widget.FooterPreference />
+
+</PreferenceScreen>
diff --git a/res/xml/zen_mode_restrict_notifications_settings.xml b/res/xml/zen_mode_restrict_notifications_settings.xml
index d5243f6..e024ab9 100644
--- a/res/xml/zen_mode_restrict_notifications_settings.xml
+++ b/res/xml/zen_mode_restrict_notifications_settings.xml
@@ -18,11 +18,11 @@
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:key="zen_mode_restrict_settings_page"
-    android:title="@string/zen_mode_restrict_notifications_screen_title">
+    android:title="@string/zen_mode_restrict_notifications_title">
 
     <PreferenceCategory
         android:key="restrict_category"
-        android:title="@string/zen_mode_restrict_notifications_category">
+        android:title="@string/zen_mode_settings_category">
         <com.android.settings.notification.ZenCustomRadioButtonPreference
             android:key="zen_mute_notifications"
             android:title="@string/zen_mode_restrict_notifications_mute"
diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml
index 0f93968..2cd4f35 100644
--- a/res/xml/zen_mode_settings.xml
+++ b/res/xml/zen_mode_settings.xml
@@ -22,39 +22,47 @@
     android:title="@string/zen_mode_settings_title"
     settings:keywords="@string/keywords_zen_mode_settings">
 
-    <!-- sound vibration -->
-    <com.android.settings.widget.DisabledCheckBoxPreference
-        android:key="zen_effect_sound"
-        android:title="@string/zen_mode_block_effect_sound"
-        android:enabled="false"/>
-
-    <!-- What to block (effects) -->
-    <Preference
-        android:key="zen_mode_block_effects_settings"
-        android:title="@string/zen_mode_restrict_notifications_title"
-        android:fragment="com.android.settings.notification.ZenModeRestrictNotificationsSettings" />
-
-    <!-- Behavior settings (exceptions) -->
-    <Preference
-            android:key="zen_mode_behavior_settings"
-            android:title="@string/zen_mode_behavior_settings_title"
-            android:fragment="com.android.settings.notification.ZenModeBehaviorSettings" />
-
-    <!-- DND duration settings -->
-    <Preference
-        android:key="zen_mode_duration_settings"
-        android:title="@string/zen_mode_duration_settings_title" />
-
-    <!-- Automatic rules -->
-    <Preference
-        android:key="zen_mode_automation_settings"
-        android:title="@string/zen_mode_automation_settings_title"
-        android:fragment="com.android.settings.notification.ZenModeAutomationSettings" />
-
-    <!-- placeholder -->
     <PreferenceCategory
-        android:key="dashboard_tile_placeholder"
-        android:order="5" />
+        android:title="@string/zen_category_behavior">
+        <!-- sound vibration -->
+        <Preference
+            android:key="zen_sound_vibration_settings"
+            android:title="@string/zen_sound_title"
+            android:fragment="com.android.settings.notification.ZenModeSoundVibrationSettings"/>
+
+        <!-- What to block (effects) -->
+        <Preference
+            android:key="zen_mode_block_effects_settings"
+            android:title="@string/zen_mode_restrict_notifications_title"
+            android:fragment="com.android.settings.notification.ZenModeRestrictNotificationsSettings" />
+    </PreferenceCategory>
+
+    <PreferenceCategory
+        android:title="@string/zen_category_exceptions">
+        <Preference
+            android:key="zen_mode_calls_settings"
+            android:title="@string/zen_mode_calls"
+            android:fragment="com.android.settings.notification.ZenModeCallsSettings" />
+        <Preference
+            android:key="zen_mode_msg_event_reminder_settings"
+            android:title="@string/zen_msg_event_reminder_title"
+            android:fragment="com.android.settings.notification.ZenModeMsgEventReminderSettings" />
+
+    </PreferenceCategory>
+
+    <PreferenceCategory
+        android:title="@string/zen_category_schedule">
+        <!-- DND duration settings -->
+        <Preference
+            android:key="zen_mode_duration_settings"
+            android:title="@string/zen_mode_duration_settings_title" />
+
+        <!-- Automatic rules -->
+        <Preference
+            android:key="zen_mode_automation_settings"
+            android:title="@string/zen_mode_automation_settings_title"
+            android:fragment="com.android.settings.notification.ZenModeAutomationSettings" />
+    </PreferenceCategory>
 
     <!-- Turn on DND button -->
     <!-- Layout preference doesn't obey allowDividerAbove, so put it in a PreferenceCategory -->
diff --git a/res/xml/zen_mode_sound_vibration_settings.xml b/res/xml/zen_mode_sound_vibration_settings.xml
new file mode 100644
index 0000000..50128b9
--- /dev/null
+++ b/res/xml/zen_mode_sound_vibration_settings.xml
@@ -0,0 +1,43 @@
+<?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="zen_mode_sound_vibration_settings_page"
+    android:title="@string/zen_sound_title" >
+
+   <PreferenceCategory
+       android:title="@string/zen_mode_settings_category">
+      <!-- Alarms -->
+      <SwitchPreference
+          android:key="zen_mode_alarms"
+          android:title="@string/zen_mode_alarms"/>
+
+      <!-- Media -->
+      <SwitchPreference
+          android:key="zen_mode_media"
+          android:title="@string/zen_mode_media"/>
+
+      <!-- System -->
+      <SwitchPreference
+          android:key="zen_mode_system"
+          android:title="@string/zen_mode_system"/>
+   </PreferenceCategory>
+
+   <com.android.settingslib.widget.FooterPreference/>
+
+</PreferenceScreen>
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index aa9d7b5..a8cb61c 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -106,9 +106,10 @@
 import com.android.settings.notification.SoundSettings;
 import com.android.settings.notification.ZenAccessSettings;
 import com.android.settings.notification.ZenModeAutomationSettings;
-import com.android.settings.notification.ZenModeBehaviorSettings;
+import com.android.settings.notification.ZenModeMsgEventReminderSettings;
 import com.android.settings.notification.ZenModeBlockedEffectsSettings;
 import com.android.settings.notification.ZenModeEventRuleSettings;
+import com.android.settings.notification.ZenModeRestrictNotificationsSettings;
 import com.android.settings.notification.ZenModeScheduleRuleSettings;
 import com.android.settings.notification.ZenModeSettings;
 import com.android.settings.password.ChooseLockPassword;
@@ -220,7 +221,6 @@
             ApnSettings.class.getName(),
             ApnEditor.class.getName(),
             WifiCallingSettings.class.getName(),
-            ZenModeBehaviorSettings.class.getName(),
             ZenModeScheduleRuleSettings.class.getName(),
             ZenModeEventRuleSettings.class.getName(),
             ZenModeBlockedEffectsSettings.class.getName(),
diff --git a/src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java b/src/com/android/settings/notification/ZenModeBehaviorCallsPreferenceController.java
similarity index 84%
rename from src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java
rename to src/com/android/settings/notification/ZenModeBehaviorCallsPreferenceController.java
index cf6218c..79aa0cb 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeBehaviorCallsPreferenceController.java
@@ -22,13 +22,13 @@
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
-public class ZenModeBehaviorPreferenceController extends
+public class ZenModeBehaviorCallsPreferenceController extends
         AbstractZenModePreferenceController implements PreferenceControllerMixin {
 
-    protected static final String KEY_BEHAVIOR_SETTINGS = "zen_mode_behavior_settings";
+    protected static final String KEY_BEHAVIOR_SETTINGS = "zen_mode_calls_settings";
     private final ZenModeSettings.SummaryBuilder mSummaryBuilder;
 
-    public ZenModeBehaviorPreferenceController(Context context, Lifecycle lifecycle) {
+    public ZenModeBehaviorCallsPreferenceController(Context context, Lifecycle lifecycle) {
         super(context, KEY_BEHAVIOR_SETTINGS, lifecycle);
         mSummaryBuilder = new ZenModeSettings.SummaryBuilder(context);
     }
@@ -47,7 +47,6 @@
     public void updateState(Preference preference) {
         super.updateState(preference);
 
-        preference.setSummary(mSummaryBuilder.getBehaviorSettingSummary(getPolicy(),
-                getZenMode()));
+        preference.setSummary(mSummaryBuilder.getCallsSettingSummary(getPolicy()));
     }
 }
diff --git a/src/com/android/settings/notification/ZenModeBehaviorFooterPreferenceController.java b/src/com/android/settings/notification/ZenModeBehaviorFooterPreferenceController.java
index a1c2b01..7f8760b 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorFooterPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeBehaviorFooterPreferenceController.java
@@ -16,13 +16,12 @@
 
 package com.android.settings.notification;
 
-import android.content.Context;
 import android.content.ComponentName;
+import android.content.Context;
 import android.net.Uri;
 import android.provider.Settings;
 import android.service.notification.ZenModeConfig;
 import android.support.v7.preference.Preference;
-import android.util.Slog;
 
 import com.android.settings.R;
 import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -30,14 +29,17 @@
 public class ZenModeBehaviorFooterPreferenceController extends AbstractZenModePreferenceController {
 
     protected static final String KEY = "footer_preference";
+    private final int mTitleRes;
 
-    public ZenModeBehaviorFooterPreferenceController(Context context, Lifecycle lifecycle) {
+    public ZenModeBehaviorFooterPreferenceController(Context context, Lifecycle lifecycle,
+            int titleRes) {
         super(context, KEY, lifecycle);
+        mTitleRes = titleRes;
     }
 
     @Override
     public boolean isAvailable() {
-        return isDeprecatedZenMode(getZenMode());
+        return true;
     }
 
     @Override
@@ -48,45 +50,45 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-
-        boolean isAvailable = isAvailable();
-        preference.setVisible(isAvailable);
-        if (isAvailable) {
-            preference.setTitle(getFooterText());
-        }
-
+        preference.setTitle(getFooterText());
     }
 
     protected String getFooterText() {
-        ZenModeConfig config = getZenModeConfig();
+        if (isDeprecatedZenMode(getZenMode())) {
+            ZenModeConfig config = getZenModeConfig();
 
-        // DND turned on by manual rule with deprecated zen mode
-        if (config.manualRule != null &&
-                isDeprecatedZenMode(config.manualRule.zenMode)) {
-            final Uri id = config.manualRule.conditionId;
-            if (config.manualRule.enabler != null) {
-                // app triggered manual rule
-                String appOwner = mZenModeConfigWrapper.getOwnerCaption(config.manualRule.enabler);
-                if (!appOwner.isEmpty()) {
-                    return mContext.getString(R.string.zen_mode_app_set_behavior, appOwner);
-                }
-            } else {
-                return mContext.getString(R.string.zen_mode_qs_set_behavior);
-            }
-        }
-
-        // DND turned on by an automatic rule with deprecated zen mode
-        for (ZenModeConfig.ZenRule automaticRule : config.automaticRules.values()) {
-            if (automaticRule.isAutomaticActive() && isDeprecatedZenMode(automaticRule.zenMode)) {
-                ComponentName component = automaticRule.component;
-                if (component != null) {
-                    return mContext.getString(R.string.zen_mode_app_set_behavior,
-                            component.getPackageName());
+            // DND turned on by manual rule with deprecated zen mode
+            if (config.manualRule != null &&
+                    isDeprecatedZenMode(config.manualRule.zenMode)) {
+                final Uri id = config.manualRule.conditionId;
+                if (config.manualRule.enabler != null) {
+                    // app triggered manual rule
+                    String appOwner = mZenModeConfigWrapper.getOwnerCaption(
+                            config.manualRule.enabler);
+                    if (!appOwner.isEmpty()) {
+                        return mContext.getString(R.string.zen_mode_app_set_behavior, appOwner);
+                    }
+                } else {
+                    return mContext.getString(R.string.zen_mode_qs_set_behavior);
                 }
             }
-        }
 
-        return mContext.getString(R.string.zen_mode_unknown_app_set_behavior);
+            // DND turned on by an automatic rule with deprecated zen mode
+            for (ZenModeConfig.ZenRule automaticRule : config.automaticRules.values()) {
+                if (automaticRule.isAutomaticActive() && isDeprecatedZenMode(
+                        automaticRule.zenMode)) {
+                    ComponentName component = automaticRule.component;
+                    if (component != null) {
+                        return mContext.getString(R.string.zen_mode_app_set_behavior,
+                                component.getPackageName());
+                    }
+                }
+            }
+
+            return mContext.getString(R.string.zen_mode_unknown_app_set_behavior);
+        } else {
+            return mContext.getString(mTitleRes);
+        }
     }
 
     private boolean isDeprecatedZenMode(int zenMode) {
diff --git a/src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java b/src/com/android/settings/notification/ZenModeBehaviorMsgEventReminderPreferenceController.java
similarity index 82%
copy from src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java
copy to src/com/android/settings/notification/ZenModeBehaviorMsgEventReminderPreferenceController.java
index cf6218c..8527696 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeBehaviorMsgEventReminderPreferenceController.java
@@ -22,13 +22,14 @@
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
-public class ZenModeBehaviorPreferenceController extends
+public class ZenModeBehaviorMsgEventReminderPreferenceController extends
         AbstractZenModePreferenceController implements PreferenceControllerMixin {
 
-    protected static final String KEY_BEHAVIOR_SETTINGS = "zen_mode_behavior_settings";
+    protected static final String KEY_BEHAVIOR_SETTINGS = "zen_mode_msg_event_reminder_settings";
     private final ZenModeSettings.SummaryBuilder mSummaryBuilder;
 
-    public ZenModeBehaviorPreferenceController(Context context, Lifecycle lifecycle) {
+    public ZenModeBehaviorMsgEventReminderPreferenceController(Context context,
+            Lifecycle lifecycle) {
         super(context, KEY_BEHAVIOR_SETTINGS, lifecycle);
         mSummaryBuilder = new ZenModeSettings.SummaryBuilder(context);
     }
@@ -47,7 +48,6 @@
     public void updateState(Preference preference) {
         super.updateState(preference);
 
-        preference.setSummary(mSummaryBuilder.getBehaviorSettingSummary(getPolicy(),
-                getZenMode()));
+        preference.setSummary(mSummaryBuilder.getMsgEventReminderSettingSummary(getPolicy()));
     }
 }
diff --git a/src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java b/src/com/android/settings/notification/ZenModeBehaviorSoundPreferenceController.java
similarity index 77%
copy from src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java
copy to src/com/android/settings/notification/ZenModeBehaviorSoundPreferenceController.java
index cf6218c..07f1229 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeBehaviorSoundPreferenceController.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * 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.
@@ -22,13 +22,13 @@
 import com.android.settings.core.PreferenceControllerMixin;
 import com.android.settingslib.core.lifecycle.Lifecycle;
 
-public class ZenModeBehaviorPreferenceController extends
+public class ZenModeBehaviorSoundPreferenceController extends
         AbstractZenModePreferenceController implements PreferenceControllerMixin {
 
-    protected static final String KEY_BEHAVIOR_SETTINGS = "zen_mode_behavior_settings";
+    protected static final String KEY_BEHAVIOR_SETTINGS = "zen_sound_vibration_settings";
     private final ZenModeSettings.SummaryBuilder mSummaryBuilder;
 
-    public ZenModeBehaviorPreferenceController(Context context, Lifecycle lifecycle) {
+    public ZenModeBehaviorSoundPreferenceController(Context context, Lifecycle lifecycle) {
         super(context, KEY_BEHAVIOR_SETTINGS, lifecycle);
         mSummaryBuilder = new ZenModeSettings.SummaryBuilder(context);
     }
@@ -47,7 +47,6 @@
     public void updateState(Preference preference) {
         super.updateState(preference);
 
-        preference.setSummary(mSummaryBuilder.getBehaviorSettingSummary(getPolicy(),
-                getZenMode()));
+        preference.setSummary(mSummaryBuilder.getSoundSettingSummary(getPolicy()));
     }
 }
diff --git a/src/com/android/settings/notification/ZenModeBehaviorSettings.java b/src/com/android/settings/notification/ZenModeCallsSettings.java
similarity index 77%
copy from src/com/android/settings/notification/ZenModeBehaviorSettings.java
copy to src/com/android/settings/notification/ZenModeCallsSettings.java
index 31542c3..20396b5 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorSettings.java
+++ b/src/com/android/settings/notification/ZenModeCallsSettings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * 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.
@@ -29,7 +29,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class ZenModeBehaviorSettings extends ZenModeSettingsBase implements Indexable {
+public class ZenModeCallsSettings extends ZenModeSettingsBase implements Indexable {
 
     @Override
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
@@ -39,23 +39,20 @@
     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle) {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
-        controllers.add(new ZenModeAlarmsPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeMediaPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeSystemPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeEventsPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeRemindersPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeMessagesPreferenceController(context, lifecycle));
         controllers.add(new ZenModeCallsPreferenceController(context, lifecycle));
+        // TODO: is a controller needed for a pref that just launches an external activity?
+        // or can the contacts app insert this setting themselves?
         controllers.add(new ZenModeRepeatCallersPreferenceController(context, lifecycle,
                 context.getResources().getInteger(com.android.internal.R.integer
                 .config_zen_repeat_callers_threshold)));
-        controllers.add(new ZenModeBehaviorFooterPreferenceController(context, lifecycle));
+        controllers.add(new ZenModeBehaviorFooterPreferenceController(
+                context, lifecycle, R.string.zen_mode_calls_footer));
         return controllers;
     }
 
     @Override
     protected int getPreferenceScreenResId() {
-        return R.xml.zen_mode_behavior_settings;
+        return R.xml.zen_mode_calls_settings;
     }
 
     @Override
@@ -66,7 +63,7 @@
     /**
      * For Search.
      */
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
 
                 @Override
@@ -75,7 +72,7 @@
                     final ArrayList<SearchIndexableResource> result = new ArrayList<>();
 
                     final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.zen_mode_behavior_settings;
+                    sir.xmlResId = R.xml.zen_mode_calls_settings;
                     result.add(sir);
                     return result;
                 }
diff --git a/src/com/android/settings/notification/ZenModeBehaviorSettings.java b/src/com/android/settings/notification/ZenModeMsgEventReminderSettings.java
similarity index 78%
rename from src/com/android/settings/notification/ZenModeBehaviorSettings.java
rename to src/com/android/settings/notification/ZenModeMsgEventReminderSettings.java
index 31542c3..c2508e3 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorSettings.java
+++ b/src/com/android/settings/notification/ZenModeMsgEventReminderSettings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * 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.
@@ -29,7 +29,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class ZenModeBehaviorSettings extends ZenModeSettingsBase implements Indexable {
+public class ZenModeMsgEventReminderSettings extends ZenModeSettingsBase implements Indexable {
 
     @Override
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
@@ -39,23 +39,17 @@
     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle) {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
-        controllers.add(new ZenModeAlarmsPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeMediaPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeSystemPreferenceController(context, lifecycle));
         controllers.add(new ZenModeEventsPreferenceController(context, lifecycle));
         controllers.add(new ZenModeRemindersPreferenceController(context, lifecycle));
         controllers.add(new ZenModeMessagesPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeCallsPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeRepeatCallersPreferenceController(context, lifecycle,
-                context.getResources().getInteger(com.android.internal.R.integer
-                .config_zen_repeat_callers_threshold)));
-        controllers.add(new ZenModeBehaviorFooterPreferenceController(context, lifecycle));
+        controllers.add(new ZenModeBehaviorFooterPreferenceController(context, lifecycle,
+                R.string.zen_msg_event_reminder_footer));
         return controllers;
     }
 
     @Override
     protected int getPreferenceScreenResId() {
-        return R.xml.zen_mode_behavior_settings;
+        return R.xml.zen_mode_msg_event_reminder_settings;
     }
 
     @Override
@@ -75,7 +69,7 @@
                     final ArrayList<SearchIndexableResource> result = new ArrayList<>();
 
                     final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.zen_mode_behavior_settings;
+                    sir.xmlResId = R.xml.zen_mode_msg_event_reminder_settings;
                     result.add(sir);
                     return result;
                 }
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index bdc24e3..ec0f619 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -16,6 +16,15 @@
 
 package com.android.settings.notification;
 
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_CALLS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS;
+import static android.app.NotificationManager.Policy.PRIORITY_CATEGORY_SYSTEM;
+
 import android.app.AutomaticZenRule;
 import android.app.FragmentManager;
 import android.app.NotificationManager;
@@ -25,7 +34,6 @@
 import android.provider.Settings;
 import android.service.notification.ZenModeConfig;
 import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.CheckBoxPreference;
 
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
 import com.android.settings.R;
@@ -39,17 +47,12 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.function.Predicate;
 
 public class ZenModeSettings extends ZenModeSettingsBase {
-    private static final String KEY_SOUND = "zen_effect_sound";
     @Override
     public void onResume() {
         super.onResume();
-        CheckBoxPreference soundPreference =
-                (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_SOUND);
-        if (soundPreference != null) {
-            soundPreference.setChecked(true);
-        }
     }
 
     @Override
@@ -75,7 +78,9 @@
     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
             Lifecycle lifecycle, FragmentManager fragmentManager) {
         List<AbstractPreferenceController> controllers = new ArrayList<>();
-        controllers.add(new ZenModeBehaviorPreferenceController(context, lifecycle));
+        controllers.add(new ZenModeBehaviorMsgEventReminderPreferenceController(context, lifecycle));
+        controllers.add(new ZenModeBehaviorSoundPreferenceController(context, lifecycle));
+        controllers.add(new ZenModeBehaviorCallsPreferenceController(context, lifecycle));
         controllers.add(new ZenModeBlockedEffectsPreferenceController(context, lifecycle));
         controllers.add(new ZenModeDurationPreferenceController(context, lifecycle,
                 fragmentManager));
@@ -95,19 +100,63 @@
 
         // these should match NotificationManager.Policy#ALL_PRIORITY_CATEGORIES
         private static final int[] ALL_PRIORITY_CATEGORIES = {
-                Policy.PRIORITY_CATEGORY_ALARMS,
-                Policy.PRIORITY_CATEGORY_MEDIA,
-                Policy.PRIORITY_CATEGORY_SYSTEM,
-                Policy.PRIORITY_CATEGORY_REMINDERS,
-                Policy.PRIORITY_CATEGORY_EVENTS,
-                Policy.PRIORITY_CATEGORY_MESSAGES,
-                Policy.PRIORITY_CATEGORY_CALLS,
-                Policy.PRIORITY_CATEGORY_REPEAT_CALLERS,
+                PRIORITY_CATEGORY_ALARMS,
+                PRIORITY_CATEGORY_MEDIA,
+                PRIORITY_CATEGORY_SYSTEM,
+                PRIORITY_CATEGORY_MESSAGES,
+                PRIORITY_CATEGORY_EVENTS,
+                PRIORITY_CATEGORY_REMINDERS,
+                PRIORITY_CATEGORY_CALLS,
+                PRIORITY_CATEGORY_REPEAT_CALLERS,
         };
 
-        String getBehaviorSettingSummary(Policy policy, int zenMode) {
-            List<String> enabledCategories = getEnabledCategories(policy);
+        String getSoundSettingSummary(Policy policy) {
+            List<String> enabledCategories = getEnabledCategories(policy,
+                    category -> PRIORITY_CATEGORY_ALARMS == category
+                            || PRIORITY_CATEGORY_MEDIA == category
+                            || PRIORITY_CATEGORY_SYSTEM == category);
+            int numCategories = enabledCategories.size();
+            if (numCategories == 0) {
+                return mContext.getString(R.string.zen_sound_all_muted);
+            } else if (numCategories == 1) {
+                return mContext.getString(R.string.zen_sound_one_allowed,
+                        enabledCategories.get(0).toLowerCase());
+            } else if (numCategories == 2) {
+                return mContext.getString(R.string.zen_sound_two_allowed,
+                        enabledCategories.get(0).toLowerCase(),
+                        enabledCategories.get(1).toLowerCase());
+            } else if (numCategories == 3) {
+                return mContext.getString(R.string.zen_sound_three_allowed,
+                        enabledCategories.get(0).toLowerCase(),
+                        enabledCategories.get(1).toLowerCase(),
+                        enabledCategories.get(2).toLowerCase());
+            } else {
+                return mContext.getString(R.string.zen_sound_none_muted);
+            }
+        }
 
+        String getCallsSettingSummary(Policy policy) {
+            List<String> enabledCategories = getEnabledCategories(policy,
+                    category -> PRIORITY_CATEGORY_CALLS == category
+                            || PRIORITY_CATEGORY_REPEAT_CALLERS == category);
+            int numCategories = enabledCategories.size();
+            if (numCategories == 0) {
+                return mContext.getString(R.string.zen_mode_no_exceptions);
+            } else if (numCategories == 1) {
+                return mContext.getString(R.string.zen_mode_calls_summary_one,
+                        enabledCategories.get(0).toLowerCase());
+            } else {
+                return mContext.getString(R.string.zen_mode_calls_summary_two,
+                        enabledCategories.get(0).toLowerCase(),
+                        enabledCategories.get(1).toLowerCase());
+            }
+        }
+
+        String getMsgEventReminderSettingSummary(Policy policy) {
+            List<String> enabledCategories = getEnabledCategories(policy,
+                    category -> PRIORITY_CATEGORY_EVENTS == category
+                            || PRIORITY_CATEGORY_REMINDERS == category
+                            || PRIORITY_CATEGORY_MESSAGES == category);
             int numCategories = enabledCategories.size();
             if (numCategories == 0) {
                 return mContext.getString(R.string.zen_mode_no_exceptions);
@@ -193,22 +242,19 @@
             return count;
         }
 
-        private List<String> getEnabledCategories(Policy policy) {
+        private List<String> getEnabledCategories(Policy policy,
+                Predicate<Integer> filteredCategories) {
             List<String> enabledCategories = new ArrayList<>();
             for (int category : ALL_PRIORITY_CATEGORIES) {
-                if (isCategoryEnabled(policy, category)) {
-                    if (category == Policy.PRIORITY_CATEGORY_ALARMS) {
+                if (filteredCategories.test(category) && isCategoryEnabled(policy, category)) {
+                    if (category == PRIORITY_CATEGORY_ALARMS) {
                         enabledCategories.add(mContext.getString(R.string.zen_mode_alarms));
-                    } else if (category == Policy.PRIORITY_CATEGORY_MEDIA) {
+                    } else if (category == PRIORITY_CATEGORY_MEDIA) {
                         enabledCategories.add(mContext.getString(
                                 R.string.zen_mode_media));
-                    } else if (category == Policy.PRIORITY_CATEGORY_SYSTEM) {
+                    } else if (category == PRIORITY_CATEGORY_SYSTEM) {
                         enabledCategories.add(mContext.getString(
                                 R.string.zen_mode_system));
-                    } else if (category == Policy.PRIORITY_CATEGORY_REMINDERS) {
-                        enabledCategories.add(mContext.getString(R.string.zen_mode_reminders));
-                    } else if (category == Policy.PRIORITY_CATEGORY_EVENTS) {
-                        enabledCategories.add(mContext.getString(R.string.zen_mode_events));
                     } else if (category == Policy.PRIORITY_CATEGORY_MESSAGES) {
                         if (policy.priorityMessageSenders == Policy.PRIORITY_SENDERS_ANY) {
                             enabledCategories.add(mContext.getString(
@@ -217,13 +263,20 @@
                             enabledCategories.add(mContext.getString(
                                     R.string.zen_mode_selected_messages));
                         }
+                    } else if (category == Policy.PRIORITY_CATEGORY_EVENTS) {
+                        enabledCategories.add(mContext.getString(R.string.zen_mode_events));
+                    } else if (category == Policy.PRIORITY_CATEGORY_REMINDERS) {
+                        enabledCategories.add(mContext.getString(R.string.zen_mode_reminders));
                     } else if (category == Policy.PRIORITY_CATEGORY_CALLS) {
                         if (policy.priorityCallSenders == Policy.PRIORITY_SENDERS_ANY) {
                             enabledCategories.add(mContext.getString(
                                     R.string.zen_mode_all_callers));
+                        } else if (policy.priorityCallSenders == Policy.PRIORITY_SENDERS_CONTACTS){
+                            enabledCategories.add(mContext.getString(
+                                    R.string.zen_mode_contacts_callers));
                         } else {
                             enabledCategories.add(mContext.getString(
-                                    R.string.zen_mode_selected_callers));
+                                    R.string.zen_mode_starred_callers));
                         }
                     } else if (category == Policy.PRIORITY_CATEGORY_REPEAT_CALLERS) {
                         if (!enabledCategories.contains(mContext.getString(
@@ -240,10 +293,6 @@
         private boolean isCategoryEnabled(Policy policy, int categoryType) {
             return (policy.priorityCategories & categoryType) != 0;
         }
-
-        private boolean isEffectSuppressed(Policy policy, int effect) {
-            return (policy.suppressedVisualEffects & effect) != 0;
-        }
     }
 
     /**
diff --git a/src/com/android/settings/notification/ZenModeBehaviorSettings.java b/src/com/android/settings/notification/ZenModeSoundVibrationSettings.java
similarity index 75%
copy from src/com/android/settings/notification/ZenModeBehaviorSettings.java
copy to src/com/android/settings/notification/ZenModeSoundVibrationSettings.java
index 31542c3..d100e12 100644
--- a/src/com/android/settings/notification/ZenModeBehaviorSettings.java
+++ b/src/com/android/settings/notification/ZenModeSoundVibrationSettings.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * 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.
@@ -29,7 +29,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public class ZenModeBehaviorSettings extends ZenModeSettingsBase implements Indexable {
+public class ZenModeSoundVibrationSettings extends ZenModeSettingsBase implements Indexable {
 
     @Override
     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
@@ -42,20 +42,14 @@
         controllers.add(new ZenModeAlarmsPreferenceController(context, lifecycle));
         controllers.add(new ZenModeMediaPreferenceController(context, lifecycle));
         controllers.add(new ZenModeSystemPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeEventsPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeRemindersPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeMessagesPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeCallsPreferenceController(context, lifecycle));
-        controllers.add(new ZenModeRepeatCallersPreferenceController(context, lifecycle,
-                context.getResources().getInteger(com.android.internal.R.integer
-                .config_zen_repeat_callers_threshold)));
-        controllers.add(new ZenModeBehaviorFooterPreferenceController(context, lifecycle));
+        controllers.add(new ZenModeBehaviorFooterPreferenceController(context, lifecycle,
+                R.string.zen_sound_footer));
         return controllers;
     }
 
     @Override
     protected int getPreferenceScreenResId() {
-        return R.xml.zen_mode_behavior_settings;
+        return R.xml.zen_mode_sound_vibration_settings;
     }
 
     @Override
@@ -66,7 +60,7 @@
     /**
      * For Search.
      */
-    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
             new BaseSearchIndexProvider() {
 
                 @Override
@@ -75,7 +69,7 @@
                     final ArrayList<SearchIndexableResource> result = new ArrayList<>();
 
                     final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.zen_mode_behavior_settings;
+                    sir.xmlResId = R.xml.zen_mode_sound_vibration_settings;
                     result.add(sir);
                     return result;
                 }
diff --git a/src/com/android/settings/search/SearchIndexableResourcesImpl.java b/src/com/android/settings/search/SearchIndexableResourcesImpl.java
index d5e4eb9..0001c7d 100644
--- a/src/com/android/settings/search/SearchIndexableResourcesImpl.java
+++ b/src/com/android/settings/search/SearchIndexableResourcesImpl.java
@@ -75,10 +75,12 @@
 import com.android.settings.notification.ConfigureNotificationSettings;
 import com.android.settings.notification.SoundSettings;
 import com.android.settings.notification.ZenModeAutomationSettings;
-import com.android.settings.notification.ZenModeBehaviorSettings;
+import com.android.settings.notification.ZenModeCallsSettings;
+import com.android.settings.notification.ZenModeMsgEventReminderSettings;
 import com.android.settings.notification.ZenModeBlockedEffectsSettings;
 import com.android.settings.notification.ZenModeRestrictNotificationsSettings;
 import com.android.settings.notification.ZenModeSettings;
+import com.android.settings.notification.ZenModeSoundVibrationSettings;
 import com.android.settings.print.PrintSettingsFragment;
 import com.android.settings.security.EncryptionAndCredential;
 import com.android.settings.security.LockscreenDashboardFragment;
@@ -178,7 +180,9 @@
         addIndex(LockscreenDashboardFragment.class);
         addIndex(UsbDetailsFragment.class);
         addIndex(WifiDisplaySettings.class);
-        addIndex(ZenModeBehaviorSettings.class);
+        addIndex(ZenModeMsgEventReminderSettings.class);
+        addIndex(ZenModeCallsSettings.class);
+        addIndex(ZenModeSoundVibrationSettings.class);
         addIndex(ZenModeBlockedEffectsSettings.class);
         addIndex(ZenModeAutomationSettings.class);
         addIndex(ZenModeRestrictNotificationsSettings.class);
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorCallsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorCallsPreferenceControllerTest.java
new file mode 100644
index 0000000..70e7919
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorCallsPreferenceControllerTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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 org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.NotificationManager;
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+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.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public final class ZenModeBehaviorCallsPreferenceControllerTest {
+
+    private ZenModeBehaviorCallsPreferenceController mController;
+    @Mock
+    private NotificationManager mNotificationManager;
+    @Mock
+    private NotificationManager.Policy mPolicy;
+
+    private Context mContext;
+    @Mock
+    private ZenModeBackend mBackend;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        ShadowApplication shadowApplication = ShadowApplication.getInstance();
+        shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNotificationManager);
+
+        mContext = RuntimeEnvironment.application;
+        when(mNotificationManager.getNotificationPolicy()).thenReturn(mPolicy);
+
+        mController = new ZenModeBehaviorCallsPreferenceController(
+                mContext, mock(Lifecycle.class));
+        ReflectionHelpers.setField(mController, "mBackend", mBackend);
+    }
+
+    @Test
+    public void testIsAvailable() {
+        assertTrue(mController.isAvailable());
+    }
+
+    @Test
+    public void testHasSummary() {
+        Preference pref = mock(Preference.class);
+        mController.updateState(pref);
+        verify(pref).setSummary(any());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorFooterPreferenceControllerTest.java
index 2de559e..5020598 100644
--- a/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorFooterPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorFooterPreferenceControllerTest.java
@@ -41,6 +41,7 @@
 import android.support.v7.preference.PreferenceScreen;
 import android.util.ArrayMap;
 
+import com.android.settings.R;
 import com.android.settings.notification.AbstractZenModePreferenceController.ZenModeConfigWrapper;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
 import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -77,6 +78,7 @@
 
     private Context mContext;
     private ContentResolver mContentResolver;
+    private int mTitleResId = R.string.zen_sound_title;
 
     @Before
     public void setup() {
@@ -88,8 +90,8 @@
         mContentResolver = RuntimeEnvironment.application.getContentResolver();
         when(mNotificationManager.getZenModeConfig()).thenReturn(mZenModeConfig);
 
-        mController =
-            new ZenModeBehaviorFooterPreferenceController(mContext, mock(Lifecycle.class));
+        mController = new ZenModeBehaviorFooterPreferenceController(
+                mContext, mock(Lifecycle.class), mTitleResId);
         ReflectionHelpers.setField(mController, "mZenModeConfigWrapper", mConfigWrapper);
 
         when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
@@ -112,13 +114,13 @@
     @Test
     public void priorityOnly_footerIsAvailable() {
         Settings.Global.putInt(mContentResolver, ZEN_MODE, ZEN_MODE_IMPORTANT_INTERRUPTIONS);
-        assertFalse(mController.isAvailable());
+        assertTrue(mController.isAvailable());
     }
 
     @Test
-    public void zenModeOff_footerIsNotAvailable() {
+    public void zenModeOff_footerIsAvailable() {
         Settings.Global.putInt(mContentResolver, ZEN_MODE, ZEN_MODE_OFF);
-        assertFalse(mController.isAvailable());
+        assertTrue(mController.isAvailable());
     }
 
     @Test
@@ -126,7 +128,7 @@
         Settings.Global.putInt(mContentResolver, ZEN_MODE, ZEN_MODE_OFF);
         mController.updateState(mockPref);
 
-        verify(mockPref, never()).setTitle(any(String.class));
+        verify(mockPref).setTitle(mContext.getString(mTitleResId));
     }
 
     @Test
@@ -134,7 +136,7 @@
         Settings.Global.putInt(mContentResolver, ZEN_MODE, ZEN_MODE_IMPORTANT_INTERRUPTIONS);
         mController.updateState(mockPref);
 
-        verify(mockPref, never()).setTitle(any(String.class));
+        verify(mockPref).setTitle(mContext.getString(mTitleResId));
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorMsgEventReminderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorMsgEventReminderPreferenceControllerTest.java
new file mode 100644
index 0000000..afd9f71
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorMsgEventReminderPreferenceControllerTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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 org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.NotificationManager;
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+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.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public final class ZenModeBehaviorMsgEventReminderPreferenceControllerTest {
+
+    private ZenModeBehaviorMsgEventReminderPreferenceController mController;
+    @Mock
+    private NotificationManager mNotificationManager;
+    @Mock
+    private NotificationManager.Policy mPolicy;
+
+    private Context mContext;
+    @Mock
+    private ZenModeBackend mBackend;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        ShadowApplication shadowApplication = ShadowApplication.getInstance();
+        shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNotificationManager);
+
+        mContext = RuntimeEnvironment.application;
+        when(mNotificationManager.getNotificationPolicy()).thenReturn(mPolicy);
+
+        mController = new ZenModeBehaviorMsgEventReminderPreferenceController(
+                mContext, mock(Lifecycle.class));
+        ReflectionHelpers.setField(mController, "mBackend", mBackend);
+    }
+
+    @Test
+    public void testIsAvailable() {
+        assertTrue(mController.isAvailable());
+    }
+
+    @Test
+    public void testHasSummary() {
+        Preference pref = mock(Preference.class);
+        mController.updateState(pref);
+        verify(pref).setSummary(any());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorSoundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorSoundPreferenceControllerTest.java
new file mode 100644
index 0000000..a561271
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeBehaviorSoundPreferenceControllerTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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 org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.NotificationManager;
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+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.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+public final class ZenModeBehaviorSoundPreferenceControllerTest {
+
+    private ZenModeBehaviorSoundPreferenceController mController;
+    @Mock
+    private NotificationManager mNotificationManager;
+    @Mock
+    private NotificationManager.Policy mPolicy;
+
+    private Context mContext;
+    @Mock
+    private ZenModeBackend mBackend;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        ShadowApplication shadowApplication = ShadowApplication.getInstance();
+        shadowApplication.setSystemService(Context.NOTIFICATION_SERVICE, mNotificationManager);
+
+        mContext = RuntimeEnvironment.application;
+        when(mNotificationManager.getNotificationPolicy()).thenReturn(mPolicy);
+
+        mController = new ZenModeBehaviorSoundPreferenceController(
+                mContext, mock(Lifecycle.class));
+        ReflectionHelpers.setField(mController, "mBackend", mBackend);
+    }
+
+    @Test
+    public void testIsAvailable() {
+        assertTrue(mController.isAvailable());
+    }
+
+    @Test
+    public void testHasSummary() {
+        Preference pref = mock(Preference.class);
+        mController.updateState(pref);
+        verify(pref).setSummary(any());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
index b26989d..5b2782f 100644
--- a/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
@@ -20,9 +20,9 @@
 import static junit.framework.Assert.assertEquals;
 
 import android.app.NotificationManager;
+import android.app.NotificationManager.Policy;
 import android.content.Context;
 import android.provider.SearchIndexableResource;
-import android.provider.Settings;
 
 import com.android.settings.R;
 import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -47,54 +47,140 @@
     }
 
     @Test
-    public void testGetBehaviorSettingSummary_noSoundsCanBypass() {
-        NotificationManager.Policy policy = new NotificationManager.Policy(0, 0, 0);
-        final String result = mBuilder.getBehaviorSettingSummary(policy,
-                Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
-
-        String totalSilence = mContext.getString(R.string.zen_mode_no_exceptions);
-        assertEquals(totalSilence, result);
-    }
-
-    @Test
-    public void testGetBehaviorSettingSummary_alarmsAndMedia() {
-        NotificationManager.Policy policy = new NotificationManager.Policy(
-                        NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS
-                        | NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA,
-                0, 0);
-        final String result = mBuilder.getBehaviorSettingSummary(policy,
-                Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
-
-        String alarmsAndMedia = mContext.getString(R.string.join_two_items,
-                mContext.getString(R.string.zen_mode_alarms),
-                mContext.getString(R.string.zen_mode_media).toLowerCase());
-        assertEquals(alarmsAndMedia, result);
-    }
-
-    @Test
     public void testBlockedEffectsSummary_none() {
-        NotificationManager.Policy policy = new NotificationManager.Policy(0, 0, 0, 0);
+        Policy policy = new Policy(0, 0, 0, 0);
         assertEquals(mContext.getString(R.string.zen_mode_restrict_notifications_summary_muted),
                 mBuilder.getBlockedEffectsSummary(policy));
     }
 
     @Test
     public void testBlockedEffectsSummary_some() {
-        NotificationManager.Policy policy = new NotificationManager.Policy(
-                0, 0, 0, NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK);
+        Policy policy = new Policy(0, 0, 0, NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK);
         assertEquals(mContext.getString(R.string.zen_mode_restrict_notifications_summary_custom),
                 mBuilder.getBlockedEffectsSummary(policy));
     }
 
     @Test
     public void testBlockedEffectsSummary_all() {
-        NotificationManager.Policy policy = new NotificationManager.Policy(
-                0, 0, 0, 511);
+        Policy policy = new Policy(0, 0, 0, 511);
         assertEquals(mContext.getString(R.string.zen_mode_restrict_notifications_summary_hidden),
                 mBuilder.getBlockedEffectsSummary(policy));
     }
 
     @Test
+    public void testGetMsgEventReminderSettingSummary_none() {
+        Policy policy = new Policy(0, 0, 0, 0);
+        assertThat(mBuilder.getMsgEventReminderSettingSummary(policy)).isEqualTo("None");
+    }
+
+    @Test
+    public void testGetMsgEventReminderSettingSummary_single() {
+        Policy policy = new Policy(
+                Policy.PRIORITY_CATEGORY_ALARMS | Policy.PRIORITY_CATEGORY_EVENTS, 0 , 0 , 0);
+        assertThat(mBuilder.getMsgEventReminderSettingSummary(policy)).isEqualTo("Events");
+    }
+
+    @Test
+    public void testGetMsgEventReminderSettingSummary_someMsgs() {
+        Policy policy = new Policy(Policy.PRIORITY_CATEGORY_MESSAGES, 0,
+                Policy.PRIORITY_SENDERS_CONTACTS , 0);
+        assertThat(mBuilder.getMsgEventReminderSettingSummary(policy)).isEqualTo("Some messages");
+
+        policy = new Policy(Policy.PRIORITY_CATEGORY_MESSAGES, 0,
+                Policy.PRIORITY_SENDERS_STARRED , 0);
+        assertThat(mBuilder.getMsgEventReminderSettingSummary(policy)).isEqualTo("Some messages");
+    }
+
+    @Test
+    public void testGetMsgEventReminderSettingSummary_msgs() {
+        Policy policy = new Policy(Policy.PRIORITY_CATEGORY_MESSAGES, 0, 0, 0);
+        assertThat(mBuilder.getMsgEventReminderSettingSummary(policy)).isEqualTo("Messages");
+    }
+
+    @Test
+    public void testGetMsgEventReminderSettingSummary_someMsgsAndOther() {
+        Policy policy = new Policy(
+                Policy.PRIORITY_CATEGORY_MESSAGES | Policy.PRIORITY_CATEGORY_REMINDERS,
+                0, Policy.PRIORITY_SENDERS_CONTACTS , 0);
+        assertThat(mBuilder.getMsgEventReminderSettingSummary(policy))
+                .isEqualTo("Some messages and reminders");
+    }
+
+    @Test
+    public void testGetMsgEventReminderSettingSummary_someMsgsAndAllOthers() {
+        Policy policy = new Policy(Policy.PRIORITY_CATEGORY_EVENTS
+                | Policy.PRIORITY_CATEGORY_MESSAGES | Policy.PRIORITY_CATEGORY_REMINDERS,
+                0, Policy.PRIORITY_SENDERS_CONTACTS , 0);
+        assertThat(mBuilder.getMsgEventReminderSettingSummary(policy))
+                .isEqualTo("Some messages, events, and reminders");
+    }
+
+    @Test
+    public void testGetMsgEventReminderSettingSummary_noMsgsAndOther() {
+        Policy policy = new Policy(
+                Policy.PRIORITY_CATEGORY_EVENTS | Policy.PRIORITY_CATEGORY_REMINDERS,
+                0,0, 0);
+        assertThat(mBuilder.getMsgEventReminderSettingSummary(policy))
+                .isEqualTo("Events and reminders");
+    }
+
+    @Test
+    public void testGetCallsSettingSummary_none() {
+        Policy policy = new Policy(0, 0, 0, 0);
+        assertThat(mBuilder.getCallsSettingSummary(policy)).isEqualTo("None");
+    }
+
+    @Test
+    public void testGetCallsSettingSummary_contacts() {
+        Policy policy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS | Policy.PRIORITY_CATEGORY_CALLS,
+                Policy.PRIORITY_SENDERS_CONTACTS, 0, 0);
+        assertThat(mBuilder.getCallsSettingSummary(policy)).isEqualTo("From contacts only");
+    }
+
+    @Test
+    public void testGetCallsSettingSummary_repeatCallers() {
+        Policy policy = new Policy(Policy.PRIORITY_CATEGORY_REPEAT_CALLERS, 0, 0, 0);
+        assertThat(mBuilder.getCallsSettingSummary(policy)).isEqualTo("From repeat callers only");
+    }
+
+    @Test
+    public void testGetCallsSettingSummary_starredRepeatCallers() {
+        Policy policy = new Policy(
+                Policy.PRIORITY_CATEGORY_REPEAT_CALLERS | Policy.PRIORITY_CATEGORY_CALLS,
+                Policy.PRIORITY_SENDERS_STARRED, 0, 0);
+        assertThat(mBuilder.getCallsSettingSummary(policy))
+                .isEqualTo("From starred contacts and repeat callers");
+    }
+
+    @Test
+    public void testGetSoundSettingSummary_allOff() {
+        Policy policy = new Policy(0, 0, 0, 0);
+        assertThat(mBuilder.getSoundSettingSummary(policy)).isEqualTo("Muted");
+    }
+
+    @Test
+    public void testGetSoundSettingSummary_allOn() {
+        Policy policy = new Policy(Policy.PRIORITY_CATEGORY_ALARMS | Policy.PRIORITY_CATEGORY_SYSTEM
+                | Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0);
+        assertThat(mBuilder.getSoundSettingSummary(policy))
+                .isEqualTo("Muted, but allow alarms, media, and touch sounds");
+    }
+
+    @Test
+    public void testGetSoundSettingSummary_allOffButOne() {
+        Policy policy = new Policy(Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0);
+        assertThat(mBuilder.getSoundSettingSummary(policy)).isEqualTo("Muted, but allow media");
+    }
+
+    @Test
+    public void testGetSoundSettingSummary_allOffButTwo() {
+        Policy policy = new Policy(Policy.PRIORITY_CATEGORY_SYSTEM
+                | Policy.PRIORITY_CATEGORY_MEDIA, 0, 0, 0);
+        assertThat(mBuilder.getSoundSettingSummary(policy))
+                .isEqualTo("Muted, but allow media and touch sounds");
+    }
+
+    @Test
     public void searchProvider_shouldIndexDefaultXml() {
         final List<SearchIndexableResource> sir = ZenModeSettings.SEARCH_INDEX_DATA_PROVIDER
                 .getXmlResourcesToIndex(mContext, true /* enabled */);