New 'add contact info' option on the conversation contextual menu

This option is used to add phone numbers from the contact list on the
messages.
This commit is contained in:
Ruben Pollan
2013-10-17 02:28:36 +02:00
parent 8d115562f0
commit 3d690faff0
4 changed files with 55 additions and 1 deletions

View File

@@ -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);
@@ -721,6 +735,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<Draft> getDraftsForCurrentState() {
List<Draft> drafts = new LinkedList<Draft>();

View File

@@ -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);