diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiStrings.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiStrings.java
index 0e09e621c..e43fe4cc7 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiStrings.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiStrings.java
@@ -2,10 +2,4 @@ package org.thoughtcrime.securesms.components.emoji;
public final class EmojiStrings {
public static final String BUST_IN_SILHOUETTE = "\uD83D\uDC64";
- public static final String PHOTO = "\uD83D\uDCF7";
- public static final String VIDEO = "\uD83C\uDFA5";
- public static final String GIF = "\uD83C\uDFA1";
- public static final String AUDIO = "\uD83C\uDFA4";
- public static final String FILE = "\uD83D\uDCCE";
- public static final String STICKER = "\u2B50";
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java
index 95d6bfcf4..18be1b02a 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java
@@ -24,6 +24,7 @@ import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.text.Spannable;
import android.text.SpannableString;
+import android.text.TextUtils;
import android.text.style.StyleSpan;
import android.util.AttributeSet;
import android.view.View;
@@ -440,11 +441,17 @@ public class ConversationListItem extends RelativeLayout
} else if (SmsDatabase.Types.isUnsupportedMessageType(thread.getType())) {
return emphasisAdded(context.getString(R.string.ThreadRecord_message_could_not_be_processed));
} else {
- ThreadDatabase.Extra extra = thread.getExtra();
- if (extra != null && extra.isViewOnce()) {
- return new SpannableString(emphasisAdded(getViewOnceDescription(context, thread.getContentType())));
- } else if (extra != null && extra.isRemoteDelete()) {
- return new SpannableString(emphasisAdded(context.getString(R.string.ThreadRecord_this_message_was_deleted)));
+ if (TextUtils.isEmpty(thread.getBody())) {
+ ThreadDatabase.Extra extra = thread.getExtra();
+ if (extra != null && extra.isSticker()) {
+ return new SpannableString(emphasisAdded(context.getString(R.string.ThreadRecord_sticker)));
+ } else if (extra != null && extra.isViewOnce()) {
+ return new SpannableString(emphasisAdded(getViewOnceDescription(context, thread.getContentType())));
+ } else if (extra != null && extra.isRemoteDelete()) {
+ return new SpannableString(emphasisAdded(context.getString(R.string.ThreadRecord_this_message_was_deleted)));
+ } else {
+ return new SpannableString(emphasisAdded(context.getString(R.string.ThreadRecord_media_message)));
+ }
} else {
return new SpannableString(thread.getBody());
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadBodyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadBodyUtil.java
deleted file mode 100644
index 55074bb94..000000000
--- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadBodyUtil.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.thoughtcrime.securesms.database;
-
-import android.content.Context;
-import android.text.TextUtils;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.StringRes;
-
-import org.thoughtcrime.securesms.R;
-import org.thoughtcrime.securesms.components.emoji.EmojiStrings;
-import org.thoughtcrime.securesms.contactshare.Contact;
-import org.thoughtcrime.securesms.contactshare.ContactUtil;
-import org.thoughtcrime.securesms.database.model.MessageRecord;
-import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
-import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.mms.GifSlide;
-import org.thoughtcrime.securesms.mms.Slide;
-import org.thoughtcrime.securesms.util.MessageRecordUtil;
-
-public final class ThreadBodyUtil {
-
- private static final String TAG = Log.tag(ThreadBodyUtil.class);
-
- private ThreadBodyUtil() {
- }
-
- public static @NonNull String getFormattedBodyFor(@NonNull Context context, @NonNull MessageRecord record) {
- if (record.isMms()) {
- return getFormattedBodyForMms(context, (MmsMessageRecord) record);
- }
-
- return record.getBody();
- }
-
- private static @NonNull String getFormattedBodyForMms(@NonNull Context context, @NonNull MmsMessageRecord record) {
- if (record.getSharedContacts().size() > 0) {
- Contact contact = record.getSharedContacts().get(0);
-
- return ContactUtil.getStringSummary(context, contact).toString();
- } else if (record.getSlideDeck().getDocumentSlide() != null) {
- return format(context, record, EmojiStrings.FILE, R.string.ThreadRecord_file);
- } else if (record.getSlideDeck().getAudioSlide() != null) {
- return format(context, record, EmojiStrings.AUDIO, R.string.ThreadRecord_voice_message);
- } else if (MessageRecordUtil.hasSticker(record)) {
- return format(context, record, EmojiStrings.STICKER, R.string.ThreadRecord_sticker);
- }
-
- boolean hasImage = false;
- boolean hasVideo = false;
- boolean hasGif = false;
-
- for (Slide slide : record.getSlideDeck().getSlides()) {
- hasVideo |= slide.hasVideo();
- hasImage |= slide.hasImage();
- hasGif |= slide instanceof GifSlide;
- }
-
- if (hasGif) {
- return format(context, record, EmojiStrings.GIF, R.string.ThreadRecord_gif);
- } else if (hasVideo) {
- return format(context, record, EmojiStrings.VIDEO, R.string.ThreadRecord_video);
- } else if (hasImage) {
- return format(context, record, EmojiStrings.PHOTO, R.string.ThreadRecord_photo);
- } else if (TextUtils.isEmpty(record.getBody())) {
- Log.w(TAG, "Got a media message without a body of a type we were not able to process. [contains media slide]:" + record.containsMediaSlide());
- return context.getString(R.string.ThreadRecord_media_message);
- } else {
- Log.w(TAG, "Got a media message with a body of a type we were not able to process. [contains media slide]:" + record.containsMediaSlide());
- return record.getBody();
- }
- }
-
- private static @NonNull String format(@NonNull Context context, @NonNull MessageRecord record, @NonNull String emoji, @StringRes int defaultStringRes) {
- return String.format("%s %s", emoji, getBodyOrDefault(context, record, defaultStringRes));
- }
-
- private static @NonNull String getBodyOrDefault(@NonNull Context context, @NonNull MessageRecord record, @StringRes int defaultStringRes) {
- if (TextUtils.isEmpty(record.getBody())) {
- return context.getString(defaultStringRes);
- } else {
- return record.getBody();
- }
- }
-}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java
index f98ebf852..af8bdf88c 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java
@@ -757,7 +757,7 @@ public class ThreadDatabase extends Database {
MessageRecord record;
if (reader != null && (record = reader.getNext()) != null) {
- updateThread(threadId, count, ThreadBodyUtil.getFormattedBodyFor(context, record), getAttachmentUriFor(record),
+ updateThread(threadId, count, getFormattedBodyFor(record), getAttachmentUriFor(record),
getContentTypeFor(record), getExtrasFor(record),
record.getTimestamp(), record.getDeliveryStatus(), record.getDeliveryReceiptCount(),
record.getType(), unarchive, record.getExpiresIn(), record.getReadReceiptCount());
@@ -774,6 +774,15 @@ public class ThreadDatabase extends Database {
}
}
+ private @NonNull String getFormattedBodyFor(@NonNull MessageRecord messageRecord) {
+ if (messageRecord.isMms() && ((MmsMessageRecord) messageRecord).getSharedContacts().size() > 0) {
+ Contact contact = ((MmsMessageRecord) messageRecord).getSharedContacts().get(0);
+ return ContactUtil.getStringSummary(context, contact).toString();
+ }
+
+ return messageRecord.getBody();
+ }
+
private @Nullable Uri getAttachmentUriFor(MessageRecord record) {
if (!record.isMms() || record.isMmsNotification() || record.isGroupAction()) return null;
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java
index 626d5dac3..173d8f83b 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java
@@ -16,10 +16,12 @@
*/
package org.thoughtcrime.securesms.notifications;
+import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
@@ -30,14 +32,14 @@ import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.service.notification.StatusBarNotification;
-import android.text.SpannableStringBuilder;
-import android.text.TextUtils;
-
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
+import android.text.SpannableStringBuilder;
+import android.text.TextUtils;
+
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.contactshare.Contact;
import org.thoughtcrime.securesms.contactshare.ContactUtil;
@@ -46,24 +48,25 @@ import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MessagingDatabase.MarkedMessageInfo;
import org.thoughtcrime.securesms.database.MmsSmsColumns;
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
-import org.thoughtcrime.securesms.database.ThreadBodyUtil;
import org.thoughtcrime.securesms.database.ThreadDatabase;
+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.database.model.ReactionRecord;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.logging.Log;
-import org.thoughtcrime.securesms.messages.IncomingMessageObserver;
import org.thoughtcrime.securesms.mms.Slide;
import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientUtil;
+import org.thoughtcrime.securesms.messages.IncomingMessageObserver;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.MessageRecordUtil;
import org.thoughtcrime.securesms.util.ServiceUtil;
import org.thoughtcrime.securesms.util.SpanUtil;
import org.thoughtcrime.securesms.util.TextSecurePreferences;
+import org.thoughtcrime.securesms.util.concurrent.SignalExecutors;
import org.thoughtcrime.securesms.webrtc.CallNotificationBuilder;
import org.whispersystems.signalservice.internal.util.Util;
@@ -518,16 +521,21 @@ public class DefaultMessageNotifier implements MessageNotifier {
} else if (record.isMms() && !((MmsMessageRecord) record).getSharedContacts().isEmpty()) {
Contact contact = ((MmsMessageRecord) record).getSharedContacts().get(0);
body = ContactUtil.getStringSummary(context, contact);
+ } else if (record.isMms() && ((MmsMessageRecord) record).getSlideDeck().getStickerSlide() != null) {
+ body = SpanUtil.italic(context.getString(R.string.MessageNotifier_sticker));
+ slideDeck = ((MmsMessageRecord) record).getSlideDeck();
} else if (record.isMms() && ((MmsMessageRecord) record).isViewOnce()) {
body = SpanUtil.italic(context.getString(getViewOnceDescription((MmsMessageRecord) record)));
} else if (record.isRemoteDelete()) {
body = SpanUtil.italic(context.getString(R.string.MessageNotifier_this_message_was_deleted));;
- } else if (!record.isMmsNotification()) {
- body = ThreadBodyUtil.getFormattedBodyFor(context, record);
-
- if (record.isMms() && !((MmsMessageRecord) record).getSlideDeck().getSlides().isEmpty()) {
- slideDeck = ((MmsMessageRecord) record).getSlideDeck();
- }
+ } else if (record.isMms() && TextUtils.isEmpty(body) && !((MmsMessageRecord) record).getSlideDeck().getSlides().isEmpty()) {
+ body = SpanUtil.italic(context.getString(R.string.MessageNotifier_media_message));
+ slideDeck = ((MediaMmsMessageRecord) record).getSlideDeck();
+ } else if (record.isMms() && !record.isMmsNotification() && !((MmsMessageRecord) record).getSlideDeck().getSlides().isEmpty()) {
+ String message = context.getString(R.string.MessageNotifier_media_message_with_text, body);
+ int italicLength = message.length() - body.length();
+ body = SpanUtil.italic(message, italicLength);
+ slideDeck = ((MediaMmsMessageRecord) record).getSlideDeck();
}
if (threadRecipients == null || !threadRecipients.isMuted()) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 905e03bba..26040bb76 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1117,12 +1117,6 @@
Message Request
%1$s added you to the group
%1$s invited you to the group
- Photo
- Gif
- Voice Message
- Contact
- File
- Video
Signal update