diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 76e2fd68bd..414317d0ef 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -3149,7 +3149,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. args.putLong("time", 0); } - onSnooze(args); + onSnoozeOrHide(args); } private void onActionHide(TupleMessageEx message) { @@ -3161,7 +3161,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. args.putLong("time", message.ui_snoozed == null ? Long.MAX_VALUE : 0); args.putBoolean("hide", true); - onSnooze(args); + onSnoozeOrHide(args); } private void onActionSnoozeSelection() { @@ -6167,7 +6167,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. break; case REQUEST_MESSAGE_SNOOZE: if (resultCode == RESULT_OK && data != null) - onSnooze(data.getBundleExtra("args")); + onSnoozeOrHide(data.getBundleExtra("args")); break; case REQUEST_MESSAGES_SNOOZE: if (resultCode == RESULT_OK && data != null) @@ -7528,7 +7528,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. }.execute(this, args, "message:color"); } - private void onSnooze(Bundle args) { + private void onSnoozeOrHide(Bundle args) { long duration = args.getLong("duration"); long time = args.getLong("time"); args.putLong("wakeup", duration == 0 ? -1 : time); @@ -7559,14 +7559,23 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. account, thread, threading ? null : id, null); for (EntityMessage threaded : messages) { db.message().setMessageUnsnoozed(threaded.id, false); - db.message().setMessageSnoozed(threaded.id, wakeup); - if (threaded.id.equals(id)) - EntityOperation.queue(context, threaded, EntityOperation.SEEN, true, wakeup == null); - else - db.message().setMessageUiIgnored(threaded.id, true); - if (!hide && flag_snoozed && threaded.folder.equals(message.folder)) - EntityOperation.queue(context, threaded, EntityOperation.FLAG, wakeup != null); - EntityMessage.snooze(context, threaded.id, wakeup); + db.message().setMessageUiIgnored(threaded.id, true); + if (hide) { + db.message().setMessageSnoozed(threaded.id, wakeup); + EntityMessage.snooze(context, threaded.id, wakeup); + } else { + if (threaded.id.equals(id)) { + db.message().setMessageSnoozed(threaded.id, wakeup); + EntityMessage.snooze(context, threaded.id, wakeup); + if (wakeup != null) + EntityOperation.queue(context, threaded, EntityOperation.SEEN, true); + } else { + db.message().setMessageSnoozed(threaded.id, wakeup == null ? null : Long.MAX_VALUE); // show/hide + EntityMessage.snooze(context, threaded.id, null); + } + if (flag_snoozed && threaded.folder.equals(message.folder)) + EntityOperation.queue(context, threaded, EntityOperation.FLAG, wakeup != null); + } } db.setTransactionSuccessful(); @@ -7627,14 +7636,18 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. message.account, message.thread, threading ? null : id, null); for (EntityMessage threaded : messages) { db.message().setMessageUnsnoozed(threaded.id, false); - db.message().setMessageSnoozed(threaded.id, wakeup); - if (threaded.id.equals(id)) - EntityOperation.queue(context, threaded, EntityOperation.SEEN, true, wakeup == null); - else - db.message().setMessageUiIgnored(threaded.id, true); + db.message().setMessageUiIgnored(threaded.id, true); + if (threaded.id.equals(id)) { + db.message().setMessageSnoozed(threaded.id, wakeup); + EntityMessage.snooze(context, threaded.id, wakeup); + if (wakeup != null) + EntityOperation.queue(context, threaded, EntityOperation.SEEN, true); + } else { + db.message().setMessageSnoozed(threaded.id, wakeup == null ? null : Long.MAX_VALUE); // show/hide + EntityMessage.snooze(context, threaded.id, null); + } if (flag_snoozed && threaded.folder.equals(message.folder)) EntityOperation.queue(context, threaded, EntityOperation.FLAG, wakeup != null); - EntityMessage.snooze(context, threaded.id, wakeup); } } diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index f6a4702f09..e5df90055c 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -968,11 +968,16 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } } - db.message().setMessageSnoozed(message.id, null); - if (!message.ui_ignored) { - db.message().setMessageUnsnoozed(message.id, true); - EntityOperation.queue(ServiceSynchronize.this, message, EntityOperation.SEEN, false, false); - } + // Show thread + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ServiceSynchronize.this); + boolean threading = prefs.getBoolean("threading", true); + List messages = db.message().getMessagesByThread( + message.account, message.thread, threading ? null : message.id, null); + for (EntityMessage threaded : messages) + db.message().setMessageSnoozed(threaded.id, null); + + db.message().setMessageUnsnoozed(message.id, true); + EntityOperation.queue(ServiceSynchronize.this, message, EntityOperation.SEEN, false, false); } db.setTransactionSuccessful();