Smarter address book add/edit

pull/177/head
M66B 5 years ago
parent f6ab918a7b
commit 0d1e33af50

@ -1356,7 +1356,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
ibSearchContact.setVisibility(show_addresses && (hasFrom || hasTo) ? View.VISIBLE : View.GONE); ibSearchContact.setVisibility(show_addresses && (hasFrom || hasTo) ? View.VISIBLE : View.GONE);
ibNotifyContact.setVisibility(show_addresses && hasChannel && hasFrom ? View.VISIBLE : View.GONE); ibNotifyContact.setVisibility(show_addresses && hasChannel && hasFrom ? View.VISIBLE : View.GONE);
ibPinContact.setVisibility(show_addresses && pin && hasFrom ? View.VISIBLE : View.GONE); ibPinContact.setVisibility(show_addresses && pin && hasFrom ? View.VISIBLE : View.GONE);
ibAddContact.setVisibility(show_addresses && contacts && hasFrom ? View.VISIBLE : View.GONE); ibAddContact.setVisibility(show_addresses && hasFrom ? View.VISIBLE : View.GONE);
tvSubmitterTitle.setVisibility(show_addresses && !TextUtils.isEmpty(submitter) ? View.VISIBLE : View.GONE); tvSubmitterTitle.setVisibility(show_addresses && !TextUtils.isEmpty(submitter) ? View.VISIBLE : View.GONE);
tvSubmitter.setVisibility(show_addresses && !TextUtils.isEmpty(submitter) ? View.VISIBLE : View.GONE); tvSubmitter.setVisibility(show_addresses && !TextUtils.isEmpty(submitter) ? View.VISIBLE : View.GONE);
@ -3036,26 +3036,22 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
private void onAddContact(TupleMessageEx message) { private void onAddContact(TupleMessageEx message) {
for (Address address : message.from) { InternetAddress ia = (InternetAddress) message.from[0];
InternetAddress ia = (InternetAddress) address;
String name = ia.getPersonal(); String name = ia.getPersonal();
String email = ia.getAddress(); String email = ia.getAddress();
// https://developer.android.com/training/contacts-provider/modify-data Uri lookupUri = null;
Intent edit = new Intent(); if (contacts) {
if (!TextUtils.isEmpty(name)) String like = "%" + (name == null ? email : name) + "%";
edit.putExtra(ContactsContract.Intents.Insert.NAME, name);
if (!TextUtils.isEmpty(email))
edit.putExtra(ContactsContract.Intents.Insert.EMAIL, email);
ContentResolver resolver = context.getContentResolver(); ContentResolver resolver = context.getContentResolver();
try (Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, try (Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
new String[]{ new String[]{
ContactsContract.CommonDataKinds.Photo.CONTACT_ID, ContactsContract.CommonDataKinds.Photo.CONTACT_ID,
ContactsContract.Contacts.LOOKUP_KEY ContactsContract.Contacts.LOOKUP_KEY
}, },
ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?", ContactsContract.CommonDataKinds.Email.ADDRESS + " = ?" +
new String[]{email}, null)) { " OR " + ContactsContract.Contacts.DISPLAY_NAME + " LIKE ?",
new String[]{email, like}, null)) {
if (cursor != null && cursor.moveToNext()) { if (cursor != null && cursor.moveToNext()) {
int colContactId = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Photo.CONTACT_ID); int colContactId = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Photo.CONTACT_ID);
int colLookupKey = cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY); int colLookupKey = cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY);
@ -3063,14 +3059,22 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
long contactId = cursor.getLong(colContactId); long contactId = cursor.getLong(colContactId);
String lookupKey = cursor.getString(colLookupKey); String lookupKey = cursor.getString(colLookupKey);
Uri lookupUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey); lookupUri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);
}
}
}
edit.setAction(Intent.ACTION_EDIT); // https://developer.android.com/training/contacts-provider/modify-data
edit.setDataAndTypeAndNormalize(lookupUri, ContactsContract.Contacts.CONTENT_ITEM_TYPE); Intent edit = new Intent();
} else { edit.putExtra(ContactsContract.Intents.Insert.EMAIL, email);
if (!TextUtils.isEmpty(name))
edit.putExtra(ContactsContract.Intents.Insert.NAME, name);
if (lookupUri == null) {
edit.setAction(Intent.ACTION_INSERT); edit.setAction(Intent.ACTION_INSERT);
edit.setType(ContactsContract.Contacts.CONTENT_TYPE); edit.setType(ContactsContract.Contacts.CONTENT_TYPE);
} } else {
edit.setAction(Intent.ACTION_EDIT);
edit.setDataAndTypeAndNormalize(lookupUri, ContactsContract.Contacts.CONTENT_ITEM_TYPE);
} }
PackageManager pm = context.getPackageManager(); PackageManager pm = context.getPackageManager();
@ -3080,7 +3084,6 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
else else
context.startActivity(edit); context.startActivity(edit);
} }
}
private void onToggleMessage(TupleMessageEx message) { private void onToggleMessage(TupleMessageEx message) {
if (EntityFolder.DRAFTS.equals(message.folderType)) if (EntityFolder.DRAFTS.equals(message.folderType))

Loading…
Cancel
Save