diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java b/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java index 214b5e804a..784f85aa39 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogFolder.java @@ -148,7 +148,6 @@ public class FragmentDialogFolder extends FragmentDialogBase { Bundle args = getArguments(); args.putLong("folder", folder.id); - args.putString("name", folder.name); sendResult(RESULT_OK); dismiss(); diff --git a/app/src/main/java/eu/faircode/email/FragmentRule.java b/app/src/main/java/eu/faircode/email/FragmentRule.java index 83416373f9..40e7d48611 100644 --- a/app/src/main/java/eu/faircode/email/FragmentRule.java +++ b/app/src/main/java/eu/faircode/email/FragmentRule.java @@ -946,9 +946,45 @@ public class FragmentRule extends FragmentBase { private void onFolderSelected(Bundle args) { long folder = args.getLong("folder"); - String name = args.getString("name"); - btnFolder.setTag(folder); - btnFolder.setText(name); + showFolder(folder); + } + + private void showFolder(long id) { + btnFolder.setTag(id); + + Bundle args = new Bundle(); + args.putLong("id", id); + + new SimpleTask() { + @Override + protected String onExecute(Context context, Bundle args) throws Throwable { + long id = args.getLong("id"); + + DB db = DB.getInstance(context); + + EntityFolder folder = db.folder().getFolder(id); + if (folder == null) + return null; + + EntityAccount account = db.account().getAccount(folder.account); + if (account == null) + return null; + + return account.name + ":" + folder.name; + } + + @Override + protected void onExecuted(Bundle args, String name) { + if (name == null) + name = getString(R.string.title_select); + btnFolder.setText(name); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "rule:folder"); } private void loadRule(final Bundle savedInstanceState) { @@ -974,23 +1010,7 @@ public class FragmentRule extends FragmentBase { long id = args.getLong("id"); DB db = DB.getInstance(context); - TupleRuleEx rule = db.rule().getRule(id); - - if (rule != null) - try { - JSONObject jaction = new JSONObject(rule.action); - int type = jaction.getInt("type"); - if (type == EntityRule.TYPE_MOVE || type == EntityRule.TYPE_COPY) { - long target = jaction.optLong("target", -1); - EntityFolder folder = db.folder().getFolder(target); - if (folder != null) - args.putString("name", folder.name); - } - } catch (Throwable ex) { - Log.e(ex); - } - - return rule; + return db.rule().getRule(id); } @Override @@ -1095,8 +1115,7 @@ public class FragmentRule extends FragmentBase { case EntityRule.TYPE_MOVE: case EntityRule.TYPE_COPY: long target = jaction.optLong("target", -1); - btnFolder.setTag(target); - btnFolder.setText(args.getString("name")); + showFolder(target); if (type == EntityRule.TYPE_MOVE) { cbMoveSeen.setChecked(jaction.optBoolean("seen")); cbMoveThread.setChecked(jaction.optBoolean("thread"));