Show per-member delivery/read status on message info in groups

// FREEBIE
This commit is contained in:
Moxie Marlinspike
2017-09-30 08:45:45 -07:00
parent 2b4064f3b7
commit 285947eb66
11 changed files with 331 additions and 109 deletions

View File

@@ -16,39 +16,38 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
public class MessageDetailsRecipientAdapter extends BaseAdapter implements AbsListView.RecyclerListener {
class MessageDetailsRecipientAdapter extends BaseAdapter implements AbsListView.RecyclerListener {
private final Context context;
private final MasterSecret masterSecret;
private final MessageRecord record;
private final List<Recipient> recipients;
private final boolean isPushGroup;
private final Context context;
private final MasterSecret masterSecret;
private final MessageRecord record;
private final List<RecipientDeliveryStatus> members;
private final boolean isPushGroup;
public MessageDetailsRecipientAdapter(Context context, MasterSecret masterSecret,
MessageRecord record, List<Recipient> recipients,
boolean isPushGroup)
MessageDetailsRecipientAdapter(Context context, MasterSecret masterSecret, MessageRecord record,
List<RecipientDeliveryStatus> members, boolean isPushGroup)
{
this.context = context;
this.masterSecret = masterSecret;
this.record = record;
this.recipients = recipients;
this.isPushGroup = isPushGroup;
this.members = members;
}
@Override
public int getCount() {
return recipients.size();
return members.size();
}
@Override
public Object getItem(int position) {
return recipients.get(position);
return members.get(position);
}
@Override
public long getItemId(int position) {
try {
return Conversions.byteArrayToLong(MessageDigest.getInstance("SHA1").digest(recipients.get(position).getAddress().serialize().getBytes()));
return Conversions.byteArrayToLong(MessageDigest.getInstance("SHA1").digest(members.get(position).recipient.getAddress().serialize().getBytes()));
} catch (NoSuchAlgorithmException e) {
throw new AssertionError(e);
}
@@ -60,8 +59,9 @@ public class MessageDetailsRecipientAdapter extends BaseAdapter implements AbsLi
convertView = LayoutInflater.from(context).inflate(R.layout.message_recipient_list_item, parent, false);
}
Recipient recipient = recipients.get(position);
((MessageRecipientListItem)convertView).set(masterSecret, record, recipient, isPushGroup);
RecipientDeliveryStatus member = members.get(position);
((MessageRecipientListItem)convertView).set(masterSecret, record, member, isPushGroup);
return convertView;
}
@@ -70,4 +70,35 @@ public class MessageDetailsRecipientAdapter extends BaseAdapter implements AbsLi
((MessageRecipientListItem)view).unbind();
}
static class RecipientDeliveryStatus {
enum Status {
UNKNOWN, PENDING, SENT, DELIVERED, READ
}
private final Recipient recipient;
private final Status deliveryStatus;
private final long timestamp;
RecipientDeliveryStatus(Recipient recipient, Status deliveryStatus, long timestamp) {
this.recipient = recipient;
this.deliveryStatus = deliveryStatus;
this.timestamp = timestamp;
}
Status getDeliveryStatus() {
return deliveryStatus;
}
public long getTimestamp() {
return timestamp;
}
public Recipient getRecipient() {
return recipient;
}
}
}