2015-09-17 00:31:24 +00:00
|
|
|
package org.thoughtcrime.securesms;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Intent;
|
2016-08-16 03:23:56 +00:00
|
|
|
import android.graphics.Color;
|
|
|
|
import android.graphics.PorterDuff;
|
|
|
|
import android.graphics.PorterDuffColorFilter;
|
2015-09-15 22:28:27 +00:00
|
|
|
import android.support.annotation.NonNull;
|
2015-09-17 00:31:24 +00:00
|
|
|
import android.util.AttributeSet;
|
|
|
|
import android.view.View;
|
|
|
|
import android.widget.ImageView;
|
|
|
|
import android.widget.LinearLayout;
|
|
|
|
import android.widget.TextView;
|
|
|
|
|
2015-09-15 22:28:27 +00:00
|
|
|
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
2015-09-17 00:31:24 +00:00
|
|
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
|
|
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
|
|
|
import org.thoughtcrime.securesms.recipients.Recipients;
|
2015-09-21 17:54:23 +00:00
|
|
|
import org.thoughtcrime.securesms.util.DateUtils;
|
2015-09-17 00:31:24 +00:00
|
|
|
import org.thoughtcrime.securesms.util.GroupUtil;
|
|
|
|
import org.thoughtcrime.securesms.util.Util;
|
|
|
|
|
2015-09-15 22:28:27 +00:00
|
|
|
import java.util.Locale;
|
|
|
|
import java.util.Set;
|
|
|
|
|
2015-09-17 00:31:24 +00:00
|
|
|
public class ConversationUpdateItem extends LinearLayout
|
2015-09-15 22:28:27 +00:00
|
|
|
implements Recipients.RecipientsModifiedListener, Recipient.RecipientModifiedListener, BindableConversationItem, View.OnClickListener
|
2015-09-17 00:31:24 +00:00
|
|
|
{
|
|
|
|
private static final String TAG = ConversationUpdateItem.class.getSimpleName();
|
|
|
|
|
|
|
|
private ImageView icon;
|
|
|
|
private TextView body;
|
2015-09-21 17:54:23 +00:00
|
|
|
private TextView date;
|
2015-09-17 00:31:24 +00:00
|
|
|
private Recipient sender;
|
|
|
|
private MessageRecord messageRecord;
|
2015-09-21 17:54:23 +00:00
|
|
|
private Locale locale;
|
2015-09-17 00:31:24 +00:00
|
|
|
|
|
|
|
public ConversationUpdateItem(Context context) {
|
|
|
|
super(context);
|
|
|
|
}
|
|
|
|
|
|
|
|
public ConversationUpdateItem(Context context, AttributeSet attrs) {
|
|
|
|
super(context, attrs);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFinishInflate() {
|
|
|
|
super.onFinishInflate();
|
|
|
|
|
|
|
|
this.icon = (ImageView)findViewById(R.id.conversation_update_icon);
|
|
|
|
this.body = (TextView)findViewById(R.id.conversation_update_body);
|
2015-09-21 17:54:23 +00:00
|
|
|
this.date = (TextView)findViewById(R.id.conversation_update_date);
|
2015-09-17 00:31:24 +00:00
|
|
|
|
|
|
|
setOnClickListener(this);
|
|
|
|
}
|
|
|
|
|
2015-09-15 22:28:27 +00:00
|
|
|
@Override
|
|
|
|
public void bind(@NonNull MasterSecret masterSecret,
|
|
|
|
@NonNull MessageRecord messageRecord,
|
|
|
|
@NonNull Locale locale,
|
|
|
|
@NonNull Set<MessageRecord> batchSelected,
|
2015-10-21 22:32:29 +00:00
|
|
|
@NonNull Recipients conversationRecipients)
|
2015-09-15 22:28:27 +00:00
|
|
|
{
|
2015-09-21 17:54:23 +00:00
|
|
|
bind(messageRecord, locale);
|
2016-08-16 03:23:56 +00:00
|
|
|
|
|
|
|
if (batchSelected.contains(messageRecord)) {
|
|
|
|
setSelected(true);
|
|
|
|
} else {
|
|
|
|
setSelected(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public MessageRecord getMessageRecord() {
|
|
|
|
return messageRecord;
|
2015-09-15 22:28:27 +00:00
|
|
|
}
|
|
|
|
|
2015-09-21 17:54:23 +00:00
|
|
|
private void bind(@NonNull MessageRecord messageRecord, @NonNull Locale locale) {
|
2015-09-17 00:31:24 +00:00
|
|
|
this.messageRecord = messageRecord;
|
|
|
|
this.sender = messageRecord.getIndividualRecipient();
|
2015-09-21 17:54:23 +00:00
|
|
|
this.locale = locale;
|
2015-09-17 00:31:24 +00:00
|
|
|
|
|
|
|
this.sender.addListener(this);
|
|
|
|
|
2016-08-16 03:23:56 +00:00
|
|
|
if (messageRecord.isGroupAction()) setGroupRecord(messageRecord);
|
|
|
|
else if (messageRecord.isCallLog()) setCallRecord(messageRecord);
|
|
|
|
else if (messageRecord.isJoined()) setJoinedRecord(messageRecord);
|
|
|
|
else if (messageRecord.isExpirationTimerUpdate()) setTimerRecord(messageRecord);
|
|
|
|
else throw new AssertionError("Neither group nor log nor joined.");
|
2015-09-21 17:54:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
private void setCallRecord(MessageRecord 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()));
|
|
|
|
date.setVisibility(View.VISIBLE);
|
|
|
|
}
|
|
|
|
|
2016-08-16 03:23:56 +00:00
|
|
|
private void setTimerRecord(final MessageRecord messageRecord) {
|
|
|
|
if (messageRecord.getExpiresIn() > 0) {
|
|
|
|
icon.setImageResource(R.drawable.ic_timer_white_24dp);
|
|
|
|
icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
|
|
|
|
} else {
|
|
|
|
icon.setImageResource(R.drawable.ic_timer_off_white_24dp);
|
|
|
|
icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
|
|
|
|
}
|
|
|
|
|
|
|
|
body.setText(messageRecord.getDisplayBody());
|
|
|
|
date.setVisibility(View.GONE);
|
|
|
|
}
|
|
|
|
|
2015-09-21 17:54:23 +00:00
|
|
|
private void setGroupRecord(MessageRecord messageRecord) {
|
|
|
|
icon.setImageResource(R.drawable.ic_group_grey600_24dp);
|
2016-08-16 03:23:56 +00:00
|
|
|
icon.clearColorFilter();
|
2015-09-21 17:54:23 +00:00
|
|
|
|
2015-11-19 00:20:01 +00:00
|
|
|
GroupUtil.getDescription(getContext(), messageRecord.getBody().getBody()).addListener(this);
|
|
|
|
body.setText(messageRecord.getDisplayBody());
|
2015-09-21 17:54:23 +00:00
|
|
|
|
|
|
|
date.setVisibility(View.GONE);
|
2015-09-17 00:31:24 +00:00
|
|
|
}
|
|
|
|
|
2015-10-27 19:18:02 +00:00
|
|
|
private void setJoinedRecord(MessageRecord messageRecord) {
|
|
|
|
icon.setImageResource(R.drawable.ic_favorite_grey600_24dp);
|
2016-08-16 03:23:56 +00:00
|
|
|
icon.clearColorFilter();
|
2015-10-27 19:18:02 +00:00
|
|
|
body.setText(messageRecord.getDisplayBody());
|
|
|
|
date.setVisibility(View.GONE);
|
|
|
|
}
|
|
|
|
|
2015-09-17 00:31:24 +00:00
|
|
|
@Override
|
|
|
|
public void onModified(Recipients recipients) {
|
|
|
|
onModified(recipients.getPrimaryRecipient());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onModified(Recipient recipient) {
|
|
|
|
Util.runOnMain(new Runnable() {
|
|
|
|
@Override
|
|
|
|
public void run() {
|
2015-09-21 17:54:23 +00:00
|
|
|
bind(messageRecord, locale);
|
2015-09-17 00:31:24 +00:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onClick(View v) {
|
|
|
|
if (messageRecord.isIdentityUpdate()) {
|
|
|
|
Intent intent = new Intent(getContext(), RecipientPreferenceActivity.class);
|
|
|
|
intent.putExtra(RecipientPreferenceActivity.RECIPIENTS_EXTRA,
|
|
|
|
new long[] {messageRecord.getIndividualRecipient().getRecipientId()});
|
|
|
|
|
|
|
|
getContext().startActivity(intent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void unbind() {
|
|
|
|
if (sender != null) {
|
|
|
|
sender.removeListener(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|