mirror of
https://github.com/deltachat/deltachat-android.git
synced 2025-10-05 10:39:24 +02:00
remove dead quote code
This commit is contained in:
parent
16a57df9d6
commit
979d2c663d
21 changed files with 19 additions and 672 deletions
|
@ -31,19 +31,6 @@
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.QuoteView
|
|
||||||
android:id="@+id/quote_view"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginLeft="6dp"
|
|
||||||
android:layout_marginRight="6dp"
|
|
||||||
android:layout_marginTop="6dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:message_type="preview"
|
|
||||||
app:quote_colorPrimary="?attr/conversation_item_outgoing_text_primary_color"
|
|
||||||
app:quote_colorSecondary="?attr/conversation_item_outgoing_text_primary_color"
|
|
||||||
tools:visibility="visible"/>
|
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
|
@ -87,19 +87,6 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.QuoteView
|
|
||||||
android:id="@+id/quote_view"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/message_bubble_top_padding"
|
|
||||||
android:layout_marginLeft="6dp"
|
|
||||||
android:layout_marginRight="6dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:message_type="incoming"
|
|
||||||
app:quote_colorPrimary="?attr/conversation_item_quote_text_color"
|
|
||||||
app:quote_colorSecondary="?attr/conversation_item_quote_text_color"
|
|
||||||
tools:visibility="visible"/>
|
|
||||||
|
|
||||||
<ViewStub
|
<ViewStub
|
||||||
android:id="@+id/image_view_stub"
|
android:id="@+id/image_view_stub"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|
|
@ -65,19 +65,6 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.QuoteView
|
|
||||||
android:id="@+id/quote_view"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/message_bubble_top_padding"
|
|
||||||
android:layout_marginLeft="6dp"
|
|
||||||
android:layout_marginRight="6dp"
|
|
||||||
android:visibility="gone"
|
|
||||||
app:message_type="outgoing"
|
|
||||||
app:quote_colorPrimary="?attr/conversation_item_quote_text_color"
|
|
||||||
app:quote_colorSecondary="?attr/conversation_item_quote_text_color"
|
|
||||||
tools:visibility="visible"/>
|
|
||||||
|
|
||||||
<ViewStub
|
<ViewStub
|
||||||
android:id="@+id/image_view_stub"
|
android:id="@+id/image_view_stub"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|
|
@ -1,155 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<merge
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_margin="3dp"
|
|
||||||
tools:visibility="visible">
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/quote_root"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="horizontal">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/quote_bar"
|
|
||||||
android:layout_width="@dimen/quote_corner_radius_bottom"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:src="@color/white"
|
|
||||||
tools:tint="@color/purple_400" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginLeft="8dp"
|
|
||||||
android:layout_marginStart="8dp"
|
|
||||||
android:layout_marginRight="8dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:layout_marginBottom="8dp"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:layout_weight="1">
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
|
||||||
android:id="@+id/quote_author"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/Signal.Text.Caption"
|
|
||||||
android:textColor="@color/core_black"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:ellipsize="end"
|
|
||||||
tools:text="Peter Parker" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/quote_attachment_container"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="2dp"
|
|
||||||
android:orientation="horizontal"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="27dp"
|
|
||||||
android:layout_height="35dp"
|
|
||||||
android:layout_marginRight="4dp"
|
|
||||||
android:layout_marginEnd="4dp"
|
|
||||||
android:paddingLeft="-4dp"
|
|
||||||
android:paddingStart="-4dp"
|
|
||||||
android:src="?attr/attachment_document_icon_small" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/quote_attachment_name"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/Signal.Text.Body"
|
|
||||||
android:textColor="@color/core_light_90"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:ellipsize="end"
|
|
||||||
tools:text="The-Amazing-Spider-Man.cba" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/media_type"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginRight="8dp"
|
|
||||||
style="@style/Signal.Text.Caption"
|
|
||||||
android:textColor="@color/core_light_90"
|
|
||||||
android:paddingTop="4dp"
|
|
||||||
android:textStyle="italic"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:text="Photo"
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
|
|
||||||
android:id="@+id/quote_text"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/Signal.Text.Body"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:maxLines="2"
|
|
||||||
tools:text="With great power comes great responsibility."
|
|
||||||
tools:visibility="visible" />
|
|
||||||
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/quote_thumbnail"
|
|
||||||
android:layout_width="60dp"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:scaleType="centerCrop"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="gone" />
|
|
||||||
|
|
||||||
<FrameLayout
|
|
||||||
android:id="@+id/quote_video_overlay"
|
|
||||||
android:layout_width="32dp"
|
|
||||||
android:layout_height="32dp"
|
|
||||||
android:background="@drawable/circle_white"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:longClickable="false"
|
|
||||||
android:visibility="gone"
|
|
||||||
tools:visibility="visible">
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="13dp"
|
|
||||||
android:layout_height="16dp"
|
|
||||||
android:layout_marginLeft="11dp"
|
|
||||||
android:layout_marginStart="11dp"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:tint="@color/core_blue"
|
|
||||||
android:scaleType="fitXY"
|
|
||||||
app:srcCompat="@drawable/triangle_right" />
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
</FrameLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/quote_dismiss"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginEnd="4dp"
|
|
||||||
android:layout_marginRight="4dp"
|
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:layout_gravity="top|end"
|
|
||||||
android:background="@drawable/dismiss_background"
|
|
||||||
android:src="@drawable/ic_close_white_18dp"
|
|
||||||
android:tint="@color/gray70" />
|
|
||||||
|
|
||||||
</merge>
|
|
|
@ -212,16 +212,6 @@
|
||||||
<attr name="summaryHasRingtone" format="string|reference" />
|
<attr name="summaryHasRingtone" format="string|reference" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
<declare-styleable name="QuoteView">
|
|
||||||
<attr name="message_type" format="enum">
|
|
||||||
<enum name="preview" value="0" />
|
|
||||||
<enum name="outgoing" value="1" />
|
|
||||||
<enum name="incoming" value="2" />
|
|
||||||
</attr>
|
|
||||||
<attr name="quote_colorPrimary" format="color" />
|
|
||||||
<attr name="quote_colorSecondary" format="color" />
|
|
||||||
</declare-styleable>
|
|
||||||
|
|
||||||
<declare-styleable name="DocumentView">
|
<declare-styleable name="DocumentView">
|
||||||
<attr name="doc_titleColor" format="color" />
|
<attr name="doc_titleColor" format="color" />
|
||||||
<attr name="doc_captionColor" format="color" />
|
<attr name="doc_captionColor" format="color" />
|
||||||
|
|
|
@ -903,7 +903,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||||
|
|
||||||
protected ListenableFuture<Integer> processComposeControls(int action) {
|
protected ListenableFuture<Integer> processComposeControls(int action) {
|
||||||
return processComposeControls(action, composeText.getTextTrimmed(),
|
return processComposeControls(action, composeText.getTextTrimmed(),
|
||||||
attachmentManager.isAttachmentPresent() || inputPanel.getQuote().isPresent()?
|
attachmentManager.isAttachmentPresent()?
|
||||||
attachmentManager.buildSlideDeck() : null);
|
attachmentManager.buildSlideDeck() : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -917,7 +917,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||||
composeText.setText("");
|
composeText.setText("");
|
||||||
|
|
||||||
if(slideDeck!=null) {
|
if(slideDeck!=null) {
|
||||||
inputPanel.clearQuote();
|
|
||||||
attachmentManager.clear(glideRequests, false);
|
attachmentManager.clear(glideRequests, false);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -1290,36 +1289,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleReplyMessage(DcMsg messageRecord) {
|
public void handleReplyMessage(DcMsg messageRecord) {
|
||||||
// Recipient author;
|
|
||||||
//
|
|
||||||
// if (messageRecord.isOutgoing()) {
|
|
||||||
// author = Recipient.from(this, Address.fromSerialized(Prefs.getLocalNumber(this)), true);
|
|
||||||
// } else {
|
|
||||||
// author = messageRecord.getIndividualRecipient();
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (messageRecord.isMms() && !((MmsMessageRecord) messageRecord).getSharedContacts().isEmpty()) {
|
|
||||||
// Contact contact = ((MmsMessageRecord) messageRecord).getSharedContacts().get(0);
|
|
||||||
// String displayName = ContactUtil.getDisplayName(contact);
|
|
||||||
// String body = getString(R.string.ConversationActivity_quoted_contact_message, EmojiStrings.BUST_IN_SILHOUETTE, displayName);
|
|
||||||
// SlideDeck slideDeck = new SlideDeck();
|
|
||||||
//
|
|
||||||
// if (contact.getAvatarAttachment() != null) {
|
|
||||||
// slideDeck.addSlide(MediaUtil.getSlideForAttachment(this, contact.getAvatarAttachment()));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// inputPanel.setQuote(GlideApp.with(this),
|
|
||||||
// messageRecord.getDateSent(),
|
|
||||||
// author,
|
|
||||||
// body,
|
|
||||||
// slideDeck);
|
|
||||||
// } else {
|
|
||||||
// inputPanel.setQuote(GlideApp.with(this),
|
|
||||||
// messageRecord.getDateSent(),
|
|
||||||
// author,
|
|
||||||
// messageRecord.getBody(),
|
|
||||||
// messageRecord.isMms() ? ((MmsMessageRecord) messageRecord).getSlideDeck() : new SlideDeck());
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -47,7 +47,6 @@ import org.thoughtcrime.securesms.components.AvatarImageView;
|
||||||
import org.thoughtcrime.securesms.components.ConversationItemFooter;
|
import org.thoughtcrime.securesms.components.ConversationItemFooter;
|
||||||
import org.thoughtcrime.securesms.components.ConversationItemThumbnail;
|
import org.thoughtcrime.securesms.components.ConversationItemThumbnail;
|
||||||
import org.thoughtcrime.securesms.components.DocumentView;
|
import org.thoughtcrime.securesms.components.DocumentView;
|
||||||
import org.thoughtcrime.securesms.components.QuoteView;
|
|
||||||
import org.thoughtcrime.securesms.connect.ApplicationDcContext;
|
import org.thoughtcrime.securesms.connect.ApplicationDcContext;
|
||||||
import org.thoughtcrime.securesms.connect.DcHelper;
|
import org.thoughtcrime.securesms.connect.DcHelper;
|
||||||
import org.thoughtcrime.securesms.mms.AudioSlide;
|
import org.thoughtcrime.securesms.mms.AudioSlide;
|
||||||
|
@ -91,7 +90,6 @@ public class ConversationItem extends LinearLayout
|
||||||
private GlideRequests glideRequests;
|
private GlideRequests glideRequests;
|
||||||
|
|
||||||
protected ViewGroup bodyBubble;
|
protected ViewGroup bodyBubble;
|
||||||
private QuoteView quoteView;
|
|
||||||
private TextView bodyText;
|
private TextView bodyText;
|
||||||
private ConversationItemFooter footer;
|
private ConversationItemFooter footer;
|
||||||
private TextView groupSender;
|
private TextView groupSender;
|
||||||
|
@ -147,7 +145,6 @@ public class ConversationItem extends LinearLayout
|
||||||
this.audioViewStub = new Stub<>(findViewById(R.id.audio_view_stub));
|
this.audioViewStub = new Stub<>(findViewById(R.id.audio_view_stub));
|
||||||
this.documentViewStub = new Stub<>(findViewById(R.id.document_view_stub));
|
this.documentViewStub = new Stub<>(findViewById(R.id.document_view_stub));
|
||||||
this.groupSenderHolder = findViewById(R.id.group_sender_holder);
|
this.groupSenderHolder = findViewById(R.id.group_sender_holder);
|
||||||
this.quoteView = findViewById(R.id.quote_view);
|
|
||||||
this.container = findViewById(R.id.container);
|
this.container = findViewById(R.id.container);
|
||||||
|
|
||||||
setOnClickListener(new ClickListener(null));
|
setOnClickListener(new ClickListener(null));
|
||||||
|
@ -188,7 +185,6 @@ public class ConversationItem extends LinearLayout
|
||||||
setContactPhoto();
|
setContactPhoto();
|
||||||
setGroupMessageStatus();
|
setGroupMessageStatus();
|
||||||
setAuthor(messageRecord, groupThread);
|
setAuthor(messageRecord, groupThread);
|
||||||
setQuote(messageRecord, groupThread);
|
|
||||||
setMessageSpacing(context);
|
setMessageSpacing(context);
|
||||||
setFooter(messageRecord, locale);
|
setFooter(messageRecord, locale);
|
||||||
}
|
}
|
||||||
|
@ -209,16 +205,6 @@ public class ConversationItem extends LinearLayout
|
||||||
|
|
||||||
//boolean needsMeasure = false;
|
//boolean needsMeasure = false;
|
||||||
|
|
||||||
if (hasQuote(messageRecord)) {
|
|
||||||
int quoteWidth = quoteView.getMeasuredWidth();
|
|
||||||
int availableWidth = getAvailableMessageBubbleWidth(quoteView);
|
|
||||||
|
|
||||||
if (quoteWidth != availableWidth) {
|
|
||||||
quoteView.getLayoutParams().width = availableWidth;
|
|
||||||
//needsMeasure = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
ConversationItemFooter activeFooter = getActiveFooter(messageRecord);
|
ConversationItemFooter activeFooter = getActiveFooter(messageRecord);
|
||||||
int availableWidth = getAvailableMessageBubbleWidth(footer);
|
int availableWidth = getAvailableMessageBubbleWidth(footer);
|
||||||
|
@ -348,10 +334,6 @@ public class ConversationItem extends LinearLayout
|
||||||
return dcMsg.getType()==DcMsg.DC_MSG_FILE && !dcMsg.isSetupMessage();
|
return dcMsg.getType()==DcMsg.DC_MSG_FILE && !dcMsg.isSetupMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasQuote(DcMsg messageRecord) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setBodyText(DcMsg messageRecord) {
|
private void setBodyText(DcMsg messageRecord) {
|
||||||
bodyText.setClickable(false);
|
bodyText.setClickable(false);
|
||||||
bodyText.setFocusable(false);
|
bodyText.setFocusable(false);
|
||||||
|
@ -497,8 +479,7 @@ public class ConversationItem extends LinearLayout
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((!current.isOutgoing() && isGroupThread)
|
if ((!current.isOutgoing() && isGroupThread)
|
||||||
|| current.isForwarded()
|
|| current.isForwarded()){
|
||||||
|| hasQuote(messageRecord)){
|
|
||||||
topLeft = 0;
|
topLeft = 0;
|
||||||
topRight = 0;
|
topRight = 0;
|
||||||
}
|
}
|
||||||
|
@ -541,52 +522,6 @@ public class ConversationItem extends LinearLayout
|
||||||
return messageBody;
|
return messageBody;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setQuote(@NonNull DcMsg current, boolean isGroupThread) {
|
|
||||||
// if (current.isMms() && !current.isMmsNotification() && ((MediaMmsDcMsg)current).getQuote() != null) {
|
|
||||||
// Quote quote = ((MediaMmsDcMsg)current).getQuote();
|
|
||||||
// assert quote != null;
|
|
||||||
// quoteView.setQuote(glideRequests, quote.getId(), Recipient.from(context, quote.getAuthor(), true), quote.getText(), quote.getAttachment());
|
|
||||||
// quoteView.setVisibility(View.VISIBLE);
|
|
||||||
// quoteView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;
|
|
||||||
//
|
|
||||||
// quoteView.setOnClickListener(view -> {
|
|
||||||
// if (eventListener != null && batchIsEmpty()) {
|
|
||||||
// eventListener.onQuoteClicked((MmsDcMsg) current);
|
|
||||||
// } else {
|
|
||||||
// passthroughClickListener.onClick(view);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// quoteView.setOnLongClickListener(passthroughClickListener);
|
|
||||||
//
|
|
||||||
// if (isStartOfMessageCluster(current, previous, isGroupThread)) {
|
|
||||||
// if (current.isOutgoing()) {
|
|
||||||
// quoteView.setTopCornerSizes(true, true);
|
|
||||||
// } else if (isGroupThread) {
|
|
||||||
// quoteView.setTopCornerSizes(false, false);
|
|
||||||
// } else {
|
|
||||||
// quoteView.setTopCornerSizes(true, true);
|
|
||||||
// }
|
|
||||||
// } else if (!isSingularMessage(current, previous, next, isGroupThread)) {
|
|
||||||
// if (current.isOutgoing()) {
|
|
||||||
// quoteView.setTopCornerSizes(true, false);
|
|
||||||
// } else {
|
|
||||||
// quoteView.setTopCornerSizes(false, true);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (mediaThumbnailStub.resolved()) {
|
|
||||||
// ViewUtil.setTopMargin(mediaThumbnailStub.get(), readDimen(R.dimen.message_bubble_top_padding));
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// quoteView.dismiss();
|
|
||||||
//
|
|
||||||
// if (mediaThumbnailStub.resolved()) {
|
|
||||||
// ViewUtil.setTopMargin(mediaThumbnailStub.get(), 0);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setGutterSizes(@NonNull DcMsg current, boolean isGroupThread) {
|
private void setGutterSizes(@NonNull DcMsg current, boolean isGroupThread) {
|
||||||
if (isGroupThread && current.isOutgoing()) {
|
if (isGroupThread && current.isOutgoing()) {
|
||||||
ViewUtil.setLeftMargin(container, readDimen(R.dimen.conversation_group_left_gutter));
|
ViewUtil.setLeftMargin(container, readDimen(R.dimen.conversation_group_left_gutter));
|
||||||
|
|
|
@ -24,12 +24,10 @@ public abstract class Attachment {
|
||||||
private final int width;
|
private final int width;
|
||||||
private final int height;
|
private final int height;
|
||||||
|
|
||||||
private final boolean quote;
|
|
||||||
|
|
||||||
public Attachment(@NonNull String contentType, int transferState, long size, @Nullable String fileName,
|
public Attachment(@NonNull String contentType, int transferState, long size, @Nullable String fileName,
|
||||||
@Nullable String location, @Nullable String key, @Nullable String relay,
|
@Nullable String location, @Nullable String key, @Nullable String relay,
|
||||||
@Nullable byte[] digest, @Nullable String fastPreflightId, boolean voiceNote,
|
@Nullable byte[] digest, @Nullable String fastPreflightId, boolean voiceNote,
|
||||||
int width, int height, boolean quote)
|
int width, int height)
|
||||||
{
|
{
|
||||||
this.contentType = contentType;
|
this.contentType = contentType;
|
||||||
this.transferState = transferState;
|
this.transferState = transferState;
|
||||||
|
@ -40,7 +38,6 @@ public abstract class Attachment {
|
||||||
this.voiceNote = voiceNote;
|
this.voiceNote = voiceNote;
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
this.quote = quote;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -92,8 +89,4 @@ public abstract class Attachment {
|
||||||
public int getHeight() {
|
public int getHeight() {
|
||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isQuote() {
|
|
||||||
return quote;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,9 +16,9 @@ public class DatabaseAttachment extends Attachment {
|
||||||
String contentType, int transferProgress, long size,
|
String contentType, int transferProgress, long size,
|
||||||
String fileName, String location, String key, String relay,
|
String fileName, String location, String key, String relay,
|
||||||
byte[] digest, String fastPreflightId, boolean voiceNote,
|
byte[] digest, String fastPreflightId, boolean voiceNote,
|
||||||
int width, int height, boolean quote)
|
int width, int height)
|
||||||
{
|
{
|
||||||
super(contentType, transferProgress, size, fileName, location, key, relay, digest, fastPreflightId, voiceNote, width, height, quote);
|
super(contentType, transferProgress, size, fileName, location, key, relay, digest, fastPreflightId, voiceNote, width, height);
|
||||||
this.attachmentId = attachmentId;
|
this.attachmentId = attachmentId;
|
||||||
this.hasData = hasData;
|
this.hasData = hasData;
|
||||||
this.hasThumbnail = hasThumbnail;
|
this.hasThumbnail = hasThumbnail;
|
||||||
|
|
|
@ -13,12 +13,11 @@ public class DcAttachment extends Attachment {
|
||||||
private final DcMsg dcMsg;
|
private final DcMsg dcMsg;
|
||||||
|
|
||||||
public DcAttachment(DcMsg dcMsg) {
|
public DcAttachment(DcMsg dcMsg) {
|
||||||
// todo: width, height, quote
|
|
||||||
super(dcMsg.getFilemime(), AttachmentDatabase.TRANSFER_PROGRESS_DONE, dcMsg.getFilebytes(),
|
super(dcMsg.getFilemime(), AttachmentDatabase.TRANSFER_PROGRESS_DONE, dcMsg.getFilebytes(),
|
||||||
dcMsg.getFilename(),
|
dcMsg.getFilename(),
|
||||||
Uri.fromFile(new File(dcMsg.getFile())).toString(), String.valueOf(dcMsg.getId()), null, null,
|
Uri.fromFile(new File(dcMsg.getFile())).toString(), String.valueOf(dcMsg.getId()), null, null,
|
||||||
null, dcMsg.getType() == DcMsg.DC_MSG_VOICE,
|
null, dcMsg.getType() == DcMsg.DC_MSG_VOICE,
|
||||||
0, 0, false);
|
0, 0);
|
||||||
this.dcMsg = dcMsg;
|
this.dcMsg = dcMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,17 +10,17 @@ public class UriAttachment extends Attachment {
|
||||||
private final @Nullable Uri thumbnailUri;
|
private final @Nullable Uri thumbnailUri;
|
||||||
|
|
||||||
public UriAttachment(@NonNull Uri uri, @NonNull String contentType, int transferState, long size,
|
public UriAttachment(@NonNull Uri uri, @NonNull String contentType, int transferState, long size,
|
||||||
@Nullable String fileName, boolean voiceNote, boolean quote)
|
@Nullable String fileName, boolean voiceNote)
|
||||||
{
|
{
|
||||||
this(uri, uri, contentType, transferState, size, 0, 0, fileName, null, voiceNote, quote);
|
this(uri, uri, contentType, transferState, size, 0, 0, fileName, null, voiceNote);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UriAttachment(@NonNull Uri dataUri, @Nullable Uri thumbnailUri,
|
public UriAttachment(@NonNull Uri dataUri, @Nullable Uri thumbnailUri,
|
||||||
@NonNull String contentType, int transferState, long size, int width, int height,
|
@NonNull String contentType, int transferState, long size, int width, int height,
|
||||||
@Nullable String fileName, @Nullable String fastPreflightId,
|
@Nullable String fileName, @Nullable String fastPreflightId,
|
||||||
boolean voiceNote, boolean quote)
|
boolean voiceNote)
|
||||||
{
|
{
|
||||||
super(contentType, transferState, size, fileName, null, null, null, null, fastPreflightId, voiceNote, width, height, quote);
|
super(contentType, transferState, size, fileName, null, null, null, null, fastPreflightId, voiceNote, width, height);
|
||||||
this.dataUri = dataUri;
|
this.dataUri = dataUri;
|
||||||
this.thumbnailUri = thumbnailUri;
|
this.thumbnailUri = thumbnailUri;
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,17 +23,12 @@ import android.widget.Toast;
|
||||||
import org.thoughtcrime.securesms.R;
|
import org.thoughtcrime.securesms.R;
|
||||||
import org.thoughtcrime.securesms.components.emoji.EmojiDrawer;
|
import org.thoughtcrime.securesms.components.emoji.EmojiDrawer;
|
||||||
import org.thoughtcrime.securesms.components.emoji.EmojiToggle;
|
import org.thoughtcrime.securesms.components.emoji.EmojiToggle;
|
||||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
|
||||||
import org.thoughtcrime.securesms.mms.QuoteModel;
|
|
||||||
import org.thoughtcrime.securesms.mms.SlideDeck;
|
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
|
||||||
import org.thoughtcrime.securesms.util.Prefs;
|
import org.thoughtcrime.securesms.util.Prefs;
|
||||||
import org.thoughtcrime.securesms.util.Util;
|
import org.thoughtcrime.securesms.util.Util;
|
||||||
import org.thoughtcrime.securesms.util.ViewUtil;
|
import org.thoughtcrime.securesms.util.ViewUtil;
|
||||||
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener;
|
import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener;
|
||||||
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
|
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture;
|
||||||
import org.thoughtcrime.securesms.util.concurrent.SettableFuture;
|
import org.thoughtcrime.securesms.util.concurrent.SettableFuture;
|
||||||
import org.thoughtcrime.securesms.util.guava.Optional;
|
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
@ -48,7 +43,6 @@ public class InputPanel extends LinearLayout
|
||||||
|
|
||||||
private static final int FADE_TIME = 150;
|
private static final int FADE_TIME = 150;
|
||||||
|
|
||||||
private QuoteView quoteView;
|
|
||||||
private EmojiToggle emojiToggle;
|
private EmojiToggle emojiToggle;
|
||||||
private ComposeText composeText;
|
private ComposeText composeText;
|
||||||
private View quickCameraToggle;
|
private View quickCameraToggle;
|
||||||
|
@ -80,9 +74,6 @@ public class InputPanel extends LinearLayout
|
||||||
public void onFinishInflate() {
|
public void onFinishInflate() {
|
||||||
super.onFinishInflate();
|
super.onFinishInflate();
|
||||||
|
|
||||||
View quoteDismiss = findViewById(R.id.quote_dismiss);
|
|
||||||
|
|
||||||
this.quoteView = findViewById(R.id.quote_view);
|
|
||||||
this.emojiToggle = findViewById(R.id.emoji_toggle);
|
this.emojiToggle = findViewById(R.id.emoji_toggle);
|
||||||
this.composeText = findViewById(R.id.embedded_text_editor);
|
this.composeText = findViewById(R.id.embedded_text_editor);
|
||||||
this.quickCameraToggle = findViewById(R.id.quick_camera_toggle);
|
this.quickCameraToggle = findViewById(R.id.quick_camera_toggle);
|
||||||
|
@ -106,8 +97,6 @@ public class InputPanel extends LinearLayout
|
||||||
emojiToggle.setVisibility(View.VISIBLE);
|
emojiToggle.setVisibility(View.VISIBLE);
|
||||||
emojiVisible = true;
|
emojiVisible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
quoteDismiss.setOnClickListener(v -> clearQuote());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setListener(final @NonNull Listener listener) {
|
public void setListener(final @NonNull Listener listener) {
|
||||||
|
@ -120,23 +109,6 @@ public class InputPanel extends LinearLayout
|
||||||
composeText.setMediaListener(listener);
|
composeText.setMediaListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setQuote(@NonNull GlideRequests glideRequests, long id, @NonNull Recipient author, @NonNull String body, @NonNull SlideDeck attachments) {
|
|
||||||
this.quoteView.setQuote(glideRequests, id, author, body, attachments);
|
|
||||||
this.quoteView.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clearQuote() {
|
|
||||||
this.quoteView.dismiss();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Optional<QuoteModel> getQuote() {
|
|
||||||
if (quoteView.getQuoteId() > 0 && quoteView.getVisibility() == View.VISIBLE) {
|
|
||||||
return Optional.of(new QuoteModel(quoteView.getQuoteId(), quoteView.getAuthor().getAddress(), quoteView.getBody(), quoteView.getAttachments()));
|
|
||||||
} else {
|
|
||||||
return Optional.absent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEmojiDrawer(@NonNull EmojiDrawer emojiDrawer) {
|
public void setEmojiDrawer(@NonNull EmojiDrawer emojiDrawer) {
|
||||||
emojiToggle.attach(emojiDrawer);
|
emojiToggle.attach(emojiDrawer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,275 +0,0 @@
|
||||||
package org.thoughtcrime.securesms.components;
|
|
||||||
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.res.TypedArray;
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.support.annotation.NonNull;
|
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
import android.support.annotation.RequiresApi;
|
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.util.AttributeSet;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.FrameLayout;
|
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.LinearLayout;
|
|
||||||
import android.widget.TextView;
|
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
|
||||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.R;
|
|
||||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
|
||||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
|
||||||
import org.thoughtcrime.securesms.mms.GlideRequests;
|
|
||||||
import org.thoughtcrime.securesms.mms.Slide;
|
|
||||||
import org.thoughtcrime.securesms.mms.SlideDeck;
|
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
|
|
||||||
import org.thoughtcrime.securesms.util.ThemeUtil;
|
|
||||||
import org.thoughtcrime.securesms.util.Util;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class QuoteView extends FrameLayout implements RecipientModifiedListener {
|
|
||||||
|
|
||||||
private static final String TAG = QuoteView.class.getSimpleName();
|
|
||||||
|
|
||||||
private static final int MESSAGE_TYPE_PREVIEW = 0;
|
|
||||||
private static final int MESSAGE_TYPE_OUTGOING = 1;
|
|
||||||
private static final int MESSAGE_TYPE_INCOMING = 2;
|
|
||||||
|
|
||||||
private ViewGroup rootView;
|
|
||||||
private TextView authorView;
|
|
||||||
private TextView bodyView;
|
|
||||||
private ImageView quoteBarView;
|
|
||||||
private ImageView thumbnailView;
|
|
||||||
private View attachmentVideoOverlayView;
|
|
||||||
private ViewGroup attachmentContainerView;
|
|
||||||
private TextView attachmentNameView;
|
|
||||||
private ImageView dismissView;
|
|
||||||
|
|
||||||
private long id;
|
|
||||||
private Recipient author;
|
|
||||||
private String body;
|
|
||||||
private TextView mediaDescriptionText;
|
|
||||||
private SlideDeck attachments;
|
|
||||||
private int messageType;
|
|
||||||
private int largeCornerRadius;
|
|
||||||
private int smallCornerRadius;
|
|
||||||
private CornerMask cornerMask;
|
|
||||||
|
|
||||||
|
|
||||||
public QuoteView(Context context) {
|
|
||||||
super(context);
|
|
||||||
initialize(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public QuoteView(Context context, AttributeSet attrs) {
|
|
||||||
super(context, attrs);
|
|
||||||
initialize(attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public QuoteView(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
||||||
super(context, attrs, defStyleAttr);
|
|
||||||
initialize(attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
|
|
||||||
public QuoteView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
|
||||||
super(context, attrs, defStyleAttr, defStyleRes);
|
|
||||||
initialize(attrs);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initialize(@Nullable AttributeSet attrs) {
|
|
||||||
inflate(getContext(), R.layout.quote_view, this);
|
|
||||||
|
|
||||||
this.rootView = findViewById(R.id.quote_root);
|
|
||||||
this.authorView = findViewById(R.id.quote_author);
|
|
||||||
this.bodyView = findViewById(R.id.quote_text);
|
|
||||||
this.quoteBarView = findViewById(R.id.quote_bar);
|
|
||||||
this.thumbnailView = findViewById(R.id.quote_thumbnail);
|
|
||||||
this.attachmentVideoOverlayView = findViewById(R.id.quote_video_overlay);
|
|
||||||
this.attachmentContainerView = findViewById(R.id.quote_attachment_container);
|
|
||||||
this.attachmentNameView = findViewById(R.id.quote_attachment_name);
|
|
||||||
this.dismissView = findViewById(R.id.quote_dismiss);
|
|
||||||
this.mediaDescriptionText = findViewById(R.id.media_type);
|
|
||||||
this.largeCornerRadius = getResources().getDimensionPixelSize(R.dimen.quote_corner_radius_large);
|
|
||||||
this.smallCornerRadius = getResources().getDimensionPixelSize(R.dimen.quote_corner_radius_bottom);
|
|
||||||
|
|
||||||
cornerMask = new CornerMask(this);
|
|
||||||
cornerMask.setRadii(largeCornerRadius, largeCornerRadius, smallCornerRadius, smallCornerRadius);
|
|
||||||
|
|
||||||
if (attrs != null) {
|
|
||||||
TypedArray typedArray = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.QuoteView, 0, 0);
|
|
||||||
int primaryColor = typedArray.getColor(R.styleable.QuoteView_quote_colorPrimary, Color.BLACK);
|
|
||||||
int secondaryColor = typedArray.getColor(R.styleable.QuoteView_quote_colorSecondary, Color.BLACK);
|
|
||||||
messageType = typedArray.getInt(R.styleable.QuoteView_message_type, 0);
|
|
||||||
typedArray.recycle();
|
|
||||||
|
|
||||||
dismissView.setVisibility(messageType == MESSAGE_TYPE_PREVIEW ? VISIBLE : GONE);
|
|
||||||
|
|
||||||
authorView.setTextColor(primaryColor);
|
|
||||||
bodyView.setTextColor(primaryColor);
|
|
||||||
attachmentNameView.setTextColor(primaryColor);
|
|
||||||
mediaDescriptionText.setTextColor(secondaryColor);
|
|
||||||
|
|
||||||
if (messageType == MESSAGE_TYPE_PREVIEW) {
|
|
||||||
int radius = getResources().getDimensionPixelOffset(R.dimen.quote_corner_radius_preview);
|
|
||||||
cornerMask.setTopLeftRadius(radius);
|
|
||||||
cornerMask.setTopRightRadius(radius);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dismissView.setOnClickListener(view -> setVisibility(GONE));
|
|
||||||
|
|
||||||
if (cornerMask.isLegacy()) {
|
|
||||||
setWillNotDraw(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onDraw(Canvas canvas) {
|
|
||||||
super.onDraw(canvas);
|
|
||||||
if (cornerMask.isLegacy()) {
|
|
||||||
cornerMask.mask(canvas);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void dispatchDraw(Canvas canvas) {
|
|
||||||
super.dispatchDraw(canvas);
|
|
||||||
if (!cornerMask.isLegacy()) {
|
|
||||||
cornerMask.mask(canvas);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setQuote(GlideRequests glideRequests, long id, @NonNull Recipient author, @Nullable String body, @NonNull SlideDeck attachments) {
|
|
||||||
if (this.author != null) this.author.removeListener(this);
|
|
||||||
|
|
||||||
this.id = id;
|
|
||||||
this.author = author;
|
|
||||||
this.body = body;
|
|
||||||
this.attachments = attachments;
|
|
||||||
|
|
||||||
author.addListener(this);
|
|
||||||
setQuoteAuthor(author);
|
|
||||||
setQuoteText(body, attachments);
|
|
||||||
setQuoteAttachment(glideRequests, attachments);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setTopCornerSizes(boolean topLeftLarge, boolean topRightLarge) {
|
|
||||||
cornerMask.setTopLeftRadius(topLeftLarge ? largeCornerRadius : smallCornerRadius);
|
|
||||||
cornerMask.setTopRightRadius(topRightLarge ? largeCornerRadius : smallCornerRadius);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void dismiss() {
|
|
||||||
if (this.author != null) this.author.removeListener(this);
|
|
||||||
|
|
||||||
this.id = 0;
|
|
||||||
this.author = null;
|
|
||||||
this.body = null;
|
|
||||||
|
|
||||||
setVisibility(GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onModified(Recipient recipient) {
|
|
||||||
Util.runOnMain(() -> {
|
|
||||||
if (recipient == author) {
|
|
||||||
setQuoteAuthor(recipient);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setQuoteAuthor(@NonNull Recipient author) {
|
|
||||||
boolean outgoing = messageType != MESSAGE_TYPE_INCOMING;
|
|
||||||
boolean isOwnNumber = Util.isOwnNumber(getContext(), author.getAddress());
|
|
||||||
|
|
||||||
authorView.setText(isOwnNumber ? getContext().getString(R.string.self)
|
|
||||||
: author.toShortString());
|
|
||||||
|
|
||||||
// We use the raw color resource because Android 4.x was struggling with tints here
|
|
||||||
//quoteBarView.setImageResource(author.getColor().toQuoteBarColorResource(getContext(), outgoing));
|
|
||||||
//rootView.setBackgroundColor(author.getColor().toQuoteBackgroundColor(getContext(), outgoing));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setQuoteText(@Nullable String body, @NonNull SlideDeck attachments) {
|
|
||||||
if (!TextUtils.isEmpty(body) || !attachments.containsMediaSlide()) {
|
|
||||||
bodyView.setVisibility(VISIBLE);
|
|
||||||
bodyView.setText(body == null ? "" : body);
|
|
||||||
mediaDescriptionText.setVisibility(GONE);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bodyView.setVisibility(GONE);
|
|
||||||
mediaDescriptionText.setVisibility(VISIBLE);
|
|
||||||
|
|
||||||
List<Slide> audioSlides = Stream.of(attachments.getSlides()).filter(Slide::hasAudio).limit(1).toList();
|
|
||||||
List<Slide> documentSlides = Stream.of(attachments.getSlides()).filter(Slide::hasDocument).limit(1).toList();
|
|
||||||
List<Slide> imageSlides = Stream.of(attachments.getSlides()).filter(Slide::hasImage).limit(1).toList();
|
|
||||||
List<Slide> videoSlides = Stream.of(attachments.getSlides()).filter(Slide::hasVideo).limit(1).toList();
|
|
||||||
|
|
||||||
// Given that most types have images, we specifically check images last
|
|
||||||
if (!audioSlides.isEmpty()) {
|
|
||||||
mediaDescriptionText.setText(R.string.audio);
|
|
||||||
} else if (!documentSlides.isEmpty()) {
|
|
||||||
mediaDescriptionText.setVisibility(GONE);
|
|
||||||
} else if (!videoSlides.isEmpty()) {
|
|
||||||
mediaDescriptionText.setText(R.string.video);
|
|
||||||
} else if (!imageSlides.isEmpty()) {
|
|
||||||
mediaDescriptionText.setText(R.string.image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setQuoteAttachment(@NonNull GlideRequests glideRequests, @NonNull SlideDeck slideDeck) {
|
|
||||||
List<Slide> imageVideoSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasImage() || s.hasVideo()).limit(1).toList();
|
|
||||||
List<Slide> documentSlides = Stream.of(attachments.getSlides()).filter(Slide::hasDocument).limit(1).toList();
|
|
||||||
|
|
||||||
attachmentVideoOverlayView.setVisibility(GONE);
|
|
||||||
|
|
||||||
if (!imageVideoSlides.isEmpty() && imageVideoSlides.get(0).getThumbnailUri() != null) {
|
|
||||||
thumbnailView.setVisibility(VISIBLE);
|
|
||||||
attachmentContainerView.setVisibility(GONE);
|
|
||||||
dismissView.setBackgroundResource(R.drawable.dismiss_background);
|
|
||||||
if (imageVideoSlides.get(0).hasVideo()) {
|
|
||||||
attachmentVideoOverlayView.setVisibility(VISIBLE);
|
|
||||||
}
|
|
||||||
glideRequests.load(new DecryptableUri(imageVideoSlides.get(0).getThumbnailUri()))
|
|
||||||
.centerCrop()
|
|
||||||
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
|
|
||||||
.into(thumbnailView);
|
|
||||||
} else if (!documentSlides.isEmpty()){
|
|
||||||
thumbnailView.setVisibility(GONE);
|
|
||||||
attachmentContainerView.setVisibility(VISIBLE);
|
|
||||||
attachmentNameView.setText(documentSlides.get(0).getFileName().or(""));
|
|
||||||
} else {
|
|
||||||
thumbnailView.setVisibility(GONE);
|
|
||||||
attachmentContainerView.setVisibility(GONE);
|
|
||||||
dismissView.setBackgroundDrawable(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ThemeUtil.isDarkTheme(getContext())) {
|
|
||||||
dismissView.setBackgroundResource(R.drawable.circle_alpha);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getQuoteId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Recipient getAuthor() {
|
|
||||||
return author;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBody() {
|
|
||||||
return body;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Attachment> getAttachments() {
|
|
||||||
return attachments.asAttachments();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -587,7 +587,7 @@ public class Contact implements Parcelable {
|
||||||
|
|
||||||
private static Attachment attachmentFromUri(@Nullable Uri uri) {
|
private static Attachment attachmentFromUri(@Nullable Uri uri) {
|
||||||
if (uri == null) return null;
|
if (uri == null) return null;
|
||||||
return new UriAttachment(uri, MediaUtil.IMAGE_JPEG, AttachmentDatabase.TRANSFER_PROGRESS_DONE, 0, null, false, false);
|
return new UriAttachment(uri, MediaUtil.IMAGE_JPEG, AttachmentDatabase.TRANSFER_PROGRESS_DONE, 0, null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -42,11 +42,11 @@ public class AudioSlide extends Slide {
|
||||||
}
|
}
|
||||||
|
|
||||||
public AudioSlide(Context context, Uri uri, long dataSize, boolean voiceNote) {
|
public AudioSlide(Context context, Uri uri, long dataSize, boolean voiceNote) {
|
||||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.AUDIO_UNSPECIFIED, dataSize, 0, 0, false, null, voiceNote, false));
|
super(context, constructAttachmentFromUri(context, uri, MediaUtil.AUDIO_UNSPECIFIED, dataSize, 0, 0, false, null, voiceNote));
|
||||||
}
|
}
|
||||||
|
|
||||||
public AudioSlide(Context context, Uri uri, long dataSize, String contentType, boolean voiceNote) {
|
public AudioSlide(Context context, Uri uri, long dataSize, String contentType, boolean voiceNote) {
|
||||||
super(context, new UriAttachment(uri, null, contentType, AttachmentDatabase.TRANSFER_PROGRESS_STARTED, dataSize, 0, 0, null, null, voiceNote, false));
|
super(context, new UriAttachment(uri, null, contentType, AttachmentDatabase.TRANSFER_PROGRESS_STARTED, dataSize, 0, 0, null, null, voiceNote));
|
||||||
}
|
}
|
||||||
|
|
||||||
public AudioSlide(Context context, Attachment attachment) {
|
public AudioSlide(Context context, Attachment attachment) {
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class DocumentSlide extends Slide {
|
||||||
@NonNull String contentType, long size,
|
@NonNull String contentType, long size,
|
||||||
@Nullable String fileName)
|
@Nullable String fileName)
|
||||||
{
|
{
|
||||||
super(context, constructAttachmentFromUri(context, uri, contentType, size, 0, 0, true, StorageUtil.getCleanFileName(fileName), false, false));
|
super(context, constructAttachmentFromUri(context, uri, contentType, size, 0, 0, true, StorageUtil.getCleanFileName(fileName), false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -20,7 +20,7 @@ public class GifSlide extends ImageSlide {
|
||||||
}
|
}
|
||||||
|
|
||||||
public GifSlide(Context context, Uri uri, long size, int width, int height) {
|
public GifSlide(Context context, Uri uri, long size, int width, int height) {
|
||||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_GIF, size, width, height, true, null, false, false));
|
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_GIF, size, width, height, true, null, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -44,7 +44,7 @@ public class ImageSlide extends Slide {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ImageSlide(Context context, Uri uri, long size, int width, int height) {
|
public ImageSlide(Context context, Uri uri, long size, int width, int height) {
|
||||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_JPEG, size, width, height, true, null, false, false));
|
super(context, constructAttachmentFromUri(context, uri, MediaUtil.IMAGE_JPEG, size, width, height, true, null, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
package org.thoughtcrime.securesms.mms;
|
|
||||||
|
|
||||||
|
|
||||||
import android.support.annotation.Nullable;
|
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
|
||||||
import org.thoughtcrime.securesms.database.Address;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class QuoteModel {
|
|
||||||
|
|
||||||
private final long id;
|
|
||||||
private final Address author;
|
|
||||||
private final String text;
|
|
||||||
private final List<Attachment> attachments;
|
|
||||||
|
|
||||||
public QuoteModel(long id, Address author, String text, @Nullable List<Attachment> attachments) {
|
|
||||||
this.id = id;
|
|
||||||
this.author = author;
|
|
||||||
this.text = text;
|
|
||||||
this.attachments = attachments;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Address getAuthor() {
|
|
||||||
return author;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getText() {
|
|
||||||
return text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Attachment> getAttachments() {
|
|
||||||
return attachments;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -140,8 +140,7 @@ public abstract class Slide {
|
||||||
int height,
|
int height,
|
||||||
boolean hasThumbnail,
|
boolean hasThumbnail,
|
||||||
@Nullable String fileName,
|
@Nullable String fileName,
|
||||||
boolean voiceNote,
|
boolean voiceNote)
|
||||||
boolean quote)
|
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
String resolvedType = Optional.fromNullable(MediaUtil.getMimeType(context, uri)).or(defaultMime);
|
String resolvedType = Optional.fromNullable(MediaUtil.getMimeType(context, uri)).or(defaultMime);
|
||||||
|
@ -155,8 +154,7 @@ public abstract class Slide {
|
||||||
height,
|
height,
|
||||||
fileName,
|
fileName,
|
||||||
fastPreflightId,
|
fastPreflightId,
|
||||||
voiceNote,
|
voiceNote);
|
||||||
quote);
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
throw new AssertionError(e);
|
throw new AssertionError(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ import org.thoughtcrime.securesms.util.ResUtil;
|
||||||
public class VideoSlide extends Slide {
|
public class VideoSlide extends Slide {
|
||||||
|
|
||||||
public VideoSlide(Context context, Uri uri, long dataSize) {
|
public VideoSlide(Context context, Uri uri, long dataSize) {
|
||||||
super(context, constructAttachmentFromUri(context, uri, MediaUtil.VIDEO_UNSPECIFIED, dataSize, 0, 0, MediaUtil.hasVideoThumbnail(uri), null, false, false));
|
super(context, constructAttachmentFromUri(context, uri, MediaUtil.VIDEO_UNSPECIFIED, dataSize, 0, 0, MediaUtil.hasVideoThumbnail(uri), null, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
public VideoSlide(Context context, DcMsg dcMsg) {
|
public VideoSlide(Context context, DcMsg dcMsg) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue