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

Commit 8a766c1b authored by Yuri Lin's avatar Yuri Lin Committed by Android (Google) Code Review
Browse files

Merge "Check that modes can be deleted before adding delete menu option." into main

parents c291f227 2a19cc18
Loading
Loading
Loading
Loading
+55 −31
Original line number Diff line number Diff line
@@ -24,7 +24,9 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

import androidx.activity.ComponentActivity;
import androidx.annotation.NonNull;
import androidx.core.view.MenuProvider;

import com.android.settings.R;
import com.android.settingslib.applications.ApplicationsState;
@@ -39,6 +41,8 @@ public class ZenModeFragment extends ZenModeFragmentBase {
    // for mode deletion menu
    private static final int DELETE_MODE = 1;

    private ModeMenuProvider mModeMenuProvider;

    @Override
    protected int getPreferenceScreenResId() {
        return R.xml.modes_rule_settings;
@@ -84,11 +88,22 @@ public class ZenModeFragment extends ZenModeFragmentBase {

        // Set title for the entire screen
        ZenMode mode = getMode();
        if (mode != null) {
            requireActivity().setTitle(mode.getName());
        ComponentActivity activity = getActivity();
        if (mode != null && activity != null) {
            activity.setTitle(mode.getName());
            mModeMenuProvider = new ModeMenuProvider(mode);
            activity.addMenuProvider(mModeMenuProvider);
        }
    }

    @Override
    public void onStop() {
        if (getActivity() != null) {
            getActivity().removeMenuProvider(mModeMenuProvider);
        }
        super.onStop();
    }

    @Override
    public void onDetach() {
        use(ManualDurationPreferenceController.class).unregisterSettingsObserver();
@@ -102,41 +117,50 @@ public class ZenModeFragment extends ZenModeFragmentBase {
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    protected void updateZenModeState() {
        // Because this fragment may be asked to finish by the delete menu but not be done doing
        // so yet, ignore any attempts to update info in that case.
        if (getActivity() != null && getActivity().isFinishing()) {
            return;
        }
        super.updateZenModeState();
    }

    private class ModeMenuProvider implements MenuProvider {
        private ZenMode mZenMode;
        ModeMenuProvider(ZenMode mode) {
            mZenMode = mode;
        }

        @Override
        public void onCreateMenu(@NonNull Menu menu, @NonNull MenuInflater menuInflater) {
            if (mZenMode != null && mZenMode.canBeDeleted()) {
                // Only deleteable modes should get a delete menu option.
                menu.add(Menu.NONE, DELETE_MODE, Menu.NONE, R.string.zen_mode_menu_delete_mode);
        super.onCreateOptionsMenu(menu, inflater);
            }
        }

        @Override
    protected boolean onOptionsItemSelected(MenuItem item, @NonNull ZenMode zenMode) {
        switch (item.getItemId()) {
            case DELETE_MODE:
        public boolean onMenuItemSelected(@NonNull MenuItem menuItem) {
            if (mZenMode != null) {
                if (menuItem.getItemId() == DELETE_MODE) {
                    new AlertDialog.Builder(mContext)
                            .setTitle(mContext.getString(R.string.zen_mode_delete_mode_confirmation,
                                zenMode.getRule().getName()))
                                    mZenMode.getRule().getName()))
                            .setPositiveButton(R.string.zen_mode_schedule_delete,
                                    (dialog, which) -> {
                                    // start finishing before calling removeMode() so that we don't
                                    // try to update this activity with a nonexistent mode when the
                                    // zen mode config is updated
                                        // start finishing before calling removeMode() so that we
                                        // don't try to update this activity with a nonexistent mode
                                        // when the zen mode config is updated
                                        finish();
                                    mBackend.removeMode(zenMode);
                                        mBackend.removeMode(mZenMode);
                                    })
                            .setNegativeButton(R.string.cancel, null)
                            .show();
                    return true;
            default:
                return super.onOptionsItemSelected(item);
                }
            }

    @Override
    protected void updateZenModeState() {
        // Because this fragment may be asked to finish by the delete menu but not be done doing
        // so yet, ignore any attempts to update info in that case.
        if (getActivity() != null && getActivity().isFinishing()) {
            return;
            return false;
        }
        super.updateZenModeState();
    }
}
+0 −13
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import static android.provider.Settings.EXTRA_AUTOMATIC_ZEN_RULE_ID;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast;

import androidx.annotation.NonNull;
@@ -117,18 +116,6 @@ abstract class ZenModeFragmentBase extends ZenModesFragmentBase {
        updateControllers();
    }

    @Override
    public final boolean onOptionsItemSelected(MenuItem item) {
        if (mZenMode != null) {
            return onOptionsItemSelected(item, mZenMode);
        }
        return super.onOptionsItemSelected(item);
    }

    protected boolean onOptionsItemSelected(MenuItem item, @NonNull ZenMode zenMode) {
        return true;
    }

    private void updateControllers() {
        if (getPreferenceControllers() == null || mZenMode == null) {
            return;