Merge "Don't crash when recreating ZenModeTimePickerFragment" into main
This commit is contained in:
committed by
Android (Google) Code Review
commit
25d75c0df7
@@ -27,10 +27,10 @@ import android.widget.ToggleButton;
|
||||
|
||||
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 @@ class ZenModeSetSchedulePreferenceController extends AbstractZenModePreferenceCo
|
||||
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 @@ class ZenModeSetSchedulePreferenceController extends AbstractZenModePreferenceCo
|
||||
|
||||
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) {
|
||||
|
@@ -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 android.widget.TimePicker;
|
||||
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
|
||||
|
@@ -32,10 +32,10 @@ import android.service.notification.ZenModeConfig;
|
||||
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 @@ public class ZenModeSetSchedulePreferenceControllerTest {
|
||||
private Context mContext;
|
||||
|
||||
@Mock
|
||||
private Fragment mParent;
|
||||
private DashboardFragment mParent;
|
||||
@Mock
|
||||
private Calendar mCalendar;
|
||||
@Mock
|
||||
|
Reference in New Issue
Block a user