diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index a179d17d07..51f703529b 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -547,7 +547,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB draft.content = true; draft.received = new Date().getTime(); draft.seen = false; - draft.answered =false; + draft.answered = false; draft.flagged = false; draft.ui_seen = false; draft.ui_answered = false; @@ -1078,6 +1078,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB Bundle args = new Bundle(); args.putLong("account", intent.getLongExtra("account", -1)); args.putLong("folder", intent.getLongExtra("folder", -1)); + args.putBoolean("outgoing", intent.getBooleanExtra("outgoing", false)); FragmentMessages fragment = new FragmentMessages(); fragment.setArguments(args); diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index b6380b3df0..4d5db0b6bb 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -158,7 +158,8 @@ public class AdapterFolder extends RecyclerView.Adapter 0 ? View.VISIBLE : View.GONE); - tvFrom.setText(MessageHelper.getFormattedAddresses(message.from, !compact)); + tvFrom.setText(MessageHelper.getFormattedAddresses(outgoing ? message.to : message.from, !compact)); tvTime.setText(DateUtils.getRelativeTimeSpanString(context, message.received)); tvSize.setText(message.size == null ? null : Helper.humanReadableByteCount(message.size, true)); @@ -1361,12 +1362,14 @@ public class AdapterMessage extends PagedListAdapter() { + adapter = new AdapterMessage( + getContext(), getViewLifecycleOwner(), getFragmentManager(), + viewType, outgoing, + new AdapterMessage.IProperties() { @Override - protected MessageTarget onLoad(Context context, Bundle args) { - long id = args.getLong("id"); - String name = args.getString("name"); - boolean type = args.getBoolean("type"); - - MessageTarget result = new MessageTarget(); - - DB db = DB.getInstance(context); - try { - db.beginTransaction(); - - EntityMessage message = db.message().getMessage(id); - if (type) - result.target = db.folder().getFolderByType(message.account, name); - else - result.target = db.folder().getFolderByName(message.account, name); - result.ids.add(message.id); - - db.message().setMessageUiHide(id, true); - - db.setTransactionSuccessful(); - } finally { - db.endTransaction(); - } - - return result; + public void setExpanded(long id, boolean expand) { + if (expand) { + expanded.add(id); + handleExpand(id); + } else + expanded.remove(id); } @Override - protected void onLoaded(Bundle args, MessageTarget result) { - moveUndo(result); + public void setAddresses(long id, boolean show) { + if (show) + addresses.remove(id); + else + addresses.add(id); } @Override - protected void onException(Bundle args, Throwable ex) { - Helper.unexpectedError(getContext(), ex); + public void setHeaders(long id, boolean show) { + if (show) + headers.add(id); + else + headers.remove(id); } - }.load(FragmentMessages.this, args); - } - }); + + @Override + public void setImages(long id, boolean show) { + if (show) + images.add(id); + else + images.remove(id); + } + + @Override + public boolean isExpanded(long id) { + return expanded.contains(id); + } + + @Override + public boolean showAddresses(long id) { + return !addresses.contains(id); + } + + @Override + public boolean showHeaders(long id) { + return headers.contains(id); + } + + @Override + public boolean showImages(long id) { + return images.contains(id); + } + + @Override + public void move(long id, String name, boolean type) { + Bundle args = new Bundle(); + args.putLong("id", id); + args.putString("name", name); + args.putBoolean("type", type); + + new SimpleTask() { + @Override + protected MessageTarget onLoad(Context context, Bundle args) { + long id = args.getLong("id"); + String name = args.getString("name"); + boolean type = args.getBoolean("type"); + + MessageTarget result = new MessageTarget(); + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + EntityMessage message = db.message().getMessage(id); + if (type) + result.target = db.folder().getFolderByType(message.account, name); + else + result.target = db.folder().getFolderByName(message.account, name); + result.ids.add(message.id); + + db.message().setMessageUiHide(id, true); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return result; + } + + @Override + protected void onLoaded(Bundle args, MessageTarget result) { + moveUndo(result); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(getContext(), ex); + } + }.load(FragmentMessages.this, args); + } + }); rvMessage.setAdapter(adapter);