Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25d75c0d authored by Matías Hernández's avatar Matías Hernández Committed by Android (Google) Code Review
Browse files

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

parents 817cc47b e5720f43
Loading
Loading
Loading
Loading
+4 −9
Original line number Diff line number Diff line
@@ -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) {
+32 −14
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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