Merge "Don't crash when recreating ZenModeTimePickerFragment" into main

This commit is contained in:
Matías Hernández
2024-10-07 16:49:20 +00:00
committed by Android (Google) Code Review
3 changed files with 38 additions and 25 deletions

View File

@@ -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) {

View File

@@ -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

View File

@@ -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