Make Message Details update views in more situations.

master
Cody Henthorne 2020-06-17 13:54:07 -04:00 committed by Alan Evans
parent 469a4700d2
commit 08800c9faf
4 changed files with 23 additions and 73 deletions

View File

@ -94,6 +94,7 @@ public final class MessageDetailsActivity extends PassphraseRequiredActionBarAct
adapter = new MessageDetailsAdapter(glideRequests);
list.setAdapter(adapter);
list.setItemAnimator(null);
}
private void initializeViewModel() {
@ -133,15 +134,14 @@ public final class MessageDetailsActivity extends PassphraseRequiredActionBarAct
list.add(new MessageDetailsViewState<>(details.getMessageRecord(), MessageDetailsViewState.MESSAGE_HEADER));
int headerOrder = 0;
if (details.getMessageRecord().isOutgoing()) {
if (addRecipients(list, RecipientHeader.notSent(headerOrder), details.getNotSent())) headerOrder++;
if (addRecipients(list, RecipientHeader.read(headerOrder), details.getRead())) headerOrder++;
if (addRecipients(list, RecipientHeader.delivered(headerOrder), details.getDelivered())) headerOrder++;
if (addRecipients(list, RecipientHeader.sentTo(headerOrder), details.getSent())) headerOrder++;
addRecipients(list, RecipientHeader.pending(headerOrder), details.getPending());
addRecipients(list, RecipientHeader.NOT_SENT, details.getNotSent());
addRecipients(list, RecipientHeader.READ, details.getRead());
addRecipients(list, RecipientHeader.DELIVERED, details.getDelivered());
addRecipients(list, RecipientHeader.SENT_TO, details.getSent());
addRecipients(list, RecipientHeader.PENDING, details.getPending());
} else {
addRecipients(list, RecipientHeader.sentFrom(headerOrder), details.getSent());
addRecipients(list, RecipientHeader.SENT_FROM, details.getSent());
}
return list;

View File

@ -94,7 +94,7 @@ final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.Mess
case MessageDetailsViewState.MESSAGE_HEADER:
return true;
case MessageDetailsViewState.RECIPIENT_HEADER:
return ((RecipientHeader) oldData).getHeaderOrder() == ((RecipientHeader) newData).getHeaderOrder();
return oldData == newData;
case MessageDetailsViewState.RECIPIENT:
return ((RecipientDeliveryStatus) oldData).getRecipient().getId().equals(((RecipientDeliveryStatus) newData).getRecipient().getId());
}
@ -112,26 +112,16 @@ final class MessageDetailsAdapter extends ListAdapter<MessageDetailsAdapter.Mess
if (oldData.getClass() == newData.getClass() && oldItem.itemType == newItem.itemType) {
switch (oldItem.itemType) {
case MessageDetailsViewState.MESSAGE_HEADER:
return areMessageRecordContentsTheSame((MessageRecord) oldData, (MessageRecord) newData);
return false;
case MessageDetailsViewState.RECIPIENT_HEADER:
return ((RecipientHeader) oldData).getHeader() == ((RecipientHeader) newData).getHeader();
case MessageDetailsViewState.RECIPIENT:
return true;
case MessageDetailsViewState.RECIPIENT:
return ((RecipientDeliveryStatus) oldData).getDeliveryStatus() == ((RecipientDeliveryStatus) newData).getDeliveryStatus();
}
}
return false;
}
private boolean areMessageRecordContentsTheSame(MessageRecord oldData, MessageRecord newData) {
return oldData.equals(newData) &&
oldData.getDateSent() == newData.getDateSent() &&
oldData.getDateReceived() == newData.getDateReceived() &&
oldData.getType() == newData.getType() &&
oldData.getExpiresIn() == newData.getExpiresIn() &&
oldData.getExpireStarted() == newData.getExpireStarted() &&
oldData.getReactions().equals(newData.getReactions());
}
}
static final class MessageDetailsViewState<T> {

View File

@ -1,64 +1,24 @@
package org.thoughtcrime.securesms.messagedetails;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import org.thoughtcrime.securesms.R;
final class RecipientHeader {
enum RecipientHeader {
PENDING(R.string.message_details_recipient_header__pending_send),
SENT_TO(R.string.message_details_recipient_header__sent_to),
SENT_FROM(R.string.message_details_recipient_header__sent_from),
DELIVERED(R.string.message_details_recipient_header__delivered_to),
READ(R.string.message_details_recipient_header__read_by),
NOT_SENT(R.string.message_details_recipient_header__not_sent);
private final int headerOrder;
private final int headerText;
private final HeaderStatus status;
private final int headerText;
private RecipientHeader(int headerOrder, @StringRes int headerText, @NonNull HeaderStatus headerStatus) {
this.headerOrder = headerOrder;
RecipientHeader(@StringRes int headerText) {
this.headerText = headerText;
this.status = headerStatus;
}
int getHeaderOrder() {
return headerOrder;
}
@StringRes int getHeader() {
@StringRes int getHeaderText() {
return headerText;
}
@NonNull HeaderStatus getHeaderStatus() {
return status;
}
static RecipientHeader pending(int idx) {
return new RecipientHeader(idx, R.string.message_details_recipient_header__pending_send, HeaderStatus.PENDING);
}
static RecipientHeader sentTo(int idx) {
return new RecipientHeader(idx, R.string.message_details_recipient_header__sent_to, HeaderStatus.SENT_TO);
}
static RecipientHeader sentFrom(int idx) {
return new RecipientHeader(idx, R.string.message_details_recipient_header__sent_from, HeaderStatus.SENT_FROM);
}
static RecipientHeader delivered(int idx) {
return new RecipientHeader(idx, R.string.message_details_recipient_header__delivered_to, HeaderStatus.DELIVERED);
}
static RecipientHeader read(int idx) {
return new RecipientHeader(idx, R.string.message_details_recipient_header__read_by, HeaderStatus.READ);
}
static RecipientHeader notSent(int idx) {
return new RecipientHeader(idx, R.string.message_details_recipient_header__not_sent, HeaderStatus.NOT_SENT);
}
enum HeaderStatus {
PENDING,
SENT_TO,
SENT_FROM,
DELIVERED,
READ,
NOT_SENT
}
}

View File

@ -20,8 +20,8 @@ final class RecipientHeaderViewHolder extends RecyclerView.ViewHolder {
}
void bind(RecipientHeader recipientHeader) {
header.setText(recipientHeader.getHeader());
switch (recipientHeader.getHeaderStatus()) {
header.setText(recipientHeader.getHeaderText());
switch (recipientHeader) {
case PENDING:
deliveryStatus.setPending();
break;