mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-20 07:52:32 +00:00
Don't display duplicate push messages.
This commit is contained in:
@@ -40,6 +40,7 @@ import org.thoughtcrime.securesms.service.PushReceiver;
|
||||
import org.thoughtcrime.securesms.service.SendReceiveService;
|
||||
import org.thoughtcrime.securesms.sms.SmsTransportDetails;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
import org.whispersystems.textsecure.crypto.DuplicateMessageException;
|
||||
import org.whispersystems.textsecure.crypto.InvalidKeyException;
|
||||
import org.whispersystems.textsecure.crypto.InvalidMessageException;
|
||||
import org.whispersystems.textsecure.crypto.InvalidVersionException;
|
||||
@@ -213,6 +214,9 @@ public class DecryptingQueue {
|
||||
} catch (RecipientFormattingException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
sendResult(PushReceiver.RESULT_DECRYPT_FAILED);
|
||||
} catch (DuplicateMessageException e) {
|
||||
Log.w("DecryptingQueue", e);
|
||||
sendResult(PushReceiver.RESULT_DECRYPT_DUPLICATE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -312,6 +316,9 @@ public class DecryptingQueue {
|
||||
} catch (InvalidMessageException ime) {
|
||||
Log.w("DecryptingQueue", ime);
|
||||
database.markAsDecryptFailed(messageId, threadId);
|
||||
} catch (DuplicateMessageException dme) {
|
||||
Log.w("DecryptingQueue", dme);
|
||||
database.markAsDecryptDuplicate(messageId, threadId);
|
||||
} catch (MmsException mme) {
|
||||
Log.w("DecryptingQueue", mme);
|
||||
database.markAsDecryptFailed(messageId, threadId);
|
||||
@@ -391,6 +398,10 @@ public class DecryptingQueue {
|
||||
Log.w("DecryptionQueue", e);
|
||||
database.markAsDecryptFailed(messageId);
|
||||
return;
|
||||
} catch (DuplicateMessageException e) {
|
||||
Log.w("DecryptionQueue", e);
|
||||
database.markAsDecryptDuplicate(messageId);
|
||||
return;
|
||||
}
|
||||
|
||||
database.updateMessageBody(masterSecret, messageId, plaintextBody);
|
||||
|
@@ -347,6 +347,11 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
|
||||
notifyConversationListeners(threadId);
|
||||
}
|
||||
|
||||
public void markAsDecryptDuplicate(long messageId, long threadId) {
|
||||
updateMailboxBitmask(messageId, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_DUPLICATE_BIT);
|
||||
notifyConversationListeners(threadId);
|
||||
}
|
||||
|
||||
public void setMessagesRead(long threadId) {
|
||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||
ContentValues contentValues = new ContentValues();
|
||||
|
@@ -57,6 +57,7 @@ public interface MmsSmsColumns {
|
||||
protected static final long ENCRYPTION_REMOTE_BIT = 0x20000000;
|
||||
protected static final long ENCRYPTION_REMOTE_FAILED_BIT = 0x10000000;
|
||||
protected static final long ENCRYPTION_REMOTE_NO_SESSION_BIT = 0x08000000;
|
||||
protected static final long ENCRYPTION_REMOTE_DUPLICATE_BIT = 0x04000000;
|
||||
|
||||
public static boolean isFailedMessageType(long type) {
|
||||
return (type & BASE_TYPE_MASK) == BASE_SENT_FAILED_TYPE;
|
||||
@@ -145,6 +146,10 @@ public interface MmsSmsColumns {
|
||||
return (type & ENCRYPTION_REMOTE_FAILED_BIT) != 0;
|
||||
}
|
||||
|
||||
public static boolean isDuplicateMessageType(long type) {
|
||||
return (type & ENCRYPTION_REMOTE_DUPLICATE_BIT) != 0;
|
||||
}
|
||||
|
||||
public static boolean isDecryptInProgressType(long type) {
|
||||
return
|
||||
(type & ENCRYPTION_REMOTE_BIT) != 0 ||
|
||||
|
@@ -186,6 +186,10 @@ public class SmsDatabase extends Database implements MmsSmsColumns {
|
||||
updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_FAILED_BIT);
|
||||
}
|
||||
|
||||
public void markAsDecryptDuplicate(long id) {
|
||||
updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_DUPLICATE_BIT);
|
||||
}
|
||||
|
||||
public void markAsNoSession(long id) {
|
||||
updateTypeBitmask(id, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_NO_SESSION_BIT);
|
||||
}
|
||||
|
@@ -74,6 +74,8 @@ public class MediaMmsMessageRecord extends MessageRecord {
|
||||
return emphasisAdded(context.getString(R.string.MmsMessageRecord_decrypting_mms_please_wait));
|
||||
} else if (MmsDatabase.Types.isFailedDecryptType(type)) {
|
||||
return emphasisAdded(context.getString(R.string.MmsMessageRecord_bad_encrypted_mms_message));
|
||||
} else if (MmsDatabase.Types.isDuplicateMessageType(type)) {
|
||||
return emphasisAdded(context.getString(R.string.SmsMessageRecord_duplicate_message));
|
||||
} else if (MmsDatabase.Types.isNoRemoteSessionType(type)) {
|
||||
return emphasisAdded(context.getString(R.string.MmsMessageRecord_mms_message_encrypted_for_non_existing_session));
|
||||
} else if (!getBody().isPlaintext()) {
|
||||
|
@@ -73,6 +73,8 @@ public class SmsMessageRecord extends MessageRecord {
|
||||
return emphasisAdded(context.getString(R.string.ConversationItem_received_key_exchange_message_click_to_process));
|
||||
} else if (SmsDatabase.Types.isFailedDecryptType(type)) {
|
||||
return emphasisAdded(context.getString(R.string.MessageDisplayHelper_bad_encrypted_message));
|
||||
} else if (SmsDatabase.Types.isDuplicateMessageType(type)) {
|
||||
return emphasisAdded(context.getString(R.string.SmsMessageRecord_duplicate_message));
|
||||
} else if (SmsDatabase.Types.isDecryptInProgressType(type)) {
|
||||
return emphasisAdded(context.getString(R.string.MessageDisplayHelper_decrypting_please_wait));
|
||||
} else if (SmsDatabase.Types.isNoRemoteSessionType(type)) {
|
||||
|
@@ -24,7 +24,6 @@ import org.thoughtcrime.securesms.sms.IncomingEndSessionMessage;
|
||||
import org.thoughtcrime.securesms.sms.IncomingKeyExchangeMessage;
|
||||
import org.thoughtcrime.securesms.sms.IncomingPreKeyBundleMessage;
|
||||
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
|
||||
import org.thoughtcrime.securesms.sms.SmsTransportDetails;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
import org.whispersystems.textsecure.crypto.InvalidKeyException;
|
||||
import org.whispersystems.textsecure.crypto.InvalidMessageException;
|
||||
@@ -44,9 +43,10 @@ import static org.whispersystems.textsecure.push.PushMessageProtos.PushMessageCo
|
||||
|
||||
public class PushReceiver {
|
||||
|
||||
public static final int RESULT_OK = 0;
|
||||
public static final int RESULT_NO_SESSION = 1;
|
||||
public static final int RESULT_DECRYPT_FAILED = 2;
|
||||
public static final int RESULT_OK = 0;
|
||||
public static final int RESULT_NO_SESSION = 1;
|
||||
public static final int RESULT_DECRYPT_FAILED = 2;
|
||||
public static final int RESULT_DECRYPT_DUPLICATE = 3;
|
||||
|
||||
private final Context context;
|
||||
private final GroupReceiver groupReceiver;
|
||||
@@ -69,9 +69,10 @@ public class PushReceiver {
|
||||
long messageId = intent.getLongExtra("message_id", -1);
|
||||
int result = intent.getIntExtra("result", 0);
|
||||
|
||||
if (result == RESULT_OK) handleReceivedMessage(masterSecret, message, true);
|
||||
else if (result == RESULT_NO_SESSION) handleReceivedMessageForNoSession(masterSecret, message);
|
||||
else if (result == RESULT_DECRYPT_FAILED) handleReceivedCorruptedMessage(masterSecret, message, true);
|
||||
if (result == RESULT_OK) handleReceivedMessage(masterSecret, message, true);
|
||||
else if (result == RESULT_NO_SESSION) handleReceivedMessageForNoSession(masterSecret, message);
|
||||
else if (result == RESULT_DECRYPT_FAILED) handleReceivedCorruptedMessage(masterSecret, message, true);
|
||||
else if (result == RESULT_DECRYPT_DUPLICATE) handleReceivedDuplicateMessage(message);
|
||||
|
||||
DatabaseFactory.getPushDatabase(context).delete(messageId);
|
||||
}
|
||||
@@ -255,6 +256,10 @@ public class PushReceiver {
|
||||
MessageNotifier.updateNotification(context, masterSecret, messageAndThreadId.second);
|
||||
}
|
||||
|
||||
private void handleReceivedDuplicateMessage(IncomingPushMessage message) {
|
||||
Log.w("PushReceiver", "Received duplicate message: " + message.getSource() + " , " + message.getSourceDevice());
|
||||
}
|
||||
|
||||
private void handleReceivedCorruptedKey(MasterSecret masterSecret,
|
||||
IncomingPushMessage message,
|
||||
boolean invalidVersion)
|
||||
|
Reference in New Issue
Block a user