diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index acb1c14acb..3f7afbc97c 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -183,6 +183,7 @@ public class AdapterMessage extends PagedListAdapter>() { + @Override + protected List onLoad(Context context, Bundle args) { + TupleMessageEx message = (TupleMessageEx) args.getSerializable("message"); + + DB db = DB.getInstance(context); + + List folders = db.folder().getFolders(message.account); + List targets = new ArrayList<>(); + for (EntityFolder f : folders) + if (!f.unified && !EntityFolder.DRAFTS.equals(f.type)) + targets.add(f); + + EntityFolder.sort(targets); + + return targets; + } + + @Override + protected void onLoaded(final Bundle args, List folders) { + PopupMenu popupMenu = new PopupMenu(context, itemView); + + int order = 0; + for (EntityFolder folder : folders) { + String name = (folder.display == null + ? Helper.localizeFolderName(context, folder.name) + : folder.display); + popupMenu.getMenu().add(Menu.NONE, folder.id.intValue(), order++, name); + } + + popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(final MenuItem target) { + args.putLong("target", target.getItemId()); + + new SimpleTask() { + @Override + protected Void onLoad(Context context, Bundle args) { + long target = args.getLong("target"); + TupleMessageEx message = (TupleMessageEx) args.getSerializable("message"); + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + List messages = + db.message().getMessageByThread(message.account, message.thread); + for (EntityMessage threaded : messages) { + db.message().setMessageUiHide(threaded.id, true); + EntityOperation.queue(db, threaded, EntityOperation.MOVE, target); + } + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + EntityOperation.process(context); + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(context, ex); + } + }.load(context, owner, args); + + return true; + } + }); + + popupMenu.show(); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(context, ex); + } + }.load(context, owner, args); + } }); popupMenu.show();