Don't crash when recreating ZenModeTimePickerFragment

Instead, just bail out.

Fixes: 369814629
Test: manual, with don't keep activities
Flag: android.app.modes_ui
Change-Id: I893b6363801b3a56bc29999dd801d7c8152cb5e8
This commit is contained in:
Matías Hernández
2024-10-04 18:58:53 +02:00
parent aad13d8836
commit e5720f43ee
3 changed files with 38 additions and 25 deletions

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