diff --git a/src/com/b44t/messenger/DcMsg.java b/src/com/b44t/messenger/DcMsg.java index 75813f837..3a650bc22 100644 --- a/src/com/b44t/messenger/DcMsg.java +++ b/src/com/b44t/messenger/DcMsg.java @@ -90,9 +90,6 @@ public class DcMsg { } // the following are probably system messages in delta-land - public boolean isCallLog() { return false; } - public boolean isIncomingCall() { return false; } - public boolean isOutgoingCall() { return false; } public boolean isJoined() { return false; } public boolean isExpirationTimerUpdate() { return false; } public boolean isEndSession() { return false; } @@ -137,11 +134,6 @@ public class DcMsg { return getState() == DC_STATE_OUT_MDN_RCVD; } - public boolean isUpdate() { - // I'm uncertain as what is meant by 'update' here, compare MessageRecord - return false; - } - public int getSubscriptionId() { return -1; } diff --git a/src/org/thoughtcrime/securesms/ConversationAdapter.java b/src/org/thoughtcrime/securesms/ConversationAdapter.java index 2bac4514b..12bd79bcc 100644 --- a/src/org/thoughtcrime/securesms/ConversationAdapter.java +++ b/src/org/thoughtcrime/securesms/ConversationAdapter.java @@ -17,7 +17,6 @@ package org.thoughtcrime.securesms; import android.content.Context; -import android.database.Cursor; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -29,28 +28,17 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import com.annimon.stream.Stream; -import com.b44t.messenger.DcChat; -import com.b44t.messenger.DcContact; import com.b44t.messenger.DcMsg; import org.thoughtcrime.securesms.ConversationAdapter.HeaderViewHolder; -import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.connect.ApplicationDcContext; import org.thoughtcrime.securesms.connect.DcHelper; -import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.thoughtcrime.securesms.database.MmsSmsColumns; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; import org.thoughtcrime.securesms.database.model.MessageRecord; -import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.mms.GlideRequests; -import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.Conversions; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.LRUCache; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; -import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.whispersystems.libsignal.util.guava.Optional; @@ -59,9 +47,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Calendar; import java.util.Collections; -import java.util.Date; import java.util.HashSet; -import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -86,7 +72,7 @@ public class ConversationAdapter private static final int MESSAGE_TYPE_OUTGOING = 0; private static final int MESSAGE_TYPE_INCOMING = 1; - private static final int MESSAGE_TYPE_UPDATE = 2; + private static final int MESSAGE_TYPE_INFO = 2; private static final int MESSAGE_TYPE_AUDIO_OUTGOING = 3; private static final int MESSAGE_TYPE_AUDIO_INCOMING = 4; private static final int MESSAGE_TYPE_THUMBNAIL_OUTGOING = 5; @@ -206,6 +192,7 @@ public class ConversationAdapter Optional previous = position >= dcMsgList.length-1? Optional.absent() : Optional.of(getMsg(position+1)); Optional next = position <= 0? Optional.absent() : Optional.of(getMsg(position-1)); boolean pulseHighlight = dcMsgList[position] == recordToPulseHighlight; + holder.getItem().bind(getMsg(position), previous, next, glideRequests, locale, batchSelected, recipient, pulseHighlight); } @@ -239,30 +226,29 @@ public class ConversationAdapter case MESSAGE_TYPE_THUMBNAIL_INCOMING: case MESSAGE_TYPE_DOCUMENT_INCOMING: case MESSAGE_TYPE_INCOMING: return R.layout.conversation_item_received; - case MESSAGE_TYPE_UPDATE: return R.layout.conversation_item_update; + case MESSAGE_TYPE_INFO: return R.layout.conversation_item_update; default: throw new IllegalArgumentException("unsupported item view type given to ConversationAdapter"); } } @Override public int getItemViewType(int i) { - DcMsg messageRecord = getMsg(i); - int type = messageRecord.getType(); - if (messageRecord.isUpdate()) { - return MESSAGE_TYPE_UPDATE; - } else if (type==DcMsg.DC_MSG_AUDIO || type==DcMsg.DC_MSG_VOICE) { - if (messageRecord.isOutgoing()) return MESSAGE_TYPE_AUDIO_OUTGOING; - else return MESSAGE_TYPE_AUDIO_INCOMING; - } else if (type==DcMsg.DC_MSG_FILE) { - if (messageRecord.isOutgoing()) return MESSAGE_TYPE_DOCUMENT_OUTGOING; - else return MESSAGE_TYPE_DOCUMENT_INCOMING; - } else if (type==DcMsg.DC_MSG_IMAGE || type==DcMsg.DC_MSG_GIF || type==DcMsg.DC_MSG_VIDEO) { - if (messageRecord.isOutgoing()) return MESSAGE_TYPE_THUMBNAIL_OUTGOING; - else return MESSAGE_TYPE_THUMBNAIL_INCOMING; - } else if (messageRecord.isOutgoing()) { - return MESSAGE_TYPE_OUTGOING; - } else { - return MESSAGE_TYPE_INCOMING; + DcMsg dcMsg = getMsg(i); + int type = dcMsg.getType(); + if (dcMsg.isInfo()) { + return MESSAGE_TYPE_INFO; + } + else if (type==DcMsg.DC_MSG_AUDIO || type==DcMsg.DC_MSG_VOICE) { + return dcMsg.isOutgoing()? MESSAGE_TYPE_AUDIO_OUTGOING : MESSAGE_TYPE_AUDIO_INCOMING; + } + else if (type==DcMsg.DC_MSG_FILE) { + return dcMsg.isOutgoing()? MESSAGE_TYPE_DOCUMENT_OUTGOING : MESSAGE_TYPE_DOCUMENT_INCOMING; + } + else if (type==DcMsg.DC_MSG_IMAGE || type==DcMsg.DC_MSG_GIF || type==DcMsg.DC_MSG_VIDEO) { + return dcMsg.isOutgoing()? MESSAGE_TYPE_THUMBNAIL_OUTGOING : MESSAGE_TYPE_THUMBNAIL_INCOMING; + } + else { + return dcMsg.isOutgoing()? MESSAGE_TYPE_OUTGOING : MESSAGE_TYPE_INCOMING; } } diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/org/thoughtcrime/securesms/ConversationItem.java index 41c6670da..0e1110dde 100644 --- a/src/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/org/thoughtcrime/securesms/ConversationItem.java @@ -27,7 +27,6 @@ import android.net.Uri; import android.support.annotation.DimenRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import android.support.v7.app.AlertDialog; import android.text.SpannableString; import android.text.Spanned; import android.text.TextUtils; @@ -42,10 +41,8 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; -import com.b44t.messenger.DcContact; import com.b44t.messenger.DcMsg; -import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.components.AlertView; import org.thoughtcrime.securesms.components.AudioView; @@ -60,15 +57,7 @@ import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.contactshare.Contact; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.DatabaseFactory; -import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase; -import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; -import org.thoughtcrime.securesms.database.model.Quote; import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob; -import org.thoughtcrime.securesms.jobs.MmsDownloadJob; -import org.thoughtcrime.securesms.jobs.MmsSendJob; -import org.thoughtcrime.securesms.jobs.SmsSendJob; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.Slide; @@ -712,7 +701,7 @@ public class ConversationItem extends LinearLayout if (isGroupThread && !current.isOutgoing()) { contactPhotoHolder.setVisibility(VISIBLE); - if (!previous.isPresent() || previous.get().isUpdate() || current.getFromId() != previous.get().getFromId() || + if (!previous.isPresent() || previous.get().isInfo() || current.getFromId() != previous.get().getFromId() || !DateUtils.isSameDay(previous.get().getTimestamp(), current.getTimestamp())) { groupSenderHolder.setVisibility(VISIBLE); @@ -720,7 +709,7 @@ public class ConversationItem extends LinearLayout groupSenderHolder.setVisibility(GONE); } - if (!next.isPresent() || next.get().isUpdate() || current.getFromId() != previous.get().getFromId()) { + if (!next.isPresent() || next.get().isInfo() || current.getFromId() != previous.get().getFromId()) { contactPhoto.setVisibility(VISIBLE); } else { contactPhoto.setVisibility(GONE); @@ -755,20 +744,20 @@ public class ConversationItem extends LinearLayout private boolean isStartOfMessageCluster(@NonNull DcMsg current, @NonNull Optional previous, boolean isGroupThread) { if (isGroupThread) { - return !previous.isPresent() || previous.get().isUpdate() || !DateUtils.isSameDay(current.getTimestamp(), previous.get().getTimestamp()) || + return !previous.isPresent() || previous.get().isInfo() || !DateUtils.isSameDay(current.getTimestamp(), previous.get().getTimestamp()) || current.getFromId() != previous.get().getFromId(); } else { - return !previous.isPresent() || previous.get().isUpdate() || !DateUtils.isSameDay(current.getTimestamp(), previous.get().getTimestamp()) || + return !previous.isPresent() || previous.get().isInfo() || !DateUtils.isSameDay(current.getTimestamp(), previous.get().getTimestamp()) || current.isOutgoing() != previous.get().isOutgoing(); } } private boolean isEndOfMessageCluster(@NonNull DcMsg current, @NonNull Optional next, boolean isGroupThread) { if (isGroupThread) { - return !next.isPresent() || next.get().isUpdate() || !DateUtils.isSameDay(current.getTimestamp(), next.get().getTimestamp()) || + return !next.isPresent() || next.get().isInfo() || !DateUtils.isSameDay(current.getTimestamp(), next.get().getTimestamp()) || current.getFromId() != next.get().getFromId(); } else { - return !next.isPresent() || next.get().isUpdate() || !DateUtils.isSameDay(current.getTimestamp(), next.get().getTimestamp()) || + return !next.isPresent() || next.get().isInfo() || !DateUtils.isSameDay(current.getTimestamp(), next.get().getTimestamp()) || current.isOutgoing() != next.get().isOutgoing(); } } diff --git a/src/org/thoughtcrime/securesms/ConversationUpdateItem.java b/src/org/thoughtcrime/securesms/ConversationUpdateItem.java index a64d7e302..4ea6c414f 100644 --- a/src/org/thoughtcrime/securesms/ConversationUpdateItem.java +++ b/src/org/thoughtcrime/securesms/ConversationUpdateItem.java @@ -103,32 +103,18 @@ public class ConversationUpdateItem extends LinearLayout this.sender.addListener(this); if (messageRecord.isGroupAction()) setGroupRecord(messageRecord); - else if (messageRecord.isCallLog()) setCallRecord(messageRecord); else if (messageRecord.isJoined()) setJoinedRecord(messageRecord); else if (messageRecord.isExpirationTimerUpdate()) setTimerRecord(messageRecord); else if (messageRecord.isEndSession()) setEndSessionRecord(messageRecord); else if (messageRecord.isIdentityUpdate()) setIdentityRecord(messageRecord); else if (messageRecord.isIdentityVerified() || messageRecord.isIdentityDefault()) setIdentityVerifyUpdate(messageRecord); - else throw new AssertionError("Neither group nor log nor joined."); + else setGenericInfoRecord(messageRecord); if (batchSelected.contains(messageRecord)) setSelected(true); else setSelected(false); } - private void setCallRecord(DcMsg messageRecord) { - if (messageRecord.isIncomingCall()) icon.setImageResource(R.drawable.ic_call_received_grey600_24dp); - else if (messageRecord.isOutgoingCall()) icon.setImageResource(R.drawable.ic_call_made_grey600_24dp); - else icon.setImageResource(R.drawable.ic_call_missed_grey600_24dp); - - body.setText(messageRecord.getDisplayBody()); - date.setText(DateUtils.getExtendedRelativeTimeSpanString(getContext(), locale, messageRecord.getDateReceived())); - - title.setVisibility(GONE); - body.setVisibility(VISIBLE); - date.setVisibility(View.VISIBLE); - } - private void setTimerRecord(final DcMsg messageRecord) { if (messageRecord.getExpiresIn() > 0) { icon.setImageResource(R.drawable.ic_timer); @@ -199,7 +185,18 @@ public class ConversationUpdateItem extends LinearLayout body.setVisibility(VISIBLE); date.setVisibility(GONE); } - + + private void setGenericInfoRecord(DcMsg messageRecord) { + icon.setImageResource(R.drawable.ic_group_grey600_24dp); + icon.clearColorFilter(); + + body.setText(messageRecord.getDisplayBody()); + + title.setVisibility(GONE); + body.setVisibility(VISIBLE); + date.setVisibility(GONE); + } + @Override public void onModified(Recipient recipient) { Util.runOnMain(() -> bind(messageRecord, locale));