From 4c9a237d8798b6178aba12c05c00ae0c61d4ac66 Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Thu, 6 Jul 2023 14:48:05 +1000 Subject: [PATCH] fix: compile errors --- .../expiration/ExpirationSettingsViewModel.kt | 2 +- .../conversation/v2/ConversationActivityV2.kt | 7 +- .../database/helpers/SQLCipherOpenHelper.java | 3 +- .../AndroidAutoReplyReceiver.java | 2 +- .../notifications/RemoteReplyReceiver.java | 2 +- .../securesms/util/MockDataGenerator.kt | 9 +- .../main/res/layout/view_control_message.xml | 1 - app/src/main/res/values/strings.xml | 1 - .../libsession/messaging/messages/Message.kt | 5 +- .../control/MessageRequestResponse.kt | 7 +- .../sending_receiving/MessageSender.kt | 12 +- .../ReceivedMessageHandler.kt | 8 +- .../utilities/UpdateMessageBuilder.kt | 5 +- .../libsignal/protos/SignalServiceProtos.java | 381 +++++++++++++++++- 14 files changed, 392 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt index 1346b6095..d559d42b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt @@ -121,7 +121,7 @@ class ExpirationSettingsViewModel( return@launch } - val expiryChangeTimestampMs = System.currentTimeMillis() + SnodeAPI.clockOffset + val expiryChangeTimestampMs = SnodeAPI.nowWithOffset storage.setExpirationConfiguration(ExpirationConfiguration(threadId, expirationTimer, expiryType, expiryChangeTimestampMs)) val message = ExpirationTimerUpdate(expirationTimer) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt index 2c3e8203b..1f24967cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationActivityV2.kt @@ -154,6 +154,8 @@ import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities import org.thoughtcrime.securesms.util.DateUtils import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.SaveAttachmentTask +import org.thoughtcrime.securesms.util.drawToBitmap +import org.thoughtcrime.securesms.util.isScrolledToBottom import org.thoughtcrime.securesms.util.push import org.thoughtcrime.securesms.util.show import org.thoughtcrime.securesms.util.toPx @@ -381,7 +383,6 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe } updateUnreadCountIndicator() - updateSubtitle() setUpBlockedBanner() binding!!.searchBottomBar.setEventListener(this) updateSendAfterApprovalText() @@ -699,7 +700,6 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe } setUpMessageRequestsBar() invalidateOptionsMenu() - updateSubtitle() updateSendAfterApprovalText() showOrHideInputIfNeeded() @@ -1451,7 +1451,8 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe processMessageRequestApproval() // Create the message val message = VisibleMessage() - message.sentTimestamp = SnodeAPI.nowWithOffset + val sentTimestampMs = SnodeAPI.nowWithOffset + message.sentTimestamp = sentTimestampMs message.text = body val quote = quotedMessage?.let { val quotedAttachments = (it as? MmsMessageRecord)?.slideDeck?.asAttachments() ?: listOf() diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index 70e551b5e..56eaf7518 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -86,9 +86,10 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { private static final int lokiV38 = 59; private static final int lokiV39 = 60; private static final int lokiV40 = 61; + private static final int lokiV41 = 62; // Loki - onUpgrade(...) must be updated to use Loki version numbers if Signal makes any database changes - private static final int DATABASE_VERSION = lokiV40; + private static final int DATABASE_VERSION = lokiV41; private static final int MIN_DATABASE_VERSION = lokiV7; private static final String CIPHER3_DATABASE_NAME = "signal.db"; public static final String DATABASE_NAME = "signal_v4.db"; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/AndroidAutoReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/AndroidAutoReplyReceiver.java index d5eb01964..bc7db0d41 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/AndroidAutoReplyReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/AndroidAutoReplyReceiver.java @@ -85,7 +85,7 @@ public class AndroidAutoReplyReceiver extends BroadcastReceiver { VisibleMessage message = new VisibleMessage(); message.setText(responseText.toString()); - message.setSentTimestamp(SnodeAPI.getNowWithOffset() + SnodeAPI.INSTANCE.getClockOffset()); + message.setSentTimestamp(SnodeAPI.getNowWithOffset()); MessageSender.send(message, recipient.getAddress()); ExpirationConfiguration config = DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId); long expiresInMillis = config == null ? 0 : config.getDurationSeconds() * 1000L; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java index 0a7792ee3..a7c34d14e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java @@ -79,7 +79,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver { ThreadDatabase threadDatabase = DatabaseComponent.get(context).threadDatabase(); long threadId = threadDatabase.getOrCreateThreadIdFor(recipient); VisibleMessage message = new VisibleMessage(); - message.setSentTimestamp(System.currentTimeMillis() + SnodeAPI.INSTANCE.getClockOffset()); + message.setSentTimestamp(SnodeAPI.getNowWithOffset()); message.setText(responseText.toString()); ExpirationConfiguration config = DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId); long expiresInMillis = config == null ? 0 : config.getDurationSeconds() * 1000L; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/MockDataGenerator.kt b/app/src/main/java/org/thoughtcrime/securesms/util/MockDataGenerator.kt index 10d507a53..46f1d901a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/MockDataGenerator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/MockDataGenerator.kt @@ -7,8 +7,6 @@ import org.session.libsession.messaging.messages.signal.IncomingTextMessage import org.session.libsession.messaging.messages.signal.OutgoingTextMessage import org.session.libsession.messaging.open_groups.OpenGroup import org.session.libsession.messaging.open_groups.OpenGroupApi -import org.session.libsession.messaging.sending_receiving.notifications.PushNotificationAPI -import org.session.libsession.messaging.sending_receiving.pollers.ClosedGroupPollerV2 import org.session.libsession.utilities.Address import org.session.libsession.utilities.GroupUtil import org.session.libsession.utilities.recipients.Recipient @@ -21,7 +19,6 @@ import org.thoughtcrime.securesms.crypto.KeyPairUtilities import org.thoughtcrime.securesms.dependencies.DatabaseComponent import org.thoughtcrime.securesms.groups.GroupManager import java.security.SecureRandom -import java.util.* import kotlin.random.asKotlinRandom object MockDataGenerator { @@ -134,6 +131,7 @@ object MockDataGenerator { .joinToString(), Optional.absent(), 0, + 0, false, -1, false @@ -152,6 +150,7 @@ object MockDataGenerator { .map { wordContent.random(dmThreadRandomGenerator.asKotlinRandom()) } .joinToString(), 0, + 0, -1, (timestampNow - (index * 5000)) ), @@ -264,6 +263,7 @@ object MockDataGenerator { .joinToString(), Optional.absent(), 0, + 0, false, -1, false @@ -282,6 +282,7 @@ object MockDataGenerator { .map { wordContent.random(cgThreadRandomGenerator.asKotlinRandom()) } .joinToString(), 0, + 0, -1, (timestampNow - (index * 5000)) ), @@ -390,6 +391,7 @@ object MockDataGenerator { .joinToString(), Optional.absent(), 0, + 0, false, -1, false @@ -407,6 +409,7 @@ object MockDataGenerator { .map { wordContent.random(ogThreadRandomGenerator.asKotlinRandom()) } .joinToString(), 0, + 0, -1, (timestampNow - (index * 5000)) ), diff --git a/app/src/main/res/layout/view_control_message.xml b/app/src/main/res/layout/view_control_message.xml index 805683ace..03923677d 100644 --- a/app/src/main/res/layout/view_control_message.xml +++ b/app/src/main/res/layout/view_control_message.xml @@ -34,7 +34,6 @@ android:contentDescription="@string/AccessibilityId_control_message" android:layout_width="match_parent" android:layout_height="wrap_content" - android:contentDescription="@string/AccessibilityId_configuration_message" android:gravity="center" android:textColor="?android:textColorPrimary" android:textSize="@dimen/very_small_font_size" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4fbe80dbe..94ac34585 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -78,7 +78,6 @@ Call button Settings - Disappearing messages timer Time selector Accept message request Decline message request diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt index f9e3b38ca..78d9b66da 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/Message.kt @@ -39,16 +39,17 @@ abstract class Message { dataMessage.group = groupProto.build() } - fun SignalServiceProtos.Content.Builder.setExpirationConfigurationIfNeeded(threadId: Long?) { + fun SignalServiceProtos.Content.Builder.setExpirationConfigurationIfNeeded(threadId: Long?): SignalServiceProtos.Content.Builder { val config = threadId?.let { MessagingModuleConfiguration.shared.storage.getExpirationConfiguration(it) } ?: run { expirationTimer = 0 - return + return this } if (config.isEnabled) { expirationTimer = config.durationSeconds lastDisappearingMessageChangeTimestamp = config.updatedTimestampMs expirationType = config.expirationType } + return this } } \ No newline at end of file diff --git a/libsession/src/main/java/org/session/libsession/messaging/messages/control/MessageRequestResponse.kt b/libsession/src/main/java/org/session/libsession/messaging/messages/control/MessageRequestResponse.kt index e4124c30b..65c7d9abd 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/messages/control/MessageRequestResponse.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/messages/control/MessageRequestResponse.kt @@ -18,9 +18,10 @@ class MessageRequestResponse(val isApproved: Boolean, var profile: Profile? = nu .setProfile(profileProto.build()) profile?.profileKey?.let { messageRequestResponseProto.profileKey = ByteString.copyFrom(it) } return try { - messageRequestResponseProto.messageRequestResponse = messageRequestResponseProto.build() - messageRequestResponseProto.setExpirationConfigurationIfNeeded(threadID) - messageRequestResponseProto.build() + SignalServiceProtos.Content.newBuilder() + .setExpirationConfigurationIfNeeded(threadID) + .setMessageRequestResponse(messageRequestResponseProto.build()) + .build() } catch (e: Exception) { Log.w(TAG, "Couldn't construct message request response proto from: $this") null 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 37abbd2e1..458d34a39 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 @@ -14,11 +14,6 @@ import org.session.libsession.messaging.messages.control.ConfigurationMessage import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate import org.session.libsession.messaging.messages.control.MessageRequestResponse import org.session.libsession.messaging.messages.control.UnsendRequest -import org.session.libsession.messaging.messages.control.CallMessage -import org.session.libsession.messaging.messages.control.ClosedGroupControlMessage -import org.session.libsession.messaging.messages.control.ConfigurationMessage -import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate -import org.session.libsession.messaging.messages.control.UnsendRequest import org.session.libsession.messaging.messages.visible.LinkPreview import org.session.libsession.messaging.messages.visible.Quote import org.session.libsession.messaging.messages.visible.VisibleMessage @@ -38,7 +33,12 @@ import org.session.libsession.utilities.SSKEnvironment import org.session.libsignal.crypto.PushTransportDetails import org.session.libsignal.protos.SignalServiceProtos import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType -import org.session.libsignal.utilities.* +import org.session.libsignal.utilities.Base64 +import org.session.libsignal.utilities.IdPrefix +import org.session.libsignal.utilities.Namespace +import org.session.libsignal.utilities.defaultRequiresAuth +import org.session.libsignal.utilities.hasNamespaces +import org.session.libsignal.utilities.hexEncodedPublicKey import java.util.concurrent.TimeUnit import java.util.concurrent.atomic.AtomicInteger import org.session.libsession.messaging.sending_receiving.attachments.Attachment as SignalAttachment diff --git a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt index a468927c8..5909e50f4 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/sending_receiving/ReceivedMessageHandler.kt @@ -32,12 +32,6 @@ import org.session.libsession.messaging.utilities.SodiumUtilities import org.session.libsession.messaging.utilities.WebRtcUtils import org.session.libsession.snode.SnodeAPI import org.session.libsession.utilities.Address -import org.session.libsession.utilities.GroupRecord -import org.session.libsession.utilities.GroupUtil -import org.session.libsession.utilities.ProfileKeyUtil -import org.session.libsession.utilities.SSKEnvironment -import org.session.libsession.utilities.TextSecurePreferences -import org.session.libsession.utilities.Address import org.session.libsession.utilities.Address.Companion.fromSerialized import org.session.libsession.utilities.GroupRecord import org.session.libsession.utilities.GroupUtil @@ -282,7 +276,7 @@ fun MessageReceiver.updateExpiryIfNeeded(message: Message, proto: SignalServiceP // handle a delete after send expired fetch if (type == ExpirationType.DELETE_AFTER_SEND - && sentTime + configToUse.durationSeconds <= SnodeAPI.nowWithClockOffset) { + && sentTime + configToUse.durationSeconds <= SnodeAPI.nowWithOffset) { throw MessageReceiver.Error.ExpiredMessage } // handle a delete after read last known config value (test) TODO: actually implement this with shared config library diff --git a/libsession/src/main/java/org/session/libsession/messaging/utilities/UpdateMessageBuilder.kt b/libsession/src/main/java/org/session/libsession/messaging/utilities/UpdateMessageBuilder.kt index ccecf0b11..7c95b7f5c 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/utilities/UpdateMessageBuilder.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/utilities/UpdateMessageBuilder.kt @@ -9,8 +9,8 @@ import org.session.libsession.messaging.messages.ExpirationConfiguration import org.session.libsession.messaging.sending_receiving.data_extraction.DataExtractionNotificationInfoMessage import org.session.libsession.utilities.Address import org.session.libsession.utilities.ExpirationUtil -import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType import org.session.libsession.utilities.truncateIdForDisplay +import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType object UpdateMessageBuilder { @@ -103,7 +103,8 @@ object UpdateMessageBuilder { } } else { val time = ExpirationUtil.getExpirationDisplayValue(context, duration.toInt()) - val config = storage.getExpirationConfiguration(storage.getOrCreateThreadIdFor(Address.fromSerialized(sender!!))) + val threadId = storage.getThreadId(Address.fromSerialized(senderId!!)) + val config = threadId?.let { storage.getExpirationConfiguration(it) } val state = when (config?.expirationType) { ExpirationType.DELETE_AFTER_SEND -> context.getString(R.string.MessageRecord_state_sent) ExpirationType.DELETE_AFTER_READ -> context.getString(R.string.MessageRecord_state_read) diff --git a/libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java b/libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java index 7c44087f8..46068a7dd 100644 --- a/libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java +++ b/libsignal/src/main/java/org/session/libsignal/protos/SignalServiceProtos.java @@ -2468,6 +2468,36 @@ public final class SignalServiceProtos { * optional .signalservice.MessageRequestResponse messageRequestResponse = 10; */ org.session.libsignal.protos.SignalServiceProtos.MessageRequestResponseOrBuilder getMessageRequestResponseOrBuilder(); + + // optional .signalservice.Content.ExpirationType expirationType = 11; + /** + * optional .signalservice.Content.ExpirationType expirationType = 11; + */ + boolean hasExpirationType(); + /** + * optional .signalservice.Content.ExpirationType expirationType = 11; + */ + org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType getExpirationType(); + + // optional uint32 expirationTimer = 12; + /** + * optional uint32 expirationTimer = 12; + */ + boolean hasExpirationTimer(); + /** + * optional uint32 expirationTimer = 12; + */ + int getExpirationTimer(); + + // optional uint64 lastDisappearingMessageChangeTimestamp = 13; + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 13; + */ + boolean hasLastDisappearingMessageChangeTimestamp(); + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 13; + */ + long getLastDisappearingMessageChangeTimestamp(); } /** * Protobuf type {@code signalservice.Content} @@ -2624,6 +2654,27 @@ public final class SignalServiceProtos { bitField0_ |= 0x00000080; break; } + case 88: { + int rawValue = input.readEnum(); + org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType value = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(11, rawValue); + } else { + bitField0_ |= 0x00000100; + expirationType_ = value; + } + break; + } + case 96: { + bitField0_ |= 0x00000200; + expirationTimer_ = input.readUInt32(); + break; + } + case 104: { + bitField0_ |= 0x00000400; + lastDisappearingMessageChangeTimestamp_ = input.readUInt64(); + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -2663,6 +2714,88 @@ public final class SignalServiceProtos { return PARSER; } + /** + * Protobuf enum {@code signalservice.Content.ExpirationType} + */ + public enum ExpirationType + implements com.google.protobuf.ProtocolMessageEnum { + /** + * DELETE_AFTER_READ = 1; + */ + DELETE_AFTER_READ(0, 1), + /** + * DELETE_AFTER_SEND = 2; + */ + DELETE_AFTER_SEND(1, 2), + ; + + /** + * DELETE_AFTER_READ = 1; + */ + public static final int DELETE_AFTER_READ_VALUE = 1; + /** + * DELETE_AFTER_SEND = 2; + */ + public static final int DELETE_AFTER_SEND_VALUE = 2; + + + public final int getNumber() { return value; } + + public static ExpirationType valueOf(int value) { + switch (value) { + case 1: return DELETE_AFTER_READ; + case 2: return DELETE_AFTER_SEND; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ExpirationType findValueByNumber(int number) { + return ExpirationType.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return org.session.libsignal.protos.SignalServiceProtos.Content.getDescriptor().getEnumTypes().get(0); + } + + private static final ExpirationType[] VALUES = values(); + + public static ExpirationType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private ExpirationType(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:signalservice.Content.ExpirationType) + } + private int bitField0_; // optional .signalservice.DataMessage dataMessage = 1; public static final int DATAMESSAGE_FIELD_NUMBER = 1; @@ -2840,6 +2973,54 @@ public final class SignalServiceProtos { return messageRequestResponse_; } + // optional .signalservice.Content.ExpirationType expirationType = 11; + public static final int EXPIRATIONTYPE_FIELD_NUMBER = 11; + private org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType expirationType_; + /** + * optional .signalservice.Content.ExpirationType expirationType = 11; + */ + public boolean hasExpirationType() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + /** + * optional .signalservice.Content.ExpirationType expirationType = 11; + */ + public org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType getExpirationType() { + return expirationType_; + } + + // optional uint32 expirationTimer = 12; + public static final int EXPIRATIONTIMER_FIELD_NUMBER = 12; + private int expirationTimer_; + /** + * optional uint32 expirationTimer = 12; + */ + public boolean hasExpirationTimer() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + /** + * optional uint32 expirationTimer = 12; + */ + public int getExpirationTimer() { + return expirationTimer_; + } + + // optional uint64 lastDisappearingMessageChangeTimestamp = 13; + public static final int LASTDISAPPEARINGMESSAGECHANGETIMESTAMP_FIELD_NUMBER = 13; + private long lastDisappearingMessageChangeTimestamp_; + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 13; + */ + public boolean hasLastDisappearingMessageChangeTimestamp() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 13; + */ + public long getLastDisappearingMessageChangeTimestamp() { + return lastDisappearingMessageChangeTimestamp_; + } + private void initFields() { dataMessage_ = org.session.libsignal.protos.SignalServiceProtos.DataMessage.getDefaultInstance(); callMessage_ = org.session.libsignal.protos.SignalServiceProtos.CallMessage.getDefaultInstance(); @@ -2849,6 +3030,9 @@ public final class SignalServiceProtos { dataExtractionNotification_ = org.session.libsignal.protos.SignalServiceProtos.DataExtractionNotification.getDefaultInstance(); unsendRequest_ = org.session.libsignal.protos.SignalServiceProtos.UnsendRequest.getDefaultInstance(); messageRequestResponse_ = org.session.libsignal.protos.SignalServiceProtos.MessageRequestResponse.getDefaultInstance(); + expirationType_ = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ; + expirationTimer_ = 0; + lastDisappearingMessageChangeTimestamp_ = 0L; } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -2934,6 +3118,15 @@ public final class SignalServiceProtos { if (((bitField0_ & 0x00000080) == 0x00000080)) { output.writeMessage(10, messageRequestResponse_); } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + output.writeEnum(11, expirationType_.getNumber()); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + output.writeUInt32(12, expirationTimer_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + output.writeUInt64(13, lastDisappearingMessageChangeTimestamp_); + } getUnknownFields().writeTo(output); } @@ -2975,6 +3168,18 @@ public final class SignalServiceProtos { size += com.google.protobuf.CodedOutputStream .computeMessageSize(10, messageRequestResponse_); } + if (((bitField0_ & 0x00000100) == 0x00000100)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(11, expirationType_.getNumber()); + } + if (((bitField0_ & 0x00000200) == 0x00000200)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt32Size(12, expirationTimer_); + } + if (((bitField0_ & 0x00000400) == 0x00000400)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(13, lastDisappearingMessageChangeTimestamp_); + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -3147,6 +3352,12 @@ public final class SignalServiceProtos { messageRequestResponseBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000080); + expirationType_ = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ; + bitField0_ = (bitField0_ & ~0x00000100); + expirationTimer_ = 0; + bitField0_ = (bitField0_ & ~0x00000200); + lastDisappearingMessageChangeTimestamp_ = 0L; + bitField0_ = (bitField0_ & ~0x00000400); return this; } @@ -3239,6 +3450,18 @@ public final class SignalServiceProtos { } else { result.messageRequestResponse_ = messageRequestResponseBuilder_.build(); } + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + to_bitField0_ |= 0x00000100; + } + result.expirationType_ = expirationType_; + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + to_bitField0_ |= 0x00000200; + } + result.expirationTimer_ = expirationTimer_; + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + to_bitField0_ |= 0x00000400; + } + result.lastDisappearingMessageChangeTimestamp_ = lastDisappearingMessageChangeTimestamp_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -3279,6 +3502,15 @@ public final class SignalServiceProtos { if (other.hasMessageRequestResponse()) { mergeMessageRequestResponse(other.getMessageRequestResponse()); } + if (other.hasExpirationType()) { + setExpirationType(other.getExpirationType()); + } + if (other.hasExpirationTimer()) { + setExpirationTimer(other.getExpirationTimer()); + } + if (other.hasLastDisappearingMessageChangeTimestamp()) { + setLastDisappearingMessageChangeTimestamp(other.getLastDisappearingMessageChangeTimestamp()); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -4290,6 +4522,108 @@ public final class SignalServiceProtos { return messageRequestResponseBuilder_; } + // optional .signalservice.Content.ExpirationType expirationType = 11; + private org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType expirationType_ = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ; + /** + * optional .signalservice.Content.ExpirationType expirationType = 11; + */ + public boolean hasExpirationType() { + return ((bitField0_ & 0x00000100) == 0x00000100); + } + /** + * optional .signalservice.Content.ExpirationType expirationType = 11; + */ + public org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType getExpirationType() { + return expirationType_; + } + /** + * optional .signalservice.Content.ExpirationType expirationType = 11; + */ + public Builder setExpirationType(org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000100; + expirationType_ = value; + onChanged(); + return this; + } + /** + * optional .signalservice.Content.ExpirationType expirationType = 11; + */ + public Builder clearExpirationType() { + bitField0_ = (bitField0_ & ~0x00000100); + expirationType_ = org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ; + onChanged(); + return this; + } + + // optional uint32 expirationTimer = 12; + private int expirationTimer_ ; + /** + * optional uint32 expirationTimer = 12; + */ + public boolean hasExpirationTimer() { + return ((bitField0_ & 0x00000200) == 0x00000200); + } + /** + * optional uint32 expirationTimer = 12; + */ + public int getExpirationTimer() { + return expirationTimer_; + } + /** + * optional uint32 expirationTimer = 12; + */ + public Builder setExpirationTimer(int value) { + bitField0_ |= 0x00000200; + expirationTimer_ = value; + onChanged(); + return this; + } + /** + * optional uint32 expirationTimer = 12; + */ + public Builder clearExpirationTimer() { + bitField0_ = (bitField0_ & ~0x00000200); + expirationTimer_ = 0; + onChanged(); + return this; + } + + // optional uint64 lastDisappearingMessageChangeTimestamp = 13; + private long lastDisappearingMessageChangeTimestamp_ ; + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 13; + */ + public boolean hasLastDisappearingMessageChangeTimestamp() { + return ((bitField0_ & 0x00000400) == 0x00000400); + } + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 13; + */ + public long getLastDisappearingMessageChangeTimestamp() { + return lastDisappearingMessageChangeTimestamp_; + } + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 13; + */ + public Builder setLastDisappearingMessageChangeTimestamp(long value) { + bitField0_ |= 0x00000400; + lastDisappearingMessageChangeTimestamp_ = value; + onChanged(); + return this; + } + /** + * optional uint64 lastDisappearingMessageChangeTimestamp = 13; + */ + public Builder clearLastDisappearingMessageChangeTimestamp() { + bitField0_ = (bitField0_ & ~0x00000400); + lastDisappearingMessageChangeTimestamp_ = 0L; + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:signalservice.Content) } @@ -26115,7 +26449,7 @@ public final class SignalServiceProtos { "\002(\004\0223\n\006action\030\002 \002(\0162#.signalservice.Typi" + "ngMessage.Action\"\"\n\006Action\022\013\n\007STARTED\020\000\022" + "\013\n\007STOPPED\020\001\"2\n\rUnsendRequest\022\021\n\ttimesta", - "mp\030\001 \002(\004\022\016\n\006author\030\002 \002(\t\"\345\003\n\007Content\022/\n\013" + + "mp\030\001 \002(\004\022\016\n\006author\030\002 \002(\t\"\255\005\n\007Content\022/\n\013" + "dataMessage\030\001 \001(\0132\032.signalservice.DataMe" + "ssage\022/\n\013callMessage\030\003 \001(\0132\032.signalservi" + "ce.CallMessage\0225\n\016receiptMessage\030\005 \001(\0132\035" + @@ -26127,94 +26461,99 @@ public final class SignalServiceProtos { "e.DataExtractionNotification\0223\n\runsendRe", "quest\030\t \001(\0132\034.signalservice.UnsendReques" + "t\022E\n\026messageRequestResponse\030\n \001(\0132%.sign" + - "alservice.MessageRequestResponse\"0\n\007KeyP" + + "alservice.MessageRequestResponse\022=\n\016expi" + + "rationType\030\013 \001(\0162%.signalservice.Content" + + ".ExpirationType\022\027\n\017expirationTimer\030\014 \001(\r" + + "\022.\n&lastDisappearingMessageChangeTimesta" + + "mp\030\r \001(\004\">\n\016ExpirationType\022\025\n\021DELETE_AFT" + + "ER_READ\020\001\022\025\n\021DELETE_AFTER_SEND\020\002\"0\n\007KeyP" + "air\022\021\n\tpublicKey\030\001 \002(\014\022\022\n\nprivateKey\030\002 \002" + - "(\014\"\226\001\n\032DataExtractionNotification\022<\n\004typ" + + "(\014\"\226\001\n\032DataExtractionNotification\022<\n\004typ", "e\030\001 \002(\0162..signalservice.DataExtractionNo" + "tification.Type\022\021\n\ttimestamp\030\002 \001(\004\"\'\n\004Ty" + "pe\022\016\n\nSCREENSHOT\020\001\022\017\n\013MEDIA_SAVED\020\002\"\361\r\n\013" + "DataMessage\022\014\n\004body\030\001 \001(\t\0225\n\013attachments" + - "\030\002 \003(\0132 .signalservice.AttachmentPointer", + "\030\002 \003(\0132 .signalservice.AttachmentPointer" + "\022*\n\005group\030\003 \001(\0132\033.signalservice.GroupCon" + "text\022\r\n\005flags\030\004 \001(\r\022\023\n\013expireTimer\030\005 \001(\r" + "\022\022\n\nprofileKey\030\006 \001(\014\022\021\n\ttimestamp\030\007 \001(\004\022" + "/\n\005quote\030\010 \001(\0132 .signalservice.DataMessa" + - "ge.Quote\0223\n\007preview\030\n \003(\0132\".signalservic" + + "ge.Quote\0223\n\007preview\030\n \003(\0132\".signalservic", "e.DataMessage.Preview\0225\n\010reaction\030\013 \001(\0132" + "#.signalservice.DataMessage.Reaction\0227\n\007" + "profile\030e \001(\0132&.signalservice.DataMessag" + "e.LokiProfile\022K\n\023openGroupInvitation\030f \001" + - "(\0132..signalservice.DataMessage.OpenGroup", + "(\0132..signalservice.DataMessage.OpenGroup" + "Invitation\022W\n\031closedGroupControlMessage\030" + "h \001(\01324.signalservice.DataMessage.Closed" + "GroupControlMessage\022\022\n\nsyncTarget\030i \001(\t\032" + "\225\002\n\005Quote\022\n\n\002id\030\001 \002(\004\022\016\n\006author\030\002 \002(\t\022\014\n" + - "\004text\030\003 \001(\t\022F\n\013attachments\030\004 \003(\01321.signa" + + "\004text\030\003 \001(\t\022F\n\013attachments\030\004 \003(\01321.signa", "lservice.DataMessage.Quote.QuotedAttachm" + "ent\032\231\001\n\020QuotedAttachment\022\023\n\013contentType\030" + "\001 \001(\t\022\020\n\010fileName\030\002 \001(\t\0223\n\tthumbnail\030\003 \001" + "(\0132 .signalservice.AttachmentPointer\022\r\n\005" + - "flags\030\004 \001(\r\"\032\n\005Flags\022\021\n\rVOICE_MESSAGE\020\001\032", + "flags\030\004 \001(\r\"\032\n\005Flags\022\021\n\rVOICE_MESSAGE\020\001\032" + "V\n\007Preview\022\013\n\003url\030\001 \002(\t\022\r\n\005title\030\002 \001(\t\022/" + "\n\005image\030\003 \001(\0132 .signalservice.Attachment" + "Pointer\032:\n\013LokiProfile\022\023\n\013displayName\030\001 " + "\001(\t\022\026\n\016profilePicture\030\002 \001(\t\0320\n\023OpenGroup" + - "Invitation\022\013\n\003url\030\001 \002(\t\022\014\n\004name\030\003 \002(\t\032\374\003" + + "Invitation\022\013\n\003url\030\001 \002(\t\022\014\n\004name\030\003 \002(\t\032\374\003", "\n\031ClosedGroupControlMessage\022G\n\004type\030\001 \002(" + "\01629.signalservice.DataMessage.ClosedGrou" + "pControlMessage.Type\022\021\n\tpublicKey\030\002 \001(\014\022" + "\014\n\004name\030\003 \001(\t\0221\n\021encryptionKeyPair\030\004 \001(\013" + - "2\026.signalservice.KeyPair\022\017\n\007members\030\005 \003(", + "2\026.signalservice.KeyPair\022\017\n\007members\030\005 \003(" + "\014\022\016\n\006admins\030\006 \003(\014\022U\n\010wrappers\030\007 \003(\0132C.si" + "gnalservice.DataMessage.ClosedGroupContr" + "olMessage.KeyPairWrapper\022\027\n\017expirationTi" + "mer\030\010 \001(\r\032=\n\016KeyPairWrapper\022\021\n\tpublicKey" + - "\030\001 \002(\014\022\030\n\020encryptedKeyPair\030\002 \002(\014\"r\n\004Type" + + "\030\001 \002(\014\022\030\n\020encryptedKeyPair\030\002 \002(\014\"r\n\004Type", "\022\007\n\003NEW\020\001\022\027\n\023ENCRYPTION_KEY_PAIR\020\003\022\017\n\013NA" + "ME_CHANGE\020\004\022\021\n\rMEMBERS_ADDED\020\005\022\023\n\017MEMBER" + "S_REMOVED\020\006\022\017\n\013MEMBER_LEFT\020\007\032\222\001\n\010Reactio" + "n\022\n\n\002id\030\001 \002(\004\022\016\n\006author\030\002 \002(\t\022\r\n\005emoji\030\003" + - " \001(\t\022:\n\006action\030\004 \002(\0162*.signalservice.Dat", + " \001(\t\022:\n\006action\030\004 \002(\0162*.signalservice.Dat" + "aMessage.Reaction.Action\"\037\n\006Action\022\t\n\005RE" + "ACT\020\000\022\n\n\006REMOVE\020\001\"$\n\005Flags\022\033\n\027EXPIRATION" + "_TIMER_UPDATE\020\002\"\352\001\n\013CallMessage\022-\n\004type\030" + "\001 \002(\0162\037.signalservice.CallMessage.Type\022\014" + - "\n\004sdps\030\002 \003(\t\022\027\n\017sdpMLineIndexes\030\003 \003(\r\022\017\n" + + "\n\004sdps\030\002 \003(\t\022\027\n\017sdpMLineIndexes\030\003 \003(\r\022\017\n", "\007sdpMids\030\004 \003(\t\022\014\n\004uuid\030\005 \002(\t\"f\n\004Type\022\r\n\t" + "PRE_OFFER\020\006\022\t\n\005OFFER\020\001\022\n\n\006ANSWER\020\002\022\026\n\022PR" + "OVISIONAL_ANSWER\020\003\022\022\n\016ICE_CANDIDATES\020\004\022\014" + "\n\010END_CALL\020\005\"\245\004\n\024ConfigurationMessage\022E\n" + - "\014closedGroups\030\001 \003(\0132/.signalservice.Conf", + "\014closedGroups\030\001 \003(\0132/.signalservice.Conf" + "igurationMessage.ClosedGroup\022\022\n\nopenGrou" + "ps\030\002 \003(\t\022\023\n\013displayName\030\003 \001(\t\022\026\n\016profile" + "Picture\030\004 \001(\t\022\022\n\nprofileKey\030\005 \001(\014\022=\n\010con" + "tacts\030\006 \003(\0132+.signalservice.Configuratio" + - "nMessage.Contact\032\233\001\n\013ClosedGroup\022\021\n\tpubl" + + "nMessage.Contact\032\233\001\n\013ClosedGroup\022\021\n\tpubl", "icKey\030\001 \001(\014\022\014\n\004name\030\002 \001(\t\0221\n\021encryptionK" + "eyPair\030\003 \001(\0132\026.signalservice.KeyPair\022\017\n\007" + "members\030\004 \003(\014\022\016\n\006admins\030\005 \003(\014\022\027\n\017expirat" + "ionTimer\030\006 \001(\r\032\223\001\n\007Contact\022\021\n\tpublicKey\030" + - "\001 \002(\014\022\014\n\004name\030\002 \002(\t\022\026\n\016profilePicture\030\003 ", + "\001 \002(\014\022\014\n\004name\030\002 \002(\t\022\026\n\016profilePicture\030\003 " + "\001(\t\022\022\n\nprofileKey\030\004 \001(\014\022\022\n\nisApproved\030\005 " + "\001(\010\022\021\n\tisBlocked\030\006 \001(\010\022\024\n\014didApproveMe\030\007" + " \001(\010\"y\n\026MessageRequestResponse\022\022\n\nisAppr" + "oved\030\001 \002(\010\022\022\n\nprofileKey\030\002 \001(\014\0227\n\007profil" + - "e\030\003 \001(\0132&.signalservice.DataMessage.Loki" + + "e\030\003 \001(\0132&.signalservice.DataMessage.Loki", "Profile\"u\n\016ReceiptMessage\0220\n\004type\030\001 \002(\0162" + "\".signalservice.ReceiptMessage.Type\022\021\n\tt" + "imestamp\030\002 \003(\004\"\036\n\004Type\022\014\n\010DELIVERY\020\000\022\010\n\004" + "READ\020\001\"\354\001\n\021AttachmentPointer\022\n\n\002id\030\001 \002(\006" + - "\022\023\n\013contentType\030\002 \001(\t\022\013\n\003key\030\003 \001(\014\022\014\n\004si", + "\022\023\n\013contentType\030\002 \001(\t\022\013\n\003key\030\003 \001(\014\022\014\n\004si" + "ze\030\004 \001(\r\022\021\n\tthumbnail\030\005 \001(\014\022\016\n\006digest\030\006 " + "\001(\014\022\020\n\010fileName\030\007 \001(\t\022\r\n\005flags\030\010 \001(\r\022\r\n\005" + "width\030\t \001(\r\022\016\n\006height\030\n \001(\r\022\017\n\007caption\030\013" + " \001(\t\022\013\n\003url\030e \001(\t\"\032\n\005Flags\022\021\n\rVOICE_MESS" + - "AGE\020\001\"\365\001\n\014GroupContext\022\n\n\002id\030\001 \001(\014\022.\n\004ty" + + "AGE\020\001\"\365\001\n\014GroupContext\022\n\n\002id\030\001 \001(\014\022.\n\004ty", "pe\030\002 \001(\0162 .signalservice.GroupContext.Ty" + "pe\022\014\n\004name\030\003 \001(\t\022\017\n\007members\030\004 \003(\t\0220\n\006ava" + "tar\030\005 \001(\0132 .signalservice.AttachmentPoin" + "ter\022\016\n\006admins\030\006 \003(\t\"H\n\004Type\022\013\n\007UNKNOWN\020\000" + - "\022\n\n\006UPDATE\020\001\022\013\n\007DELIVER\020\002\022\010\n\004QUIT\020\003\022\020\n\014R", + "\022\n\n\006UPDATE\020\001\022\013\n\007DELIVER\020\002\022\010\n\004QUIT\020\003\022\020\n\014R" + "EQUEST_INFO\020\004B3\n\034org.session.libsignal.p" + "rotosB\023SignalServiceProtos" }; @@ -26246,7 +26585,7 @@ public final class SignalServiceProtos { internal_static_signalservice_Content_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_signalservice_Content_descriptor, - new java.lang.String[] { "DataMessage", "CallMessage", "ReceiptMessage", "TypingMessage", "ConfigurationMessage", "DataExtractionNotification", "UnsendRequest", "MessageRequestResponse", }); + new java.lang.String[] { "DataMessage", "CallMessage", "ReceiptMessage", "TypingMessage", "ConfigurationMessage", "DataExtractionNotification", "UnsendRequest", "MessageRequestResponse", "ExpirationType", "ExpirationTimer", "LastDisappearingMessageChangeTimestamp", }); internal_static_signalservice_KeyPair_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_signalservice_KeyPair_fieldAccessorTable = new