Files
app_Settings/src/com/android/settings/notification/modes/ZenModeTimePickerFragment.java
Matías Hernández e5720f43ee 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
2024-10-04 18:58:53 +02:00

94 lines
3.1 KiB
Java

/*
* Copyright (C) 2024 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.os.Bundle;
import android.text.format.DateFormat;
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 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) {
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(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) {
checkNotNull(mTimeSetter).setTime(hourOfDay, minute);
}
@Override
public int getMetricsCategory() {
return SettingsEnums.DIALOG_ZEN_TIMEPICKER;
}
/**
* Interface for a method to pass into the TimePickerFragment that specifies what to do when the
* time is updated.
*/
public interface TimeSetter {
void setTime(int hour, int minute);
}
}