diff --git a/app/src/main/java/eu/faircode/email/DaoRule.java b/app/src/main/java/eu/faircode/email/DaoRule.java index 7d862f6593..6dc2352b05 100644 --- a/app/src/main/java/eu/faircode/email/DaoRule.java +++ b/app/src/main/java/eu/faircode/email/DaoRule.java @@ -73,4 +73,7 @@ public interface DaoRule { @Query("DELETE FROM rule WHERE id = :id") void deleteRule(long id); + + @Query("DELETE FROM rule WHERE folder = :folder") + void deleteRules(long folder); } diff --git a/app/src/main/java/eu/faircode/email/FragmentRules.java b/app/src/main/java/eu/faircode/email/FragmentRules.java index 16fb12e0cb..91e1edd187 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRules.java +++ b/app/src/main/java/eu/faircode/email/FragmentRules.java @@ -229,25 +229,30 @@ public class FragmentRules extends FragmentBase { @Override public void onPrepareOptionsMenu(@NonNull Menu menu) { super.onPrepareOptionsMenu(menu); - menu.findItem(R.id.menu_clear_spam).setVisible(!EntityFolder.JUNK.equals(type)); + menu.findItem(R.id.menu_delete_junk).setVisible(!EntityFolder.JUNK.equals(type)); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.menu_clear_spam: - onMenuClearSpam(); + case R.id.menu_delete_all: + onMenuDelete(true); + return true; + case R.id.menu_delete_junk: + onMenuDelete(false); return true; - default: return super.onOptionsItemSelected(item); } } - private void onMenuClearSpam() { + private void onMenuDelete(boolean all) { Bundle aargs = new Bundle(); - aargs.putString("question", getString(R.string.title_rules_clear_confirm)); + aargs.putString("question", getString(all + ? R.string.title_rules_delete_all_confirm + : R.string.title_rules_delete_junk_confirm)); aargs.putLong("folder", folder); + aargs.putBoolean("all", all); FragmentDialogAsk ask = new FragmentDialogAsk(); ask.setArguments(aargs); @@ -279,8 +284,15 @@ public class FragmentRules extends FragmentBase { @Override protected Void onExecute(Context context, Bundle args) throws Throwable { long fid = args.getLong("folder"); + boolean all = args.getBoolean("all"); DB db = DB.getInstance(context); + + if (all) { + db.rule().deleteRules(fid); + return null; + } + EntityFolder folder = db.folder().getFolder(fid); if (folder == null) return null; @@ -295,8 +307,9 @@ public class FragmentRules extends FragmentBase { for (EntityRule rule : rules) { JSONObject jaction = new JSONObject(rule.action); - if (jaction.optInt("type", -1) == TYPE_MOVE && - jaction.optInt("target", -1) == junk.id) + int type = jaction.optInt("type", -1); + long target = jaction.optLong("target", -1); + if (type == TYPE_MOVE && target == junk.id) db.rule().deleteRule(rule.id); } diff --git a/app/src/main/res/menu/menu_rules.xml b/app/src/main/res/menu/menu_rules.xml index b9fdacdfa1..56631cfc81 100644 --- a/app/src/main/res/menu/menu_rules.xml +++ b/app/src/main/res/menu/menu_rules.xml @@ -9,7 +9,12 @@ app:showAsAction="collapseActionView|always" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4ec07de3dc..c80d1a97b4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1374,8 +1374,10 @@ Auto scroll Clear Search name or condition - Clear spam rules - Delete all rules moving messages to the spam folder? + Delete all rules + Delete spam rules + Delete all rules? + Delete all rules moving messages to the spam folder? Debug info Please describe the problem and indicate the time of the problem: Please describe what you were doing when the app crashed: