diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index d76339c9b7..7750bfc001 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -2353,6 +2353,57 @@ public class FragmentMessages extends FragmentBase }.execute(this, args, "messages:refresh"); } + private void onExpunge() { + new AlertDialog.Builder(view.getContext()) + .setIcon(R.drawable.twotone_warning_24) + .setTitle(R.string.title_expunge) + .setMessage(R.string.title_expunge_remark) + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + expunge(); + } + }) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Do nothing + } + }) + .show(); + } + + private void expunge() { + Bundle args = new Bundle(); + args.putLong("id", folder); + + new SimpleTask() { + @Override + protected void onPreExecute(Bundle args) { + ToastEx.makeText(getContext(), R.string.title_executing, Toast.LENGTH_LONG).show(); + } + + @Override + protected Void onExecute(Context context, Bundle args) throws Throwable { + long id = args.getLong("id"); + + DB db = DB.getInstance(context); + EntityFolder folder = db.folder().getFolder(id); + if (folder == null) + return null; + + EntityOperation.queue(context, folder, EntityOperation.EXPUNGE); + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "messages:expunge"); + + } + private AdapterMessage.IProperties iProperties = new AdapterMessage.IProperties() { @Override public void setValue(String key, String value) { @@ -5629,6 +5680,7 @@ public class FragmentMessages extends FragmentBase boolean language_detection = prefs.getBoolean("language_detection", false); String filter_language = prefs.getString("filter_language", null); boolean perform_expunge = prefs.getBoolean("perform_expunge", true); + boolean debug = prefs.getBoolean("debug", false); boolean large_buttons = prefs.getBoolean("large_buttons", false); boolean compact = prefs.getBoolean("compact", false); boolean confirm_links = prefs.getBoolean("confirm_links", true); @@ -5778,6 +5830,9 @@ public class FragmentMessages extends FragmentBase menu.findItem(R.id.menu_force_sync).setVisible(viewType == AdapterMessage.ViewType.UNIFIED); menu.findItem(R.id.menu_force_send).setVisible(outbox); + menu.findItem(R.id.menu_expunge).setVisible(viewType == AdapterMessage.ViewType.FOLDER && + (perform_expunge || debug)); + menu.findItem(R.id.menu_edit_properties).setVisible(viewType == AdapterMessage.ViewType.FOLDER && !outbox); // In some cases onPrepareOptionsMenu can be called before onCreateView @@ -5922,6 +5977,9 @@ public class FragmentMessages extends FragmentBase } else if (itemId == R.id.menu_force_send) { onSwipeRefresh(); return true; + } else if (itemId == R.id.menu_expunge) { + onExpunge(); + return true; } else if (itemId == R.id.menu_edit_properties) { onMenuEditProperties(); return true; diff --git a/app/src/main/res/menu/menu_messages.xml b/app/src/main/res/menu/menu_messages.xml index ed78cad98f..a76bb179b0 100644 --- a/app/src/main/res/menu/menu_messages.xml +++ b/app/src/main/res/menu/menu_messages.xml @@ -230,6 +230,12 @@ android:title="@string/title_force_send" app:showAsAction="never" /> + +