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

This commit is contained in:
Yuri Lin
2024-07-02 19:23:02 +00:00
committed by Android (Google) Code Review
2 changed files with 55 additions and 44 deletions

View File

@@ -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();
@@ -101,35 +116,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
@@ -139,4 +125,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;
}
}
}