diff --git a/src/com/android/settings/notification/modes/ZenModeSetSchedulePreferenceController.java b/src/com/android/settings/notification/modes/ZenModeSetSchedulePreferenceController.java
index d6b2f01..651b7cc 100644
--- a/src/com/android/settings/notification/modes/ZenModeSetSchedulePreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeSetSchedulePreferenceController.java
@@ -27,10 +27,10 @@
 
 import androidx.annotation.NonNull;
 import androidx.annotation.VisibleForTesting;
-import androidx.fragment.app.Fragment;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
 import com.android.settingslib.notification.modes.ZenMode;
 import com.android.settingslib.notification.modes.ZenModesBackend;
 import com.android.settingslib.widget.LayoutPreference;
@@ -51,11 +51,10 @@
     private final SimpleDateFormat mShortDayFormat = new SimpleDateFormat("EEEEE");
     private final SimpleDateFormat mLongDayFormat = new SimpleDateFormat("EEEE");
 
-    private static final String TAG = "ZenModeSetSchedulePreferenceController";
-    private Fragment mParent;
+    private DashboardFragment mParent;
     private ZenModeConfig.ScheduleInfo mSchedule;
 
-    ZenModeSetSchedulePreferenceController(Context context, Fragment parent, String key,
+    ZenModeSetSchedulePreferenceController(Context context, DashboardFragment parent, String key,
             ZenModesBackend backend) {
         super(context, key, backend);
         mParent = parent;
@@ -154,11 +153,7 @@
 
     private View.OnClickListener timePickerLauncher(int hour, int minute,
             ZenModeTimePickerFragment.TimeSetter timeSetter) {
-        return v -> {
-            final ZenModeTimePickerFragment frag = new ZenModeTimePickerFragment(mContext, hour,
-                    minute, timeSetter);
-            frag.show(mParent.getParentFragmentManager(), TAG);
-        };
+        return v -> ZenModeTimePickerFragment.show(mParent, hour, minute, timeSetter);
     }
 
     protected static int[] getDaysOfWeekForLocale(Calendar c) {
diff --git a/src/com/android/settings/notification/modes/ZenModeTimePickerFragment.java b/src/com/android/settings/notification/modes/ZenModeTimePickerFragment.java
index 3fa5394..4594e5c 100644
--- a/src/com/android/settings/notification/modes/ZenModeTimePickerFragment.java
+++ b/src/com/android/settings/notification/modes/ZenModeTimePickerFragment.java
@@ -16,10 +16,11 @@
 
 package com.android.settings.notification.modes;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+
 import android.app.Dialog;
 import android.app.TimePickerDialog;
 import android.app.settings.SettingsEnums;
-import android.content.Context;
 import android.os.Bundle;
 import android.text.format.DateFormat;
 import android.widget.TimePicker;
@@ -27,37 +28,54 @@
 import androidx.annotation.NonNull;
 
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.dashboard.DashboardFragment;
 
 /**
  * Dialog that shows when a user selects a (start or end) time to edit for a schedule-based mode.
  */
 public class ZenModeTimePickerFragment extends InstrumentedDialogFragment implements
         TimePickerDialog.OnTimeSetListener {
-    private final Context mContext;
-    private final TimeSetter mTimeSetter;
-    private final int mHour;
-    private final int mMinute;
 
-    public ZenModeTimePickerFragment(Context context, int hour, int minute,
+    private static final String TAG = "ZenModeTimePickerFragment";
+
+    private TimeSetter mTimeSetter;
+    private int mHour;
+    private int mMinute;
+
+    public static void show(DashboardFragment parent, int hour, int minute,
             @NonNull TimeSetter timeSetter) {
-        super();
-        mContext = context;
-        mHour = hour;
-        mMinute = minute;
-        mTimeSetter = timeSetter;
+        ZenModeTimePickerFragment fragment = new ZenModeTimePickerFragment();
+        fragment.mHour = hour;
+        fragment.mMinute = minute;
+        fragment.mTimeSetter = timeSetter;
+
+        fragment.show(parent.getParentFragmentManager(), TAG);
     }
 
     @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        if (mTimeSetter == null) {
+            // Probably the dialog fragment was recreated after its activity was destroyed.
+            // It's pointless to re-show the dialog if we can't do anything when its options are
+            // selected, so we don't.
+            dismiss();
+        }
+    }
+
+    @NonNull
+    @Override
     public Dialog onCreateDialog(Bundle savedInstanceState) {
-        return new TimePickerDialog(mContext, this, mHour, mMinute,
-                DateFormat.is24HourFormat(mContext));
+        return new TimePickerDialog(getContext(), this, mHour, mMinute,
+                DateFormat.is24HourFormat(getContext()));
     }
 
     /**
      * Calls the provided TimeSetter's setTime() method when a time is set on the TimePicker.
      */
+    @Override
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
-        mTimeSetter.setTime(hourOfDay, minute);
+        checkNotNull(mTimeSetter).setTime(hourOfDay, minute);
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeSetSchedulePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeSetSchedulePreferenceControllerTest.java
index d5c7f61..c378e9d 100644
--- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeSetSchedulePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeSetSchedulePreferenceControllerTest.java
@@ -32,10 +32,10 @@
 import android.view.ViewGroup;
 import android.widget.ToggleButton;
 
-import androidx.fragment.app.Fragment;
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
 import com.android.settingslib.notification.modes.TestModeBuilder;
 import com.android.settingslib.notification.modes.ZenMode;
 import com.android.settingslib.notification.modes.ZenModesBackend;
@@ -60,7 +60,7 @@
     private Context mContext;
 
     @Mock
-    private Fragment mParent;
+    private DashboardFragment mParent;
     @Mock
     private Calendar mCalendar;
     @Mock
