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.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import androidx.activity.ComponentActivity;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.core.view.MenuProvider;
import com.android.settings.R; import com.android.settings.R;
import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState;
@@ -39,6 +41,8 @@ public class ZenModeFragment extends ZenModeFragmentBase {
// for mode deletion menu // for mode deletion menu
private static final int DELETE_MODE = 1; private static final int DELETE_MODE = 1;
private ModeMenuProvider mModeMenuProvider;
@Override @Override
protected int getPreferenceScreenResId() { protected int getPreferenceScreenResId() {
return R.xml.modes_rule_settings; return R.xml.modes_rule_settings;
@@ -84,11 +88,22 @@ public class ZenModeFragment extends ZenModeFragmentBase {
// Set title for the entire screen // Set title for the entire screen
ZenMode mode = getMode(); ZenMode mode = getMode();
if (mode != null) { ComponentActivity activity = getActivity();
requireActivity().setTitle(mode.getName()); 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 @Override
public void onDetach() { public void onDetach() {
use(ManualDurationPreferenceController.class).unregisterSettingsObserver(); use(ManualDurationPreferenceController.class).unregisterSettingsObserver();
@@ -101,35 +116,6 @@ public class ZenModeFragment extends ZenModeFragmentBase {
return SettingsEnums.NOTIFICATION_ZEN_MODE_AUTOMATION; 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 @Override
protected void updateZenModeState() { protected void updateZenModeState() {
// Because this fragment may be asked to finish by the delete menu but not be done doing // 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(); 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;
}
}
} }

View File

@@ -21,7 +21,6 @@ import static android.provider.Settings.EXTRA_AUTOMATIC_ZEN_RULE_ID;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.MenuItem;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -117,18 +116,6 @@ abstract class ZenModeFragmentBase extends ZenModesFragmentBase {
updateControllers(); 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() { private void updateControllers() {
if (getPreferenceControllers() == null || mZenMode == null) { if (getPreferenceControllers() == null || mZenMode == null) {
return; return;