From 00b0d6919fdbb84dab7b21b3cc48b9f6a955926c Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 18 Feb 2019 19:01:21 +0000 Subject: [PATCH] Added snooze to message view, refactoring --- FAQ.md | 1 + .../eu/faircode/email/AdapterMessage.java | 114 ++++++++++++++---- .../eu/faircode/email/FragmentMessages.java | 5 + app/src/main/res/menu/menu_message.xml | 8 +- 4 files changed, 104 insertions(+), 24 deletions(-) diff --git a/FAQ.md b/FAQ.md index d79c69b55c..b8a335df21 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1099,6 +1099,7 @@ to justify making FairEmail available in the [Google Play Family Library](https: **(67) How can I snooze conversations?** Multiple select one of more conversations (long press to start multiple selecting), tap the three dot button and select *Snooze ...*. +Alternatively, use the *Snooze ...* 'more' menu in the expanded message view. Select the time the conversation(s) should snooze and confirm by tapping OK. The conversations will be hidden for the selected time and shown again afterwards. You will receive a new message notification as reminder. diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index ad7aa0d4b0..7b3bed15d5 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -1816,49 +1816,69 @@ public class AdapterMessage extends RecyclerView.Adapter() { + new SimpleTask() { @Override - protected Void onExecute(Context context, Bundle args) { + protected Long onExecute(Context context, Bundle args) { long id = args.getLong("id"); + Long wakeup = args.getLong("wakeup"); + if (wakeup < 0) + wakeup = null; DB db = DB.getInstance(context); try { db.beginTransaction(); EntityMessage message = db.message().getMessage(id); - if (message == null) - return null; - - EntityFolder junk = db.folder().getFolderByType(message.account, EntityFolder.JUNK); - EntityOperation.queue(context, db, message, EntityOperation.MOVE, junk.id); + if (message != null) { + List messages = db.message().getMessageByThread( + message.account, message.thread, threading ? null : id, message.folder); + for (EntityMessage threaded : messages) { + db.message().setMessageSnoozed(threaded.id, wakeup); + EntityMessage.snooze(context, threaded.id, wakeup); + } + } db.setTransactionSuccessful(); } finally { db.endTransaction(); } - return null; + return wakeup; + } + + @Override + protected void onExecuted(Bundle args, Long wakeup) { + if (wakeup != null) + properties.finish(); } @Override protected void onException(Bundle args, Throwable ex) { Helper.unexpectedError(context, owner, ex); } - }.execute(context, owner, args, "message:spam"); + }.execute(context, owner, args, "message:snooze"); } - }) - .setNegativeButton(android.R.string.cancel, null) - .show(); + + @Override + public void onDismiss() { + } + }); + } private void onMenuDelete(final ActionData data) { @@ -1882,6 +1902,51 @@ public class AdapterMessage extends RecyclerView.Adapter() { + @Override + protected Void onExecute(Context context, Bundle args) { + long id = args.getLong("id"); + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + EntityMessage message = db.message().getMessage(id); + if (message == null) + return null; + + EntityFolder junk = db.folder().getFolderByType(message.account, EntityFolder.JUNK); + EntityOperation.queue(context, db, message, EntityOperation.MOVE, junk.id); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(context, owner, ex); + } + }.execute(context, owner, args, "message:spam"); + } + }) + .setNegativeButton(android.R.string.cancel, null) + .show(); + } + private void onMenuShare(ActionData data) { Bundle args = new Bundle(); args.putLong("id", data.message.id); @@ -2168,12 +2233,12 @@ public class AdapterMessage extends RecyclerView.Adapter + android:id="@+id/menu_snooze" + android:title="@string/title_snooze" /> + +