diff --git a/src/com/fsck/k9/activity/ArrayItemList.java b/src/com/fsck/k9/activity/ArrayItemList.java index ef6a03878..27a73ddc8 100644 --- a/src/com/fsck/k9/activity/ArrayItemList.java +++ b/src/com/fsck/k9/activity/ArrayItemList.java @@ -12,6 +12,7 @@ import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import com.fsck.k9.R; +import com.fsck.k9.helper.ContactItem; public class ArrayItemList extends K9ListActivity implements OnItemClickListener { @Override @@ -20,16 +21,18 @@ public class ArrayItemList extends K9ListActivity implements OnItemClickListener setContentView(R.layout.item_list); - ArrayList pa = getIntent().getStringArrayListExtra("emailAddresses"); - if (pa == null) { + Intent i = getIntent(); + ContactItem contact = (ContactItem) i.getSerializableExtra("contact"); + if (contact == null) { return; } - ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, pa); + ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, contact.getEmailAddresses()); ListView listView = getListView(); listView.setOnItemClickListener(this); listView.setAdapter(adapter); + setTitle(contact.getDisplayName()); } @Override diff --git a/src/com/fsck/k9/activity/MessageCompose.java b/src/com/fsck/k9/activity/MessageCompose.java index 1596ed54c..b24bd1fad 100644 --- a/src/com/fsck/k9/activity/MessageCompose.java +++ b/src/com/fsck/k9/activity/MessageCompose.java @@ -73,6 +73,7 @@ import com.fsck.k9.controller.MessagingController; import com.fsck.k9.controller.MessagingListener; import com.fsck.k9.crypto.CryptoProvider; import com.fsck.k9.crypto.PgpData; +import com.fsck.k9.helper.ContactItem; import com.fsck.k9.helper.Contacts; import com.fsck.k9.helper.Utility; import com.fsck.k9.mail.Message.RecipientType; @@ -1796,14 +1797,14 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc case CONTACT_PICKER_TO: case CONTACT_PICKER_CC: case CONTACT_PICKER_BCC: - ArrayList email = mContacts.getEmailFromContactPicker(data); - if (email.size() == 0) { + ContactItem contact = mContacts.getEmailFromContactPicker(data); + if (contact == null) { Toast.makeText(this, getString(R.string.error_contact_address_not_found), Toast.LENGTH_LONG).show(); return; } - if (email.size() > 1) { + if (contact.getEmailAddresses().size() > 1) { Intent i = new Intent(this, ArrayItemList.class); - i.putExtra("emailAddresses", email); + i.putExtra("contact", contact); if (requestCode == CONTACT_PICKER_TO) { startActivityForResult(i, CONTACT_PICKER_TO2); @@ -1815,18 +1816,20 @@ public class MessageCompose extends K9Activity implements OnClickListener, OnFoc return; } if (K9.DEBUG) { - for (int i = 0; i < email.size(); i++) { - Log.v(K9.LOG_TAG, "email[" + i + "]: " + email.get(i)); + ArrayList emails = contact.getEmailAddresses(); + for (int i = 0; i < emails.size(); i++) { + Log.v(K9.LOG_TAG, "email[" + i + "]: " + emails.get(i)); } } + String email = contact.getEmailAddresses().get(0); if (requestCode == CONTACT_PICKER_TO) { - addAddress(mToView, new Address(email.get(0), "")); + addAddress(mToView, new Address(email, "")); } else if (requestCode == CONTACT_PICKER_CC) { - addAddress(mCcView, new Address(email.get(0), "")); + addAddress(mCcView, new Address(email, "")); } else if (requestCode == CONTACT_PICKER_BCC) { - addAddress(mBccView, new Address(email.get(0), "")); + addAddress(mBccView, new Address(email, "")); } else { return; } diff --git a/src/com/fsck/k9/helper/ContactItem.java b/src/com/fsck/k9/helper/ContactItem.java new file mode 100755 index 000000000..59bd3de77 --- /dev/null +++ b/src/com/fsck/k9/helper/ContactItem.java @@ -0,0 +1,24 @@ +package com.fsck.k9.helper; + +import java.io.Serializable; +import java.util.ArrayList; + +public class ContactItem implements Serializable { + private static final long serialVersionUID = 4893328130147843375L; + + private String displayName = null; + private ArrayList emailAddresses = null; + + public String getDisplayName() { + return displayName; + } + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + public ArrayList getEmailAddresses() { + return emailAddresses; + } + public void setEmailAddresses(ArrayList emailAddresses) { + this.emailAddresses = emailAddresses; + } +} diff --git a/src/com/fsck/k9/helper/Contacts.java b/src/com/fsck/k9/helper/Contacts.java index dd641d8c7..50cd59948 100644 --- a/src/com/fsck/k9/helper/Contacts.java +++ b/src/com/fsck/k9/helper/Contacts.java @@ -2,7 +2,6 @@ package com.fsck.k9.helper; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; import android.content.ContentResolver; import android.content.Context; @@ -182,7 +181,7 @@ public abstract class Contacts { * @param intent The {@link Intent} returned by this contact picker. * @return The primary email address of the picked contact. */ - public abstract ArrayList getEmailFromContactPicker(final Intent intent); + public abstract ContactItem getEmailFromContactPicker(final Intent intent); /** * Does the device actually have a Contacts application suitable for diff --git a/src/com/fsck/k9/helper/ContactsSdk5.java b/src/com/fsck/k9/helper/ContactsSdk5.java index ab80d3cc4..a8eff8be5 100644 --- a/src/com/fsck/k9/helper/ContactsSdk5.java +++ b/src/com/fsck/k9/helper/ContactsSdk5.java @@ -193,33 +193,48 @@ public class ContactsSdk5 extends com.fsck.k9.helper.Contacts { } @Override - public ArrayList getEmailFromContactPicker(final Intent data) { + public ContactItem getEmailFromContactPicker(final Intent data) { Cursor cursor = null; + Cursor cursor2 = null; + ContactItem item = new ContactItem(); ArrayList email = new ArrayList(); try { Uri result = data.getData(); + String displayName = null; + cursor = mContentResolver.query(result, null, null, null, null); + if (cursor.moveToFirst()) { + displayName = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); + } // Get the contact id from the Uri String id = result.getLastPathSegment(); - cursor = mContentResolver.query(Email.CONTENT_URI, + cursor2 = mContentResolver.query(Email.CONTENT_URI, null, Email.CONTACT_ID + "=?", new String[] { id }, null); - if (cursor != null) { - int emailIdx = cursor.getColumnIndex(Email.DATA); + if (cursor2 != null) { + int emailIdx = cursor2.getColumnIndex(Email.DATA); - while (cursor.moveToNext()) { - email.add(cursor.getString(emailIdx)); + while (cursor2.moveToNext()) { + email.add(cursor2.getString(emailIdx)); } + + if (email.size() == 0) { + return null; + } + item.setDisplayName(displayName); + item.setEmailAddresses(email); + return item; } } catch (Exception e) { Log.e(K9.LOG_TAG, "Failed to get email data", e); } finally { Utility.closeQuietly(cursor); + Utility.closeQuietly(cursor2); } - return email; + return null; } /**