diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 3e87f230fe..71bddf0718 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1763,6 +1763,12 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. result.flagged = true; else result.unflagged = true; + + if (threaded.folder.equals(message.folder)) + if (message.ui_snoozed == null) + result.visible = true; + else + result.hidden = true; } EntityFolder folder = db.folder().getFolder(message.folder); @@ -1815,6 +1821,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. popupMenu.getMenu().add(Menu.NONE, R.string.title_snooze, order++, R.string.title_snooze); + if (result.visible) + popupMenu.getMenu().add(Menu.NONE, R.string.title_hide, order++, R.string.title_hide); + if (result.hidden) + popupMenu.getMenu().add(Menu.NONE, R.string.title_unhide, order++, R.string.title_unhide); + if (result.unflagged) popupMenu.getMenu().add(Menu.NONE, R.string.title_flag, order++, R.string.title_flag); if (result.flagged) @@ -1854,6 +1865,12 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. case R.string.title_snooze: onActionSnoozeSelection(); return true; + case R.string.title_hide: + onHideSelection(true); + return true; + case R.string.title_unhide: + onHideSelection(false); + return true; case R.string.title_flag: onActionFlagSelection(true, null); return true; @@ -1991,6 +2008,51 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. fragment.show(getParentFragmentManager(), "messages:snooze"); } + private void onHideSelection(boolean hide) { + Bundle args = new Bundle(); + args.putLongArray("ids", getSelection()); + args.putBoolean("hide", hide); + + selectionTracker.clearSelection(); + + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) { + long[] ids = args.getLongArray("ids"); + boolean hide = args.getBoolean("hide"); + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + for (long id : ids) { + EntityMessage message = db.message().getMessage(id); + if (message == null) + continue; + + List messages = db.message().getMessagesByThread( + message.account, message.thread, threading ? null : id, message.folder); + for (EntityMessage threaded : messages) { + db.message().setMessageSnoozed(threaded.id, hide ? Long.MAX_VALUE : null); + EntityMessage.snooze(context, threaded.id, hide ? Long.MAX_VALUE : null); + } + } + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "messages:flag"); + } + private void onActionFlagSelection(boolean flagged, Integer color) { Bundle args = new Bundle(); args.putLongArray("ids", getSelection()); @@ -4589,6 +4651,8 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. private class MoreResult { boolean seen; boolean unseen; + boolean visible; + boolean hidden; boolean flagged; boolean unflagged; Boolean hasArchive;