diff --git a/app/src/main/java/eu/faircode/email/AdapterFolder.java b/app/src/main/java/eu/faircode/email/AdapterFolder.java index bcd01b95ca..08b66dec0b 100644 --- a/app/src/main/java/eu/faircode/email/AdapterFolder.java +++ b/app/src/main/java/eu/faircode/email/AdapterFolder.java @@ -78,6 +78,7 @@ public class AdapterFolder extends RecyclerView.Adapter disabledIds = new ArrayList<>(); private List items = new ArrayList<>(); private NumberFormat nf = NumberFormat.getNumberInstance(); @@ -177,7 +178,7 @@ public class AdapterFolder extends RecyclerView.Adapter ids) { + disabledIds = ids; + } + public void set(@NonNull List folders) { Log.i("Set folders=" + folders.size()); diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index e2eabf22d8..7d0d2ab06f 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -3123,46 +3123,15 @@ public class AdapterMessage extends RecyclerView.Adapter>() { @Override protected List onExecute(Context context, Bundle args) { - long id = args.getLong("id"); - boolean copy = args.getBoolean("copy"); - - EntityMessage message; - List folders; + long account = args.getLong("account"); DB db = DB.getInstance(context); - try { - db.beginTransaction(); - - message = db.message().getMessage(id); - if (message == null) - return null; - - folders = db.folder().getFoldersEx(message.account); - - db.setTransactionSuccessful(); - } finally { - db.endTransaction(); - } - - if (folders == null) - return null; - - List targets = new ArrayList<>(); - for (TupleFolderEx folder : folders) - if (!folder.id.equals(message.folder) && - (copy || - (!EntityFolder.ARCHIVE.equals(folder.type) && - !EntityFolder.TRASH.equals(folder.type) && - !EntityFolder.JUNK.equals(folder.type)))) - targets.add(folder); - - return targets; + return db.folder().getFoldersEx(account); } @Override @@ -3170,6 +3139,7 @@ public class AdapterMessage extends RecyclerView.Adapter(); + adapter.setDisabled(Arrays.asList(data.message.folder)); adapter.set(folders); pbWait.setVisibility(View.GONE); rvFolder.setVisibility(View.VISIBLE); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 3292ab4f3a..a9e60f2366 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -1338,14 +1338,14 @@ public class FragmentMessages extends FragmentBase { DB db = DB.getInstance(context); - List fids = new ArrayList<>(); + result.folders = new ArrayList<>(); for (long id : ids) { EntityMessage message = db.message().getMessage(id); if (message == null) continue; - if (!fids.contains(message.folder)) - fids.add(message.folder); + if (!result.folders.contains(message.folder)) + result.folders.add(message.folder); if (message.ui_seen) result.seen = true; @@ -1388,18 +1388,8 @@ public class FragmentMessages extends FragmentBase { result.accounts = db.account().getSynchronizingAccounts(); - for (EntityAccount account : result.accounts) { - List targets = new ArrayList<>(); - List folders = db.folder().getFoldersEx(account.id); - for (TupleFolderEx target : folders) - if ((fids.size() != 1 || !fids.contains(target.id)) && - !EntityFolder.ARCHIVE.equals(target.type) && - !EntityFolder.TRASH.equals(target.type) && - !EntityFolder.JUNK.equals(target.type)) - targets.add(target); - - result.targets.put(account.id, targets); - } + for (EntityAccount account : result.accounts) + result.targets.put(account.id, db.folder().getFoldersEx(account.id)); return result; } @@ -1478,7 +1468,7 @@ public class FragmentMessages extends FragmentBase { return true; case R.string.title_move_to_account: long account = target.getIntent().getLongExtra("account", -1); - onActionMoveSelectionAccount(account, result.targets.get(account)); + onActionMoveSelectionAccount(account, result.targets.get(account), result.folders); return true; default: return false; @@ -1829,7 +1819,7 @@ public class FragmentMessages extends FragmentBase { }.execute(FragmentMessages.this, args, "messages:move"); } - private void onActionMoveSelectionAccount(long account, List folders) { + private void onActionMoveSelectionAccount(long account, List folders, List disabled) { final View dview = LayoutInflater.from(getContext()).inflate(R.layout.dialog_folder_select, null); final RecyclerView rvFolder = dview.findViewById(R.id.rvFolder); final ContentLoadingProgressBar pbWait = dview.findViewById(R.id.pbWait); @@ -1851,6 +1841,8 @@ public class FragmentMessages extends FragmentBase { onActionMoveSelection(folder.id); } }); + + adapter.setDisabled(disabled); adapter.set(folders); rvFolder.setAdapter(adapter); @@ -3303,6 +3295,7 @@ public class FragmentMessages extends FragmentBase { Boolean isTrash; Boolean isJunk; Boolean isDrafts; + List folders; List accounts; Map> targets = new HashMap<>(); }