diff --git a/app/src/main/java/eu/faircode/email/DaoMessage.java b/app/src/main/java/eu/faircode/email/DaoMessage.java index f7e312d5a6..4af1515093 100644 --- a/app/src/main/java/eu/faircode/email/DaoMessage.java +++ b/app/src/main/java/eu/faircode/email/DaoMessage.java @@ -277,6 +277,15 @@ public interface DaoMessage { " AND ui_hide") LiveData> liveHiddenThread(long account, String thread); + @Query("SELECT * FROM message" + + " JOIN folder_view AS folder ON folder.id = message.folder" + + " WHERE message.account = :account" + + " AND message.thread = :thread" + + " AND folder.type <> '" + EntityFolder.ARCHIVE + "'" + + " AND NOT ui_seen" + + " AND NOT ui_hide") + LiveData> liveUnreadThread(long account, String thread); + @Query("SELECT SUM(fts) AS fts, COUNT(*) AS total FROM message" + " JOIN folder_view AS folder ON folder.id = message.folder" + " WHERE content" + diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index ccb915620c..624a26088b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -5197,6 +5197,52 @@ public class FragmentCompose extends FragmentBase { } } }); + + db.message().liveUnreadThread(data.draft.account, data.draft.thread).observe(getViewLifecycleOwner(), new Observer>() { + private int lastDiff = 0; + private List base = null; + + @Override + public void onChanged(List messages) { + if (messages == null) + return; + + if (base == null) { + base = messages; + return; + } + + int diff = (messages.size() - base.size()); + if (diff > lastDiff) { + lastDiff = diff; + String msg = getResources().getQuantityString( + R.plurals.title_notification_unseen, diff, diff); + + Snackbar snackbar = Snackbar.make(view, msg, Snackbar.LENGTH_INDEFINITE) + .setGestureInsetBottomIgnored(true); + snackbar.setAction(R.string.title_show, new View.OnClickListener() { + @Override + public void onClick(View v) { + EntityMessage message = messages.get(0); + boolean notify_remove = prefs.getBoolean("notify_remove", true); + + Intent thread = new Intent(v.getContext(), ActivityView.class); + thread.setAction("thread:" + message.id); + thread.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + thread.putExtra("account", message.account); + thread.putExtra("folder", message.folder); + thread.putExtra("thread", message.thread); + thread.putExtra("filter_archive", true); + thread.putExtra("ignore", notify_remove); + + v.getContext().startActivity(thread); + getActivity().finish(); + } + }); + snackbar.show(); + } + } + }); } @Override diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 39fe7b6e15..acfb7b00c3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1642,6 +1642,7 @@ Download Report Fix + Show Enable Enabled Disable