diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index d2b0db6b24..c4d788e992 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -157,6 +157,7 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.MediaConstraints; import org.thoughtcrime.securesms.mms.MmsException; +import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage; import org.thoughtcrime.securesms.mms.OutgoingMediaMessage; import org.thoughtcrime.securesms.mms.OutgoingSecureMediaMessage; import org.thoughtcrime.securesms.mms.QuoteId; @@ -804,10 +805,15 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity @Override protected Void doInBackground(Void... params) { DatabaseFactory.getRecipientDatabase(ConversationActivity.this).setExpireMessages(recipient, expirationTime); - ExpirationTimerUpdate message = new ExpirationTimerUpdate(); - message.setDuration(expirationTime * 1000); - MessageSender.send(message, recipient.getAddress()); - + ExpirationTimerUpdate message = new ExpirationTimerUpdate(expirationTime); + message.setSentTimestamp(System.currentTimeMillis()); + OutgoingExpirationUpdateMessage outgoingMessage = OutgoingExpirationUpdateMessage.from(message, recipient); + try { + message.setId(DatabaseFactory.getMmsDatabase(ConversationActivity.this).insertMessageOutbox(outgoingMessage, getAllocatedThreadId(ConversationActivity.this), false, null)); + MessageSender.send(message, recipient.getAddress()); + } catch (MmsException e) { + Log.w(TAG, e); + } return null; } @@ -836,17 +842,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity }); } - private void handleConversationSettings() { - /* - Intent intent = new Intent(ConversationActivity.this, RecipientPreferenceActivity.class); - intent.putExtra(RecipientPreferenceActivity.ADDRESS_EXTRA, recipient.getAddress()); - intent.putExtra(RecipientPreferenceActivity.CAN_HAVE_SAFETY_NUMBER_EXTRA, - isSecureText && !isSelfConversation()); - - startActivitySceneTransition(intent, titleView.findViewById(R.id.contact_photo_image), "avatar"); - */ - } - private void handleUnmuteNotifications() { recipient.setMuted(0); @@ -1798,12 +1793,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } try { - long allocatedThreadId; - if (threadId == -1) { - allocatedThreadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient); - } else { - allocatedThreadId = threadId; - } + long allocatedThreadId = getAllocatedThreadId(context); message.setId(DatabaseFactory.getMmsDatabase(context).insertMessageOutbox(outgoingMessage, allocatedThreadId, false, ()->fragment.releaseOutgoingMessage(id))); MessageSender.send(message, recipient.getAddress(), attachments, quote, linkPreview.orNull()); sendComplete(allocatedThreadId); @@ -1835,12 +1825,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity DatabaseFactory.getRecipientDatabase(context).setProfileSharing(recipient, true); } - long allocatedThreadId; - if (threadId == -1) { - allocatedThreadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient); - } else { - allocatedThreadId = threadId; - } + long allocatedThreadId = getAllocatedThreadId(context); message.setId(DatabaseFactory.getSmsDatabase(context).insertMessageOutbox(allocatedThreadId, outgoingTextMessage, false, message.getSentTimestamp(), ()->fragment.releaseOutgoingMessage(id))); MessageSender.send(message, recipient.getAddress()); @@ -2315,6 +2300,16 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } // region Loki + private long getAllocatedThreadId(Context context) { + long allocatedThreadId; + if (threadId == -1) { + allocatedThreadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient); + } else { + allocatedThreadId = threadId; + } + return allocatedThreadId; + } + private void updateTitleTextView(Recipient recipient) { String userPublicKey = TextSecurePreferences.getLocalNumber(this); if (recipient == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java index 85860ca071..59f100cc0f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.mms; +import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; import org.session.libsession.messaging.threads.DistributionTypes; import org.session.libsession.messaging.threads.recipients.Recipient; @@ -15,6 +16,11 @@ public class OutgoingExpirationUpdateMessage extends OutgoingSecureMediaMessage Collections.emptyList()); } + public static OutgoingExpirationUpdateMessage from(ExpirationTimerUpdate message, + Recipient recipient) { + return new OutgoingExpirationUpdateMessage(recipient, message.getSentTimestamp(), message.getDuration() * 1000); + } + @Override public boolean isExpirationUpdate() { return true; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMediaMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMediaMessage.java index d90496026a..7921506622 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMediaMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingMediaMessage.java @@ -17,7 +17,6 @@ import org.session.libsession.messaging.threads.recipients.Recipient; import java.util.Collections; import java.util.LinkedList; import java.util.List; -import java.util.Optional; public class OutgoingMediaMessage { @@ -122,7 +121,7 @@ public class OutgoingMediaMessage { } public boolean isSecure() { - return false; + return true; } public boolean isGroup() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java index e28ffbd9e2..86def9b6e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/ExpiringMessageManager.java @@ -114,7 +114,7 @@ public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationM } else { smsDatabase.markExpireStarted(messageRecord.getId()); } - scheduleDeletion(messageRecord.getId(), mms, recipient.getExpireMessages()); + scheduleDeletion(messageRecord.getId(), mms, recipient.getExpireMessages() * 1000); } } diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt index 7258e2a72f..b0ab87b115 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/MessageSender.kt @@ -259,7 +259,9 @@ object MessageSender { storage.markAsSent(message.sentTimestamp!!, message.sender!!) storage.markUnidentified(message.sentTimestamp!!, message.sender!!) // Start the disappearing messages timer if needed - SSKEnvironment.shared.messageExpirationManager.startAnyExpiration(message.sentTimestamp!!, message.sender!!) + if (message is VisibleMessage) { + SSKEnvironment.shared.messageExpirationManager.startAnyExpiration(message.sentTimestamp!!, message.sender!!) + } // Sync the message if: // • it's a visible message // • the destination was a contact