Make Message Details update views in more situations.
parent
469a4700d2
commit
08800c9faf
|
@ -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;
|
||||
|
|
|
@ -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> {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue