diff --git a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java index b6448cf4da..fdf751a0f2 100644 --- a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java +++ b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java @@ -345,16 +345,16 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA } String seed = new MnemonicCodec(languageFileDirectory).encode(hexEncodedSeed, MnemonicCodec.Language.Configuration.Companion.getEnglish()); new AlertDialog.Builder(getContext()) - .setTitle(R.string.activity_settings_seed_dialog_title) - .setMessage(seed) - .setPositiveButton(R.string.activity_settings_seed_dialog_copy_button_title, (DialogInterface.OnClickListener) (dialog, which) -> { - ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("seed", seed); - clipboard.setPrimaryClip(clip); - Toast.makeText(getContext(), R.string.activity_settings_seed_copied_message, Toast.LENGTH_SHORT).show(); - }) - .setNeutralButton(R.string.activity_settings_seed_dialog_ok_button_title, null) - .show(); + .setTitle(R.string.activity_settings_seed_dialog_title) + .setMessage(seed) + .setPositiveButton(R.string.activity_settings_seed_dialog_copy_button_title, (DialogInterface.OnClickListener) (dialog, which) -> { + ClipboardManager clipboard = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText("seed", seed); + clipboard.setPrimaryClip(clip); + Toast.makeText(getContext(), R.string.activity_settings_seed_copied_message, Toast.LENGTH_SHORT).show(); + }) + .setNeutralButton(R.string.activity_settings_seed_dialog_ok_button_title, null) + .show(); } catch (Exception e) { Log.d("Loki", e.getMessage()); } diff --git a/src/org/thoughtcrime/securesms/components/AvatarImageView.java b/src/org/thoughtcrime/securesms/components/AvatarImageView.java index 73a44ee5ef..2fba777f0a 100644 --- a/src/org/thoughtcrime/securesms/components/AvatarImageView.java +++ b/src/org/thoughtcrime/securesms/components/AvatarImageView.java @@ -80,7 +80,7 @@ public class AvatarImageView extends AppCompatImageView { setOutlineProvider(new ViewOutlineProvider() { @Override public void getOutline(View view, Outline outline) { - outline.setOval(0, 0, view.getWidth(), view.getHeight()); + outline.setOval(0, 0, view.getWidth(), view.getHeight()); } }); setClipToOutline(true); @@ -132,11 +132,11 @@ public class AvatarImageView extends AppCompatImageView { if (photo.contactPhoto != null) { requestManager.load(photo.contactPhoto) - .fallback(fallbackContactPhotoDrawable) - .error(fallbackContactPhotoDrawable) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .circleCrop() - .into(this); + .fallback(fallbackContactPhotoDrawable) + .error(fallbackContactPhotoDrawable) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .circleCrop() + .into(this); } else { setImageDrawable(fallbackContactPhotoDrawable); } @@ -184,9 +184,9 @@ public class AvatarImageView extends AppCompatImageView { if (other == null) return false; return other.recipient.equals(recipient) && - other.recipient.getColor().equals(recipient.getColor()) && - other.ready == ready && - Objects.equals(other.contactPhoto, contactPhoto); + other.recipient.getColor().equals(recipient.getColor()) && + other.ready == ready && + Objects.equals(other.contactPhoto, contactPhoto); } } } diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java index a72d219bd1..1ce8001563 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -661,9 +661,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity */ case PICK_GIF: setMedia(data.getData(), - MediaType.GIF, - data.getIntExtra(GiphyActivity.EXTRA_WIDTH, 0), - data.getIntExtra(GiphyActivity.EXTRA_HEIGHT, 0)); + MediaType.GIF, + data.getIntExtra(GiphyActivity.EXTRA_WIDTH, 0), + data.getIntExtra(GiphyActivity.EXTRA_HEIGHT, 0)); break; case SMS_DEFAULT: initializeSecurity(isSecureText, isDefaultSms); @@ -2932,12 +2932,12 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } inputPanel.setQuote(GlideApp.with(this), - messageRecord.getDateSent(), - author, - body, - slideDeck, - recipient, - threadId); + messageRecord.getDateSent(), + author, + body, + slideDeck, + recipient, + threadId); } else if (messageRecord.isMms() && !((MmsMessageRecord) messageRecord).getLinkPreviews().isEmpty()) { LinkPreview linkPreview = ((MmsMessageRecord) messageRecord).getLinkPreviews().get(0); @@ -2948,20 +2948,20 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } inputPanel.setQuote(GlideApp.with(this), - messageRecord.getDateSent(), - author, - messageRecord.getBody(), - slideDeck, - recipient, - threadId); + messageRecord.getDateSent(), + author, + messageRecord.getBody(), + slideDeck, + recipient, + threadId); } else { inputPanel.setQuote(GlideApp.with(this), - messageRecord.getDateSent(), - author, - messageRecord.getBody(), - messageRecord.isMms() ? ((MmsMessageRecord) messageRecord).getSlideDeck() : new SlideDeck(), - recipient, - threadId); + messageRecord.getDateSent(), + author, + messageRecord.getBody(), + messageRecord.isMms() ? ((MmsMessageRecord) messageRecord).getSlideDeck() : new SlideDeck(), + recipient, + threadId); } } @@ -3209,6 +3209,5 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity FriendRequestProtocol.rejectFriendRequest(this, recipient); updateInputPanel(); } - // endregion } diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java b/src/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java index 1228f85cd3..42b10d38ba 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java @@ -105,16 +105,16 @@ public class ConversationUpdateItem extends LinearLayout this.sender.addListener(this); - if (messageRecord.isGroupAction()) setGroupRecord(messageRecord); - else if (messageRecord.isCallLog()) setCallRecord(messageRecord); - else if (messageRecord.isJoined()) setJoinedRecord(messageRecord); - else if (messageRecord.isExpirationTimerUpdate()) setTimerRecord(messageRecord); - else if (messageRecord.isEndSession()) setEndSessionRecord(messageRecord); - else if (messageRecord.isIdentityUpdate()) setIdentityRecord(messageRecord); + if (messageRecord.isGroupAction()) setGroupRecord(messageRecord); + else if (messageRecord.isCallLog()) setCallRecord(messageRecord); + else if (messageRecord.isJoined()) setJoinedRecord(messageRecord); + else if (messageRecord.isExpirationTimerUpdate()) setTimerRecord(messageRecord); + else if (messageRecord.isEndSession()) setEndSessionRecord(messageRecord); + else if (messageRecord.isIdentityUpdate()) setIdentityRecord(messageRecord); else if (messageRecord.isIdentityVerified() || - messageRecord.isIdentityDefault()) setIdentityVerifyUpdate(messageRecord); + messageRecord.isIdentityDefault()) setIdentityVerifyUpdate(messageRecord); else if (messageRecord.isLokiSessionRestoreSent()) setTextMessageRecord(messageRecord); - else throw new AssertionError("Neither group nor log nor joined."); + else throw new AssertionError("Neither group nor log nor joined."); if (batchSelected.contains(messageRecord)) setSelected(true); else setSelected(false); diff --git a/src/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java b/src/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java index 7618e9db71..02b9c1f316 100644 --- a/src/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java +++ b/src/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java @@ -9,22 +9,15 @@ import android.support.annotation.WorkerThread; import org.signal.libsignal.metadata.SignalProtos; import org.signal.libsignal.metadata.certificate.CertificateValidator; import org.signal.libsignal.metadata.certificate.InvalidCertificateException; -import network.loki.messenger.BuildConfig; import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.InvalidKeyException; -import org.whispersystems.libsignal.ecc.Curve; -import org.whispersystems.libsignal.ecc.ECPublicKey; import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; import org.whispersystems.signalservice.api.push.SignalServiceAddress; -import java.io.IOException; - public class UnidentifiedAccessUtil { private static final String TAG = UnidentifiedAccessUtil.class.getSimpleName(); @@ -116,9 +109,9 @@ public class UnidentifiedAccessUtil { String ourNumber = TextSecurePreferences.getLocalNumber(context); if (ourNumber != null) { SignalProtos.SenderCertificate certificate = SignalProtos.SenderCertificate.newBuilder() - .setSender(ourNumber) - .setSenderDevice(SignalServiceAddress.DEFAULT_DEVICE_ID) - .build(); + .setSender(ourNumber) + .setSenderDevice(SignalServiceAddress.DEFAULT_DEVICE_ID) + .build(); return certificate.toByteArray(); } diff --git a/src/org/thoughtcrime/securesms/database/GroupDatabase.java b/src/org/thoughtcrime/securesms/database/GroupDatabase.java index 2da43b0c5f..f873bfa97d 100644 --- a/src/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/src/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -168,7 +168,7 @@ public class GroupDatabase extends Database { GroupRecord record; while ((record = reader.getNext()) != null) { if (record.isClosedGroup() && record.members.contains(address)) { - return true; + return true; } } @@ -293,8 +293,7 @@ public class GroupDatabase extends Database { contents.put(ADMINS, Address.toSerializedList(admins, ',')); contents.put(ACTIVE, 1); - databaseHelper.getWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?", - new String[] {groupId}); + databaseHelper.getWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?", new String[] {groupId}); } public void remove(String groupId, Address source) { diff --git a/src/org/thoughtcrime/securesms/database/SmsDatabase.java b/src/org/thoughtcrime/securesms/database/SmsDatabase.java index 38b5c1f95c..0c2200688c 100644 --- a/src/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/src/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -341,12 +341,12 @@ public class SmsDatabase extends MessagingDatabase { try { cursor = database.query(TABLE_NAME, new String[] { ID, THREAD_ID, ADDRESS, TYPE }, - DATE_SENT + " = ?", new String[] { String.valueOf(timestamp) }, - null, null, null, null); + DATE_SENT + " = ?", new String[] { String.valueOf(timestamp) }, + null, null, null, null); while (cursor.moveToNext()) { if (Types.isOutgoingMessageType(cursor.getLong(cursor.getColumnIndexOrThrow(TYPE)))) { - isOutgoing = true; + isOutgoing = true; } } } finally { diff --git a/src/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/src/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index 9ccf46495b..f922df9c7f 100644 --- a/src/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/src/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -544,7 +544,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { if (publicChat != null) { byte[] groupId = publicChat.getId().getBytes(); String oldId = GroupUtil.getEncodedId(groupId, false); - String newId = GroupUtil.getEncodedPublicChatId(groupId); + String newId = GroupUtil.getEncodedOpenGroupId(groupId); ContentValues threadUpdate = new ContentValues(); threadUpdate.put("recipient_ids", newId); db.update("thread", threadUpdate, "recipient_ids = ?", new String[]{ oldId }); diff --git a/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java b/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java index fb7c4b2311..52c9700ebe 100644 --- a/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java +++ b/src/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java @@ -21,7 +21,6 @@ import android.content.Context; import android.support.annotation.NonNull; import android.text.SpannableString; -import network.loki.messenger.R; import org.thoughtcrime.securesms.database.MmsSmsColumns; import org.thoughtcrime.securesms.database.SmsDatabase; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; @@ -30,6 +29,8 @@ import org.thoughtcrime.securesms.recipients.Recipient; import java.util.LinkedList; import java.util.List; +import network.loki.messenger.R; + /** * The message record model which represents standard SMS messages. * @@ -67,9 +68,9 @@ public class SmsMessageRecord extends MessageRecord { int readReceiptCount, boolean unidentified, boolean isFriendRequest) { super(id, body, recipient, individualRecipient, recipientDeviceId, - dateSent, dateReceived, threadId, status, deliveryReceiptCount, type, - mismatches, new LinkedList<>(), subscriptionId, - expiresIn, expireStarted, readReceiptCount, unidentified); + dateSent, dateReceived, threadId, status, deliveryReceiptCount, type, + mismatches, new LinkedList<>(), subscriptionId, + expiresIn, expireStarted, readReceiptCount, unidentified); this.isFriendRequest = isFriendRequest; } diff --git a/src/org/thoughtcrime/securesms/groups/GroupManager.java b/src/org/thoughtcrime/securesms/groups/GroupManager.java index cd84757400..ee37c5e4f6 100644 --- a/src/org/thoughtcrime/securesms/groups/GroupManager.java +++ b/src/org/thoughtcrime/securesms/groups/GroupManager.java @@ -37,7 +37,7 @@ import java.util.Set; public class GroupManager { public static long getOpenGroupThreadID(String id, @NonNull Context context) { - final String groupID = GroupUtil.getEncodedPublicChatId(id.getBytes()); + final String groupID = GroupUtil.getEncodedOpenGroupId(id.getBytes()); return getThreadIDFromGroupID(groupID, context); } @@ -47,7 +47,7 @@ public class GroupManager { } public static long getThreadIDFromGroupID(String groupID, @NonNull Context context) { - final Recipient groupRecipient = Recipient.from(context, Address.fromSerialized(groupID), false); + final Recipient groupRecipient = Recipient.from(context, Address.fromSerialized(groupID), false); return DatabaseFactory.getThreadDatabase(context).getThreadIdIfExistsFor(groupRecipient); } @@ -78,10 +78,10 @@ public class GroupManager { final Set
memberAddresses = getMemberAddresses(members); final Set adminAddresses = getMemberAddresses(admins); - String masterPublicKey = TextSecurePreferences.getMasterHexEncodedPublicKey(context); - String publicKeyToUse = masterPublicKey != null ? masterPublicKey : TextSecurePreferences.getLocalNumber(context); + String masterPublicKeyOrNull = TextSecurePreferences.getMasterHexEncodedPublicKey(context); + String masterPublicKey = masterPublicKeyOrNull != null ? masterPublicKeyOrNull : TextSecurePreferences.getLocalNumber(context); - memberAddresses.add(Address.fromSerialized(publicKeyToUse)); + memberAddresses.add(Address.fromSerialized(masterPublicKey)); groupDatabase.create(groupId, name, new LinkedList<>(memberAddresses), null, null, new LinkedList<>(adminAddresses)); if (!mms) { @@ -94,28 +94,28 @@ public class GroupManager { } } - public static @NonNull GroupActionResult createOpenGroup(@NonNull String id, - @NonNull Context context, - @Nullable Bitmap avatar, - @Nullable String name) + public static @NonNull GroupActionResult createOpenGroup(@NonNull String id, + @NonNull Context context, + @Nullable Bitmap avatar, + @Nullable String name) { - final String groupID = GroupUtil.getEncodedPublicChatId(id.getBytes()); + final String groupID = GroupUtil.getEncodedOpenGroupId(id.getBytes()); return createLokiGroup(groupID, context, avatar, name); } - public static @NonNull GroupActionResult createRSSFeed(@NonNull String id, - @NonNull Context context, - @Nullable Bitmap avatar, - @Nullable String name) + public static @NonNull GroupActionResult createRSSFeed(@NonNull String id, + @NonNull Context context, + @Nullable Bitmap avatar, + @Nullable String name) { final String groupID = GroupUtil.getEncodedRSSFeedId(id.getBytes()); return createLokiGroup(groupID, context, avatar, name); } - private static @NonNull GroupActionResult createLokiGroup(@NonNull String groupId, - @NonNull Context context, - @Nullable Bitmap avatar, - @Nullable String name) + private static @NonNull GroupActionResult createLokiGroup(@NonNull String groupId, + @NonNull Context context, + @Nullable Bitmap avatar, + @Nullable String name) { final byte[] avatarBytes = BitmapUtil.toByteArray(avatar); final GroupDatabase groupDatabase = DatabaseFactory.getGroupDatabase(context); diff --git a/src/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java b/src/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java index e5079b3081..cd8f045507 100644 --- a/src/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java +++ b/src/org/thoughtcrime/securesms/groups/GroupMessageProcessor.java @@ -143,7 +143,7 @@ public class GroupMessageProcessor { // Loki - Only process update messages if we're part of the group Address userMasterDeviceAddress = Address.fromSerialized(userMasterDevice); if (!groupRecord.getMembers().contains(userMasterDeviceAddress) && - !group.getMembers().or(Collections.emptyList()).contains(userMasterDevice)) { + !group.getMembers().or(Collections.emptyList()).contains(userMasterDevice)) { Log.d("Loki", "Received a group update message from a group we're not a member of: " + id + "; ignoring."); database.setActive(id, false); return null; diff --git a/src/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java b/src/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java index 2cc37cd615..5b4b7809ca 100644 --- a/src/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java +++ b/src/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java @@ -196,15 +196,17 @@ public class AttachmentDownloadJob extends BaseJob implements InjectableType { try { long id = Long.parseLong(attachment.getLocation()); if (isPublicAttachment) { - return new SignalServiceAttachmentPointer(id, null, new byte[0], - Optional.of(Util.toIntExact(attachment.getSize())), - Optional.absent(), - 0, - 0, - Optional.fromNullable(attachment.getDigest()), - Optional.fromNullable(attachment.getFileName()), - attachment.isVoiceNote(), - Optional.absent(), attachment.getUrl()); + return new SignalServiceAttachmentPointer(id, + null, + new byte[0], + Optional.of(Util.toIntExact(attachment.getSize())), + Optional.absent(), + 0, + 0, + Optional.fromNullable(attachment.getDigest()), + Optional.fromNullable(attachment.getFileName()), + attachment.isVoiceNote(), + Optional.absent(), attachment.getUrl()); } byte[] key = Base64.decode(attachment.getKey()); diff --git a/src/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java b/src/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java index 24f803c8ee..2c18845211 100644 --- a/src/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java +++ b/src/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java @@ -142,15 +142,13 @@ public class MultiDeviceContactUpdateJob extends BaseJob implements InjectableTy // Loki - Only sync contacts we are friends with if (SyncMessagesProtocol.shouldSyncContact(context, address)) { out.write(new DeviceContact(address.toPhoneString(), - Optional.fromNullable(recipient.getName()), - getAvatar(recipient.getContactUri()), - Optional.fromNullable(recipient.getColor().serialize()), - verifiedMessage, - Optional.fromNullable(recipient.getProfileKey()), - recipient.isBlocked(), - recipient.getExpireMessages() > 0 ? - Optional.of(recipient.getExpireMessages()) : - Optional.absent())); + Optional.fromNullable(recipient.getName()), + getAvatar(recipient.getContactUri()), + Optional.fromNullable(recipient.getColor().serialize()), + verifiedMessage, + Optional.fromNullable(recipient.getProfileKey()), + recipient.isBlocked(), + recipient.getExpireMessages() > 0 ? Optional.of(recipient.getExpireMessages()) : Optional.absent())); } out.close(); diff --git a/src/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java b/src/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java index 677ee4e947..c35d6b8e3a 100644 --- a/src/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java +++ b/src/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java @@ -124,7 +124,7 @@ public class MultiDeviceGroupUpdateJob extends BaseJob implements InjectableType @Override public boolean onShouldRetry(@NonNull Exception exception) { - // Loki - Disabled because we have our own retrying + // Loki - Disabled since we have our own retrying return false; } diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 59cc5121ec..454d7d436d 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -128,6 +128,7 @@ import org.whispersystems.signalservice.loki.api.fileserver.LokiFileServerAPI; import org.whispersystems.signalservice.loki.crypto.LokiServiceCipher; import org.whispersystems.signalservice.loki.protocol.mentions.MentionsManager; import org.whispersystems.signalservice.loki.protocol.meta.LokiServiceMessage; +import org.whispersystems.signalservice.loki.utilities.PublicKeyValidation; import java.security.MessageDigest; import java.security.SecureRandom; @@ -762,8 +763,8 @@ public class PushDecryptJob extends BaseJob implements InjectableType { } IncomingMediaMessage mediaMessage = new IncomingMediaMessage(masterAddress, message.getTimestamp(), -1, - message.getExpiresInSeconds() * 1000L, false, content.isNeedsReceipt(), message.getBody(), message.getGroupInfo(), message.getAttachments(), - quote, sharedContacts, linkPreviews, sticker); + message.getExpiresInSeconds() * 1000L, false, content.isNeedsReceipt(), message.getBody(), message.getGroupInfo(), message.getAttachments(), + quote, sharedContacts, linkPreviews, sticker); MmsDatabase database = DatabaseFactory.getMmsDatabase(context); database.beginTransaction(); @@ -824,7 +825,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { private long handleSynchronizeSentExpirationUpdate(@NonNull SentTranscriptMessage message) throws MmsException { MmsDatabase database = DatabaseFactory.getMmsDatabase(context); - Recipient recipient = getSyncMessageMasterDestination(message.getDestination().get()); + Recipient recipient = getSyncMessageMasterDestination(message); OutgoingExpirationUpdateMessage expirationUpdateMessage = new OutgoingExpirationUpdateMessage(recipient, message.getTimestamp(), @@ -844,7 +845,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { throws MmsException { MmsDatabase database = DatabaseFactory.getMmsDatabase(context); - Recipient recipients = getSyncMessageMasterDestination(message.getDestination().get()); + Recipient recipients = getSyncMessageMasterDestination(message); Optional