Correctly display group members

This commit is contained in:
Moxie Marlinspike 2014-02-15 11:28:07 -08:00
parent 8e3aa94a05
commit a305bb80e6
3 changed files with 76 additions and 14 deletions

View File

@ -17,6 +17,7 @@
package org.thoughtcrime.securesms;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
@ -84,6 +85,7 @@ import org.thoughtcrime.securesms.util.CharacterCalculator;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.EncryptedCharacterCalculator;
import org.thoughtcrime.securesms.util.GroupUtil;
import org.thoughtcrime.securesms.util.MemoryCleaner;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.whispersystems.textsecure.crypto.InvalidMessageException;
@ -427,19 +429,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
}
private void handleDisplayGroupRecipients() {
List<String> recipientStrings = new LinkedList<String>();
for (Recipient recipient : getRecipients().getRecipientsList()) {
recipientStrings.add(recipient.toShortString());
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.ConversationActivity_group_conversation_recipients);
builder.setIcon(R.drawable.ic_menu_groups_holo_dark);
builder.setCancelable(true);
builder.setItems(recipientStrings.toArray(new String[]{}), null);
builder.setPositiveButton(android.R.string.ok, null);
builder.show();
new GroupMembersDialog(this, getRecipients()).display();
}
private void handleDeleteThread() {

View File

@ -0,0 +1,72 @@
package org.thoughtcrime.securesms;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.GroupUtil;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
public class GroupMembersDialog extends AsyncTask<Void, Void, Recipients> {
private final Recipients recipients;
private final Context context;
private ProgressDialog progress = null;
public GroupMembersDialog(Context context, Recipients recipients) {
this.recipients = recipients;
this.context = context;
}
@Override
public void onPreExecute() {
progress = ProgressDialog.show(context, "Members...", "Members...", true, false);
}
@Override
protected Recipients doInBackground(Void... params) {
try {
String groupId = recipients.getPrimaryRecipient().getNumber();
return DatabaseFactory.getGroupDatabase(context)
.getGroupMembers(GroupUtil.getDecodedId(groupId));
} catch (IOException e) {
Log.w("ConverstionActivity", e);
return new Recipients(new LinkedList<Recipient>());
}
}
@Override
public void onPostExecute(Recipients members) {
if (progress != null) {
progress.dismiss();
}
List<String> recipientStrings = new LinkedList<String>();
for (Recipient recipient : members.getRecipientsList()) {
recipientStrings.add(recipient.toShortString());
}
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.ConversationActivity_group_conversation_recipients);
builder.setIcon(R.drawable.ic_menu_groups_holo_dark);
builder.setCancelable(true);
builder.setItems(recipientStrings.toArray(new String[]{}), null);
builder.setPositiveButton(android.R.string.ok, null);
builder.show();
}
public void display() {
if (recipients.isGroupRecipient()) execute();
else onPostExecute(recipients);
}
}

View File

@ -77,7 +77,7 @@ public class GroupDatabase extends Database {
for (String member : members) {
try {
recipients.addAll(RecipientFactory.getRecipientsFromString(context, member, true)
recipients.addAll(RecipientFactory.getRecipientsFromString(context, member, false)
.getRecipientsList());
} catch (RecipientFormattingException e) {
Log.w("GroupDatabase", e);