diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 58486fc32f..dcc3f50ac5 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -333,10 +333,11 @@ public class FragmentCompose extends FragmentBase { private static final int REQUEST_RECORD_AUDIO = 9; private static final int REQUEST_OPENPGP = 10; private static final int REQUEST_CONTACT_GROUP = 11; - private static final int REQUEST_LINK = 12; - private static final int REQUEST_DISCARD = 13; - private static final int REQUEST_SEND = 14; - private static final int REQUEST_REMOVE_ATTACHMENTS = 15; + private static final int REQUEST_SELECT_IDENTITY = 12; + private static final int REQUEST_LINK = 13; + private static final int REQUEST_DISCARD = 14; + private static final int REQUEST_SEND = 15; + private static final int REQUEST_REMOVE_ATTACHMENTS = 16; private static final ExecutorService executor = Helper.getBackgroundExecutor(1, "compose"); @@ -2155,6 +2156,9 @@ public class FragmentCompose extends FragmentBase { } else if (itemId == R.id.menu_answer_create) { onMenuAnswerCreate(); return true; + } else if (itemId == R.id.menu_select_identity) { + onMenuIdentitySelect(); + return true; } else if (itemId == R.id.title_search_in_text) { startSearch(); return true; @@ -2525,6 +2529,13 @@ public class FragmentCompose extends FragmentBase { fragmentTransaction.commit(); } + private void onMenuIdentitySelect() { + FragmentDialogSelectIdentity fragment = new FragmentDialogSelectIdentity(); + fragment.setArguments(new Bundle()); + fragment.setTargetFragment(this, REQUEST_SELECT_IDENTITY); + fragment.show(getParentFragmentManager(), "select:identity"); + } + private void onTranslate(View anchor) { final Context context = anchor.getContext(); @@ -3047,6 +3058,10 @@ public class FragmentCompose extends FragmentBase { if (resultCode == RESULT_OK && data != null) onContactGroupSelected(data.getBundleExtra("args")); break; + case REQUEST_SELECT_IDENTITY: + if (resultCode == RESULT_OK && data != null) + onSelectIdentity(data.getBundleExtra("args")); + break; case REQUEST_LINK: if (resultCode == RESULT_OK && data != null) onLinkSelected(data.getBundleExtra("args")); @@ -4404,6 +4419,45 @@ public class FragmentCompose extends FragmentBase { }.setExecutor(executor).execute(this, args, "compose:picked"); } + private void onSelectIdentity(Bundle args) { + new SimpleTask() { + @Override + protected EntityIdentity onExecute(Context context, Bundle args) throws Throwable { + long id = args.getLong("id"); + + EntityIdentity identity; + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + identity = db.identity().getIdentity(id); + if (identity != null) { + db.account().resetPrimary(); + db.account().setAccountPrimary(identity.account, true); + db.identity().resetPrimary(identity.account); + db.identity().setIdentityPrimary(identity.id, true); + } + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return identity; + } + + @Override + protected void onExecuted(Bundle args, EntityIdentity identity) { + ToastEx.makeText(getContext(), R.string.title_completed, Toast.LENGTH_LONG).show(); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "select:identity"); + } + private void onLinkSelected(Bundle args) { String link = args.getString("link"); int start = args.getInt("start"); diff --git a/app/src/main/res/menu/menu_compose.xml b/app/src/main/res/menu/menu_compose.xml index 63be07013f..e31da8d39d 100644 --- a/app/src/main/res/menu/menu_compose.xml +++ b/app/src/main/res/menu/menu_compose.xml @@ -106,6 +106,14 @@ + + + + Insert contact group Insert template Create template + Select default identity Translate Configure … Enter key