diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index b44ecf84c5..44bf557d24 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -143,7 +143,7 @@ public class FragmentRule extends FragmentBase { private ArrayAdapter adapterDay; private ArrayAdapter adapterAction; - private ArrayAdapter adapterTarget; + private ArrayAdapter adapterTarget; private ArrayAdapter adapterIdentity; private ArrayAdapter adapterAnswer; @@ -289,7 +289,7 @@ public class FragmentRule extends FragmentBase { adapterAction.setDropDownViewResource(R.layout.spinner_item1_dropdown); spAction.setAdapter(adapterAction); - adapterTarget = new ArrayAdapter<>(getContext(), R.layout.spinner_item1, android.R.id.text1, new ArrayList()); + adapterTarget = new ArrayAdapter<>(getContext(), R.layout.spinner_item1, android.R.id.text1, new ArrayList()); adapterTarget.setDropDownViewResource(R.layout.spinner_item1_dropdown); spTarget.setAdapter(adapterTarget); @@ -454,13 +454,19 @@ public class FragmentRule extends FragmentBase { DB db = DB.getInstance(context); data.folder = db.folder().getFolder(fid); - data.folders = db.folder().getFolders(aid, true, true); - if (data.folders == null) - data.folders = new ArrayList<>(); - - if (data.folders.size() > 0) - Collections.sort(data.folders, data.folders.get(0).getComparator(null)); + data.folders = new ArrayList<>(); + List accounts = db.account().getSynchronizingAccounts(); + if (accounts != null) + for (EntityAccount account : accounts) { + List folders = db.folder().getFolders(account.id, true, true); + if (folders != null) { + if (folders.size() > 0) + Collections.sort(folders, folders.get(0).getComparator(null)); + for (EntityFolder folder : folders) + data.folders.add(new AccountFolder(account, folder)); + } + } data.identities = db.identity().getSynchronizingIdentities(aid); data.answers = db.answer().getAnswers(false); @@ -695,7 +701,7 @@ public class FragmentRule extends FragmentBase { case EntityRule.TYPE_COPY: long target = jaction.optLong("target", -1); for (int pos = 0; pos < adapterTarget.getCount(); pos++) - if (adapterTarget.getItem(pos).id.equals(target)) { + if (adapterTarget.getItem(pos).folder.id.equals(target)) { spTarget.setSelection(pos); break; } @@ -987,8 +993,8 @@ public class FragmentRule extends FragmentBase { case EntityRule.TYPE_MOVE: case EntityRule.TYPE_COPY: - EntityFolder target = (EntityFolder) spTarget.getSelectedItem(); - jaction.put("target", target == null ? -1 : target.id); + AccountFolder target = (AccountFolder) spTarget.getSelectedItem(); + jaction.put("target", target == null ? -1 : target.folder.id); if (action.type == EntityRule.TYPE_MOVE) { jaction.put("seen", cbMoveSeen.isChecked()); jaction.put("thread", cbMoveThread.isChecked()); @@ -1008,9 +1014,25 @@ public class FragmentRule extends FragmentBase { return jaction; } + private class AccountFolder { + EntityAccount account; + EntityFolder folder; + + public AccountFolder(EntityAccount account, EntityFolder folder) { + this.account = account; + this.folder = folder; + } + + @NonNull + @Override + public String toString() { + return account.name + "/" + folder.name; + } + } + private class RefData { EntityFolder folder; - List folders; + List folders; List identities; List answers; }