diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index ddc07a0656..e2d974fd60 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -1332,47 +1332,92 @@ public class FragmentCompose extends FragmentBase { } private void handlePickContact(int requestCode, Intent data) { - Cursor cursor = null; - try { - Uri uri = data.getData(); - if (uri != null) - cursor = resolver.query(uri, + Uri uri = data.getData(); + if (uri == null) + return; + + Bundle args = new Bundle(); + args.putLong("id", working); + args.putInt("requestCode", requestCode); + args.putParcelable("uri", uri); + + new SimpleTask() { + @Override + protected EntityMessage onExecute(Context context, Bundle args) throws Throwable { + long id = args.getLong("id"); + int requestCode = args.getInt("requestCode"); + Uri uri = args.getParcelable("uri"); + + EntityMessage draft = null; + DB db = DB.getInstance(context); + + try (Cursor cursor = context.getContentResolver().query( + uri, new String[]{ ContactsContract.CommonDataKinds.Email.ADDRESS, ContactsContract.Contacts.DISPLAY_NAME }, - null, null, null); - if (cursor != null && cursor.moveToFirst()) { - int colEmail = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS); - int colName = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); - String email = cursor.getString(colEmail); - String name = cursor.getString(colName); + null, null, null)) { + if (cursor != null && cursor.moveToFirst()) { + int colEmail = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS); + int colName = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); + String email = cursor.getString(colEmail); + String name = cursor.getString(colName); + + try { + db.beginTransaction(); + + draft = db.message().getMessage(id); + if (draft == null) + return null; + + Address[] address = null; + if (requestCode == ActivityCompose.REQUEST_CONTACT_TO) + address = draft.to; + else if (requestCode == ActivityCompose.REQUEST_CONTACT_CC) + address = draft.cc; + else if (requestCode == ActivityCompose.REQUEST_CONTACT_BCC) + address = draft.bcc; + + List
list = new ArrayList<>(); + if (address != null) + list.addAll(Arrays.asList(address)); - String text = null; - if (requestCode == ActivityCompose.REQUEST_CONTACT_TO) - text = etTo.getText().toString(); - else if (requestCode == ActivityCompose.REQUEST_CONTACT_CC) - text = etCc.getText().toString(); - else if (requestCode == ActivityCompose.REQUEST_CONTACT_BCC) - text = etBcc.getText().toString(); - - StringBuilder sb = new StringBuilder(text); - sb.append("\"").append(name).append("\" <").append(email).append(">, "); - - if (requestCode == ActivityCompose.REQUEST_CONTACT_TO) - etTo.setText(sb.toString()); - else if (requestCode == ActivityCompose.REQUEST_CONTACT_CC) - etCc.setText(sb.toString()); - else if (requestCode == ActivityCompose.REQUEST_CONTACT_BCC) - etBcc.setText(sb.toString()); + list.add(new InternetAddress(email, name)); + + if (requestCode == ActivityCompose.REQUEST_CONTACT_TO) + draft.to = list.toArray(new Address[0]); + else if (requestCode == ActivityCompose.REQUEST_CONTACT_CC) + draft.cc = list.toArray(new Address[0]); + else if (requestCode == ActivityCompose.REQUEST_CONTACT_BCC) + draft.bcc = list.toArray(new Address[0]); + + db.message().updateMessage(draft); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + } + + return draft; } - } catch (Throwable ex) { - Log.e(ex); - Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); - } finally { - if (cursor != null) - cursor.close(); - } + + @Override + protected void onExecuted(Bundle args, EntityMessage draft) { + if (draft != null) { + etTo.setText(MessageHelper.formatAddressesCompose(draft.to)); + etCc.setText(MessageHelper.formatAddressesCompose(draft.cc)); + etBcc.setText(MessageHelper.formatAddressesCompose(draft.bcc)); + } + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Helper.unexpectedError(getContext(), getViewLifecycleOwner(), ex); + } + }.execute(getContext(), getViewLifecycleOwner(), args, "compose:picked"); } private void handleAddAttachment(Uri uri, final boolean image) {