2019-02-01 04:28:40 +01:00
|
|
|
package org.thoughtcrime.securesms.conversation;
|
2015-09-17 02:31:24 +02:00
|
|
|
|
|
|
|
import android.content.Context;
|
2016-08-16 05:23:56 +02:00
|
|
|
import android.graphics.Color;
|
|
|
|
import android.graphics.PorterDuff;
|
|
|
|
import android.graphics.PorterDuffColorFilter;
|
2015-09-17 02:31:24 +02:00
|
|
|
import android.util.AttributeSet;
|
|
|
|
import android.view.View;
|
|
|
|
import android.widget.ImageView;
|
|
|
|
import android.widget.LinearLayout;
|
|
|
|
import android.widget.TextView;
|
|
|
|
|
2020-09-11 01:49:32 +02:00
|
|
|
import androidx.annotation.ColorInt;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.annotation.Nullable;
|
|
|
|
|
2021-04-26 03:23:09 +02:00
|
|
|
import org.session.libsession.messaging.sending_receiving.data_extraction.DataExtractionNotificationInfoMessage;
|
2019-02-01 04:28:40 +01:00
|
|
|
import org.thoughtcrime.securesms.BindableConversationItem;
|
2015-09-17 02:31:24 +02:00
|
|
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
2020-09-11 01:49:32 +02:00
|
|
|
import org.thoughtcrime.securesms.loki.utilities.GeneralUtilitiesKt;
|
2017-10-16 22:11:42 +02:00
|
|
|
import org.thoughtcrime.securesms.mms.GlideRequests;
|
2015-09-21 19:54:23 +02:00
|
|
|
import org.thoughtcrime.securesms.util.DateUtils;
|
2021-05-18 01:26:08 +02:00
|
|
|
import org.session.libsignal.utilities.guava.Optional;
|
2015-09-17 02:31:24 +02:00
|
|
|
|
2021-05-18 08:03:47 +02:00
|
|
|
import org.session.libsession.utilities.recipients.Recipient;
|
|
|
|
import org.session.libsession.utilities.recipients.RecipientModifiedListener;
|
2021-01-15 05:36:30 +01:00
|
|
|
import org.session.libsession.utilities.ExpirationUtil;
|
|
|
|
import org.session.libsession.utilities.Util;
|
|
|
|
|
2015-09-16 00:28:27 +02:00
|
|
|
import java.util.Locale;
|
|
|
|
import java.util.Set;
|
|
|
|
|
2020-01-16 01:37:52 +01:00
|
|
|
import network.loki.messenger.R;
|
|
|
|
|
2020-12-14 00:38:51 +01:00
|
|
|
//TODO Remove this class.
|
2015-09-17 02:31:24 +02:00
|
|
|
public class ConversationUpdateItem extends LinearLayout
|
2017-08-01 17:56:00 +02:00
|
|
|
implements RecipientModifiedListener, BindableConversationItem
|
2015-09-17 02:31:24 +02:00
|
|
|
{
|
|
|
|
private static final String TAG = ConversationUpdateItem.class.getSimpleName();
|
|
|
|
|
2016-08-30 02:49:49 +02:00
|
|
|
private Set<MessageRecord> batchSelected;
|
|
|
|
|
2015-09-17 02:31:24 +02:00
|
|
|
private ImageView icon;
|
2018-06-26 19:27:44 +02:00
|
|
|
private TextView title;
|
2015-09-17 02:31:24 +02:00
|
|
|
private TextView body;
|
2015-09-21 19:54:23 +02:00
|
|
|
private TextView date;
|
2015-09-17 02:31:24 +02:00
|
|
|
private Recipient sender;
|
|
|
|
private MessageRecord messageRecord;
|
2015-09-21 19:54:23 +02:00
|
|
|
private Locale locale;
|
2015-09-17 02:31:24 +02:00
|
|
|
|
|
|
|
public ConversationUpdateItem(Context context) {
|
|
|
|
super(context);
|
|
|
|
}
|
|
|
|
|
|
|
|
public ConversationUpdateItem(Context context, AttributeSet attrs) {
|
|
|
|
super(context, attrs);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFinishInflate() {
|
|
|
|
super.onFinishInflate();
|
|
|
|
|
2018-06-26 19:27:44 +02:00
|
|
|
this.icon = findViewById(R.id.conversation_update_icon);
|
|
|
|
this.title = findViewById(R.id.conversation_update_title);
|
|
|
|
this.body = findViewById(R.id.conversation_update_body);
|
|
|
|
this.date = findViewById(R.id.conversation_update_date);
|
2015-09-17 02:31:24 +02:00
|
|
|
|
2016-08-30 02:49:49 +02:00
|
|
|
this.setOnClickListener(new InternalClickListener(null));
|
2015-09-17 02:31:24 +02:00
|
|
|
}
|
|
|
|
|
2015-09-16 00:28:27 +02:00
|
|
|
@Override
|
2018-06-26 19:27:44 +02:00
|
|
|
public void bind(@NonNull MessageRecord messageRecord,
|
|
|
|
@NonNull Optional<MessageRecord> previousMessageRecord,
|
|
|
|
@NonNull Optional<MessageRecord> nextMessageRecord,
|
2021-01-21 05:42:43 +01:00
|
|
|
@NonNull GlideRequests glideRequests,
|
2018-06-26 19:27:44 +02:00
|
|
|
@NonNull Locale locale,
|
|
|
|
@NonNull Set<MessageRecord> batchSelected,
|
|
|
|
@NonNull Recipient conversationRecipient,
|
2019-02-01 18:06:59 +01:00
|
|
|
@Nullable String searchQuery,
|
2018-06-26 19:27:44 +02:00
|
|
|
boolean pulseUpdate)
|
2015-09-16 00:28:27 +02:00
|
|
|
{
|
2016-08-30 02:49:49 +02:00
|
|
|
this.batchSelected = batchSelected;
|
2016-08-16 05:23:56 +02:00
|
|
|
|
2016-08-30 02:49:49 +02:00
|
|
|
bind(messageRecord, locale);
|
2016-08-16 05:23:56 +02:00
|
|
|
}
|
|
|
|
|
2018-04-03 01:17:32 +02:00
|
|
|
@Override
|
|
|
|
public void setEventListener(@Nullable EventListener listener) {
|
|
|
|
// No events to report yet
|
|
|
|
}
|
|
|
|
|
2016-08-16 05:23:56 +02:00
|
|
|
@Override
|
|
|
|
public MessageRecord getMessageRecord() {
|
|
|
|
return messageRecord;
|
2015-09-16 00:28:27 +02:00
|
|
|
}
|
|
|
|
|
2015-09-21 19:54:23 +02:00
|
|
|
private void bind(@NonNull MessageRecord messageRecord, @NonNull Locale locale) {
|
2015-09-17 02:31:24 +02:00
|
|
|
this.messageRecord = messageRecord;
|
|
|
|
this.sender = messageRecord.getIndividualRecipient();
|
2015-09-21 19:54:23 +02:00
|
|
|
this.locale = locale;
|
2015-09-17 02:31:24 +02:00
|
|
|
|
|
|
|
this.sender.addListener(this);
|
|
|
|
|
2020-05-22 01:53:04 +02:00
|
|
|
if (messageRecord.isGroupAction()) setGroupRecord(messageRecord);
|
|
|
|
else if (messageRecord.isCallLog()) setCallRecord(messageRecord);
|
|
|
|
else if (messageRecord.isJoined()) setJoinedRecord(messageRecord);
|
|
|
|
else if (messageRecord.isExpirationTimerUpdate()) setTimerRecord(messageRecord);
|
2021-04-09 08:06:12 +02:00
|
|
|
else if (messageRecord.isScreenshotExtraction()) setDataExtractionRecord(messageRecord, DataExtractionNotificationInfoMessage.Kind.SCREENSHOT);
|
2021-04-20 09:07:21 +02:00
|
|
|
else if (messageRecord.isMediaSavedExtraction()) setDataExtractionRecord(messageRecord, DataExtractionNotificationInfoMessage.Kind.MEDIA_SAVED);
|
2020-05-22 01:53:04 +02:00
|
|
|
else if (messageRecord.isEndSession()) setEndSessionRecord(messageRecord);
|
|
|
|
else if (messageRecord.isIdentityUpdate()) setIdentityRecord(messageRecord);
|
2017-06-07 03:03:09 +02:00
|
|
|
else if (messageRecord.isIdentityVerified() ||
|
2020-05-22 01:53:04 +02:00
|
|
|
messageRecord.isIdentityDefault()) setIdentityVerifyUpdate(messageRecord);
|
2019-12-06 03:00:08 +01:00
|
|
|
else if (messageRecord.isLokiSessionRestoreSent()) setTextMessageRecord(messageRecord);
|
2020-08-24 03:41:39 +02:00
|
|
|
else if (messageRecord.isLokiSessionRestoreDone()) setTextMessageRecord(messageRecord);
|
2020-05-22 01:53:04 +02:00
|
|
|
else throw new AssertionError("Neither group nor log nor joined.");
|
2016-08-30 02:49:49 +02:00
|
|
|
|
|
|
|
if (batchSelected.contains(messageRecord)) setSelected(true);
|
|
|
|
else setSelected(false);
|
2015-09-21 19:54:23 +02: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);
|
|
|
|
|
2019-03-13 22:28:16 +01:00
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
2015-09-21 19:54:23 +02:00
|
|
|
date.setText(DateUtils.getExtendedRelativeTimeSpanString(getContext(), locale, messageRecord.getDateReceived()));
|
2018-06-26 19:27:44 +02:00
|
|
|
|
|
|
|
title.setVisibility(GONE);
|
|
|
|
body.setVisibility(VISIBLE);
|
2015-09-21 19:54:23 +02:00
|
|
|
date.setVisibility(View.VISIBLE);
|
|
|
|
}
|
|
|
|
|
2016-08-16 05:23:56 +02:00
|
|
|
private void setTimerRecord(final MessageRecord messageRecord) {
|
2020-09-11 01:49:32 +02:00
|
|
|
@ColorInt int color = GeneralUtilitiesKt.getColorWithID(getResources(), R.color.text, getContext().getTheme());
|
2016-08-16 05:23:56 +02:00
|
|
|
if (messageRecord.getExpiresIn() > 0) {
|
2018-06-26 19:27:44 +02:00
|
|
|
icon.setImageResource(R.drawable.ic_timer);
|
2020-09-11 01:49:32 +02:00
|
|
|
icon.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
2016-08-16 05:23:56 +02:00
|
|
|
} else {
|
2018-06-26 19:27:44 +02:00
|
|
|
icon.setImageResource(R.drawable.ic_timer_disabled);
|
2020-09-11 01:49:32 +02:00
|
|
|
icon.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
2016-08-16 05:23:56 +02:00
|
|
|
}
|
|
|
|
|
2018-06-26 19:27:44 +02:00
|
|
|
title.setText(ExpirationUtil.getExpirationDisplayValue(getContext(), (int)(messageRecord.getExpiresIn() / 1000)));
|
2019-03-13 22:28:16 +01:00
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
2018-06-26 19:27:44 +02:00
|
|
|
|
|
|
|
title.setVisibility(VISIBLE);
|
|
|
|
body.setVisibility(VISIBLE);
|
|
|
|
date.setVisibility(GONE);
|
2016-08-16 05:23:56 +02:00
|
|
|
}
|
|
|
|
|
2021-04-09 08:06:12 +02:00
|
|
|
private void setDataExtractionRecord(final MessageRecord messageRecord, DataExtractionNotificationInfoMessage.Kind kind) {
|
|
|
|
@ColorInt int color = GeneralUtilitiesKt.getColorWithID(getResources(), R.color.text, getContext().getTheme());
|
|
|
|
if (kind == DataExtractionNotificationInfoMessage.Kind.SCREENSHOT) {
|
|
|
|
icon.setImageResource(R.drawable.quick_camera_dark);
|
2021-04-20 09:07:21 +02:00
|
|
|
} else if (kind == DataExtractionNotificationInfoMessage.Kind.MEDIA_SAVED) {
|
2021-04-09 08:06:12 +02:00
|
|
|
icon.setImageResource(R.drawable.ic_file_download_white_36dp);
|
|
|
|
}
|
|
|
|
icon.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY));
|
|
|
|
|
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
|
|
|
|
|
|
|
title.setVisibility(VISIBLE);
|
|
|
|
body.setVisibility(VISIBLE);
|
|
|
|
date.setVisibility(GONE);
|
|
|
|
}
|
|
|
|
|
2016-08-30 02:49:49 +02:00
|
|
|
private void setIdentityRecord(final MessageRecord messageRecord) {
|
|
|
|
icon.setImageResource(R.drawable.ic_security_white_24dp);
|
|
|
|
icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
|
2019-03-13 22:28:16 +01:00
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
2018-06-26 19:27:44 +02:00
|
|
|
|
|
|
|
title.setVisibility(GONE);
|
|
|
|
body.setVisibility(VISIBLE);
|
|
|
|
date.setVisibility(GONE);
|
2016-08-30 02:49:49 +02:00
|
|
|
}
|
|
|
|
|
2017-06-07 03:03:09 +02:00
|
|
|
private void setIdentityVerifyUpdate(final MessageRecord messageRecord) {
|
|
|
|
if (messageRecord.isIdentityVerified()) icon.setImageResource(R.drawable.ic_check_white_24dp);
|
|
|
|
else icon.setImageResource(R.drawable.ic_info_outline_white_24dp);
|
|
|
|
|
|
|
|
icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
|
2019-03-13 22:28:16 +01:00
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
2018-06-26 19:27:44 +02:00
|
|
|
|
|
|
|
title.setVisibility(GONE);
|
|
|
|
body.setVisibility(VISIBLE);
|
|
|
|
date.setVisibility(GONE);
|
2017-06-07 03:03:09 +02:00
|
|
|
}
|
|
|
|
|
2015-09-21 19:54:23 +02:00
|
|
|
private void setGroupRecord(MessageRecord messageRecord) {
|
|
|
|
icon.setImageResource(R.drawable.ic_group_grey600_24dp);
|
2016-08-16 05:23:56 +02:00
|
|
|
icon.clearColorFilter();
|
2019-03-13 22:28:16 +01:00
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
2015-09-21 19:54:23 +02:00
|
|
|
|
2018-06-26 19:27:44 +02:00
|
|
|
title.setVisibility(GONE);
|
|
|
|
body.setVisibility(VISIBLE);
|
|
|
|
date.setVisibility(GONE);
|
2015-09-17 02:31:24 +02:00
|
|
|
}
|
|
|
|
|
2015-10-27 20:18:02 +01:00
|
|
|
private void setJoinedRecord(MessageRecord messageRecord) {
|
|
|
|
icon.setImageResource(R.drawable.ic_favorite_grey600_24dp);
|
2016-08-16 05:23:56 +02:00
|
|
|
icon.clearColorFilter();
|
2019-03-13 22:28:16 +01:00
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
2018-06-26 19:27:44 +02:00
|
|
|
|
|
|
|
title.setVisibility(GONE);
|
|
|
|
body.setVisibility(VISIBLE);
|
|
|
|
date.setVisibility(GONE);
|
2015-10-27 20:18:02 +01:00
|
|
|
}
|
|
|
|
|
2016-09-12 17:26:46 +02:00
|
|
|
private void setEndSessionRecord(MessageRecord messageRecord) {
|
|
|
|
icon.setImageResource(R.drawable.ic_refresh_white_24dp);
|
|
|
|
icon.setColorFilter(new PorterDuffColorFilter(Color.parseColor("#757575"), PorterDuff.Mode.MULTIPLY));
|
2019-03-13 22:28:16 +01:00
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
2018-06-26 19:27:44 +02:00
|
|
|
|
|
|
|
title.setVisibility(GONE);
|
|
|
|
body.setVisibility(VISIBLE);
|
|
|
|
date.setVisibility(GONE);
|
2016-09-12 17:26:46 +02:00
|
|
|
}
|
2019-12-05 03:56:12 +01:00
|
|
|
|
|
|
|
private void setTextMessageRecord(MessageRecord messageRecord) {
|
|
|
|
body.setText(messageRecord.getDisplayBody(getContext()));
|
|
|
|
|
|
|
|
icon.setVisibility(GONE);
|
|
|
|
title.setVisibility(GONE);
|
|
|
|
body.setVisibility(VISIBLE);
|
|
|
|
date.setVisibility(GONE);
|
|
|
|
}
|
2017-08-01 17:56:00 +02:00
|
|
|
|
2015-09-17 02:31:24 +02:00
|
|
|
@Override
|
|
|
|
public void onModified(Recipient recipient) {
|
2018-01-25 04:17:44 +01:00
|
|
|
Util.runOnMain(() -> bind(messageRecord, locale));
|
2015-09-17 02:31:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2016-08-30 02:49:49 +02:00
|
|
|
public void setOnClickListener(View.OnClickListener l) {
|
|
|
|
super.setOnClickListener(new InternalClickListener(l));
|
2015-09-17 02:31:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void unbind() {
|
|
|
|
if (sender != null) {
|
|
|
|
sender.removeListener(this);
|
|
|
|
}
|
|
|
|
}
|
2016-08-30 02:49:49 +02:00
|
|
|
|
|
|
|
private class InternalClickListener implements View.OnClickListener {
|
|
|
|
|
|
|
|
@Nullable private final View.OnClickListener parent;
|
|
|
|
|
2018-01-25 04:17:44 +01:00
|
|
|
InternalClickListener(@Nullable View.OnClickListener parent) {
|
2016-08-30 02:49:49 +02:00
|
|
|
this.parent = parent;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onClick(View v) {
|
2017-06-07 03:03:09 +02:00
|
|
|
if ((!messageRecord.isIdentityUpdate() &&
|
|
|
|
!messageRecord.isIdentityDefault() &&
|
|
|
|
!messageRecord.isIdentityVerified()) ||
|
|
|
|
!batchSelected.isEmpty())
|
|
|
|
{
|
2016-08-30 02:49:49 +02:00
|
|
|
if (parent != null) parent.onClick(v);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
final Recipient sender = ConversationUpdateItem.this.sender;
|
|
|
|
|
2020-12-14 00:38:51 +01:00
|
|
|
// IdentityUtil.getRemoteIdentityKey(getContext(), sender).addListener(new ListenableFuture.Listener<Optional<IdentityRecord>>() {
|
|
|
|
// @Override
|
|
|
|
// public void onSuccess(Optional<IdentityRecord> result) {
|
|
|
|
// if (result.isPresent()) {
|
|
|
|
// Intent intent = new Intent(getContext(), VerifyIdentityActivity.class);
|
|
|
|
// intent.putExtra(VerifyIdentityActivity.ADDRESS_EXTRA, sender.getAddress());
|
|
|
|
// intent.putExtra(VerifyIdentityActivity.IDENTITY_EXTRA, new IdentityKeyParcelable(result.get().getIdentityKey()));
|
|
|
|
// intent.putExtra(VerifyIdentityActivity.VERIFIED_EXTRA, result.get().getVerifiedStatus() == IdentityDatabase.VerifiedStatus.VERIFIED);
|
|
|
|
//
|
|
|
|
// getContext().startActivity(intent);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
//
|
|
|
|
// @Override
|
|
|
|
// public void onFailure(ExecutionException e) {
|
|
|
|
// Log.w(TAG, e);
|
|
|
|
// }
|
|
|
|
// });
|
2016-08-30 02:49:49 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-09-17 02:31:24 +02:00
|
|
|
}
|