diff --git a/app/src/main/java/eu/faircode/email/DaoAccount.java b/app/src/main/java/eu/faircode/email/DaoAccount.java index 991bcbd748..ebd167a730 100644 --- a/app/src/main/java/eu/faircode/email/DaoAccount.java +++ b/app/src/main/java/eu/faircode/email/DaoAccount.java @@ -56,12 +56,6 @@ public interface DaoAccount { @Query("SELECT * FROM account WHERE id = :id") LiveData liveAccount(long id); - @Query("SELECT account.* FROM account" + - " JOIN folder ON folder.account = account.id" + - " WHERE (account.id = :id OR (:id IS NULL AND account.`primary`))" + - " AND folder.type = '" + EntityFolder.DRAFTS + "'") - LiveData liveAccountDraft(Long id); - @Query("SELECT" + " (SELECT COUNT(account.id) FROM account WHERE synchronize AND state = 'connected') AS accounts" + ", (SELECT COUNT(operation.id) FROM operation" + diff --git a/app/src/main/java/eu/faircode/email/DaoFolder.java b/app/src/main/java/eu/faircode/email/DaoFolder.java index 0e12ba7915..61250fe447 100644 --- a/app/src/main/java/eu/faircode/email/DaoFolder.java +++ b/app/src/main/java/eu/faircode/email/DaoFolder.java @@ -78,6 +78,12 @@ public interface DaoFolder { " GROUP BY folder.id") LiveData> liveUnified(); + @Query("SELECT folder.* FROM folder" + + " JOIN account ON account.id = folder.account" + + " WHERE folder.type = '" + EntityFolder.DRAFTS + "'" + + " AND (account.id = :account OR (:account IS NULL AND account.`primary`))") + LiveData liveDrafts(Long account); + @Query("SELECT folder.*, account.name AS accountName, account.color AS accountColor" + ", COUNT(message.id) AS messages" + ", SUM(CASE WHEN message.content = 1 THEN 1 ELSE 0 END) AS content" + diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 64435f4b1c..5db983551e 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -599,13 +599,31 @@ public class FragmentMessages extends FragmentEx { fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + EntityFolder drafts = (EntityFolder) fab.getTag(); + startActivity(new Intent(getContext(), ActivityCompose.class) .putExtra("action", "new") - .putExtra("account", (Long) fab.getTag()) + .putExtra("account", drafts.account) ); } }); + fab.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + EntityFolder drafts = (EntityFolder) fab.getTag(); + + LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(getContext()); + lbm.sendBroadcast( + new Intent(ActivityView.ACTION_VIEW_MESSAGES) + .putExtra("account", drafts.account) + .putExtra("folder", drafts.id) + .putExtra("outgoing", drafts.isOutgoing())); + + return true; + } + }); + fabMore.setOnClickListener(new View.OnClickListener() { private final int action_seen = 1; private final int action_unseen = 2; @@ -1210,13 +1228,13 @@ public class FragmentMessages extends FragmentEx { } }); } else { - db.account().liveAccountDraft(account < 0 ? null : account).observe(getViewLifecycleOwner(), new Observer() { + db.folder().liveDrafts(account < 0 ? null : account).observe(getViewLifecycleOwner(), new Observer() { @Override - public void onChanged(EntityAccount account) { - if (account == null) + public void onChanged(EntityFolder drafts) { + if (drafts == null) fab.hide(); else { - fab.setTag(account.id); + fab.setTag(drafts); fab.show(); } }