diff --git a/res/menu/conversation.xml b/res/menu/conversation.xml
index a95d63fff0..37b884877c 100644
--- a/res/menu/conversation.xml
+++ b/res/menu/conversation.xml
@@ -5,6 +5,10 @@
android:id="@+id/menu_add_attachment"
android:icon="@drawable/ic_menu_attach" />
+
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2a398c9816..e320d5101b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -54,6 +54,7 @@
Delete Thread Confirmation
Are you sure that you want to permanently delete this conversation?
Add attachment
+ Select contact info
Compose Message
Sorry, there was an error setting your attachment.
Sorry, the selected video exceeds message size restrictions.
@@ -524,6 +525,7 @@
Add attachment
+ Add contact info
Delete thread
diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java
index 89aeed6d15..2de68899dc 100644
--- a/src/org/thoughtcrime/securesms/ConversationActivity.java
+++ b/src/org/thoughtcrime/securesms/ConversationActivity.java
@@ -30,6 +30,7 @@ import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
+import android.provider.ContactsContract;
import android.telephony.PhoneNumberUtils;
import android.text.Editable;
import android.text.InputType;
@@ -54,6 +55,9 @@ import com.actionbarsherlock.view.MenuItem;
import org.thoughtcrime.securesms.components.EmojiDrawer;
import org.thoughtcrime.securesms.components.EmojiToggle;
import org.thoughtcrime.securesms.components.RecipientsPanel;
+import org.thoughtcrime.securesms.contacts.ContactAccessor;
+import org.thoughtcrime.securesms.contacts.ContactAccessor.ContactData;
+import org.thoughtcrime.securesms.contacts.ContactAccessor.NumberData;
import org.thoughtcrime.securesms.crypto.KeyExchangeInitiator;
import org.thoughtcrime.securesms.crypto.KeyExchangeProcessor;
import org.thoughtcrime.securesms.crypto.KeyUtil;
@@ -116,6 +120,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
private static final int PICK_IMAGE = 2;
private static final int PICK_VIDEO = 3;
private static final int PICK_AUDIO = 4;
+ private static final int PICK_CONTACT_INFO = 5;
private MasterSecret masterSecret;
private RecipientsPanel recipientsPanel;
@@ -219,6 +224,9 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
case PICK_AUDIO:
addAttachmentAudio(data.getData());
break;
+ case PICK_CONTACT_INFO:
+ addContactInfo(data.getData());
+ break;
}
}
@@ -262,6 +270,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
switch (item.getItemId()) {
case R.id.menu_call: handleDial(getRecipients().getPrimaryRecipient()); return true;
case R.id.menu_delete_thread: handleDeleteThread(); return true;
+ case R.id.menu_add_contact_info: handleAddContactInfo(); return true;
case R.id.menu_add_attachment: handleAddAttachment(); return true;
case R.id.menu_start_secure_session: handleStartSecureSession(); return true;
case R.id.menu_abort_session: handleAbortSecureSession(); return true;
@@ -457,6 +466,11 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
builder.show();
}
+ private void handleAddContactInfo() {
+ Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
+ startActivityForResult(intent, PICK_CONTACT_INFO);
+ }
+
private void handleAddAttachment() {
if (this.isMmsEnabled) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
@@ -729,6 +743,35 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
}
}
+ private void addContactInfo(Uri contactUri) {
+ ContactAccessor contactDataList = ContactAccessor.getInstance();
+ ContactData contactData = contactDataList.getContactData(this, contactUri);
+
+ if (contactData.numbers.size() == 1) composeText.append(contactData.numbers.get(0).number);
+ else if (contactData.numbers.size() > 1) selectContactInfo(contactData);
+ }
+
+ private void selectContactInfo(ContactData contactData) {
+ final CharSequence[] numbers = new CharSequence[contactData.numbers.size()];
+ final CharSequence[] numberItems = new CharSequence[contactData.numbers.size()];
+ for (int i = 0; i < contactData.numbers.size(); i++) {
+ numbers[i] = contactData.numbers.get(i).number;
+ numberItems[i] = contactData.numbers.get(i).type + ": " + contactData.numbers.get(i).number;
+ }
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setIcon(R.drawable.ic_contact_picture);
+ builder.setTitle(R.string.ConversationActivity_select_contact_info);
+
+ builder.setItems(numberItems, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ composeText.append(numbers[which]);
+ }
+ });
+ builder.show();
+ }
+
private List getDraftsForCurrentState() {
List drafts = new LinkedList();
diff --git a/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java b/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java
index b439efab53..a4984e8a0b 100644
--- a/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java
+++ b/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java
@@ -39,6 +39,7 @@ import org.thoughtcrime.securesms.crypto.InvalidKeyException;
import org.thoughtcrime.securesms.util.Base64;
import java.io.IOException;
+import java.lang.Long;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -128,7 +129,11 @@ public class ContactAccessor {
return getContactData(context,
cursor.getString(cursor.getColumnIndexOrThrow(Contacts.DISPLAY_NAME)),
cursor.getLong(cursor.getColumnIndexOrThrow(Contacts._ID)));
-}
+ }
+
+ public ContactData getContactData(Context context, Uri uri) {
+ return getContactData(context, getNameFromContact(context, uri), Long.parseLong(uri.getLastPathSegment()));
+ }
private ContactData getContactData(Context context, String displayName, long id) {
ContactData contactData = new ContactData(id, displayName);