mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-09 15:48:34 +00:00
Render placeholders for unsupported messages.
This commit is contained in:
parent
4741a76f37
commit
922f6d89e9
@ -663,6 +663,9 @@
|
|||||||
<string name="SmsMessageRecord_secure_session_reset">You reset the secure session.</string>
|
<string name="SmsMessageRecord_secure_session_reset">You reset the secure session.</string>
|
||||||
<string name="SmsMessageRecord_secure_session_reset_s">%s reset the secure session.</string>
|
<string name="SmsMessageRecord_secure_session_reset_s">%s reset the secure session.</string>
|
||||||
<string name="SmsMessageRecord_duplicate_message">Duplicate message.</string>
|
<string name="SmsMessageRecord_duplicate_message">Duplicate message.</string>
|
||||||
|
<string name="SmsMessageRecord_this_message_could_not_be_processed_because_it_was_sent_from_a_newer_version">
|
||||||
|
This message could not be processed because it was sent from a newer version of Signal. You can ask your contact to send this message again after you update.
|
||||||
|
</string>
|
||||||
|
|
||||||
<!-- StickerManagementActivity -->
|
<!-- StickerManagementActivity -->
|
||||||
<string name="StickerManagementActivity_stickers">Stickers</string>
|
<string name="StickerManagementActivity_stickers">Stickers</string>
|
||||||
@ -700,6 +703,7 @@
|
|||||||
<string name="ThreadRecord_your_safety_number_with_s_has_changed">Your safety number with %s has changed.</string>
|
<string name="ThreadRecord_your_safety_number_with_s_has_changed">Your safety number with %s has changed.</string>
|
||||||
<string name="ThreadRecord_you_marked_verified">You marked verified</string>
|
<string name="ThreadRecord_you_marked_verified">You marked verified</string>
|
||||||
<string name="ThreadRecord_you_marked_unverified">You marked unverified</string>
|
<string name="ThreadRecord_you_marked_unverified">You marked unverified</string>
|
||||||
|
<string name="ThreadRecord_message_could_not_be_processed">Message could not be processed</string>
|
||||||
|
|
||||||
<!-- UpdateApkReadyListener -->
|
<!-- UpdateApkReadyListener -->
|
||||||
<string name="UpdateApkReadyListener_Signal_update">Signal update</string>
|
<string name="UpdateApkReadyListener_Signal_update">Signal update</string>
|
||||||
|
@ -31,6 +31,7 @@ public interface MmsSmsColumns {
|
|||||||
protected static final long OUTGOING_CALL_TYPE = 2;
|
protected static final long OUTGOING_CALL_TYPE = 2;
|
||||||
protected static final long MISSED_CALL_TYPE = 3;
|
protected static final long MISSED_CALL_TYPE = 3;
|
||||||
protected static final long JOINED_TYPE = 4;
|
protected static final long JOINED_TYPE = 4;
|
||||||
|
protected static final long UNSUPPORTED_MESSAGE_TYPE = 5;
|
||||||
|
|
||||||
protected static final long BASE_INBOX_TYPE = 20;
|
protected static final long BASE_INBOX_TYPE = 20;
|
||||||
protected static final long BASE_OUTBOX_TYPE = 21;
|
protected static final long BASE_OUTBOX_TYPE = 21;
|
||||||
@ -142,6 +143,10 @@ public interface MmsSmsColumns {
|
|||||||
return (type & BASE_TYPE_MASK) == JOINED_TYPE;
|
return (type & BASE_TYPE_MASK) == JOINED_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isUnsupportedMessageType(long type) {
|
||||||
|
return (type & BASE_TYPE_MASK) == UNSUPPORTED_MESSAGE_TYPE;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isSecureType(long type) {
|
public static boolean isSecureType(long type) {
|
||||||
return (type & SECURE_MESSAGE_BIT) != 0;
|
return (type & SECURE_MESSAGE_BIT) != 0;
|
||||||
}
|
}
|
||||||
|
@ -217,6 +217,10 @@ public class SmsDatabase extends MessagingDatabase {
|
|||||||
updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_NO_SESSION_BIT);
|
updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_NO_SESSION_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void markAsUnsupportedProtocolVersion(long id) {
|
||||||
|
updateTypeBitmask(id, Types.BASE_TYPE_MASK, Types.UNSUPPORTED_MESSAGE_TYPE);
|
||||||
|
}
|
||||||
|
|
||||||
public void markAsLegacyVersion(long id) {
|
public void markAsLegacyVersion(long id) {
|
||||||
updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_LEGACY_BIT);
|
updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_LEGACY_BIT);
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,8 @@ public class SmsMessageRecord extends MessageRecord {
|
|||||||
return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset));
|
return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset));
|
||||||
} else if (isEndSession()) {
|
} else if (isEndSession()) {
|
||||||
return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset_s, getIndividualRecipient().toShortString()));
|
return emphasisAdded(context.getString(R.string.SmsMessageRecord_secure_session_reset_s, getIndividualRecipient().toShortString()));
|
||||||
|
} else if (SmsDatabase.Types.isUnsupportedMessageType(type)) {
|
||||||
|
return emphasisAdded(context.getString(R.string.SmsMessageRecord_this_message_could_not_be_processed_because_it_was_sent_from_a_newer_version));
|
||||||
} else {
|
} else {
|
||||||
return super.getDisplayBody(context);
|
return super.getDisplayBody(context);
|
||||||
}
|
}
|
||||||
|
@ -109,6 +109,8 @@ public class ThreadRecord extends DisplayRecord {
|
|||||||
return emphasisAdded(context.getString(R.string.ThreadRecord_you_marked_verified));
|
return emphasisAdded(context.getString(R.string.ThreadRecord_you_marked_verified));
|
||||||
} else if (SmsDatabase.Types.isIdentityDefault(type)) {
|
} else if (SmsDatabase.Types.isIdentityDefault(type)) {
|
||||||
return emphasisAdded(context.getString(R.string.ThreadRecord_you_marked_unverified));
|
return emphasisAdded(context.getString(R.string.ThreadRecord_you_marked_unverified));
|
||||||
|
} else if (SmsDatabase.Types.isUnsupportedMessageType(type)) {
|
||||||
|
return emphasisAdded(context.getString(R.string.ThreadRecord_message_could_not_be_processed));
|
||||||
} else {
|
} else {
|
||||||
if (TextUtils.isEmpty(getBody())) {
|
if (TextUtils.isEmpty(getBody())) {
|
||||||
return new SpannableString(emphasisAdded(context.getString(R.string.ThreadRecord_media_message)));
|
return new SpannableString(emphasisAdded(context.getString(R.string.ThreadRecord_media_message)));
|
||||||
|
@ -117,6 +117,7 @@ import org.whispersystems.signalservice.api.messages.multidevice.StickerPackOper
|
|||||||
import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage;
|
import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage;
|
||||||
import org.whispersystems.signalservice.api.messages.shared.SharedContact;
|
import org.whispersystems.signalservice.api.messages.shared.SharedContact;
|
||||||
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
|
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
|
||||||
|
import org.whispersystems.signalservice.internal.push.UnsupportedDataMessageException;
|
||||||
|
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.security.SecureRandom;
|
import java.security.SecureRandom;
|
||||||
@ -331,6 +332,9 @@ public class PushDecryptJob extends BaseJob {
|
|||||||
Log.w(TAG, e);
|
Log.w(TAG, e);
|
||||||
} catch (SelfSendException e) {
|
} catch (SelfSendException e) {
|
||||||
Log.i(TAG, "Dropping UD message from self.");
|
Log.i(TAG, "Dropping UD message from self.");
|
||||||
|
} catch (UnsupportedDataMessageException e) {
|
||||||
|
Log.w(TAG, e);
|
||||||
|
handleUnsupportedDataMessage(e.getSender(), e.getSenderDevice(), e.getGroup(), envelope.getTimestamp(), smsMessageId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1011,6 +1015,26 @@ public class PushDecryptJob extends BaseJob {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleUnsupportedDataMessage(@NonNull String sender,
|
||||||
|
int senderDevice,
|
||||||
|
@NonNull Optional<SignalServiceGroup> group,
|
||||||
|
long timestamp,
|
||||||
|
@NonNull Optional<Long> smsMessageId)
|
||||||
|
{
|
||||||
|
SmsDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context);
|
||||||
|
|
||||||
|
if (!smsMessageId.isPresent()) {
|
||||||
|
Optional<InsertResult> insertResult = insertPlaceholder(sender, senderDevice, timestamp, group);
|
||||||
|
|
||||||
|
if (insertResult.isPresent()) {
|
||||||
|
smsDatabase.markAsUnsupportedProtocolVersion(insertResult.get().getMessageId());
|
||||||
|
MessageNotifier.updateNotification(context, insertResult.get().getThreadId());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
smsDatabase.markAsNoSession(smsMessageId.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void handleLegacyMessage(@NonNull String sender, int senderDevice, long timestamp,
|
private void handleLegacyMessage(@NonNull String sender, int senderDevice, long timestamp,
|
||||||
@NonNull Optional<Long> smsMessageId)
|
@NonNull Optional<Long> smsMessageId)
|
||||||
{
|
{
|
||||||
@ -1241,10 +1265,14 @@ public class PushDecryptJob extends BaseJob {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Optional<InsertResult> insertPlaceholder(@NonNull String sender, int senderDevice, long timestamp) {
|
private Optional<InsertResult> insertPlaceholder(@NonNull String sender, int senderDevice, long timestamp) {
|
||||||
|
return insertPlaceholder(sender, senderDevice, timestamp, Optional.absent());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Optional<InsertResult> insertPlaceholder(@NonNull String sender, int senderDevice, long timestamp, Optional<SignalServiceGroup> group) {
|
||||||
SmsDatabase database = DatabaseFactory.getSmsDatabase(context);
|
SmsDatabase database = DatabaseFactory.getSmsDatabase(context);
|
||||||
IncomingTextMessage textMessage = new IncomingTextMessage(Address.fromExternal(context, sender),
|
IncomingTextMessage textMessage = new IncomingTextMessage(Address.fromExternal(context, sender),
|
||||||
senderDevice, timestamp, "",
|
senderDevice, timestamp, "",
|
||||||
Optional.absent(), 0, false);
|
group, 0, false);
|
||||||
|
|
||||||
textMessage = new IncomingEncryptedMessage(textMessage, "");
|
textMessage = new IncomingEncryptedMessage(textMessage, "");
|
||||||
return database.insertMessageInbox(textMessage);
|
return database.insertMessageInbox(textMessage);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user