From b2e547f9f2d4975f2bfff41c0291852d749de85b Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Fri, 7 Nov 2025 13:34:31 -0800 Subject: [PATCH] Update to libsignal 0.86.1 --- .../securesms/testing/BobClient.kt | 3 ++- .../thoughtcrime/securesms/badges/Badges.kt | 7 +++---- .../securesms/contacts/ContactRepository.java | 13 ++++++------ .../conversation/v2/ConversationRepository.kt | 2 +- .../securesms/database/GroupReceiptTable.kt | 5 ++--- .../securesms/database/MessageTable.kt | 11 +++++----- .../database/model/StickerPackRecord.kt | 4 ++-- .../securesms/jobs/PushGroupSendJob.java | 5 +++-- .../sticker/StickerKeyboardPageFragment.kt | 1 - .../linkpreview/LinkPreviewRepository.java | 7 ++++--- .../logsubmit/LogSectionPermissions.java | 9 +++++---- .../mediaoverview/MediaGalleryAllAdapter.java | 5 +++-- .../mediaoverview/MediaOverviewActivity.java | 7 ++++--- .../messages/SyncMessageProcessor.kt | 1 - .../securesms/net/ChunkedDataFetcher.java | 11 +++++----- .../preferences/SetCurrencyViewModel.java | 11 +++++----- .../bottomsheet/RecipientDialogViewModel.java | 7 ++++--- .../scribbles/ImageEditorFragment.java | 7 ++++--- .../service/webrtc/SignalCallManager.java | 2 +- .../stickers/StickerPackPreviewActivity.java | 6 +++--- .../StickerRolloverTouchListener.java | 5 +++-- .../securesms/stickers/StickerUrl.java | 3 ++- .../securesms/util/ProfileUtil.java | 5 +++-- .../securesms/util/SearchUtil.java | 7 ++++--- ...lerViewConcatenateAdapterStickyHeader.java | 13 ++++++------ .../securesms/util/livedata/LiveDataPair.java | 2 +- .../notifications/MarkReadReceiverTest.kt | 1 - .../securesms/util/SearchUtilTest.java | 3 ++- gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 20 +++++++++---------- .../signalservice/api/calling/CallingApi.kt | 3 +-- .../api/services/DonationsService.java | 5 +++-- .../api/services/ProfileService.java | 3 ++- .../internal/push/PushServiceSocket.java | 5 +++-- .../util/BlacklistingTrustManager.java | 7 ++++--- .../websocket/OkHttpWebSocketConnection.java | 11 +++++----- .../InMemorySignalServiceAccountDataStore.kt | 3 ++- 37 files changed, 119 insertions(+), 103 deletions(-) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/BobClient.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/BobClient.kt index 237f176d9c..e2a5a2809a 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/testing/BobClient.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/testing/BobClient.kt @@ -7,6 +7,7 @@ import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.SessionBuilder import org.signal.libsignal.protocol.SignalProtocolAddress import org.signal.libsignal.protocol.ecc.ECKeyPair +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.groups.state.SenderKeyRecord import org.signal.libsignal.protocol.state.IdentityKeyStore import org.signal.libsignal.protocol.state.IdentityKeyStore.IdentityChange @@ -174,7 +175,7 @@ class BobClient(val serviceId: ServiceId, val e164: String, val identityKeyPair: override fun loadKyberPreKeys(): MutableList = throw UnsupportedOperationException() override fun storeKyberPreKey(kyberPreKeyId: Int, record: KyberPreKeyRecord?) = throw UnsupportedOperationException() override fun containsKyberPreKey(kyberPreKeyId: Int): Boolean = throw UnsupportedOperationException() - override fun markKyberPreKeyUsed(kyberPreKeyId: Int) = throw UnsupportedOperationException() + override fun markKyberPreKeyUsed(kyberPreKeyId: Int, signedPreKeyId: Int, baseKey: ECPublicKey) = throw UnsupportedOperationException() override fun deleteAllStaleOneTimeEcPreKeys(threshold: Long, minCount: Int) = throw UnsupportedOperationException() override fun markAllOneTimeEcPreKeysStaleIfNecessary(staleTime: Long) = throw UnsupportedOperationException() override fun storeSenderKey(sender: SignalProtocolAddress?, distributionId: UUID?, record: SenderKeyRecord?) = throw UnsupportedOperationException() diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/Badges.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/Badges.kt index 9a994b3e90..3f8f43090b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/Badges.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/Badges.kt @@ -9,7 +9,6 @@ import com.google.android.flexbox.FlexboxLayoutManager import com.google.android.flexbox.JustifyContent import org.signal.core.util.DimensionUnit import org.signal.core.util.logging.Log -import org.signal.libsignal.protocol.util.Pair import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.badges.models.Badge.Category.Companion.fromCode @@ -76,7 +75,7 @@ object Badges { "xxxhdpi" -> Pair(getBadgeImageUri(serviceBadge.sprites6[5]), "xxxhdpi") else -> Pair(getBadgeImageUri(serviceBadge.sprites6[3]), "xhdpi") }.also { - Log.d(TAG, "Selected badge density ${it.second()}") + Log.d(TAG, "Selected badge density ${it.second}") } } @@ -121,8 +120,8 @@ object Badges { fromCode(serviceBadge.category), serviceBadge.name, serviceBadge.description, - uriAndDensity.first(), - uriAndDensity.second(), + uriAndDensity.first, + uriAndDensity.second, serviceBadge.expiration?.let { getTimestamp(it) } ?: 0, serviceBadge.isVisible, TimeUnit.SECONDS.toMillis(serviceBadge.duration) diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java index 8ac84d931d..aced9ebba9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java @@ -8,7 +8,6 @@ import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; import org.signal.core.util.CursorUtil; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.contacts.paged.ContactSearchSortOrder; import org.thoughtcrime.securesms.database.RecipientTable; import org.thoughtcrime.securesms.database.SignalDatabase; @@ -20,6 +19,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import kotlin.Pair; + /** * Repository for all contacts. Allows you to filter them via queries. * @@ -140,8 +141,8 @@ public class ContactRepository { for (int i = 0; i < mappers.size(); i++) { Pair pair = mappers.get(i); - positions.put(pair.first(), i); - columnNames[i] = pair.first(); + positions.put(pair.getFirst(), i); + columnNames[i] = pair.getFirst(); } } @@ -168,17 +169,17 @@ public class ContactRepository { @Override public String getString(int columnIndex) { - return String.valueOf(mappers.get(columnIndex).second().get(wrapped)); + return String.valueOf(mappers.get(columnIndex).getSecond().get(wrapped)); } @Override public int getInt(int columnIndex) { - return (int) mappers.get(columnIndex).second().get(wrapped); + return (int) mappers.get(columnIndex).getSecond().get(wrapped); } @Override public long getLong(int columnIndex) { - return (long) mappers.get(columnIndex).second().get(wrapped); + return (long) mappers.get(columnIndex).getSecond().get(wrapped); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt index 82d0997255..aaea5fe687 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationRepository.kt @@ -414,7 +414,7 @@ class ConversationRepository( if (details == null) { -1 } else { - SignalDatabase.messages.getMessagePositionInConversation(threadId, details.second(), details.first()) + SignalDatabase.messages.getMessagePositionInConversation(threadId, details.second, details.first) } }.subscribeOn(Schedulers.io()) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.kt index 118e146be4..6423e0346a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupReceiptTable.kt @@ -16,7 +16,6 @@ import org.signal.core.util.requireLong import org.signal.core.util.select import org.signal.core.util.update import org.signal.core.util.withinTransaction -import org.signal.libsignal.protocol.util.Pair import org.thoughtcrime.securesms.recipients.RecipientId class GroupReceiptTable(context: Context?, databaseHelper: SignalDatabase?) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference { @@ -86,12 +85,12 @@ class GroupReceiptTable(context: Context?, databaseHelper: SignalDatabase?) : Da val mmsMatchPrefix = "$MMS_ID = $mmsId AND" val unidentifiedQueries = SqlUtil.buildCollectionQuery( column = RECIPIENT_ID, - values = results.filter { it.second() }.map { it.first().serialize() }, + values = results.filter { it.second }.map { it.first.serialize() }, prefix = mmsMatchPrefix ) val identifiedQueries = SqlUtil.buildCollectionQuery( column = RECIPIENT_ID, - values = results.filterNot { it.second() }.map { it.first().serialize() }, + values = results.filterNot { it.second }.map { it.first.serialize() }, prefix = mmsMatchPrefix ) writableDatabase.withinTransaction { db -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt index 572e7ccacd..d0b61d4cae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageTable.kt @@ -64,7 +64,6 @@ import org.signal.core.util.toSingleLine import org.signal.core.util.update import org.signal.core.util.withinTransaction import org.signal.libsignal.protocol.IdentityKey -import org.signal.libsignal.protocol.util.Pair import org.thoughtcrime.securesms.attachments.Attachment import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.attachments.DatabaseAttachment @@ -4295,12 +4294,12 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat do { pair = getGroupAddedBy(threadId, lastQuitChecked) - if (pair.first() != null) { - return pair.first() + if (pair.first != null) { + return pair.first } else { - lastQuitChecked = pair.second() + lastQuitChecked = pair.second } - } while (pair.second() != -1L) + } while (pair.second != -1L) return null } @@ -4925,7 +4924,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat } for (expiringMessage in expiringMessages) { - AppDependencies.expiringMessageManager.scheduleDeletion(expiringMessage.first(), true, proposedExpireStarted, expiringMessage.second()) + AppDependencies.expiringMessageManager.scheduleDeletion(expiringMessage.first, true, proposedExpireStarted, expiringMessage.second) } for (threadId in updatedThreads) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.kt index 7275019ad0..6effca80e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.kt @@ -45,8 +45,8 @@ data class StickerPackParams( return (StickerUrl.parseActionUri(uri) ?: StickerUrl.parseShareLink(uri.toString())) .map { parseResult -> StickerPackParams( - id = StickerPackId(parseResult.first()), - key = StickerPackKey(parseResult.second()) + id = StickerPackId(parseResult.first), + key = StickerPackKey(parseResult.second) ) }.orNull() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index f64d237ace..be47074659 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -11,7 +11,6 @@ import com.annimon.stream.Stream; import org.signal.core.util.SetUtil; import org.signal.core.util.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.database.GroupReceiptTable; import org.thoughtcrime.securesms.database.GroupReceiptTable.GroupReceiptInfo; @@ -74,6 +73,8 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; +import kotlin.Pair; + import okio.ByteString; import okio.Utf8; @@ -455,7 +456,7 @@ public final class PushGroupSendJob extends PushSendJob { ProofRequiredException proofRequired = Stream.of(results).filter(r -> r.getProofRequiredFailure() != null).findLast().map(SendMessageResult::getProofRequiredFailure).orElse(null); List successes = Stream.of(results).filter(result -> result.getSuccess() != null).toList(); List> successUnidentifiedStatus = Stream.of(successes).map(result -> new Pair<>(accessList.requireIdByAddress(result.getAddress()), result.getSuccess().isUnidentified())).toList(); - Set successIds = Stream.of(successUnidentifiedStatus).map(Pair::first).collect(Collectors.toSet()); + Set successIds = Stream.of(successUnidentifiedStatus).map(Pair::getFirst).collect(Collectors.toSet()); Set resolvedNetworkFailures = Stream.of(existingNetworkFailures).filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet()); Set resolvedIdentityFailures = Stream.of(existingIdentityMismatches).filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet()); List unregisteredRecipients = Stream.of(results).filter(SendMessageResult::isUnregisteredFailure).map(result -> RecipientId.from(result.getAddress())).toList(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardPageFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardPageFragment.kt index 77978b2054..efffcce60b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardPageFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardPageFragment.kt @@ -11,7 +11,6 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.SmoothScroller import com.bumptech.glide.Glide import com.google.android.material.appbar.AppBarLayout -import org.signal.libsignal.protocol.util.Pair import org.thoughtcrime.securesms.LoggingFragment import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.database.DatabaseObserver diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java index 48c7bacf78..1fb3d46c02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java @@ -17,7 +17,6 @@ import org.signal.core.util.Result; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.InvalidMessageException; -import org.signal.libsignal.protocol.util.Pair; import org.signal.libsignal.zkgroup.VerificationFailedException; import org.signal.libsignal.zkgroup.groups.GroupMasterKey; import org.signal.ringrtc.CallLinkEpoch; @@ -69,6 +68,8 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.ExecutionException; +import kotlin.Pair; + import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; @@ -287,8 +288,8 @@ public class LinkPreviewRepository { SignalExecutors.UNBOUNDED.execute(() -> { try { Pair stickerParams = StickerUrl.parseShareLink(packUrl).orElse(new Pair<>("", "")); - String packIdString = stickerParams.first(); - String packKeyString = stickerParams.second(); + String packIdString = stickerParams.getFirst(); + String packKeyString = stickerParams.getSecond(); byte[] packIdBytes = Hex.fromStringCondensed(packIdString); byte[] packKeyBytes = Hex.fromStringCondensed(packKeyString); diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionPermissions.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionPermissions.java index 61ef5e305d..61d821b6c2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionPermissions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionPermissions.java @@ -6,13 +6,14 @@ import android.content.pm.PackageManager; import androidx.annotation.NonNull; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.BuildConfig; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import kotlin.Pair; + public class LogSectionPermissions implements LogSection { @Override public @NonNull String getTitle() { @@ -35,11 +36,11 @@ public class LogSectionPermissions implements LogSection { return "Unable to retrieve."; } - Collections.sort(status, (o1, o2) -> o1.first().compareTo(o2.first())); + Collections.sort(status, (o1, o2) -> o1.getFirst().compareTo(o2.getFirst())); for (Pair pair : status) { - out.append(pair.first()).append(": "); - out.append(pair.second() ? "YES" : "NO"); + out.append(pair.getFirst()).append(": "); + out.append(pair.getSecond() ? "YES" : "NO"); out.append("\n"); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java index 39c436635d..908a914050 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java @@ -38,7 +38,6 @@ import com.bumptech.glide.RequestManager; import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter; import org.signal.core.util.ByteSize; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; @@ -69,6 +68,8 @@ import java.util.Objects; import java.util.Optional; import java.util.concurrent.TimeUnit; +import kotlin.Pair; + final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { private static final long SELECTION_ANIMATION_DURATION = TimeUnit.MILLISECONDS.toMillis(150); @@ -461,7 +462,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { @Override public void onChanged(Pair fromToPair) { - line1.setText(describe(fromToPair.first(), fromToPair.second())); + line1.setText(describe(fromToPair.getFirst(), fromToPair.getSecond())); } protected @Nullable String getMediaTitle() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewActivity.java index b61bc7997c..5bd6623d8a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewActivity.java @@ -36,7 +36,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.tabs.TabLayout; import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.AnimatingToggle; @@ -53,6 +52,8 @@ import org.signal.core.util.concurrent.SimpleTask; import java.util.ArrayList; import java.util.List; +import kotlin.Pair; + /** * Activity for displaying media attachments in-app */ @@ -276,7 +277,7 @@ public final class MediaOverviewActivity extends PassphraseRequiredActivity { ? MediaOverviewPageFragment.GridMode.FOLLOW_MODEL : MediaOverviewPageFragment.GridMode.FIXED_DETAIL; - return MediaOverviewPageFragment.newInstance(threadId, pages.get(position).first(), gridMode); + return MediaOverviewPageFragment.newInstance(threadId, pages.get(position).getFirst(), gridMode); } @Override @@ -286,7 +287,7 @@ public final class MediaOverviewActivity extends PassphraseRequiredActivity { @Override public CharSequence getPageTitle(int position) { - return pages.get(position).second(); + return pages.get(position).getSecond(); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt index 2f60deb9d1..5f5de9877f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/SyncMessageProcessor.kt @@ -9,7 +9,6 @@ import org.signal.core.util.orNull import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.InvalidKeyException import org.signal.libsignal.protocol.SignalProtocolAddress -import org.signal.libsignal.protocol.util.Pair import org.signal.ringrtc.CallException import org.signal.ringrtc.CallId import org.signal.ringrtc.CallLinkRootKey diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java b/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java index da25312ad1..3fb672b1de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java @@ -9,7 +9,6 @@ import com.bumptech.glide.util.ContentLengthInputStream; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.util.Util; import java.io.FilterInputStream; @@ -21,6 +20,8 @@ import java.util.LinkedList; import java.util.List; import java.util.Optional; +import kotlin.Pair; + import okhttp3.CacheControl; import okhttp3.Call; import okhttp3.OkHttpClient; @@ -137,9 +138,9 @@ public class ChunkedDataFetcher { List requestPattern; try { if (firstChunk.isPresent()) { - requestPattern = Stream.of(getRequestPattern(contentLength - firstChunk.get().second())) - .map(b -> new ByteRange(b.start + firstChunk.get().second(), - b.end + firstChunk.get().second(), + requestPattern = Stream.of(getRequestPattern(contentLength - firstChunk.get().getSecond())) + .map(b -> new ByteRange(b.start + firstChunk.get().getSecond(), + b.end + firstChunk.get().getSecond(), b.ignoreFirst)) .toList(); } else { @@ -156,7 +157,7 @@ public class ChunkedDataFetcher { List streams = new ArrayList<>(controllers.size() + (firstChunk.isPresent() ? 1 : 0)); if (firstChunk.isPresent()) { - streams.add(firstChunk.get().first()); + streams.add(firstChunk.get().getFirst()); } Stream.of(controllers).forEach(compositeController::addController); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/SetCurrencyViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/SetCurrencyViewModel.java index c8854da24c..49155c6ed1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/SetCurrencyViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/SetCurrencyViewModel.java @@ -10,7 +10,6 @@ import androidx.lifecycle.ViewModelProvider; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.settings.SettingHeader; @@ -32,6 +31,8 @@ import java.util.List; import java.util.Locale; import java.util.Objects; +import kotlin.Pair; + import static java.util.Collections.emptyList; import static java.util.Collections.emptyMap; @@ -95,11 +96,11 @@ public final class SetCurrencyViewModel extends ViewModel { private int findSelectedIndex(MappingModelList items) { return Stream.of(items) .mapIndexed(Pair::new) - .filter(p -> p.second() instanceof SingleSelectSetting.Item) - .map(p -> new Pair<>(p.first(), (SingleSelectSetting.Item) p.second())) - .filter(pair -> pair.second().isSelected()) + .filter(p -> p.getSecond() instanceof SingleSelectSetting.Item) + .map(p -> new Pair<>(p.getFirst(), (SingleSelectSetting.Item) p.getSecond())) + .filter(pair -> pair.getSecond().isSelected()) .findFirst() - .map(Pair::first) + .map(Pair::getFirst) .orElse(-1); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java index d63933c5b1..f697be8f3f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java @@ -18,7 +18,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.ThreadUtil; import org.signal.core.util.concurrent.SignalExecutors; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.BlockUnblockDialog; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.settings.conversation.ConversationSettingsActivity; @@ -46,6 +45,8 @@ import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import java.util.Objects; +import kotlin.Pair; + import io.reactivex.rxjava3.disposables.CompositeDisposable; import io.reactivex.rxjava3.disposables.Disposable; @@ -83,8 +84,8 @@ final class RecipientDialogViewModel extends ViewModel { LiveData recipientMemberLevel = Transformations.switchMap(recipient, source::getMemberLevel); adminActionStatus = LiveDataUtil.combineLatest(localStatus, recipientMemberLevel, (statuses, memberLevel) -> { - boolean localAdmin = statuses.first(); - boolean isLinkActive = statuses.second(); + boolean localAdmin = statuses.getFirst(); + boolean isLinkActive = statuses.getSecond(); boolean inGroup = memberLevel.isInGroup(); boolean recipientAdmin = memberLevel == GroupTable.MemberLevel.ADMINISTRATOR; diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java index 89570ee72a..72f259381c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java @@ -45,7 +45,6 @@ import org.signal.imageeditor.core.model.EditorModel; import org.signal.imageeditor.core.renderers.BezierDrawingRenderer; import org.signal.imageeditor.core.renderers.FaceBlurRenderer; import org.signal.imageeditor.core.renderers.MultiLineTextRenderer; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.animation.ResizeAnimation; import org.thoughtcrime.securesms.attachments.AttachmentSaver; @@ -76,6 +75,8 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import kotlin.Pair; + import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.schedulers.Schedulers; @@ -579,8 +580,8 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu Matrix inverseCropPosition = model.getInverseCropPosition(); if (cachedFaceDetection != null) { - if (cachedFaceDetection.first().equals(getUri()) && cachedFaceDetection.second().position.equals(inverseCropPosition)) { - renderFaceBlurs(cachedFaceDetection.second()); + if (cachedFaceDetection.getFirst().equals(getUri()) && cachedFaceDetection.getSecond().position.equals(inverseCropPosition)) { + renderFaceBlurs(cachedFaceDetection.getSecond()); imageEditorHud.showBlurToast(); return; } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java index d5f8dd8589..a8035d8bb3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java @@ -16,7 +16,6 @@ import com.annimon.stream.Stream; import org.greenrobot.eventbus.EventBus; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.signal.libsignal.zkgroup.GenericServerPublicParams; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.VerificationFailedException; @@ -115,6 +114,7 @@ import io.reactivex.rxjava3.core.Flowable; import io.reactivex.rxjava3.schedulers.Schedulers; import kotlin.jvm.functions.Function1; import kotlin.text.Charsets; +import kotlin.Pair; import static org.thoughtcrime.securesms.events.WebRtcViewModel.GroupCallState.IDLE; import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.CALL_INCOMING; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java index 5a556cd0c3..0ccaeb9e9c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java @@ -20,7 +20,6 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; import org.signal.core.util.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment; @@ -37,6 +36,7 @@ import org.whispersystems.signalservice.api.util.OptionalUtil; import java.util.Collections; import java.util.Optional; +import kotlin.Pair; /** * Shows the contents of a pack and allows the user to install it (if not installed) or remove it @@ -92,8 +92,8 @@ public final class StickerPackPreviewActivity extends PassphraseRequiredActivity return; } - String packId = stickerParams.get().first(); - String packKey = stickerParams.get().second(); + String packId = stickerParams.get().getFirst(); + String packKey = stickerParams.get().getSecond(); initToolbar(); initView(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerRolloverTouchListener.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerRolloverTouchListener.java index 024e81d82d..23825a3db2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerRolloverTouchListener.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerRolloverTouchListener.java @@ -11,13 +11,14 @@ import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.RequestManager; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.keyboard.sticker.KeyboardStickerListAdapter; import org.thoughtcrime.securesms.util.ViewUtil; import java.lang.ref.WeakReference; +import kotlin.Pair; + public class StickerRolloverTouchListener implements RecyclerView.OnItemTouchListener { private final StickerPreviewPopup popup; private final RolloverEventListener eventListener; @@ -95,7 +96,7 @@ public class StickerRolloverTouchListener implements RecyclerView.OnItemTouchLis Pair stickerData = stickerRetriever.getStickerDataFromView(view); if (stickerData != null) { - showSticker(recyclerView, stickerData.first(), stickerData.second()); + showSticker(recyclerView, stickerData.getFirst(), stickerData.getSecond()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerUrl.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerUrl.java index 227909e6b9..155a2b95f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerUrl.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerUrl.java @@ -7,13 +7,14 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.core.util.Hex; -import org.signal.libsignal.protocol.util.Pair; import org.whispersystems.signalservice.api.util.OptionalUtil; import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; +import kotlin.Pair; + /** * Manages creating and parsing the various sticker pack URLs. */ diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java index 72585325d9..0044c6b123 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java @@ -11,7 +11,6 @@ import org.signal.core.util.logging.Log; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.IdentityKeyPair; import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.util.Pair; import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential; import org.signal.libsignal.zkgroup.profiles.ProfileKey; @@ -57,6 +56,8 @@ import java.util.Locale; import java.util.Optional; import java.util.stream.Collectors; +import kotlin.Pair; + import io.reactivex.rxjava3.core.Single; /** @@ -112,7 +113,7 @@ public final class ProfileUtil { throws IOException { Pair> response = retrieveProfile(context, recipient, requestType, allowUnidentifiedAccess).blockingGet(); - return new ProfileService.ProfileResponseProcessor(response.second()).getResultOrThrow(); + return new ProfileService.ProfileResponseProcessor(response.getSecond()).getResultOrThrow(); } @WorkerThread diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SearchUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SearchUtil.java index 0eb23a3363..33b0f29f0f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SearchUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SearchUtil.java @@ -12,7 +12,6 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; import org.signal.core.util.StringUtil; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.components.spoiler.SpoilerAnnotation; import java.security.InvalidParameterException; @@ -21,6 +20,8 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; +import kotlin.Pair; + public class SearchUtil { public static final int STRICT = 0; @@ -73,9 +74,9 @@ public class SearchUtil { for (Pair range : ranges) { CharacterStyle[] styles = styleFactory.createStyles(); for (CharacterStyle style : styles) { - List annotations = SpoilerAnnotation.getSpoilerAnnotations(spanned, range.first(), range.second()); + List annotations = SpoilerAnnotation.getSpoilerAnnotations(spanned, range.getFirst(), range.getSecond()); if (annotations.isEmpty()) { - spanned.setSpan(style, range.first(), range.second(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + spanned.setSpan(style, range.getFirst(), range.getSecond(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/RecyclerViewConcatenateAdapterStickyHeader.java b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/RecyclerViewConcatenateAdapterStickyHeader.java index 1764d9f1de..90d3451658 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/RecyclerViewConcatenateAdapterStickyHeader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/RecyclerViewConcatenateAdapterStickyHeader.java @@ -4,12 +4,13 @@ import android.view.ViewGroup; import androidx.recyclerview.widget.RecyclerView; -import org.signal.libsignal.protocol.util.Pair; import org.thoughtcrime.securesms.components.RecyclerViewFastScroller; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import java.util.Optional; +import kotlin.Pair; + public final class RecyclerViewConcatenateAdapterStickyHeader extends RecyclerViewConcatenateAdapter implements StickyHeaderDecoration.StickyHeaderAdapter, @@ -18,12 +19,12 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle @Override public long getHeaderId(int position) { - return getForPosition(position).map(p -> p.first().getHeaderId(p.second())).orElse(-1L); + return getForPosition(position).map(p -> p.getFirst().getHeaderId(p.getSecond())).orElse(-1L); } @Override public RecyclerView.ViewHolder onCreateHeaderViewHolder(ViewGroup parent, int position, int type) { - return getForPosition(position).map(p -> p.first().onCreateHeaderViewHolder(parent, p.second(), type)).orElse(null); + return getForPosition(position).map(p -> p.getFirst().onCreateHeaderViewHolder(parent, p.getSecond(), type)).orElse(null); } @Override @@ -33,7 +34,7 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle if (forPosition.isPresent()) { Pair stickyHeaderAdapterIntegerPair = forPosition.get(); //noinspection unchecked - stickyHeaderAdapterIntegerPair.first().onBindHeaderViewHolder(viewHolder, stickyHeaderAdapterIntegerPair.second(), type); + stickyHeaderAdapterIntegerPair.getFirst().onBindHeaderViewHolder(viewHolder, stickyHeaderAdapterIntegerPair.getSecond(), type); } } @@ -42,8 +43,8 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle Optional> forPosition = getForPosition(position); return forPosition.map(a -> { - if (a.first() instanceof RecyclerViewFastScroller.FastScrollAdapter) { - return ((RecyclerViewFastScroller.FastScrollAdapter) a.first()).getBubbleText(a.second()); + if (a.getFirst() instanceof RecyclerViewFastScroller.FastScrollAdapter) { + return ((RecyclerViewFastScroller.FastScrollAdapter) a.getFirst()).getBubbleText(a.getSecond()); } else { return ""; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/livedata/LiveDataPair.java b/app/src/main/java/org/thoughtcrime/securesms/util/livedata/LiveDataPair.java index 9e398d07fa..234b996444 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/livedata/LiveDataPair.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/livedata/LiveDataPair.java @@ -5,7 +5,7 @@ import androidx.annotation.Nullable; import androidx.lifecycle.LiveData; import androidx.lifecycle.MediatorLiveData; -import org.signal.libsignal.protocol.util.Pair; +import kotlin.Pair; public final class LiveDataPair extends MediatorLiveData> { private A a; diff --git a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.kt b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.kt index 1a7bd4fb56..720830a31c 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.kt @@ -13,7 +13,6 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config -import org.signal.libsignal.protocol.util.Pair import org.thoughtcrime.securesms.database.MessageTable.ExpirationInfo import org.thoughtcrime.securesms.database.MessageTable.MarkedMessageInfo import org.thoughtcrime.securesms.database.MessageTable.SyncMessageId diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/SearchUtilTest.java b/app/src/test/java/org/thoughtcrime/securesms/util/SearchUtilTest.java index 9b70920068..36022cfceb 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/SearchUtilTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/util/SearchUtilTest.java @@ -1,13 +1,14 @@ package org.thoughtcrime.securesms.util; import org.junit.Test; -import org.signal.libsignal.protocol.util.Pair; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Locale; +import kotlin.Pair; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 582a879016..3ad345960e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,7 @@ androidx-window = "1.3.0" glide = "4.15.1" gradle = "8.9.0" kotlin = "2.2.20" -libsignal-client = "0.85.6" +libsignal-client = "0.86.1" mp4parser = "1.9.39" android-gradle-plugin = "8.10.1" accompanist = "0.28.0" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 964de7607f..eb2cd3add7 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -12820,20 +12820,20 @@ https://docs.gradle.org/current/userguide/dependency_verification.html - - - + + + - - + + - - - + + + - - + + diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/calling/CallingApi.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/calling/CallingApi.kt index cf81277122..c58096670e 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/calling/CallingApi.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/calling/CallingApi.kt @@ -18,7 +18,6 @@ import org.whispersystems.signalservice.internal.push.CreateCallLinkAuthResponse import org.whispersystems.signalservice.internal.push.GetCallingRelaysResponse import org.whispersystems.signalservice.internal.push.PushServiceSocket import org.whispersystems.signalservice.internal.websocket.WebSocketRequestMessage -import org.signal.libsignal.protocol.util.Pair as LibSignalPair /** * Provide calling specific network apis. @@ -73,7 +72,7 @@ class CallingApi( requestId: Long, url: String, httpMethod: String, - headers: List>?, + headers: List>?, body: ByteArray? ): NetworkResult { return when (val result = NetworkResult.fromFetch { pushServiceSocket.makeCallingRequest(requestId, url, httpMethod, headers, body) }) { diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/DonationsService.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/DonationsService.java index 332852bd2d..96ed06aabc 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/DonationsService.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/DonationsService.java @@ -1,7 +1,6 @@ package org.whispersystems.signalservice.api.services; import org.signal.libsignal.protocol.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialPresentation; import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialRequest; import org.signal.libsignal.zkgroup.receipts.ReceiptCredentialResponse; @@ -28,6 +27,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Lock; +import kotlin.Pair; + import io.reactivex.rxjava3.annotations.NonNull; /** @@ -384,7 +385,7 @@ public class DonationsService { private ServiceResponse wrapInServiceResponse(Producer producer) { try { Pair responseAndCode = producer.produce(); - return ServiceResponse.forResult(responseAndCode.first(), responseAndCode.second(), null); + return ServiceResponse.forResult(responseAndCode.getFirst(), responseAndCode.getSecond(), null); } catch (NonSuccessfulResponseCodeException e) { Log.w(TAG, "Bad response code from server.", e); return ServiceResponse.forApplicationError(e, e.code, e.getStringBody()); diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/ProfileService.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/ProfileService.java index b89cbc2283..46270131a9 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/ProfileService.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/services/ProfileService.java @@ -2,7 +2,6 @@ package org.whispersystems.signalservice.api.services; import org.signal.libsignal.protocol.IdentityKey; import org.signal.libsignal.protocol.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.signal.libsignal.zkgroup.VerificationFailedException; import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations; import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential; @@ -43,6 +42,8 @@ import java.util.stream.Collectors; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import kotlin.Pair; + import io.reactivex.rxjava3.annotations.NonNull; import io.reactivex.rxjava3.core.Single; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java index 6384c7ff74..f08f5c318e 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java @@ -13,7 +13,6 @@ import com.squareup.wire.Message; import org.signal.core.util.Base64; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.signal.storageservice.protos.groups.AvatarUploadAttributes; import org.signal.storageservice.protos.groups.Group; import org.signal.storageservice.protos.groups.GroupChange; @@ -134,6 +133,8 @@ import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; +import kotlin.Pair; + import okhttp3.Call; import okhttp3.ConnectionPool; import okhttp3.ConnectionSpec; @@ -1396,7 +1397,7 @@ public class PushServiceSocket { if (headers != null) { for (Pair header : headers) { - builder.addHeader(header.first(), header.second()); + builder.addHeader(header.getFirst(), header.getSecond()); } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/BlacklistingTrustManager.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/BlacklistingTrustManager.java index e98ab475ce..9e8d7a9a0f 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/BlacklistingTrustManager.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/BlacklistingTrustManager.java @@ -6,7 +6,6 @@ package org.whispersystems.signalservice.internal.util; -import org.signal.libsignal.protocol.util.Pair; import org.whispersystems.signalservice.api.push.TrustStore; import java.io.IOException; @@ -24,6 +23,8 @@ import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import javax.net.ssl.X509TrustManager; +import kotlin.Pair; + /** * Trust manager that defers to a system X509 trust manager, and * additionally rejects certificates if they have a blacklisted @@ -87,8 +88,8 @@ public class BlacklistingTrustManager implements X509TrustManager { for (X509Certificate certificate : chain) { for (Pair blacklistedSerial : BLACKLIST) { - if (certificate.getIssuerDN().getName().equals(blacklistedSerial.first()) && - certificate.getSerialNumber().equals(blacklistedSerial.second())) + if (certificate.getIssuerDN().getName().equals(blacklistedSerial.getFirst()) && + certificate.getSerialNumber().equals(blacklistedSerial.getSecond())) { throw new CertificateException("Blacklisted Serial: " + certificate.getSerialNumber()); } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection.java index e05eb14f47..94f04e9563 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection.java @@ -2,7 +2,6 @@ package org.whispersystems.signalservice.internal.websocket; import org.jetbrains.annotations.NotNull; import org.signal.libsignal.protocol.logging.Log; -import org.signal.libsignal.protocol.util.Pair; import org.whispersystems.signalservice.api.push.TrustStore; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.api.util.CredentialsProvider; @@ -37,6 +36,8 @@ import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; +import kotlin.Pair; + import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.schedulers.Schedulers; @@ -128,13 +129,13 @@ public class OkHttpWebSocketConnection extends WebSocketListener implements WebS if (client == null) { Pair connectionInfo = getConnectionInfo(); - SignalServiceUrl serviceUrl = connectionInfo.first(); - String wsUri = connectionInfo.second(); + SignalServiceUrl serviceUrl = connectionInfo.getFirst(); + String wsUri = connectionInfo.getSecond(); Pair socketFactory = createTlsSocketFactory(trustStore); - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().sslSocketFactory(new Tls12SocketFactory(socketFactory.first()), - socketFactory.second()) + OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder().sslSocketFactory(new Tls12SocketFactory(socketFactory.getFirst()), + socketFactory.getSecond()) .connectionSpecs(serviceUrl.getConnectionSpecs().orElse(Util.immutableList(ConnectionSpec.RESTRICTED_TLS))) .readTimeout(KEEPALIVE_FREQUENCY_SECONDS + 10, TimeUnit.SECONDS) .dns(dns.orElse(Dns.SYSTEM)) diff --git a/microbenchmark/src/androidTest/java/org/signal/util/InMemorySignalServiceAccountDataStore.kt b/microbenchmark/src/androidTest/java/org/signal/util/InMemorySignalServiceAccountDataStore.kt index cc23a386e8..4da4ed5918 100644 --- a/microbenchmark/src/androidTest/java/org/signal/util/InMemorySignalServiceAccountDataStore.kt +++ b/microbenchmark/src/androidTest/java/org/signal/util/InMemorySignalServiceAccountDataStore.kt @@ -1,5 +1,6 @@ package org.signal.util +import org.signal.libsignal.protocol.ecc.ECPublicKey import org.signal.libsignal.protocol.IdentityKey import org.signal.libsignal.protocol.IdentityKeyPair import org.signal.libsignal.protocol.SignalProtocolAddress @@ -142,7 +143,7 @@ class InMemorySignalServiceAccountDataStore : SignalServiceAccountDataStore { return kyberPreKeys.containsKey(kyberPreKeyId) } - override fun markKyberPreKeyUsed(kyberPreKeyId: Int) { + override fun markKyberPreKeyUsed(kyberPreKeyId: Int, signedPreKeyId: Int, baseKey: ECPublicKey) { kyberPreKeys.remove(kyberPreKeyId) }