diff --git a/src/com/android/settings/notification/modes/ZenModeFragment.java b/src/com/android/settings/notification/modes/ZenModeFragment.java index 3a64fb2f1a0..2844f1b052e 100644 --- a/src/com/android/settings/notification/modes/ZenModeFragment.java +++ b/src/com/android/settings/notification/modes/ZenModeFragment.java @@ -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; @@ -85,11 +89,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,35 +117,6 @@ public class ZenModeFragment extends ZenModeFragmentBase { 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, @NonNull 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 @@ -140,4 +126,42 @@ public class ZenModeFragment extends ZenModeFragmentBase { } 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); + } + } + + @Override + 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, + 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 + finish(); + mBackend.removeMode(mZenMode); + }) + .setNegativeButton(R.string.cancel, null) + .show(); + return true; + } + } + return false; + } + } } diff --git a/src/com/android/settings/notification/modes/ZenModeFragmentBase.java b/src/com/android/settings/notification/modes/ZenModeFragmentBase.java index b0ad7956a84..f461fc3511c 100644 --- a/src/com/android/settings/notification/modes/ZenModeFragmentBase.java +++ b/src/com/android/settings/notification/modes/ZenModeFragmentBase.java @@ -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;