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.NonNull;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settingslib.notification.modes.ZenMode;
|
import com.android.settingslib.notification.modes.ZenMode;
|
||||||
import com.android.settingslib.notification.modes.ZenModesBackend;
|
import com.android.settingslib.notification.modes.ZenModesBackend;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
@@ -51,11 +51,10 @@ class ZenModeSetSchedulePreferenceController extends AbstractZenModePreferenceCo
|
|||||||
private final SimpleDateFormat mShortDayFormat = new SimpleDateFormat("EEEEE");
|
private final SimpleDateFormat mShortDayFormat = new SimpleDateFormat("EEEEE");
|
||||||
private final SimpleDateFormat mLongDayFormat = new SimpleDateFormat("EEEE");
|
private final SimpleDateFormat mLongDayFormat = new SimpleDateFormat("EEEE");
|
||||||
|
|
||||||
private static final String TAG = "ZenModeSetSchedulePreferenceController";
|
private DashboardFragment mParent;
|
||||||
private Fragment mParent;
|
|
||||||
private ZenModeConfig.ScheduleInfo mSchedule;
|
private ZenModeConfig.ScheduleInfo mSchedule;
|
||||||
|
|
||||||
ZenModeSetSchedulePreferenceController(Context context, Fragment parent, String key,
|
ZenModeSetSchedulePreferenceController(Context context, DashboardFragment parent, String key,
|
||||||
ZenModesBackend backend) {
|
ZenModesBackend backend) {
|
||||||
super(context, key, backend);
|
super(context, key, backend);
|
||||||
mParent = parent;
|
mParent = parent;
|
||||||
@@ -154,11 +153,7 @@ class ZenModeSetSchedulePreferenceController extends AbstractZenModePreferenceCo
|
|||||||
|
|
||||||
private View.OnClickListener timePickerLauncher(int hour, int minute,
|
private View.OnClickListener timePickerLauncher(int hour, int minute,
|
||||||
ZenModeTimePickerFragment.TimeSetter timeSetter) {
|
ZenModeTimePickerFragment.TimeSetter timeSetter) {
|
||||||
return v -> {
|
return v -> ZenModeTimePickerFragment.show(mParent, hour, minute, timeSetter);
|
||||||
final ZenModeTimePickerFragment frag = new ZenModeTimePickerFragment(mContext, hour,
|
|
||||||
minute, timeSetter);
|
|
||||||
frag.show(mParent.getParentFragmentManager(), TAG);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static int[] getDaysOfWeekForLocale(Calendar c) {
|
protected static int[] getDaysOfWeekForLocale(Calendar c) {
|
||||||
|
@@ -16,10 +16,11 @@
|
|||||||
|
|
||||||
package com.android.settings.notification.modes;
|
package com.android.settings.notification.modes;
|
||||||
|
|
||||||
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.TimePickerDialog;
|
import android.app.TimePickerDialog;
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.format.DateFormat;
|
import android.text.format.DateFormat;
|
||||||
import android.widget.TimePicker;
|
import android.widget.TimePicker;
|
||||||
@@ -27,37 +28,54 @@ import android.widget.TimePicker;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
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.
|
* 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
|
public class ZenModeTimePickerFragment extends InstrumentedDialogFragment implements
|
||||||
TimePickerDialog.OnTimeSetListener {
|
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) {
|
@NonNull TimeSetter timeSetter) {
|
||||||
super();
|
ZenModeTimePickerFragment fragment = new ZenModeTimePickerFragment();
|
||||||
mContext = context;
|
fragment.mHour = hour;
|
||||||
mHour = hour;
|
fragment.mMinute = minute;
|
||||||
mMinute = minute;
|
fragment.mTimeSetter = timeSetter;
|
||||||
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
|
@Override
|
||||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||||
return new TimePickerDialog(mContext, this, mHour, mMinute,
|
return new TimePickerDialog(getContext(), this, mHour, mMinute,
|
||||||
DateFormat.is24HourFormat(mContext));
|
DateFormat.is24HourFormat(getContext()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calls the provided TimeSetter's setTime() method when a time is set on the TimePicker.
|
* 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) {
|
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
|
||||||
mTimeSetter.setTime(hourOfDay, minute);
|
checkNotNull(mTimeSetter).setTime(hourOfDay, minute);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -32,10 +32,10 @@ import android.service.notification.ZenModeConfig;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ToggleButton;
|
import android.widget.ToggleButton;
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment;
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settings.dashboard.DashboardFragment;
|
||||||
import com.android.settingslib.notification.modes.TestModeBuilder;
|
import com.android.settingslib.notification.modes.TestModeBuilder;
|
||||||
import com.android.settingslib.notification.modes.ZenMode;
|
import com.android.settingslib.notification.modes.ZenMode;
|
||||||
import com.android.settingslib.notification.modes.ZenModesBackend;
|
import com.android.settingslib.notification.modes.ZenModesBackend;
|
||||||
@@ -60,7 +60,7 @@ public class ZenModeSetSchedulePreferenceControllerTest {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private Fragment mParent;
|
private DashboardFragment mParent;
|
||||||
@Mock
|
@Mock
|
||||||
private Calendar mCalendar;
|
private Calendar mCalendar;
|
||||||
@Mock
|
@Mock
|
||||||
|
Reference in New Issue
Block a user