diff --git a/res/layout/conversation_item_received.xml b/res/layout/conversation_item_received.xml
index dd5bac8b87..7573f4755a 100644
--- a/res/layout/conversation_item_received.xml
+++ b/res/layout/conversation_item_received.xml
@@ -74,29 +74,6 @@
android:autoLink="all"
android:linksClickable="true" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Multimedia message
+ Downloading MMS message
+ Error downloading MMS message, tap to retry
Received a message encrypted using an old version of Signal that is no longer supported. Please ask the sender to update to the most recent version and resend the message.
diff --git a/src/org/thoughtcrime/securesms/ConversationAdapter.java b/src/org/thoughtcrime/securesms/ConversationAdapter.java
index 5680007d50..de7bcac90f 100644
--- a/src/org/thoughtcrime/securesms/ConversationAdapter.java
+++ b/src/org/thoughtcrime/securesms/ConversationAdapter.java
@@ -23,6 +23,7 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
@@ -35,8 +36,8 @@ import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
import org.thoughtcrime.securesms.database.SmsDatabase;
-import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
import org.thoughtcrime.securesms.database.model.MessageRecord;
+import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.util.LRUCache;
import org.thoughtcrime.securesms.util.ViewUtil;
@@ -61,6 +62,7 @@ public class ConversationAdapter
{
private static final int MAX_CACHE_SIZE = 40;
+ private static final String TAG = ConversationAdapter.class.getName();
private final Map> messageRecordCache =
Collections.synchronizedMap(new LRUCache>(MAX_CACHE_SIZE));
@@ -135,15 +137,18 @@ public class ConversationAdapter
@Override
public void onBindItemViewHolder(ViewHolder viewHolder, @NonNull Cursor cursor) {
+ long start = System.currentTimeMillis();
long id = cursor.getLong(cursor.getColumnIndexOrThrow(SmsDatabase.ID));
String type = cursor.getString(cursor.getColumnIndexOrThrow(MmsSmsDatabase.TRANSPORT));
MessageRecord messageRecord = getMessageRecord(id, cursor, type);
viewHolder.getView().bind(masterSecret, messageRecord, locale, batchSelected, recipients);
+ Log.w(TAG, "Bind time: " + (System.currentTimeMillis() - start));
}
@Override
public ViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
+ long start = System.currentTimeMillis();
final V itemView = ViewUtil.inflate(inflater, parent, getLayoutForViewType(viewType));
itemView.setOnClickListener(new OnClickListener() {
@Override
@@ -162,7 +167,7 @@ public class ConversationAdapter
return true;
}
});
-
+ Log.w(TAG, "Inflate time: " + (System.currentTimeMillis() - start));
return new ViewHolder(itemView);
}
@@ -243,14 +248,10 @@ public class ConversationAdapter
}
private boolean hasAudio(MessageRecord messageRecord) {
- return messageRecord.isMms() &&
- !messageRecord.isMmsNotification() &&
- ((MediaMmsMessageRecord)messageRecord).getSlideDeck().getAudioSlide() != null;
+ return messageRecord.isMms() && ((MmsMessageRecord)messageRecord).getSlideDeck().getAudioSlide() != null;
}
private boolean hasThumbnail(MessageRecord messageRecord) {
- return messageRecord.isMms() &&
- !messageRecord.isMmsNotification() &&
- ((MediaMmsMessageRecord)messageRecord).getSlideDeck().getThumbnailSlide() != null;
+ return messageRecord.isMms() && ((MmsMessageRecord)messageRecord).getSlideDeck().getThumbnailSlide() != null;
}
}
diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/org/thoughtcrime/securesms/ConversationItem.java
index 743d242a44..e7486c27e6 100644
--- a/src/org/thoughtcrime/securesms/ConversationItem.java
+++ b/src/org/thoughtcrime/securesms/ConversationItem.java
@@ -34,7 +34,6 @@ import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewStub;
-import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -55,7 +54,7 @@ import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
import org.thoughtcrime.securesms.database.model.MessageRecord;
-import org.thoughtcrime.securesms.database.model.NotificationMmsMessageRecord;
+import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.jobs.MmsDownloadJob;
import org.thoughtcrime.securesms.jobs.MmsSendJob;
import org.thoughtcrime.securesms.jobs.SmsSendJob;
@@ -113,14 +112,10 @@ public class ConversationItem extends LinearLayout
private @Nullable Recipients conversationRecipients;
private @NonNull Stub mediaThumbnailStub;
private @NonNull Stub audioViewStub;
- private @NonNull Button mmsDownloadButton;
- private @NonNull TextView mmsDownloadingLabel;
private @NonNull ExpirationTimerView expirationTimer;
private int defaultBubbleColor;
- private final MmsDownloadClickListener mmsDownloadClickListener = new MmsDownloadClickListener();
- private final MmsPreferencesClickListener mmsPreferencesClickListener = new MmsPreferencesClickListener();
private final PassthroughClickListener passthroughClickListener = new PassthroughClickListener();
private final AttachmentDownloadClickListener downloadClickListener = new AttachmentDownloadClickListener();
@@ -154,8 +149,6 @@ public class ConversationItem extends LinearLayout
this.secureImage = (ImageView) findViewById(R.id.secure_indicator);
this.deliveryStatusIndicator = (DeliveryStatusView) findViewById(R.id.delivery_status);
this.alertView = (AlertView) findViewById(R.id.indicators_parent);
- this.mmsDownloadButton = (Button) findViewById(R.id.mms_download_button);
- this.mmsDownloadingLabel = (TextView) findViewById(R.id.mms_label_downloading);
this.contactPhoto = (AvatarImageView) findViewById(R.id.contact_photo);
this.bodyBubble = findViewById(R.id.body_bubble);
this.mediaThumbnailStub = new Stub<>((ViewStub) findViewById(R.id.image_view_stub));
@@ -164,7 +157,6 @@ public class ConversationItem extends LinearLayout
setOnClickListener(new ClickListener(null));
- mmsDownloadButton.setOnClickListener(mmsDownloadClickListener);
bodyText.setOnLongClickListener(passthroughClickListener);
bodyText.setOnClickListener(passthroughClickListener);
}
@@ -267,15 +259,11 @@ public class ConversationItem extends LinearLayout
}
private boolean hasAudio(MessageRecord messageRecord) {
- return messageRecord.isMms() &&
- !messageRecord.isMmsNotification() &&
- ((MediaMmsMessageRecord)messageRecord).getSlideDeck().getAudioSlide() != null;
+ return messageRecord.isMms() && ((MmsMessageRecord)messageRecord).getSlideDeck().getAudioSlide() != null;
}
private boolean hasThumbnail(MessageRecord messageRecord) {
- return messageRecord.isMms() &&
- !messageRecord.isMmsNotification() &&
- ((MediaMmsMessageRecord)messageRecord).getSlideDeck().getThumbnailSlide() != null;
+ return messageRecord.isMms() && ((MmsMessageRecord)messageRecord).getSlideDeck().getThumbnailSlide() != null;
}
private void setBodyText(MessageRecord messageRecord) {
@@ -293,13 +281,7 @@ public class ConversationItem extends LinearLayout
private void setMediaAttributes(MessageRecord messageRecord) {
boolean showControls = !messageRecord.isFailed() && (!messageRecord.isOutgoing() || messageRecord.isPending());
- if (messageRecord.isMmsNotification()) {
- if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
- if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE);
-
- bodyText.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
- setNotificationMmsAttributes((NotificationMmsMessageRecord) messageRecord);
- } else if (hasAudio(messageRecord)) {
+ if (hasAudio(messageRecord)) {
audioViewStub.get().setVisibility(View.VISIBLE);
if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE);
@@ -315,7 +297,7 @@ public class ConversationItem extends LinearLayout
//noinspection ConstantConditions
mediaThumbnailStub.get().setImageResource(masterSecret,
- ((MediaMmsMessageRecord)messageRecord).getSlideDeck().getThumbnailSlide(),
+ ((MmsMessageRecord)messageRecord).getSlideDeck().getThumbnailSlide(),
showControls);
mediaThumbnailStub.get().setThumbnailClickListener(new ThumbnailClickListener());
mediaThumbnailStub.get().setDownloadClickListener(downloadClickListener);
@@ -337,8 +319,6 @@ public class ConversationItem extends LinearLayout
}
private void setStatusIcons(MessageRecord messageRecord) {
- mmsDownloadButton.setVisibility(View.GONE);
- mmsDownloadingLabel.setVisibility(View.GONE);
indicatorText.setVisibility(View.GONE);
secureImage.setVisibility(messageRecord.isSecure() ? View.VISIBLE : View.GONE);
@@ -452,31 +432,6 @@ public class ConversationItem extends LinearLayout
}
}
- private void setNotificationMmsAttributes(NotificationMmsMessageRecord messageRecord) {
- String messageSize = String.format(context.getString(R.string.ConversationItem_message_size_d_kb),
- messageRecord.getMessageSize());
- String expires = String.format(context.getString(R.string.ConversationItem_expires_s),
- DateUtils.getRelativeTimeSpanString(getContext(),
- messageRecord.getExpiration(),
- false));
-
- dateText.setText(messageSize + "\n" + expires);
-
- if (MmsDatabase.Status.isDisplayDownloadButton(messageRecord.getStatus())) {
- mmsDownloadButton.setVisibility(View.VISIBLE);
- mmsDownloadingLabel.setVisibility(View.GONE);
- } else {
- mmsDownloadingLabel.setText(MmsDatabase.Status.getLabelForStatus(context, messageRecord.getStatus()));
- mmsDownloadButton.setVisibility(View.GONE);
- mmsDownloadingLabel.setVisibility(View.VISIBLE);
-
- if (MmsDatabase.Status.isHardError(messageRecord.getStatus()) && !messageRecord.isOutgoing())
- setOnClickListener(mmsDownloadClickListener);
- else if (MmsDatabase.Status.DOWNLOAD_APN_UNAVAILABLE == messageRecord.getStatus() && !messageRecord.isOutgoing())
- setOnClickListener(mmsPreferencesClickListener);
- }
- }
-
/// Helper Methods
private void setContactPhotoForRecipient(final Recipient recipient) {
@@ -521,10 +476,18 @@ public class ConversationItem extends LinearLayout
}
private class AttachmentDownloadClickListener implements SlideClickListener {
- @Override public void onClick(View v, final Slide slide) {
- DatabaseFactory.getAttachmentDatabase(context).setTransferState(messageRecord.getId(),
- slide.asAttachment(),
- AttachmentDatabase.TRANSFER_PROGRESS_STARTED);
+ @Override
+ public void onClick(View v, final Slide slide) {
+ if (messageRecord.isMmsNotification()) {
+ ApplicationContext.getInstance(context)
+ .getJobManager()
+ .add(new MmsDownloadJob(context, messageRecord.getId(),
+ messageRecord.getThreadId(), false));
+ } else {
+ DatabaseFactory.getAttachmentDatabase(context).setTransferState(messageRecord.getId(),
+ slide.asAttachment(),
+ AttachmentDatabase.TRANSFER_PROGRESS_STARTED);
+ }
}
}
@@ -572,30 +535,6 @@ public class ConversationItem extends LinearLayout
}
}
- private class MmsDownloadClickListener implements View.OnClickListener {
- public void onClick(View v) {
- NotificationMmsMessageRecord notificationRecord = (NotificationMmsMessageRecord)messageRecord;
- Log.w(TAG, "Content location: " + new String(notificationRecord.getContentLocation()));
- mmsDownloadButton.setVisibility(View.GONE);
- mmsDownloadingLabel.setVisibility(View.VISIBLE);
-
- ApplicationContext.getInstance(context)
- .getJobManager()
- .add(new MmsDownloadJob(context, messageRecord.getId(),
- messageRecord.getThreadId(), false));
- }
- }
-
- private class MmsPreferencesClickListener implements View.OnClickListener {
- public void onClick(View v) {
- Intent intent = new Intent(context, PromptMmsActivity.class);
- intent.putExtra("message_id", messageRecord.getId());
- intent.putExtra("thread_id", messageRecord.getThreadId());
- intent.putExtra("automatic", true);
- context.startActivity(intent);
- }
- }
-
private class PassthroughClickListener implements View.OnLongClickListener, View.OnClickListener {
@Override
diff --git a/src/org/thoughtcrime/securesms/attachments/MmsNotificationAttachment.java b/src/org/thoughtcrime/securesms/attachments/MmsNotificationAttachment.java
new file mode 100644
index 0000000000..195809f79d
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/attachments/MmsNotificationAttachment.java
@@ -0,0 +1,39 @@
+package org.thoughtcrime.securesms.attachments;
+
+
+import android.net.Uri;
+import android.support.annotation.Nullable;
+
+import org.thoughtcrime.securesms.database.AttachmentDatabase;
+import org.thoughtcrime.securesms.database.MmsDatabase;
+
+public class MmsNotificationAttachment extends Attachment {
+
+ public MmsNotificationAttachment(int status, long size) {
+ super("application/mms", getTransferStateFromStatus(status), size, null, null, null);
+ }
+
+ @Nullable
+ @Override
+ public Uri getDataUri() {
+ return null;
+ }
+
+ @Nullable
+ @Override
+ public Uri getThumbnailUri() {
+ return null;
+ }
+
+ private static int getTransferStateFromStatus(int status) {
+ if (status == MmsDatabase.Status.DOWNLOAD_INITIALIZED ||
+ status == MmsDatabase.Status.DOWNLOAD_NO_CONNECTIVITY)
+ {
+ return AttachmentDatabase.TRANSFER_PROGRESS_AUTO_PENDING;
+ } else if (status == MmsDatabase.Status.DOWNLOAD_CONNECTING) {
+ return AttachmentDatabase.TRANSFER_PROGRESS_STARTED;
+ } else {
+ return AttachmentDatabase.TRANSFER_PROGRESS_FAILED;
+ }
+ }
+}
diff --git a/src/org/thoughtcrime/securesms/database/MmsDatabase.java b/src/org/thoughtcrime/securesms/database/MmsDatabase.java
index 12d47bf472..72ed622f99 100644
--- a/src/org/thoughtcrime/securesms/database/MmsDatabase.java
+++ b/src/org/thoughtcrime/securesms/database/MmsDatabase.java
@@ -34,6 +34,7 @@ import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
+import org.thoughtcrime.securesms.attachments.MmsNotificationAttachment;
import org.thoughtcrime.securesms.crypto.AsymmetricMasterCipher;
import org.thoughtcrime.securesms.crypto.MasterCipher;
import org.thoughtcrime.securesms.crypto.MasterSecret;
@@ -1075,28 +1076,6 @@ public class MmsDatabase extends MessagingDatabase {
public static final int DOWNLOAD_SOFT_FAILURE = 4;
public static final int DOWNLOAD_HARD_FAILURE = 5;
public static final int DOWNLOAD_APN_UNAVAILABLE = 6;
-
- public static boolean isDisplayDownloadButton(int status) {
- return
- status == DOWNLOAD_INITIALIZED ||
- status == DOWNLOAD_NO_CONNECTIVITY ||
- status == DOWNLOAD_SOFT_FAILURE;
- }
-
- public static String getLabelForStatus(Context context, int status) {
- switch (status) {
- case DOWNLOAD_CONNECTING: return context.getString(R.string.MmsDatabase_connecting_to_mms_server);
- case DOWNLOAD_INITIALIZED: return context.getString(R.string.MmsDatabase_downloading_mms);
- case DOWNLOAD_HARD_FAILURE: return context.getString(R.string.MmsDatabase_mms_download_failed);
- case DOWNLOAD_APN_UNAVAILABLE: return context.getString(R.string.MmsDatabase_mms_pending_download);
- }
-
- return context.getString(R.string.MmsDatabase_downloading);
- }
-
- public static boolean isHardError(int status) {
- return status == DOWNLOAD_HARD_FAILURE;
- }
}
public class Reader {
@@ -1157,11 +1136,13 @@ public class MmsDatabase extends MessagingDatabase {
if (!TextUtils.isEmpty(transactionId))
transactionIdBytes = org.thoughtcrime.securesms.util.Util.toIsoBytes(transactionId);
+ SlideDeck slideDeck = new SlideDeck(context, new MmsNotificationAttachment(status, messageSize));
+
return new NotificationMmsMessageRecord(context, id, recipients, recipients.getPrimaryRecipient(),
addressDeviceId, dateSent, dateReceived, receiptCount, threadId,
contentLocationBytes, messageSize, expiry, status,
- transactionIdBytes, mailbox, subscriptionId);
+ transactionIdBytes, mailbox, subscriptionId, slideDeck);
}
private MediaMmsMessageRecord getMediaMmsMessageRecord(Cursor cursor) {
diff --git a/src/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java b/src/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
index 8ef55e2322..dead6bfa0b 100644
--- a/src/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
+++ b/src/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java
@@ -25,7 +25,6 @@ import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.SmsDatabase.Status;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
-import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipients;
@@ -40,12 +39,11 @@ import java.util.List;
*
*/
-public class MediaMmsMessageRecord extends MessageRecord {
+public class MediaMmsMessageRecord extends MmsMessageRecord {
private final static String TAG = MediaMmsMessageRecord.class.getSimpleName();
private final Context context;
- private final int partCount;
- private final @NonNull SlideDeck slideDeck;
+ private final int partCount;
public MediaMmsMessageRecord(Context context, long id, Recipients recipients,
Recipient individualRecipient, int recipientDeviceId,
@@ -59,46 +57,21 @@ public class MediaMmsMessageRecord extends MessageRecord {
{
super(context, id, body, recipients, individualRecipient, recipientDeviceId, dateSent,
dateReceived, threadId, Status.STATUS_NONE, receiptCount, mailbox, mismatches, failures,
- subscriptionId, expiresIn, expireStarted);
+ subscriptionId, expiresIn, expireStarted, slideDeck);
this.context = context.getApplicationContext();
this.partCount = partCount;
- this.slideDeck = slideDeck;
- }
-
- public @NonNull SlideDeck getSlideDeck() {
- return slideDeck;
- }
-
- public boolean containsMediaSlide() {
- return slideDeck.containsMediaSlide();
}
public int getPartCount() {
return partCount;
}
- @Override
- public boolean isMms() {
- return true;
- }
-
@Override
public boolean isMmsNotification() {
return false;
}
- @Override
- public boolean isMediaPending() {
- for (Slide slide : getSlideDeck().getSlides()) {
- if (slide.isInProgress() || slide.isPendingDownload()) {
- return true;
- }
- }
-
- return false;
- }
-
@Override
public SpannableString getDisplayBody() {
if (MmsDatabase.Types.isDecryptInProgressType(type)) {
diff --git a/src/org/thoughtcrime/securesms/database/model/MmsMessageRecord.java b/src/org/thoughtcrime/securesms/database/model/MmsMessageRecord.java
new file mode 100644
index 0000000000..ebde8209b0
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/database/model/MmsMessageRecord.java
@@ -0,0 +1,57 @@
+package org.thoughtcrime.securesms.database.model;
+
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+
+import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
+import org.thoughtcrime.securesms.database.documents.NetworkFailure;
+import org.thoughtcrime.securesms.mms.Slide;
+import org.thoughtcrime.securesms.mms.SlideDeck;
+import org.thoughtcrime.securesms.recipients.Recipient;
+import org.thoughtcrime.securesms.recipients.Recipients;
+
+import java.util.List;
+
+public abstract class MmsMessageRecord extends MessageRecord {
+
+ private final @NonNull SlideDeck slideDeck;
+
+ MmsMessageRecord(Context context, long id, Body body, Recipients recipients,
+ Recipient individualRecipient, int recipientDeviceId, long dateSent,
+ long dateReceived, long threadId, int deliveryStatus, int receiptCount,
+ long type, List mismatches,
+ List networkFailures, int subscriptionId, long expiresIn,
+ long expireStarted, @NonNull SlideDeck slideDeck)
+ {
+ super(context, id, body, recipients, individualRecipient, recipientDeviceId, dateSent, dateReceived, threadId, deliveryStatus, receiptCount, type, mismatches, networkFailures, subscriptionId, expiresIn, expireStarted);
+ this.slideDeck = slideDeck;
+ }
+
+ @Override
+ public boolean isMms() {
+ return true;
+ }
+
+ @NonNull
+ public SlideDeck getSlideDeck() {
+ return slideDeck;
+ }
+
+ @Override
+ public boolean isMediaPending() {
+ for (Slide slide : getSlideDeck().getSlides()) {
+ if (slide.isInProgress() || slide.isPendingDownload()) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public boolean containsMediaSlide() {
+ return slideDeck.containsMediaSlide();
+ }
+
+
+}
diff --git a/src/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java b/src/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
index c78413517e..13e5d9f353 100644
--- a/src/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
+++ b/src/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java
@@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.database.SmsDatabase.Status;
import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
+import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipients;
@@ -37,12 +38,12 @@ import java.util.LinkedList;
*
*/
-public class NotificationMmsMessageRecord extends MessageRecord {
+public class NotificationMmsMessageRecord extends MmsMessageRecord {
private final byte[] contentLocation;
- private final long messageSize;
- private final long expiry;
- private final int status;
+ private final long messageSize;
+ private final long expiry;
+ private final int status;
private final byte[] transactionId;
public NotificationMmsMessageRecord(Context context, long id, Recipients recipients,
@@ -50,12 +51,12 @@ public class NotificationMmsMessageRecord extends MessageRecord {
long dateSent, long dateReceived, int receiptCount,
long threadId, byte[] contentLocation, long messageSize,
long expiry, int status, byte[] transactionId, long mailbox,
- int subscriptionId)
+ int subscriptionId, SlideDeck slideDeck)
{
super(context, id, new Body("", true), recipients, individualRecipient, recipientDeviceId,
dateSent, dateReceived, threadId, Status.STATUS_NONE, receiptCount, mailbox,
new LinkedList(), new LinkedList(), subscriptionId,
- 0, 0);
+ 0, 0, slideDeck);
this.contentLocation = contentLocation;
this.messageSize = messageSize;
@@ -89,11 +90,6 @@ public class NotificationMmsMessageRecord extends MessageRecord {
return false;
}
- @Override
- public boolean isFailed() {
- return MmsDatabase.Status.isHardError(status);
- }
-
@Override
public boolean isSecure() {
return false;
@@ -104,11 +100,6 @@ public class NotificationMmsMessageRecord extends MessageRecord {
return false;
}
- @Override
- public boolean isMms() {
- return true;
- }
-
@Override
public boolean isMmsNotification() {
return true;
@@ -121,6 +112,12 @@ public class NotificationMmsMessageRecord extends MessageRecord {
@Override
public SpannableString getDisplayBody() {
- return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_multimedia_message));
+ if (status == MmsDatabase.Status.DOWNLOAD_INITIALIZED) {
+ return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_multimedia_message));
+ } else if (status == MmsDatabase.Status.DOWNLOAD_CONNECTING) {
+ return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_downloading_mms_message));
+ } else {
+ return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_error_downloading_mms_message));
+ }
}
}
diff --git a/src/org/thoughtcrime/securesms/mms/MmsSlide.java b/src/org/thoughtcrime/securesms/mms/MmsSlide.java
new file mode 100644
index 0000000000..bed6a6741d
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/mms/MmsSlide.java
@@ -0,0 +1,21 @@
+package org.thoughtcrime.securesms.mms;
+
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+
+import org.thoughtcrime.securesms.attachments.Attachment;
+
+public class MmsSlide extends ImageSlide {
+
+ public MmsSlide(@NonNull Context context, @NonNull Attachment attachment) {
+ super(context, attachment);
+ }
+
+ @NonNull
+ @Override
+ public String getContentDescription() {
+ return "MMS";
+ }
+
+}
diff --git a/src/org/thoughtcrime/securesms/util/MediaUtil.java b/src/org/thoughtcrime/securesms/util/MediaUtil.java
index d27f241af1..a8c4024ad4 100644
--- a/src/org/thoughtcrime/securesms/util/MediaUtil.java
+++ b/src/org/thoughtcrime/securesms/util/MediaUtil.java
@@ -18,6 +18,7 @@ import org.thoughtcrime.securesms.mms.AudioSlide;
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
import org.thoughtcrime.securesms.mms.GifSlide;
import org.thoughtcrime.securesms.mms.ImageSlide;
+import org.thoughtcrime.securesms.mms.MmsSlide;
import org.thoughtcrime.securesms.mms.PartAuthority;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.VideoSlide;
@@ -79,6 +80,8 @@ public class MediaUtil {
slide = new VideoSlide(context, attachment);
} else if (ContentType.isAudioType(attachment.getContentType())) {
slide = new AudioSlide(context, attachment);
+ } else if (isMms(attachment.getContentType())) {
+ slide = new MmsSlide(context, attachment);
}
return slide;
@@ -128,6 +131,10 @@ public class MediaUtil {
return size;
}
+ public static boolean isMms(String contentType) {
+ return !TextUtils.isEmpty(contentType) && contentType.trim().equals("application/mms");
+ }
+
public static boolean isGif(String contentType) {
return !TextUtils.isEmpty(contentType) && contentType.trim().equals("image/gif");
}