Skip to content

Commit

Permalink
Added QuickContact onclick in GroupMembersDialog
Browse files Browse the repository at this point in the history
  • Loading branch information
chr1shaefn3r authored and pR0Ps committed May 8, 2015
1 parent 0c322b1 commit 729003d
Showing 1 changed file with 83 additions and 19 deletions.
102 changes: 83 additions & 19 deletions src/org/smssecure/smssecure/GroupMembersDialog.java
Expand Up @@ -2,7 +2,11 @@

import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Rect;
import android.os.AsyncTask;
import android.provider.ContactsContract;
import android.util.Log;

import com.afollestad.materialdialogs.AlertDialogWrapper;
Expand Down Expand Up @@ -45,7 +49,7 @@ protected Recipients doInBackground(Void... params) {
return DatabaseFactory.getGroupDatabase(context)
.getGroupMembers(GroupUtil.getDecodedId(groupId), true);
} catch (IOException e) {
Log.w("ConverstionActivity", e);
Log.w(TAG, e);
return new Recipients(new LinkedList<Recipient>());
}
}
Expand All @@ -56,20 +60,12 @@ public void onPostExecute(Recipients members) {
progress.dismiss();
}

List<String> recipientStrings = new LinkedList<>();
recipientStrings.add(context.getString(R.string.GroupMembersDialog_me));

for (Recipient recipient : members.getRecipientsList()) {
if (!isLocalNumber(recipient)) {
recipientStrings.add(recipient.toShortString());
}
}

GroupMembers groupMembers = new GroupMembers(members);
AlertDialogWrapper.Builder builder = new AlertDialogWrapper.Builder(context);
builder.setTitle(R.string.ConversationActivity_group_members);
builder.setIconAttribute(R.attr.group_members_dialog_icon);
builder.setCancelable(true);
builder.setItems(recipientStrings.toArray(new String[]{}), null);
builder.setItems(groupMembers.getRecipientStrings(), new GroupMembersOnClickListener(context, groupMembers));
builder.setPositiveButton(android.R.string.ok, null);
builder.show();
}
Expand All @@ -79,15 +75,83 @@ public void display() {
else onPostExecute(recipients);
}

private boolean isLocalNumber(Recipient recipient) {
try {
String localNumber = SMSSecurePreferences.getLocalNumber(context);
String e164Number = Util.canonicalizeNumber(context, recipient.getNumber());
private class GroupMembersOnClickListener implements DialogInterface.OnClickListener {
private final GroupMembers groupMembers;
private final Context context;

return e164Number != null && e164Number.equals(localNumber);
} catch (InvalidNumberException e) {
Log.w(TAG, e);
return false;
public GroupMembersOnClickListener(Context context, GroupMembers members) {
this.context = context;
this.groupMembers = members;
}

@Override
public void onClick(DialogInterface dialogInterface, int item) {
Recipient recipient = groupMembers.get(item);

if (recipient.getContactUri() != null) {
ContactsContract.QuickContact.showQuickContact(context, new Rect(0,0,0,0),
recipient.getContactUri(),
ContactsContract.QuickContact.MODE_LARGE, null);
} else {
final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
intent.putExtra(ContactsContract.Intents.Insert.PHONE, recipient.getNumber());
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
context.startActivity(intent);
}
}
}

/**
* Wraps a List of Recipient (just like @class Recipients),
* but with focus on the order of the Recipients.
* So that the order of the RecipientStrings[] matches
* the internal order.
*
* @author Christoph Haefner
*/
private class GroupMembers {
private final String TAG = GroupMembers.class.getSimpleName();

private final LinkedList<Recipient> members = new LinkedList<>();

public GroupMembers(Recipients recipients) {
for (Recipient recipient : recipients.getRecipientsList()) {
if (isLocalNumber(recipient)) {
members.push(recipient);
} else {
members.add(recipient);
}
}
}

public String[] getRecipientStrings() {
List<String> recipientStrings = new LinkedList<>();

for (Recipient recipient : members) {
if (isLocalNumber(recipient)) {
recipientStrings.add(context.getString(R.string.GroupMembersDialog_me));
} else {
recipientStrings.add(recipient.toShortString());
}
}

return recipientStrings.toArray(new String[members.size()]);
}

public Recipient get(int index) {
return members.get(index);
}

private boolean isLocalNumber(Recipient recipient) {
try {
String localNumber = SMSSecurePreferences.getLocalNumber(context);
String e164Number = Util.canonicalizeNumber(context, recipient.getNumber());

return e164Number != null && e164Number.equals(localNumber);
} catch (InvalidNumberException e) {
Log.w(TAG, e);
return false;
}
}
}
}

0 comments on commit 729003d

Please sign in to comment.