diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 00b2e94..d115a40 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -742,7 +742,7 @@
             android:name=".notification.ZenOnboardingActivity"
             android:label="@string/zen_onboarding_dnd_visual_disturbances_header"
             android:icon="@drawable/ic_settings_notifications"
-            android:theme="@style/Theme.Settings.NoActionBar"
+            android:theme="@*android:style/Theme.DeviceDefault.Settings.Dialog.NoActionBar"
             android:exported="true"
             android:taskAffinity="com.android.settings"
             android:parentActivityName="Settings">
diff --git a/res/layout/zen_onboarding.xml b/res/layout/zen_onboarding.xml
index 6840443..6467955 100644
--- a/res/layout/zen_onboarding.xml
+++ b/res/layout/zen_onboarding.xml
@@ -16,152 +16,49 @@
 -->
 <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_width="320dp"
+    android:layout_height="wrap_content"
     android:padding="20dp">
 
-    <ImageView
-        android:id="@+id/header_icon"
-        android:layout_width="32dp"
-        android:layout_height="32dp"
-        android:layout_alignParentTop="true"
-        android:layout_centerHorizontal="true"
-        android:src="@drawable/ic_zen"
-        android:tint="?android:attr/colorAccent"/>
-
     <TextView
         android:id="@+id/header"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_below="@+id/header_icon"
-        android:layout_centerHorizontal="true"
-        android:layout_marginTop="12dp"
         android:text="@string/zen_onboarding_dnd_visual_disturbances_header"
-        android:textAppearance="@android:style/TextAppearance.Material.Headline" />
+        android:textAppearance="@android:style/TextAppearance.Material.DialogWindowTitle" />
 
     <TextView
         android:id="@+id/feature_description"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_below="@+id/header"
-        android:layout_centerHorizontal="true"
-        android:textAlignment="center"
-        android:layout_marginTop="14dp"
+        android:layout_marginTop="24dp"
         android:textAppearance="?android:attr/textAppearanceListItem"
         android:text="@string/zen_onboarding_dnd_visual_disturbances_description" />
 
-    <LinearLayout
-        android:id="@+id/screen_off"
+    <RelativeLayout
+        android:id="@+id/buttons"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@+id/feature_description"
-        android:layout_centerHorizontal="true"
-        android:layout_marginTop="35dp"
-        android:orientation="horizontal">
+        android:layout_marginTop="35dp">
 
-        <CheckBox
-            android:id="@+id/screen_off_option"
+        <Button
+            android:id="@+id/no"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:paddingHorizontal="8dp"
-            android:onClick="logClick" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical">
-
-            <TextView
-                android:id="@+id/screen_off_title"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/zen_onboarding_screen_off_title"
-                android:textAppearance="?android:attr/textAppearanceListItem" />
-
-            <TextView
-                android:id="@+id/screen_off_summary"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/zen_onboarding_screen_off_summary" />
-        </LinearLayout>
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:id="@+id/screen_on"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/screen_off"
-        android:layout_centerHorizontal="true"
-        android:layout_marginTop="10dp"
-        android:orientation="horizontal">
-
-        <CheckBox
-            android:id="@+id/screen_on_option"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:paddingHorizontal="8dp"
-            android:onClick="logClick" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical">
-
-            <TextView
-                android:id="@+id/screen_on_title"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/zen_onboarding_screen_on_title"
-                android:textAppearance="?android:attr/textAppearanceListItem" />
-
-            <TextView
-                android:id="@+id/screen_on_summary"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/zen_onboarding_screen_on_summary" />
-        </LinearLayout>
-
-    </LinearLayout>
-
-    <TextView
-        android:id="@+id/further_customize"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/screen_on"
-        android:layout_centerHorizontal="true"
-        android:layout_marginTop="20dp"
-        android:textAppearance="?android:attr/textAppearanceListItem"
-        android:text="@string/zen_onboarding_more_options" />
-
-    <RelativeLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_below="@+id/further_customize"
-        android:layout_marginTop="35dp"
-        android:id="@+id/buttons">
-
-        <TextView
-            android:id="@+id/settings"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentStart="true"
-            android:layout_weight="1"
-            android:layout_centerInParent="true"
-            android:text="@string/zen_onboarding_settings"
-            android:textAppearance="?android:attr/textAppearanceListItem"
-            android:textColor="?android:attr/colorControlActivated"
-            android:onClick="launchSettings" />
+            android:text="@string/zen_onboarding_no_update"
+            android:layout_toStartOf="@+id/ok"
+            style="@style/TextAppearance.ZenOnboardingButton"
+            android:onClick="close" />
 
         <Button
             android:id="@+id/ok"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentEnd="true"
-            android:layout_weight="1"
-            android:layout_centerInParent="true"
             android:text="@string/zen_onboarding_ok"
-            style="@style/ActionPrimaryButton"
+            style="@style/TextAppearance.ZenOnboardingButton"
             android:onClick="save" />
     </RelativeLayout>
 </RelativeLayout>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7bdb069..bd7a47c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -7360,14 +7360,26 @@
         <item quantity="other"><xliff:g id="on_count" example="3">%d</xliff:g> rules can turn on automatically</item>
     </plurals>
 
-    <string name="zen_onboarding_ok">Ok</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]-->
+    <string name="zen_onboarding_no_update">Don\'t update</string>
+    <!-- Do not disturb onboarding dialog, description of new settings [CHAR LIMIT=NONE]-->
+    <string name="zen_onboarding_dnd_visual_disturbances_description">Your phone mutes sounds &amp; vibrations\n\nUpdate settings to also:\n\n- Hide notifications\n\n- Only show calls from starred contacts</string>
+    <!-- Do not disturb onboarding dialog, header prompt for settings [CHAR LIMIT=80]-->
+    <string name="zen_onboarding_dnd_visual_disturbances_header">Update your Do Not Disturb settings?</string>
+
+    <!-- obsolete -->
     <string name="zen_onboarding_settings">Settings</string>
+    <!-- obsolete -->
     <string name="zen_onboarding_more_options">You can further customize this in Settings.</string>
+    <!-- obsolete -->
     <string name="zen_onboarding_screen_on_title">Block when the screen is on</string>
+    <!-- obsolete -->
     <string name="zen_onboarding_screen_off_title">Block when the screen is off</string>
-    <string name="zen_onboarding_dnd_visual_disturbances_description">Do Not Disturb can do more than block unwanted sounds - it can block visuals too. This may be helpful if you\'re trying to sleep, focus, or limit time spent on your phone.</string>
-    <string name="zen_onboarding_dnd_visual_disturbances_header">Block sounds and visuals</string>
+    <!-- obsolete -->
     <string name="zen_onboarding_screen_off_summary">Don\'t turn on the screen or wake for notifications</string>
+    <!-- obsolete -->
     <string name="zen_onboarding_screen_on_summary">Don\'t show notifications at all, except for basic phone activity and status</string>
 
     <!-- Work Sounds: Work sound settings section header.  [CHAR LIMIT=50] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 9075891..819202e 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -432,6 +432,17 @@
         <item name="android:ellipsize">marquee</item>
     </style>
 
+  <style name="TextAppearance.ZenOnboardingButton">
+        <item name="android:fontFamily">sans-serif-medium</item>
+        <item name="android:textSize">14sp</item>
+        <item name="android:textColor">?android:attr/colorAccent</item>
+        <item name="android:background">@drawable/btn_borderless_rect</item>
+        <item name="android:gravity">center</item>
+        <item name="android:focusable">true</item>
+        <item name="android:paddingStart">8dp</item>
+        <item name="android:paddingEnd">8dp</item>
+    </style>
+
     <style name="ActionPrimaryButton" parent="android:Widget.DeviceDefault.Button.Colored"/>
 
     <style name="ActionSecondaryButton" parent="android:Widget.DeviceDefault.Button"/>
diff --git a/src/com/android/settings/notification/ZenOnboardingActivity.java b/src/com/android/settings/notification/ZenOnboardingActivity.java
index b38bad6..baca811 100644
--- a/src/com/android/settings/notification/ZenOnboardingActivity.java
+++ b/src/com/android/settings/notification/ZenOnboardingActivity.java
@@ -33,8 +33,6 @@
 
     private NotificationManager mNm;
     private MetricsLogger mMetrics;
-    CheckBox mScreenOn;
-    CheckBox mScreenOff;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -48,10 +46,6 @@
     @VisibleForTesting
     protected void setupUI() {
         setContentView(R.layout.zen_onboarding);
-        mScreenOn = findViewById(R.id.screen_on_option);
-        mScreenOff = findViewById(R.id.screen_off_option);
-        mScreenOn.setChecked(true);
-        mScreenOff.setChecked(true);
 
         mMetrics.visible(MetricsEvent.SETTINGS_ZEN_ONBOARDING);
     }
@@ -66,39 +60,19 @@
         mMetrics = ml;
     }
 
-    public void logClick(View view) {
-        CheckBox checkbox = (CheckBox) view;
-        switch (checkbox.getId()) {
-            case R.id.screen_on_option:
-                mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_SCREEN_ON, checkbox.isChecked());
-                break;
-            case R.id.screen_off_option:
-                mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_SCREEN_OFF,
-                        checkbox.isChecked());
-                break;
-        }
-    }
-
-    public void launchSettings(View button) {
-        mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_SETTINGS);
-        Intent settings = new Intent(Settings.ZEN_MODE_BLOCKED_EFFECTS_SETTINGS);
-        settings.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
-        startActivity(settings);
+    public void close(View button) {
+        mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
+        finishAndRemoveTask();
     }
 
     public void save(View button) {
         mMetrics.action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
         NotificationManager.Policy policy = mNm.getNotificationPolicy();
-        int currentEffects = policy.suppressedVisualEffects;
-
-        currentEffects = NotificationManager.Policy.toggleScreenOnEffectsSuppressed(
-                currentEffects, mScreenOn != null && mScreenOn.isChecked());
-        currentEffects = NotificationManager.Policy.toggleScreenOffEffectsSuppressed(
-                currentEffects, mScreenOff != null && mScreenOff.isChecked());
 
         NotificationManager.Policy newPolicy = new NotificationManager.Policy(
-                policy.priorityCategories, policy.priorityCallSenders,
-                policy.priorityMessageSenders, currentEffects);
+                policy.priorityCategories, NotificationManager.Policy.PRIORITY_SENDERS_STARRED,
+                policy.priorityMessageSenders,
+                NotificationManager.Policy.getAllSuppressedVisualEffects());
         mNm.setNotificationPolicy(newPolicy);
 
         finishAndRemoveTask();
diff --git a/tests/robotests/src/com/android/settings/notification/ZenOnboardingActivityTest.java b/tests/robotests/src/com/android/settings/notification/ZenOnboardingActivityTest.java
index 3fd2239..57dc855 100644
--- a/tests/robotests/src/com/android/settings/notification/ZenOnboardingActivityTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ZenOnboardingActivityTest.java
@@ -30,6 +30,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
@@ -59,9 +61,6 @@
     @Mock
     NotificationManager mNm;
 
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private Context mContext;
-
     ZenOnboardingActivity mActivity;
 
     @Before
@@ -83,44 +82,10 @@
     }
 
     @Test
-    public void toggleCheckBoxRecordsEvents_screenOn() {
-        mActivity.findViewById(R.id.screen_on_option).performClick();
-
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_SCREEN_ON, false);
-
-        mActivity.findViewById(R.id.screen_on_option).performClick();
-
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_SCREEN_ON, true);
-    }
-
-    @Test
-    public void toggleCheckBoxRecordsEvents_screenOff() {
-        mActivity.findViewById(R.id.screen_off_option).performClick();
-
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_SCREEN_OFF, false);
-
-        mActivity.findViewById(R.id.screen_off_option).performClick();
-
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_SCREEN_OFF, true);
-    }
-
-    @Test
-    public void save_screenOn() {
-        Policy policy = new Policy(
-                PRIORITY_CATEGORY_ALARMS, 0, 0,
-                SUPPRESSED_EFFECT_SCREEN_ON
-                        | SUPPRESSED_EFFECT_SCREEN_OFF
-                        | SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
-                        | SUPPRESSED_EFFECT_LIGHTS
-                        | SUPPRESSED_EFFECT_PEEK
-                        | SUPPRESSED_EFFECT_STATUS_BAR
-                        | SUPPRESSED_EFFECT_BADGE
-                        | SUPPRESSED_EFFECT_AMBIENT
-                        | SUPPRESSED_EFFECT_NOTIFICATION_LIST);
+    public void save() {
+        Policy policy = new Policy(PRIORITY_CATEGORY_ALARMS, 0, 0, SUPPRESSED_EFFECT_SCREEN_ON);
         when(mNm.getNotificationPolicy()).thenReturn(policy);
 
-        mActivity.findViewById(R.id.screen_off_option).performClick();
-
         mActivity.save(null);
 
         verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
@@ -130,14 +95,14 @@
 
         Policy actual = captor.getValue();
         assertThat(actual.priorityCategories).isEqualTo(PRIORITY_CATEGORY_ALARMS);
+        assertThat(actual.priorityCallSenders).isEqualTo(Policy.PRIORITY_SENDERS_STARRED);
+        assertThat(actual.priorityMessageSenders).isEqualTo(Policy.PRIORITY_SENDERS_ANY);
         assertThat(actual.suppressedVisualEffects).isEqualTo(
-                SUPPRESSED_EFFECT_SCREEN_ON | SUPPRESSED_EFFECT_NOTIFICATION_LIST
-                        | SUPPRESSED_EFFECT_BADGE | SUPPRESSED_EFFECT_STATUS_BAR
-                        | SUPPRESSED_EFFECT_PEEK);
+                Policy.getAllSuppressedVisualEffects());
     }
 
     @Test
-    public void save_screenOff() {
+    public void close() {
         Policy policy = new Policy(
                 PRIORITY_CATEGORY_ALARMS, PRIORITY_SENDERS_ANY, 0,
                 SUPPRESSED_EFFECT_SCREEN_ON
@@ -151,72 +116,10 @@
                         | SUPPRESSED_EFFECT_NOTIFICATION_LIST);
         when(mNm.getNotificationPolicy()).thenReturn(policy);
 
-        mActivity.findViewById(R.id.screen_on_option).performClick();
+        mActivity.close(null);
 
-        mActivity.save(null);
+        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_KEEP_CURRENT_SETTINGS);
 
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
-
-        ArgumentCaptor<Policy> captor = ArgumentCaptor.forClass(Policy.class);
-        verify(mNm).setNotificationPolicy(captor.capture());
-
-        Policy actual = captor.getValue();
-        assertThat(actual.priorityCallSenders).isEqualTo(PRIORITY_SENDERS_ANY);
-        assertThat(actual.suppressedVisualEffects).isEqualTo(
-                SUPPRESSED_EFFECT_SCREEN_OFF | SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
-                        | SUPPRESSED_EFFECT_LIGHTS | SUPPRESSED_EFFECT_AMBIENT);
-    }
-
-    @Test
-    public void save_none() {
-        Policy policy = new Policy(0, 0, 0,
-                SUPPRESSED_EFFECT_SCREEN_ON
-                        | SUPPRESSED_EFFECT_SCREEN_OFF
-                        | SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
-                        | SUPPRESSED_EFFECT_LIGHTS
-                        | SUPPRESSED_EFFECT_PEEK
-                        | SUPPRESSED_EFFECT_STATUS_BAR
-                        | SUPPRESSED_EFFECT_BADGE
-                        | SUPPRESSED_EFFECT_AMBIENT
-                        | SUPPRESSED_EFFECT_NOTIFICATION_LIST);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        mActivity.findViewById(R.id.screen_on_option).performClick();
-        mActivity.findViewById(R.id.screen_off_option).performClick();
-
-        mActivity.save(null);
-
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
-
-        ArgumentCaptor<Policy> captor = ArgumentCaptor.forClass(Policy.class);
-        verify(mNm).setNotificationPolicy(captor.capture());
-
-        Policy actual = captor.getValue();
-        assertThat(actual.suppressedVisualEffects).isEqualTo(0);
-    }
-
-    @Test
-    public void save_all() {
-        Policy policy = new Policy(0, 0, 0, 0);
-        when(mNm.getNotificationPolicy()).thenReturn(policy);
-
-        mActivity.save(null);
-
-        verify(mMetricsLogger).action(MetricsEvent.ACTION_ZEN_ONBOARDING_OK);
-
-        ArgumentCaptor<Policy> captor = ArgumentCaptor.forClass(Policy.class);
-        verify(mNm).setNotificationPolicy(captor.capture());
-
-        Policy actual = captor.getValue();
-        assertThat(actual.suppressedVisualEffects).isEqualTo(
-                SUPPRESSED_EFFECT_SCREEN_ON
-                        | SUPPRESSED_EFFECT_SCREEN_OFF
-                        | SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
-                        | SUPPRESSED_EFFECT_LIGHTS
-                        | SUPPRESSED_EFFECT_PEEK
-                        | SUPPRESSED_EFFECT_STATUS_BAR
-                        | SUPPRESSED_EFFECT_BADGE
-                        | SUPPRESSED_EFFECT_AMBIENT
-                        | SUPPRESSED_EFFECT_NOTIFICATION_LIST);
+        verify(mNm, never()).setNotificationPolicy(any());
     }
 }
