From eb7285170b083bc101f931149772a76d568abbc4 Mon Sep 17 00:00:00 2001 From: Yuri Lin Date: Tue, 18 Jun 2024 14:09:39 -0400 Subject: [PATCH] Add "delete mode" option on mode configuration page Flag: android.app.modes_ui Bug: 346575126 Test: manual Change-Id: I0d085eb54ef5fa07f312bdddf0219855bf1c2ef4 --- res/values/strings.xml | 8 +++- .../notification/modes/ZenModeFragment.java | 46 +++++++++++++++++++ .../modes/ZenModeFragmentBase.java | 13 ++++++ 3 files changed, 66 insertions(+), 1 deletion(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 6560e5446f1..a76c02424af 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7955,9 +7955,15 @@ Delete schedules - + Delete + + Delete mode + + + Delete \"%1$s\" mode? + Edit diff --git a/src/com/android/settings/notification/modes/ZenModeFragment.java b/src/com/android/settings/notification/modes/ZenModeFragment.java index f2f47b99ceb..a6f49b71ecf 100644 --- a/src/com/android/settings/notification/modes/ZenModeFragment.java +++ b/src/com/android/settings/notification/modes/ZenModeFragment.java @@ -16,10 +16,14 @@ package com.android.settings.notification.modes; +import android.app.AlertDialog; import android.app.Application; import android.app.AutomaticZenRule; import android.app.settings.SettingsEnums; import android.content.Context; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import com.android.settings.R; import com.android.settingslib.applications.ApplicationsState; @@ -30,6 +34,9 @@ import java.util.List; public class ZenModeFragment extends ZenModeFragmentBase { + // for mode deletion menu + private static final int DELETE_MODE = 1; + @Override protected int getPreferenceScreenResId() { return R.xml.modes_rule_settings; @@ -76,4 +83,43 @@ public class ZenModeFragment extends ZenModeFragmentBase { // TODO: b/332937635 - make this the correct metrics category return SettingsEnums.NOTIFICATION_ZEN_MODE_AUTOMATION; } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + 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, ZenMode zenMode) { + switch (item.getItemId()) { + case DELETE_MODE: + new AlertDialog.Builder(mContext) + .setTitle(mContext.getString(R.string.zen_mode_delete_mode_confirmation, + zenMode.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 + finish(); + mBackend.removeMode(zenMode); + }) + .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; + } + super.updateZenModeState(); + } } diff --git a/src/com/android/settings/notification/modes/ZenModeFragmentBase.java b/src/com/android/settings/notification/modes/ZenModeFragmentBase.java index 67cc13beb4a..9842866e4fc 100644 --- a/src/com/android/settings/notification/modes/ZenModeFragmentBase.java +++ b/src/com/android/settings/notification/modes/ZenModeFragmentBase.java @@ -20,6 +20,7 @@ import android.app.AutomaticZenRule; import android.content.Context; import android.os.Bundle; import android.util.Log; +import android.view.MenuItem; import android.widget.Toast; import androidx.annotation.NonNull; @@ -108,6 +109,18 @@ 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;