diff --git a/.gitattributes b/.gitattributes index 47f6d98b40..03e65f1908 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,8 @@ -*.ai binary +# MOLLY: Reduce the number of merge conflicts. +# +# Note: also need: +# git config merge.ours.driver true +# git config merge.theirs.driver 'cp -- %B %A' + +/app/src/main/res/values-*/strings.xml merge=theirs +/gradle/verification-metadata.xml merge=union diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 007302c532..ff5cfed736 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -9,7 +9,7 @@ plugins { id("app.cash.exhaustive") id("kotlin-parcelize") id("com.squareup.wire") - id("translations") + id("molly") id("licenses") } @@ -19,8 +19,8 @@ apply { from("fix-profm.gradle") } -val canonicalVersionCode = 1410 -val canonicalVersionName = "7.4.2" +val canonicalVersionCode = 1416 +val canonicalVersionName = "7.6.2" val mollyRevision = 1 val postFixSize = 100 @@ -177,7 +177,6 @@ android { buildConfigField("String", "SIGNAL_CDN3_URL", "\"https://cdn3.signal.org\"") buildConfigField("String", "SIGNAL_CDSI_URL", "\"https://cdsi.signal.org\"") buildConfigField("String", "SIGNAL_SERVICE_STATUS_URL", "\"uptime.signal.org\"") - buildConfigField("String", "SIGNAL_KEY_BACKUP_URL", "\"https://api.backup.signal.org\"") buildConfigField("String", "SIGNAL_SVR2_URL", "\"https://svr2.signal.org\"") buildConfigField("String", "SIGNAL_SFU_URL", "\"https://sfu.voip.signal.org\"") buildConfigField("String", "SIGNAL_STAGING_SFU_URL", "\"https://sfu.staging.voip.signal.org\"") @@ -332,7 +331,6 @@ android { buildConfigField("String", "SIGNAL_CDN2_URL", "\"https://cdn2-staging.signal.org\"") buildConfigField("String", "SIGNAL_CDN3_URL", "\"https://cdn3-staging.signal.org\"") buildConfigField("String", "SIGNAL_CDSI_URL", "\"https://cdsi.staging.signal.org\"") - buildConfigField("String", "SIGNAL_KEY_BACKUP_URL", "\"https://api-staging.backup.signal.org\"") buildConfigField("String", "SIGNAL_SVR2_URL", "\"https://svr2.staging.signal.org\"") buildConfigField("String", "SVR2_MRENCLAVE", "\"acb1973aa0bbbd14b3b4e06f145497d948fd4a98efc500fcce363b3b743ec482\"") buildConfigField("String", "UNIDENTIFIED_SENDER_TRUST_ROOT", "\"BbqY1DzohE4NUZoVF+L18oUPrK3kILllLEJh2UnPSsEx\"") diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ImportExportTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ImportExportTest.kt index f7d55cf983..59134e6eca 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ImportExportTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/backup/v2/ImportExportTest.kt @@ -9,6 +9,7 @@ import android.Manifest import android.app.UiAutomation import android.os.Environment import androidx.test.platform.app.InstrumentationRegistry +import io.mockk.InternalPlatformDsl.toArray import okio.ByteString.Companion.toByteString import org.junit.Assert import org.junit.Before @@ -23,6 +24,7 @@ import org.thoughtcrime.securesms.backup.v2.proto.AccountData import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.BodyRange import org.thoughtcrime.securesms.backup.v2.proto.Call +import org.thoughtcrime.securesms.backup.v2.proto.CallChatUpdate import org.thoughtcrime.securesms.backup.v2.proto.Chat import org.thoughtcrime.securesms.backup.v2.proto.ChatItem import org.thoughtcrime.securesms.backup.v2.proto.ChatUpdateMessage @@ -32,6 +34,8 @@ import org.thoughtcrime.securesms.backup.v2.proto.ExpirationTimerChatUpdate import org.thoughtcrime.securesms.backup.v2.proto.FilePointer import org.thoughtcrime.securesms.backup.v2.proto.Frame import org.thoughtcrime.securesms.backup.v2.proto.Group +import org.thoughtcrime.securesms.backup.v2.proto.GroupCallChatUpdate +import org.thoughtcrime.securesms.backup.v2.proto.IndividualCallChatUpdate import org.thoughtcrime.securesms.backup.v2.proto.MessageAttachment import org.thoughtcrime.securesms.backup.v2.proto.ProfileChangeChatUpdate import org.thoughtcrime.securesms.backup.v2.proto.Quote @@ -668,12 +672,62 @@ class ImportExportTest { ) } + var sentTime = 0L + val individualCallChatItems = individualCalls.map { call -> + ChatItem( + chatId = 1, + authorId = selfRecipient.id, + dateSent = sentTime++, + sms = false, + incoming = ChatItem.IncomingMessageDetails( + dateReceived = sentTime + 1, + dateServerSent = sentTime, + read = true, + sealedSender = true + ), + updateMessage = ChatUpdateMessage( + callingMessage = CallChatUpdate( + callMessage = IndividualCallChatUpdate( + type = IndividualCallChatUpdate.Type.INCOMING_AUDIO_CALL + ) + ) + ) + ) + }.toTypedArray() + + val startedAci = TestRecipientUtils.nextAci().toByteString() + val groupCallChatItems = groupCalls.map { call -> + ChatItem( + chatId = 1, + authorId = selfRecipient.id, + dateSent = sentTime++, + sms = false, + incoming = ChatItem.IncomingMessageDetails( + dateReceived = sentTime + 1, + dateServerSent = sentTime, + read = true, + sealedSender = true + ), + updateMessage = ChatUpdateMessage( + callingMessage = CallChatUpdate( + groupCall = GroupCallChatUpdate( + startedCallAci = startedAci, + startedCallTimestamp = 0, + endedCallTimestamp = 0, + localUserJoined = GroupCallChatUpdate.LocalUserJoined.JOINED, + inCallAcis = emptyList() + ) + ) + ) + ) + }.toTypedArray() + importExport( *standardFrames, Recipient( id = 3, contact = Contact( - aci = TestRecipientUtils.nextAci().toByteString(), + aci = startedAci, pni = TestRecipientUtils.nextPni().toByteString(), username = "cool.01", e164 = 141255501234, @@ -698,8 +752,21 @@ class ImportExportTest { name = "Cool test group" ) ), + Chat( + id = 1, + recipientId = 3, + archived = true, + pinnedOrder = 1, + expirationTimerMs = 1.days.inWholeMilliseconds, + muteUntilMs = System.currentTimeMillis(), + markedUnread = true, + dontNotifyForMentionsIfMuted = true, + wallpaper = null + ), *individualCalls.toArray(), - *groupCalls.toArray() + *groupCalls.toArray(), + *individualCallChatItems, + *groupCallChatItems ) } @@ -1008,17 +1075,47 @@ class ImportExportTest { attachmentLocator = FilePointer.AttachmentLocator( cdnKey = "coolCdnKey", cdnNumber = 2, - uploadTimestamp = System.currentTimeMillis() + uploadTimestamp = System.currentTimeMillis(), + key = (1..32).map { it.toByte() }.toByteArray().toByteString(), + size = 12345, + digest = (1..32).map { it.toByte() }.toByteArray().toByteString() ), - key = (1..32).map { it.toByte() }.toByteArray().toByteString(), contentType = "image/png", - size = 12345, fileName = "very_cool_picture.png", width = 100, height = 200, caption = "Love this cool picture!", incrementalMacChunkSize = 0 - ) + ), + wasDownloaded = true + ), + MessageAttachment( + pointer = FilePointer( + invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator(), + contentType = "image/png", + width = 100, + height = 200, + caption = "Love this cool picture! Too bad u cant download it", + incrementalMacChunkSize = 0 + ), + wasDownloaded = false + ), + MessageAttachment( + pointer = FilePointer( + backupLocator = FilePointer.BackupLocator( + "digestherebutimlazy", + cdnNumber = 3, + key = (1..32).map { it.toByte() }.toByteArray().toByteString(), + digest = (1..64).map { it.toByte() }.toByteArray().toByteString(), + size = 12345 + ), + contentType = "image/png", + width = 100, + height = 200, + caption = "Love this cool picture! Too bad u cant download it", + incrementalMacChunkSize = 0 + ), + wasDownloaded = true ) ) ) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/ConversationItemPreviewer.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/ConversationItemPreviewer.kt index 16f6ca75af..2ea7db24ab 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/ConversationItemPreviewer.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/ConversationItemPreviewer.kt @@ -7,6 +7,7 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.signal.core.util.ThreadUtil +import org.thoughtcrime.securesms.attachments.Cdn import org.thoughtcrime.securesms.attachments.PointerAttachment import org.thoughtcrime.securesms.conversation.v2.ConversationActivity import org.thoughtcrime.securesms.database.MessageType @@ -15,7 +16,6 @@ import org.thoughtcrime.securesms.mms.IncomingMessage import org.thoughtcrime.securesms.mms.OutgoingMessage import org.thoughtcrime.securesms.profiles.ProfileName import org.thoughtcrime.securesms.recipients.Recipient -import org.thoughtcrime.securesms.releasechannel.ReleaseChannel import org.thoughtcrime.securesms.testing.SignalActivityRule import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId @@ -137,7 +137,7 @@ class ConversationItemPreviewer { private fun attachment(): SignalServiceAttachmentPointer { return SignalServiceAttachmentPointer( - ReleaseChannel.CDN_NUMBER, + Cdn.CDN_3.cdnNumber, SignalServiceAttachmentRemoteId.from(""), "image/webp", null, diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt index 8e3937b20f..2280a45fea 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShapeTest.kt @@ -324,5 +324,7 @@ class V2ConversationItemShapeTest { override fun onReportSpamLearnMoreClicked() = Unit override fun onMessageRequestAcceptOptionsClicked() = Unit + + override fun onItemDoubleClick(item: MultiselectPart) = Unit } } diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt index 54f1138ad3..d5f8015ce2 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/AttachmentTableTest_deduping.kt @@ -14,6 +14,7 @@ import org.junit.runner.RunWith import org.signal.core.util.Base64 import org.signal.core.util.update import org.thoughtcrime.securesms.attachments.AttachmentId +import org.thoughtcrime.securesms.attachments.Cdn import org.thoughtcrime.securesms.attachments.PointerAttachment import org.thoughtcrime.securesms.database.AttachmentTable.TransformProperties import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -742,7 +743,7 @@ class AttachmentTableTest_deduping { assertArrayEquals(lhsAttachment.remoteDigest, rhsAttachment.remoteDigest) assertArrayEquals(lhsAttachment.incrementalDigest, rhsAttachment.incrementalDigest) assertEquals(lhsAttachment.incrementalMacChunkSize, rhsAttachment.incrementalMacChunkSize) - assertEquals(lhsAttachment.cdnNumber, rhsAttachment.cdnNumber) + assertEquals(lhsAttachment.cdn.cdnNumber, rhsAttachment.cdn.cdnNumber) } fun assertDoesNotHaveRemoteFields(attachmentId: AttachmentId) { @@ -751,7 +752,7 @@ class AttachmentTableTest_deduping { assertNull(databaseAttachment.remoteLocation) assertNull(databaseAttachment.remoteDigest) assertNull(databaseAttachment.remoteKey) - assertEquals(0, databaseAttachment.cdnNumber) + assertEquals(0, databaseAttachment.cdn.cdnNumber) } fun assertSkipTransform(attachmentId: AttachmentId, state: Boolean) { @@ -776,7 +777,7 @@ class AttachmentTableTest_deduping { AttachmentTable.TRANSFER_PROGRESS_DONE, databaseAttachment.size, // size null, - 3, // cdnNumber + Cdn.CDN_3, // cdnNumber location, key, digest, diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/NameCollisionTablesTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/NameCollisionTablesTest.kt new file mode 100644 index 0000000000..ddb83494c5 --- /dev/null +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/NameCollisionTablesTest.kt @@ -0,0 +1,239 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.database + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.signal.storageservice.protos.groups.Member +import org.signal.storageservice.protos.groups.local.DecryptedMember +import org.thoughtcrime.securesms.mms.IncomingMessage +import org.thoughtcrime.securesms.profiles.ProfileName +import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.recipients.RecipientId +import org.thoughtcrime.securesms.testing.GroupTestingUtils +import org.thoughtcrime.securesms.testing.SignalActivityRule +import org.thoughtcrime.securesms.testing.assertIsSize + +@RunWith(AndroidJUnit4::class) +class NameCollisionTablesTest { + + @get:Rule + val harness = SignalActivityRule(createGroup = true) + + private lateinit var alice: RecipientId + private lateinit var bob: RecipientId + private lateinit var charlie: RecipientId + + @Before + fun setUp() { + alice = setUpRecipient(harness.others[0]) + bob = setUpRecipient(harness.others[1]) + charlie = setUpRecipient(harness.others[2]) + } + + @Test + fun givenAUserWithAThreadIdButNoConflicts_whenIGetCollisionsForThreadRecipient_thenIExpectNoCollisions() { + val threadRecipientId = alice + SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(threadRecipientId)) + val actual = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(threadRecipientId) + + actual assertIsSize 0 + } + + @Test + fun givenTwoUsers_whenOneChangesTheirProfileNameToMatchTheOther_thenIExpectANameCollision() { + setProfileName(alice, ProfileName.fromParts("Alice", "Android")) + setProfileName(bob, ProfileName.fromParts("Bob", "Android")) + setProfileName(alice, ProfileName.fromParts("Bob", "Android")) + + val actualAlice = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(alice) + val actualBob = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(bob) + + actualAlice assertIsSize 2 + actualBob assertIsSize 2 + } + + @Test + fun givenTwoUsersWithANameCollisions_whenOneChangesToADifferentName_thenIExpectNoNameCollisions() { + setProfileName(alice, ProfileName.fromParts("Bob", "Android")) + setProfileName(bob, ProfileName.fromParts("Bob", "Android")) + setProfileName(alice, ProfileName.fromParts("Alice", "Android")) + + val actualAlice = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(alice) + val actualBob = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(bob) + + actualAlice assertIsSize 0 + actualBob assertIsSize 0 + } + + @Test + fun givenThreeUsersWithANameCollisions_whenOneChangesToADifferentName_thenIExpectTwoNameCollisions() { + setProfileName(alice, ProfileName.fromParts("Bob", "Android")) + setProfileName(bob, ProfileName.fromParts("Bob", "Android")) + setProfileName(charlie, ProfileName.fromParts("Bob", "Android")) + setProfileName(alice, ProfileName.fromParts("Alice", "Android")) + + val actualAlice = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(alice) + val actualBob = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(bob) + val actualCharlie = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(charlie) + + actualAlice assertIsSize 0 + actualBob assertIsSize 2 + actualCharlie assertIsSize 2 + } + + @Test + fun givenTwoUsersWithADismissedNameCollision_whenOneChangesToADifferentNameAndBack_thenIExpectANameCollision() { + setProfileName(alice, ProfileName.fromParts("Bob", "Android")) + setProfileName(bob, ProfileName.fromParts("Bob", "Android")) + SignalDatabase.nameCollisions.markCollisionsForThreadRecipientDismissed(alice) + + setProfileName(alice, ProfileName.fromParts("Alice", "Android")) + setProfileName(alice, ProfileName.fromParts("Bob", "Android")) + + val actualAlice = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(alice) + + actualAlice assertIsSize 2 + } + + @Test + fun givenADismissedNameCollisionForAlice_whenIGetNameCollisionsForAlice_thenIExpectNoNameCollisions() { + setProfileName(alice, ProfileName.fromParts("Bob", "Android")) + setProfileName(bob, ProfileName.fromParts("Bob", "Android")) + SignalDatabase.nameCollisions.markCollisionsForThreadRecipientDismissed(alice) + + val actualCollisions = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(alice) + + actualCollisions assertIsSize 0 + } + + @Test + fun givenADismissedNameCollisionForAliceThatIUpdate_whenIGetNameCollisionsForAlice_thenIExpectNoNameCollisions() { + SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(alice)) + + setProfileName(alice, ProfileName.fromParts("Bob", "Android")) + setProfileName(bob, ProfileName.fromParts("Bob", "Android")) + SignalDatabase.nameCollisions.markCollisionsForThreadRecipientDismissed(alice) + setProfileName(bob, ProfileName.fromParts("Bob", "Android")) + + val actualCollisions = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(alice) + + actualCollisions assertIsSize 0 + } + + @Test + fun givenADismissedNameCollisionForAlice_whenIGetNameCollisionsForBob_thenIExpectANameCollisionWithTwoEntries() { + SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(alice)) + + setProfileName(alice, ProfileName.fromParts("Bob", "Android")) + setProfileName(bob, ProfileName.fromParts("Bob", "Android")) + SignalDatabase.nameCollisions.markCollisionsForThreadRecipientDismissed(alice) + + val actualCollisions = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(bob) + + actualCollisions assertIsSize 2 + } + + @Test + fun givenAGroupWithAliceAndBob_whenIInsertNameChangeMessageForAlice_thenIExpectAGroupNameCollision() { + val alice = Recipient.resolved(alice) + val bob = Recipient.resolved(bob) + val info = createGroup() + + setProfileName(alice.id, ProfileName.fromParts("Bob", "Android")) + setProfileName(bob.id, ProfileName.fromParts("Bob", "Android")) + + SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(info.recipientId)) + SignalDatabase.messages.insertProfileNameChangeMessages(alice, "Bob Android", "Alice Android") + + val collisions = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(info.recipientId) + + collisions assertIsSize 2 + } + + @Test + fun givenAGroupWithAliceAndBobWithDismissedCollision_whenIInsertNameChangeMessageForAlice_thenIExpectAGroupNameCollision() { + val alice = Recipient.resolved(alice) + val bob = Recipient.resolved(bob) + val info = createGroup() + + setProfileName(alice.id, ProfileName.fromParts("Bob", "Android")) + setProfileName(bob.id, ProfileName.fromParts("Bob", "Android")) + + SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(info.recipientId)) + SignalDatabase.messages.insertProfileNameChangeMessages(alice, "Bob Android", "Alice Android") + SignalDatabase.nameCollisions.markCollisionsForThreadRecipientDismissed(info.recipientId) + SignalDatabase.messages.insertProfileNameChangeMessages(alice, "Bob Android", "Alice Android") + + val collisions = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(info.recipientId) + + collisions assertIsSize 0 + } + + @Test + fun givenAGroupWithAliceAndBob_whenIInsertNameChangeMessageForAliceWithMismatch_thenIExpectNoGroupNameCollision() { + val alice = Recipient.resolved(alice) + val bob = Recipient.resolved(bob) + val info = createGroup() + + setProfileName(alice.id, ProfileName.fromParts("Alice", "Android")) + setProfileName(bob.id, ProfileName.fromParts("Bob", "Android")) + + SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(info.recipientId)) + SignalDatabase.messages.insertProfileNameChangeMessages(alice, "Alice Android", "Bob Android") + + val collisions = SignalDatabase.nameCollisions.getCollisionsForThreadRecipientId(info.recipientId) + + collisions assertIsSize 0 + } + + private fun setUpRecipient(recipientId: RecipientId): RecipientId { + SignalDatabase.recipients.setProfileSharing(recipientId, false) + val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(recipientId, false) + + MmsHelper.insert( + threadId = threadId, + message = IncomingMessage( + type = MessageType.NORMAL, + from = recipientId, + groupId = null, + body = "hi", + sentTimeMillis = 100L, + receivedTimeMillis = 200L, + serverTimeMillis = 100L, + isUnidentified = true + ) + ) + + return recipientId + } + + private fun setProfileName(recipientId: RecipientId, name: ProfileName) { + SignalDatabase.recipients.setProfileName(recipientId, name) + SignalDatabase.nameCollisions.handleIndividualNameCollision(recipientId) + } + + private fun createGroup(): GroupTestingUtils.TestGroupInfo { + return GroupTestingUtils.insertGroup( + revision = 0, + DecryptedMember( + aciBytes = harness.self.requireAci().toByteString(), + role = Member.Role.ADMINISTRATOR + ), + DecryptedMember( + aciBytes = Recipient.resolved(alice).requireAci().toByteString(), + role = Member.Role.ADMINISTRATOR + ), + DecryptedMember( + aciBytes = Recipient.resolved(bob).requireAci().toByteString(), + role = Member.Role.ADMINISTRATOR + ) + ) + } +} diff --git a/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt b/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt index 41f1a6149c..3dfdd94d5e 100644 --- a/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt +++ b/app/src/debug/java/org/thoughtcrime/securesms/components/settings/app/internal/conversation/test/InternalConversationTestFragment.kt @@ -292,6 +292,10 @@ class InternalConversationTestFragment : Fragment(R.layout.conversation_test_fra Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show() } + override fun onItemDoubleClick(item: MultiselectPart) { + Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show() + } + override fun onShowSafetyTips(forGroup: Boolean) { Toast.makeText(requireContext(), "Can't touch this.", Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 634c01d7cb..da2b0cca2e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -721,7 +721,7 @@ android:exported="false"/> + + + + - @@ -1049,6 +1063,12 @@ android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" android:exported="false"/> + + + + diff --git a/app/src/main/baseline-prof.txt b/app/src/main/baseline-prof.txt index ac7d08d66f..cf9d8b2cb9 100644 --- a/app/src/main/baseline-prof.txt +++ b/app/src/main/baseline-prof.txt @@ -1,126 +1,26 @@ HPLandroidx/appcompat/widget/SearchView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HPLandroidx/constraintlayout/core/ArrayRow;->(Landroidx/constraintlayout/core/Cache;)V HPLandroidx/core/view/ViewGroupKt$descendants$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; HPLandroidx/customview/poolingcontainer/PoolingContainer;->callPoolingContainerOnRelease(Landroid/view/View;)V -HPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; -HPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V HPLandroidx/fragment/app/FragmentManager;->saveAllStateInternal()Landroid/os/Bundle; -HPLandroidx/fragment/app/FragmentStateManager;->saveState()Landroid/os/Bundle; -HPLandroidx/recyclerview/widget/AsyncListDiffer$1$1;->areItemsTheSame(II)Z +HPLandroidx/recyclerview/widget/AsyncListDiffer$1$1;->areContentsTheSame(II)Z HPLandroidx/recyclerview/widget/BatchingListUpdateCallback;->onChanged(IILjava/lang/Object;)V -HPLandroidx/recyclerview/widget/DiffUtil;->backward(Landroidx/recyclerview/widget/DiffUtil$Range;Landroidx/recyclerview/widget/DiffUtil$Callback;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;I)Landroidx/recyclerview/widget/DiffUtil$Snake; -HPLandroidx/recyclerview/widget/DiffUtil;->forward(Landroidx/recyclerview/widget/DiffUtil$Range;Landroidx/recyclerview/widget/DiffUtil$Callback;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;I)Landroidx/recyclerview/widget/DiffUtil$Snake; -HPLandroidx/recyclerview/widget/RecyclerView$ItemAnimator;->buildAdapterChangeFlagsForAnimations(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)I -HPLandroidx/recyclerview/widget/RecyclerView;->animateChange(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;ZZ)V HPLandroidx/recyclerview/widget/RecyclerView;->viewRangeUpdate(IILjava/lang/Object;)V HPLandroidx/recyclerview/widget/ViewInfoStore;->addToPreLayout(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)V HPLandroidx/recyclerview/widget/ViewInfoStore;->isDisappearing(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Z HPLandroidx/recyclerview/widget/ViewInfoStore;->popFromLayoutStep(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;I)Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo; -HPLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V HPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver;->innerSuccess(Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver$InnerObserver;Ljava/lang/Object;)V HPLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver;->onNext(Ljava/lang/Object;)V -HPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->removeFirst()V -HPLj$/time/ZonedDateTime;->(Lj$/time/LocalDateTime;Lj$/time/ZoneId;Lj$/time/ZoneOffset;)V -HPLj$/time/ZonedDateTime;->m(JILj$/time/ZoneId;)Lj$/time/ZonedDateTime; -HPLj$/time/ZonedDateTime;->n(Lj$/time/Instant;Lj$/time/ZoneId;)Lj$/time/ZonedDateTime; -HPLj$/time/ZonedDateTime;->toLocalDate()Lj$/time/LocalDate; -HPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; -HPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getSql()Ljava/lang/String; -HPLokio/Buffer;->write(Lokio/Buffer;J)V -HPLokio/OutputStreamSink;->write(Lokio/Buffer;J)V -HPLorg/signal/core/util/concurrent/SignalExecutors$$ExternalSyntheticLambda0;->rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V -HPLorg/signal/core/util/concurrent/SignalExecutors;->lambda$newCachedBoundedExecutor$1(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V -HPLorg/signal/core/util/tracing/DebugAnnotation$Builder;->build()Lorg/signal/core/util/tracing/DebugAnnotation; -HPLorg/signal/core/util/tracing/DebugAnnotation;->(Ljava/lang/Long;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Double;Ljava/lang/String;Ljava/lang/Long;Lorg/signal/core/util/tracing/DebugAnnotation$NestedValue;Lokio/ByteString;)V +HPLkotlin/collections/AbstractList$IteratorImpl;->(Lkotlin/collections/AbstractList;)V +HPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V +HPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange; +HPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V +HPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->inTransaction()Z HPLorg/signal/core/util/tracing/TracePacket$Builder;->()V +HPLorg/signal/core/util/tracing/TracePacket$Builder;->timestamp(Ljava/lang/Long;)Lorg/signal/core/util/tracing/TracePacket$Builder; HPLorg/signal/libsignal/protocol/ecc/ECPublicKey;->equals(Ljava/lang/Object;)Z -HPLorg/signal/paging/FixedSizePagingController;->lambda$onDataItemChanged$2(Ljava/lang/Object;)V -HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->applyCorners()V -HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->applyCornersForSizeClass2()V -HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->getCells()[Lorg/thoughtcrime/securesms/components/ThumbnailView; -HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setCellBackgroundColor(I)V -HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setRadii(IIII)V -HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setRelativeRadii(Lorg/thoughtcrime/securesms/components/ThumbnailView;IIII)V -HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setSlide(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/mms/Slide;IZ)V -HPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setSlides(Lcom/bumptech/glide/RequestManager;Ljava/util/List;Z)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setCancelTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setClickable(Z)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setConversationColor(I)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setCorners(IIII)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setFocusable(Z)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setImageResource(Lcom/bumptech/glide/RequestManager;Ljava/util/List;ZZ)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setMaximumThumbnailHeight(I)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setMinimumThumbnailWidth(I)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setPlayVideoClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setThumbnailBounds([I)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->showThumbnailView()V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->(ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIII)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState; -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->copy(ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIII)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState; -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->(FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIII)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIIIILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState; -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->copy(FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIII)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState; -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;Lorg/thoughtcrime/securesms/util/views/Stub;)V -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;ILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState; -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->copy(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState; -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->getAlbumViewState()Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState; -HPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->getThumbnailViewState()Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState; -HPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->isListCommitted()Z -HPLorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport2;->m([Ljava/lang/Object;)Ljava/util/List; -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->onMeasure(II)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setBounds(IIII)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setCancelTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setClickable(Z)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setFocusable(Z)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setImageResource(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/mms/Slide;ZZII)Lorg/signal/core/util/concurrent/ListenableFuture; -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setPlayVideoClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setRadii(IIII)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V -HPLorg/thoughtcrime/securesms/components/ThumbnailView;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->getTransferState(Ljava/util/List;)I -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress;->toString()Ljava/lang/String; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->(Z)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->(Z)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setSlides$2;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->deriveMode(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->isUpdateToExistingSet(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;Ljava/util/List;)Z -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setCancelClickListener(Landroid/view/View$OnClickListener;)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setClickable(Z)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setFocusable(Z)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setShowSecondaryText(Z)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setSlides(Ljava/util/List;)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setTransferClickListener(Landroid/view/View$OnClickListener;)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setVisible(Z)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->updateState(Lkotlin/jvm/functions/Function1;)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->(ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZ)V -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->copy$default(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->copy(ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZ)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->equals(Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->toString()Ljava/lang/String; -HPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->(Landroid/content/Context;Landroid/util/AttributeSet;II)V -HPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/Runnable;)Ljava/lang/String; -HPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->updateOutlineVisibility()V HPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->animateChange(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)Z HPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->animatePersistence(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;)Z -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->bindPayloadsIfAvailable()Z -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getBindable()Lorg/thoughtcrime/securesms/BindableConversationItem; -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getColorizerProjections(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/ProjectionList; -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getNextMessage()Lj$/util/Optional; -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getPreviousMessage()Lj$/util/Optional; -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$IncomingMediaViewHolder;->bind(Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;)V -HPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder;->bind(Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;)V HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$initializeConversationThreadUi$8;->invoke()Ljava/lang/Boolean; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->doAfterFirstRender()V HPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->getReminder$lambda$10(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)Lj$/util/Optional; @@ -130,39 +30,10 @@ HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$13;->apply(L HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$canShowAsBubble$1;->apply(Lorg/thoughtcrime/securesms/recipients/Recipient;)Ljava/lang/Boolean; HPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$getRequestReviewState$1;->apply(Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState;)Lio/reactivex/rxjava3/core/SingleSource; HPLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->equals(Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->equals(Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->draw(Landroid/graphics/Canvas;)V -HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getChatColors()Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; -HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getOutline(Landroid/graphics/Outline;)V -HPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->setCorners([F)V -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isEndOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->setMessageShape(Lorg/thoughtcrime/securesms/database/model/MessageRecord;ZI)Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape; -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->bind(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;)V -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->getColorizerProjections(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/ProjectionList; -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->invalidateBodyBubbleDrawable(Landroid/view/ViewGroup;)V -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->invalidateChatColorsDrawable(Landroid/view/ViewGroup;)V -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->linkifyMessageBody(Landroid/text/Spannable;)V -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentBody()V -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentSender()V -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getBodyTextColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)I -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->getFooterWidth()I -HPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->onPostMeasure()Z -HPLorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;->(ZZJJIZ)V -HPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$unregisterObserver$17(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -HPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->trace(Ljava/lang/String;Ljava/lang/Runnable;)V +HPLorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;->equals(Ljava/lang/Object;)Z HPLorg/thoughtcrime/securesms/database/model/IdentityRecord;->equals(Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan;->update(Landroid/text/TextPaint;)V -HPLorg/thoughtcrime/securesms/fonts/SignalSymbols;->getSpannedString(Landroid/content/Context;Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;)Ljava/lang/CharSequence; -HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->getCurrentHolder(I)Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder; -HPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->updateVideoDisplayPositionAndSize(Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4Playable;)V HPLorg/thoughtcrime/securesms/mms/Slide;->equals(Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda6;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V -HPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->removeForeverObserver(Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V HPLorg/thoughtcrime/securesms/util/BubbleUtil;->canBubble(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/Long;)Z -HPLorg/thoughtcrime/securesms/util/Projection$Corners;->(FFFF)V -HPLorg/thoughtcrime/securesms/util/Projection$Corners;->toRadii()[F -HPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->areContentsTheSame(Ljava/lang/Object;Ljava/lang/Object;)Z -HPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->setPayload(Ljava/util/List;)V HSPLandroid/support/v4/media/MediaBrowserCompat$MediaBrowserImplApi21$$ExternalSyntheticThrowCCEIfNotNull0;->m(Ljava/lang/Object;)V HSPLandroid/support/v4/media/session/IMediaSession$Stub;->()V HSPLandroid/support/v4/media/session/MediaControllerCompat$MediaControllerImplApi21;->(Landroid/content/Context;Landroid/support/v4/media/session/MediaSessionCompat$Token;)V @@ -533,7 +404,6 @@ HSPLandroidx/appcompat/view/menu/ActionMenuItemView;->setItemInvoker(Landroidx/a HSPLandroidx/appcompat/view/menu/ActionMenuItemView;->setPopupCallback(Landroidx/appcompat/view/menu/ActionMenuItemView$PopupCallback;)V HSPLandroidx/appcompat/view/menu/ActionMenuItemView;->setTitle(Ljava/lang/CharSequence;)V HSPLandroidx/appcompat/view/menu/ActionMenuItemView;->shouldAllowTextWithIcon()Z -HSPLandroidx/appcompat/view/menu/ActionMenuItemView;->updateTextButtonVisibility()V HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->(Landroid/content/Context;II)V HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->addItemView(Landroid/view/View;I)V HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->createItemView(Landroid/view/ViewGroup;)Landroidx/appcompat/view/menu/MenuView$ItemView; @@ -541,7 +411,6 @@ HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->filterLeftoverView(Landroid HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->getItemView(Landroidx/appcompat/view/menu/MenuItemImpl;Landroid/view/View;Landroid/view/ViewGroup;)Landroid/view/View; HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->initForMenu(Landroid/content/Context;Landroidx/appcompat/view/menu/MenuBuilder;)V HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->setCallback(Landroidx/appcompat/view/menu/MenuPresenter$Callback;)V -HSPLandroidx/appcompat/view/menu/BaseMenuPresenter;->updateMenuView(Z)V HSPLandroidx/appcompat/view/menu/MenuBuilder;->()V HSPLandroidx/appcompat/view/menu/MenuBuilder;->(Landroid/content/Context;)V HSPLandroidx/appcompat/view/menu/MenuBuilder;->add(IIILjava/lang/CharSequence;)Landroid/view/MenuItem; @@ -624,7 +493,6 @@ HSPLandroidx/appcompat/widget/ActionMenuPresenter;->setExpandedActionViewsExclus HSPLandroidx/appcompat/widget/ActionMenuPresenter;->setMenuView(Landroidx/appcompat/widget/ActionMenuView;)V HSPLandroidx/appcompat/widget/ActionMenuPresenter;->setReserveOverflow(Z)V HSPLandroidx/appcompat/widget/ActionMenuPresenter;->shouldIncludeItem(ILandroidx/appcompat/view/menu/MenuItemImpl;)Z -HSPLandroidx/appcompat/widget/ActionMenuPresenter;->updateMenuView(Z)V HSPLandroidx/appcompat/widget/ActionMenuView$ActionMenuPresenterCallback;->()V HSPLandroidx/appcompat/widget/ActionMenuView$LayoutParams;->(II)V HSPLandroidx/appcompat/widget/ActionMenuView$LayoutParams;->(Landroid/content/Context;Landroid/util/AttributeSet;)V @@ -649,6 +517,7 @@ HSPLandroidx/appcompat/widget/ActionMenuView;->setOverflowReserved(Z)V HSPLandroidx/appcompat/widget/ActionMenuView;->setPopupTheme(I)V HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->(Landroid/view/View;)V HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->applySupportBackgroundTint()V +HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->onSetBackgroundDrawable(Landroid/graphics/drawable/Drawable;)V HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->onSetBackgroundResource(I)V HSPLandroidx/appcompat/widget/AppCompatBackgroundHelper;->setInternalBackgroundTint(Landroid/content/res/ColorStateList;)V @@ -707,6 +576,7 @@ HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->(Landroid/widget/ HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->getFilters([Landroid/text/InputFilter;)[Landroid/text/InputFilter; HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V HSPLandroidx/appcompat/widget/AppCompatEmojiTextHelper;->setEnabled(Z)V +HSPLandroidx/appcompat/widget/AppCompatHintHelper;->onCreateInputConnection(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Landroid/view/View;)Landroid/view/inputmethod/InputConnection; HSPLandroidx/appcompat/widget/AppCompatImageButton;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/appcompat/widget/AppCompatImageButton;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLandroidx/appcompat/widget/AppCompatImageButton;->drawableStateChanged()V @@ -756,8 +626,10 @@ HSPLandroidx/appcompat/widget/AppCompatTextHelper;->onSetCompoundDrawables()V HSPLandroidx/appcompat/widget/AppCompatTextHelper;->onSetTextAppearance(Landroid/content/Context;I)V HSPLandroidx/appcompat/widget/AppCompatTextHelper;->populateSurroundingTextIfNeeded(Landroid/widget/TextView;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V HSPLandroidx/appcompat/widget/AppCompatTextHelper;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V +HSPLandroidx/appcompat/widget/AppCompatTextHelper;->updateTypefaceAndStyle(Landroid/content/Context;Landroidx/appcompat/widget/TintTypedArray;)V HSPLandroidx/appcompat/widget/AppCompatTextView;->(Landroid/content/Context;)V HSPLandroidx/appcompat/widget/AppCompatTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLandroidx/appcompat/widget/AppCompatTextView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLandroidx/appcompat/widget/AppCompatTextView;->consumeTextFutureAndSetBlocking()V HSPLandroidx/appcompat/widget/AppCompatTextView;->drawableStateChanged()V HSPLandroidx/appcompat/widget/AppCompatTextView;->getEmojiTextViewHelper()Landroidx/appcompat/widget/AppCompatEmojiTextHelper; @@ -785,6 +657,7 @@ HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper$Impl;->()V HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->()V HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->(Landroid/widget/TextView;)V HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->getAutoSizeTextType()I +HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->loadFromAttributes(Landroid/util/AttributeSet;I)V HSPLandroidx/appcompat/widget/AppCompatTextViewAutoSizeHelper;->supportsAutoSizeText()Z HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V @@ -1207,7 +1080,6 @@ HSPLandroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods$$Extern HSPLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->()V HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->(Landroidx/constraintlayout/core/ArrayRow;Landroidx/constraintlayout/core/Cache;)V -HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->add(Landroidx/constraintlayout/core/SolverVariable;FZ)V HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->clear()V HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->contains(Landroidx/constraintlayout/core/SolverVariable;)Z HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->divideByAmount(F)V @@ -1216,7 +1088,7 @@ HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->getCurrentSize()I HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->getVariable(I)Landroidx/constraintlayout/core/SolverVariable; HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->getVariableValue(I)F HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->invert()V -HSPLandroidx/constraintlayout/core/ArrayRow;->(Landroidx/constraintlayout/core/Cache;)V +HSPLandroidx/constraintlayout/core/ArrayLinkedVariables;->remove(Landroidx/constraintlayout/core/SolverVariable;Z)F HSPLandroidx/constraintlayout/core/ArrayRow;->addError(Landroidx/constraintlayout/core/LinearSystem;I)Landroidx/constraintlayout/core/ArrayRow; HSPLandroidx/constraintlayout/core/ArrayRow;->addSingleError(Landroidx/constraintlayout/core/SolverVariable;I)Landroidx/constraintlayout/core/ArrayRow; HSPLandroidx/constraintlayout/core/ArrayRow;->chooseSubject(Landroidx/constraintlayout/core/LinearSystem;)Z @@ -1230,11 +1102,13 @@ HSPLandroidx/constraintlayout/core/ArrayRow;->createRowLowerThan(Landroidx/const HSPLandroidx/constraintlayout/core/ArrayRow;->ensurePositiveConstant()V HSPLandroidx/constraintlayout/core/ArrayRow;->getKey()Landroidx/constraintlayout/core/SolverVariable; HSPLandroidx/constraintlayout/core/ArrayRow;->hasKeyVariable()Z +HSPLandroidx/constraintlayout/core/ArrayRow;->hasVariable(Landroidx/constraintlayout/core/SolverVariable;)Z HSPLandroidx/constraintlayout/core/ArrayRow;->isEmpty()Z HSPLandroidx/constraintlayout/core/ArrayRow;->isNew(Landroidx/constraintlayout/core/SolverVariable;Landroidx/constraintlayout/core/LinearSystem;)Z HSPLandroidx/constraintlayout/core/ArrayRow;->pivot(Landroidx/constraintlayout/core/SolverVariable;)V HSPLandroidx/constraintlayout/core/ArrayRow;->reset()V HSPLandroidx/constraintlayout/core/ArrayRow;->updateFromFinalVariable(Landroidx/constraintlayout/core/LinearSystem;Landroidx/constraintlayout/core/SolverVariable;Z)V +HSPLandroidx/constraintlayout/core/ArrayRow;->updateFromSystem(Landroidx/constraintlayout/core/LinearSystem;)V HSPLandroidx/constraintlayout/core/Cache;->()V HSPLandroidx/constraintlayout/core/LinearSystem;->()V HSPLandroidx/constraintlayout/core/LinearSystem;->()V @@ -1250,6 +1124,7 @@ HSPLandroidx/constraintlayout/core/LinearSystem;->addLowerThan(Landroidx/constra HSPLandroidx/constraintlayout/core/LinearSystem;->addRow(Landroidx/constraintlayout/core/ArrayRow;)V HSPLandroidx/constraintlayout/core/LinearSystem;->addSingleError(Landroidx/constraintlayout/core/ArrayRow;II)V HSPLandroidx/constraintlayout/core/LinearSystem;->computeValues()V +HSPLandroidx/constraintlayout/core/LinearSystem;->createErrorVariable(ILjava/lang/String;)Landroidx/constraintlayout/core/SolverVariable; HSPLandroidx/constraintlayout/core/LinearSystem;->createObjectVariable(Ljava/lang/Object;)Landroidx/constraintlayout/core/SolverVariable; HSPLandroidx/constraintlayout/core/LinearSystem;->createRow()Landroidx/constraintlayout/core/ArrayRow; HSPLandroidx/constraintlayout/core/LinearSystem;->createSlackVariable()Landroidx/constraintlayout/core/SolverVariable; @@ -1292,6 +1167,7 @@ HSPLandroidx/constraintlayout/core/SolverVariable;->removeFromRow(Landroidx/cons HSPLandroidx/constraintlayout/core/SolverVariable;->reset()V HSPLandroidx/constraintlayout/core/SolverVariable;->setFinalValue(Landroidx/constraintlayout/core/LinearSystem;F)V HSPLandroidx/constraintlayout/core/SolverVariable;->setType(Landroidx/constraintlayout/core/SolverVariable$Type;Ljava/lang/String;)V +HSPLandroidx/constraintlayout/core/SolverVariable;->updateReferencesWithNewDefinition(Landroidx/constraintlayout/core/LinearSystem;Landroidx/constraintlayout/core/ArrayRow;)V HSPLandroidx/constraintlayout/core/state/WidgetFrame;->()V HSPLandroidx/constraintlayout/core/state/WidgetFrame;->(Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V HSPLandroidx/constraintlayout/core/widgets/Barrier;->()V @@ -1378,6 +1254,7 @@ HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->isVerticalSolvingP HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->markHorizontalSolvingPassDone()V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->markVerticalSolvingPassDone()V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->reset()V +HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->resetFinalResolution()V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->resetSolverVariables(Landroidx/constraintlayout/core/Cache;)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setBaselineDistance(I)V HSPLandroidx/constraintlayout/core/widgets/ConstraintWidget;->setCompanionWidget(Ljava/lang/Object;)V @@ -1492,6 +1369,7 @@ HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solveHorizontalMatc HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solveVerticalCenterConstraints(ILandroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solveVerticalMatchConstraint(ILandroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;Landroidx/constraintlayout/core/widgets/ConstraintWidget;)V HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->solvingPass(Landroidx/constraintlayout/core/widgets/ConstraintWidgetContainer;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;)V +HSPLandroidx/constraintlayout/core/widgets/analyzer/Direct;->verticalSolvingPass(ILandroidx/constraintlayout/core/widgets/ConstraintWidget;Landroidx/constraintlayout/core/widgets/analyzer/BasicMeasure$Measurer;)V HSPLandroidx/constraintlayout/widget/Barrier;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/constraintlayout/widget/Barrier;->init(Landroid/util/AttributeSet;)V HSPLandroidx/constraintlayout/widget/Barrier;->resolveRtl(Landroidx/constraintlayout/core/widgets/ConstraintWidget;Z)V @@ -1516,6 +1394,7 @@ HSPLandroidx/constraintlayout/widget/ConstraintLayout$1;->()V HSPLandroidx/constraintlayout/widget/ConstraintLayout$LayoutParams$Table;->()V HSPLandroidx/constraintlayout/widget/ConstraintLayout$LayoutParams;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLandroidx/constraintlayout/widget/ConstraintLayout$LayoutParams;->resolveLayoutDirection(I)V +HSPLandroidx/constraintlayout/widget/ConstraintLayout$LayoutParams;->validate()V HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->(Landroidx/constraintlayout/widget/ConstraintLayout;Landroidx/constraintlayout/widget/ConstraintLayout;)V HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->captureLayoutInfo(IIIIII)V HSPLandroidx/constraintlayout/widget/ConstraintLayout$Measurer;->didMeasures()V @@ -1691,7 +1570,6 @@ HSPLandroidx/core/app/NotificationManagerCompat;->(Landroid/content/Contex HSPLandroidx/core/app/NotificationManagerCompat;->cancel(I)V HSPLandroidx/core/app/NotificationManagerCompat;->cancel(Ljava/lang/String;I)V HSPLandroidx/core/app/NotificationManagerCompat;->from(Landroid/content/Context;)Landroidx/core/app/NotificationManagerCompat; -HSPLandroidx/core/content/ContentValuesKt;->contentValuesOf([Lkotlin/Pair;)Landroid/content/ContentValues; HSPLandroidx/core/content/ContextCompat$Api21Impl;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; HSPLandroidx/core/content/ContextCompat$Api23Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/content/Context;I)I HSPLandroidx/core/content/ContextCompat$Api23Impl;->getColor(Landroid/content/Context;I)I @@ -1813,6 +1691,10 @@ HSPLandroidx/core/os/TraceCompat;->endSection()V HSPLandroidx/core/os/UserManagerCompat$Api24Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/UserManager;)Z HSPLandroidx/core/os/UserManagerCompat$Api24Impl;->isUserUnlocked(Landroid/content/Context;)Z HSPLandroidx/core/os/UserManagerCompat;->isUserUnlocked(Landroid/content/Context;)Z +HSPLandroidx/core/text/util/LinkifyCompat$$ExternalSyntheticLambda0;->()V +HSPLandroidx/core/text/util/LinkifyCompat;->()V +HSPLandroidx/core/text/util/LinkifyCompat;->addLinks(Landroid/text/Spannable;I)Z +HSPLandroidx/core/text/util/LinkifyCompat;->shouldAddLinksFallbackToFramework()Z HSPLandroidx/core/util/ObjectsCompat$Api19Impl;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z HSPLandroidx/core/util/ObjectsCompat$Api19Impl;->hash([Ljava/lang/Object;)I HSPLandroidx/core/util/ObjectsCompat;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z @@ -2139,6 +2021,11 @@ HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->unwrap()Landr HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->wrap(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; HSPLandroidx/core/view/animation/PathInterpolatorCompat$Api21Impl;->createPathInterpolator(FFFF)Landroid/view/animation/Interpolator; HSPLandroidx/core/view/animation/PathInterpolatorCompat;->create(FFFF)Landroid/view/animation/Interpolator; +HSPLandroidx/core/view/inputmethod/EditorInfoCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/inputmethod/EditorInfo;[Ljava/lang/String;)V +HSPLandroidx/core/view/inputmethod/EditorInfoCompat;->()V +HSPLandroidx/core/view/inputmethod/EditorInfoCompat;->setContentMimeTypes(Landroid/view/inputmethod/EditorInfo;[Ljava/lang/String;)V +HSPLandroidx/core/view/inputmethod/InputConnectionCompat$1;->(Landroid/view/inputmethod/InputConnection;ZLandroidx/core/view/inputmethod/InputConnectionCompat$OnCommitContentListener;)V +HSPLandroidx/core/view/inputmethod/InputConnectionCompat;->createWrapper(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Landroidx/core/view/inputmethod/InputConnectionCompat$OnCommitContentListener;)Landroid/view/inputmethod/InputConnection; HSPLandroidx/core/widget/ImageViewCompat$Api21Impl;->setImageTintList(Landroid/widget/ImageView;Landroid/content/res/ColorStateList;)V HSPLandroidx/core/widget/ImageViewCompat;->setImageTintList(Landroid/widget/ImageView;Landroid/content/res/ColorStateList;)V HSPLandroidx/core/widget/TextViewCompat$Api16Impl;->getMaxLines(Landroid/widget/TextView;)I @@ -2247,6 +2134,10 @@ HSPLandroidx/emoji2/viewsintegration/EmojiEditableFactory;->()V HSPLandroidx/emoji2/viewsintegration/EmojiEditableFactory;->()V HSPLandroidx/emoji2/viewsintegration/EmojiEditableFactory;->getInstance()Landroid/text/Editable$Factory; HSPLandroidx/emoji2/viewsintegration/EmojiEditableFactory;->newEditable(Ljava/lang/CharSequence;)Landroid/text/Editable; +HSPLandroidx/emoji2/viewsintegration/EmojiInputConnection$EmojiCompatDeleteHelper;->()V +HSPLandroidx/emoji2/viewsintegration/EmojiInputConnection$EmojiCompatDeleteHelper;->updateEditorInfoAttrs(Landroid/view/inputmethod/EditorInfo;)V +HSPLandroidx/emoji2/viewsintegration/EmojiInputConnection;->(Landroid/widget/TextView;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V +HSPLandroidx/emoji2/viewsintegration/EmojiInputConnection;->(Landroid/widget/TextView;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Landroidx/emoji2/viewsintegration/EmojiInputConnection$EmojiCompatDeleteHelper;)V HSPLandroidx/emoji2/viewsintegration/EmojiInputFilter;->(Landroid/widget/TextView;)V HSPLandroidx/emoji2/viewsintegration/EmojiInputFilter;->filter(Ljava/lang/CharSequence;IILandroid/text/Spanned;II)Ljava/lang/CharSequence; HSPLandroidx/emoji2/viewsintegration/EmojiKeyListener$EmojiCompatHandleKeyDownHelper;->()V @@ -5147,6 +5038,9 @@ HSPLandroidx/recyclerview/widget/LinearLayoutManager;->assertNotInLayoutOrScroll HSPLandroidx/recyclerview/widget/LinearLayoutManager;->calculateExtraLayoutSpace(Landroidx/recyclerview/widget/RecyclerView$State;[I)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->canScrollHorizontally()Z HSPLandroidx/recyclerview/widget/LinearLayoutManager;->canScrollVertically()Z +HSPLandroidx/recyclerview/widget/LinearLayoutManager;->computeHorizontalScrollExtent(Landroidx/recyclerview/widget/RecyclerView$State;)I +HSPLandroidx/recyclerview/widget/LinearLayoutManager;->computeHorizontalScrollOffset(Landroidx/recyclerview/widget/RecyclerView$State;)I +HSPLandroidx/recyclerview/widget/LinearLayoutManager;->computeHorizontalScrollRange(Landroidx/recyclerview/widget/RecyclerView$State;)I HSPLandroidx/recyclerview/widget/LinearLayoutManager;->computeScrollExtent(Landroidx/recyclerview/widget/RecyclerView$State;)I HSPLandroidx/recyclerview/widget/LinearLayoutManager;->computeScrollOffset(Landroidx/recyclerview/widget/RecyclerView$State;)I HSPLandroidx/recyclerview/widget/LinearLayoutManager;->computeScrollRange(Landroidx/recyclerview/widget/RecyclerView$State;)I @@ -5169,6 +5063,7 @@ HSPLandroidx/recyclerview/widget/LinearLayoutManager;->getExtraLayoutSpace(Landr HSPLandroidx/recyclerview/widget/LinearLayoutManager;->getReverseLayout()Z HSPLandroidx/recyclerview/widget/LinearLayoutManager;->isAutoMeasureEnabled()Z HSPLandroidx/recyclerview/widget/LinearLayoutManager;->isLayoutRTL()Z +HSPLandroidx/recyclerview/widget/LinearLayoutManager;->layoutChunk(Landroidx/recyclerview/widget/RecyclerView$Recycler;Landroidx/recyclerview/widget/RecyclerView$State;Landroidx/recyclerview/widget/LinearLayoutManager$LayoutState;Landroidx/recyclerview/widget/LinearLayoutManager$LayoutChunkResult;)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->layoutForPredictiveAnimations(Landroidx/recyclerview/widget/RecyclerView$Recycler;Landroidx/recyclerview/widget/RecyclerView$State;II)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->onAnchorReady(Landroidx/recyclerview/widget/RecyclerView$Recycler;Landroidx/recyclerview/widget/RecyclerView$State;Landroidx/recyclerview/widget/LinearLayoutManager$AnchorInfo;I)V HSPLandroidx/recyclerview/widget/LinearLayoutManager;->onInitializeAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)V @@ -5209,8 +5104,10 @@ HSPLandroidx/recyclerview/widget/OpReorderer;->(Landroidx/recyclerview/wid HSPLandroidx/recyclerview/widget/OpReorderer;->getLastMoveOutOfOrder(Ljava/util/List;)I HSPLandroidx/recyclerview/widget/OpReorderer;->reorderOps(Ljava/util/List;)V HSPLandroidx/recyclerview/widget/OrientationHelper$1;->(Landroidx/recyclerview/widget/RecyclerView$LayoutManager;)V +HSPLandroidx/recyclerview/widget/OrientationHelper$1;->getDecoratedEnd(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/OrientationHelper$1;->getDecoratedMeasurement(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/OrientationHelper$1;->getDecoratedMeasurementInOther(Landroid/view/View;)I +HSPLandroidx/recyclerview/widget/OrientationHelper$1;->getDecoratedStart(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/OrientationHelper$1;->getEndAfterPadding()I HSPLandroidx/recyclerview/widget/OrientationHelper$1;->getEndPadding()I HSPLandroidx/recyclerview/widget/OrientationHelper$1;->getMode()I @@ -5298,6 +5195,11 @@ HSPLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->onDraw(Landroid/g HSPLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->onDrawOver(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;)V HSPLandroidx/recyclerview/widget/RecyclerView$ItemDecoration;->onDrawOver(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$1;->(Landroidx/recyclerview/widget/RecyclerView$LayoutManager;)V +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$1;->getChildAt(I)Landroid/view/View; +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$1;->getChildEnd(Landroid/view/View;)I +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$1;->getChildStart(Landroid/view/View;)I +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$1;->getParentEnd()I +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$1;->getParentStart()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$2;->(Landroidx/recyclerview/widget/RecyclerView$LayoutManager;)V HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$2;->getChildAt(I)Landroid/view/View; HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager$2;->getChildEnd(Landroid/view/View;)I @@ -5326,14 +5228,17 @@ HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getChildMeasureSpe HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getColumnCountForAccessibility(Landroidx/recyclerview/widget/RecyclerView$Recycler;Landroidx/recyclerview/widget/RecyclerView$State;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getDecoratedBottom(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getDecoratedBoundsWithMargins(Landroid/view/View;Landroid/graphics/Rect;)V +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getDecoratedLeft(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getDecoratedMeasuredHeight(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getDecoratedMeasuredWidth(Landroid/view/View;)I +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getDecoratedRight(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getDecoratedTop(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getFocusedChild()Landroid/view/View; HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getHeight()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getHeightMode()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getItemCount()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getLayoutDirection()I +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getLeftDecorationWidth(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getMinimumHeight()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getMinimumWidth()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getPaddingBottom()I @@ -5342,6 +5247,7 @@ HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getPaddingRight()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getPaddingTop()I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getPosition(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getProperties(Landroid/content/Context;Landroid/util/AttributeSet;II)Landroidx/recyclerview/widget/RecyclerView$LayoutManager$Properties; +HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getRightDecorationWidth(Landroid/view/View;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getRowCountForAccessibility(Landroidx/recyclerview/widget/RecyclerView$Recycler;Landroidx/recyclerview/widget/RecyclerView$State;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getSelectionModeForAccessibility(Landroidx/recyclerview/widget/RecyclerView$Recycler;Landroidx/recyclerview/widget/RecyclerView$State;)I HSPLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getTopDecorationHeight(Landroid/view/View;)I @@ -5763,11 +5669,13 @@ HSPLcom/airbnb/lottie/LottieCompositionFactory;->rawResCacheKey(Landroid/content HSPLcom/airbnb/lottie/LottieDrawable$$ExternalSyntheticLambda0;->(Lcom/airbnb/lottie/LottieDrawable;F)V HSPLcom/airbnb/lottie/LottieDrawable$$ExternalSyntheticLambda0;->run(Lcom/airbnb/lottie/LottieComposition;)V HSPLcom/airbnb/lottie/LottieDrawable$$ExternalSyntheticLambda9;->(Lcom/airbnb/lottie/LottieDrawable;Lcom/airbnb/lottie/model/KeyPath;Ljava/lang/Object;Lcom/airbnb/lottie/value/LottieValueCallback;)V +HSPLcom/airbnb/lottie/LottieDrawable$$ExternalSyntheticLambda9;->run(Lcom/airbnb/lottie/LottieComposition;)V HSPLcom/airbnb/lottie/LottieDrawable$1;->(Lcom/airbnb/lottie/LottieDrawable;)V HSPLcom/airbnb/lottie/LottieDrawable$1;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V HSPLcom/airbnb/lottie/LottieDrawable$OnVisibleAction;->()V HSPLcom/airbnb/lottie/LottieDrawable$OnVisibleAction;->(Ljava/lang/String;I)V HSPLcom/airbnb/lottie/LottieDrawable;->$r8$lambda$7HgNmvtAytyG5A3axzRshxgGqrI(Lcom/airbnb/lottie/LottieDrawable;FLcom/airbnb/lottie/LottieComposition;)V +HSPLcom/airbnb/lottie/LottieDrawable;->$r8$lambda$riFJCWOqfI5iOFlatZRlwc9qv1U(Lcom/airbnb/lottie/LottieDrawable;Lcom/airbnb/lottie/model/KeyPath;Ljava/lang/Object;Lcom/airbnb/lottie/value/LottieValueCallback;Lcom/airbnb/lottie/LottieComposition;)V HSPLcom/airbnb/lottie/LottieDrawable;->()V HSPLcom/airbnb/lottie/LottieDrawable;->access$000(Lcom/airbnb/lottie/LottieDrawable;)Lcom/airbnb/lottie/model/layer/CompositionLayer; HSPLcom/airbnb/lottie/LottieDrawable;->access$100(Lcom/airbnb/lottie/LottieDrawable;)Lcom/airbnb/lottie/utils/LottieValueAnimator; @@ -5785,6 +5693,7 @@ HSPLcom/airbnb/lottie/LottieDrawable;->getOpacity()I HSPLcom/airbnb/lottie/LottieDrawable;->getRenderMode()Lcom/airbnb/lottie/RenderMode; HSPLcom/airbnb/lottie/LottieDrawable;->invalidateSelf()V HSPLcom/airbnb/lottie/LottieDrawable;->isApplyingOpacityToLayersEnabled()Z +HSPLcom/airbnb/lottie/LottieDrawable;->lambda$addValueCallback$14(Lcom/airbnb/lottie/model/KeyPath;Ljava/lang/Object;Lcom/airbnb/lottie/value/LottieValueCallback;Lcom/airbnb/lottie/LottieComposition;)V HSPLcom/airbnb/lottie/LottieDrawable;->lambda$setProgress$13(FLcom/airbnb/lottie/LottieComposition;)V HSPLcom/airbnb/lottie/LottieDrawable;->pauseAnimation()V HSPLcom/airbnb/lottie/LottieDrawable;->resolveKeyPath(Lcom/airbnb/lottie/model/KeyPath;)Ljava/util/List; @@ -6178,21 +6087,19 @@ HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->(Lokio/BufferedSource; HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->beginArray()V HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->beginObject()V HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->close()V -HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->doPeek()I HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->endArray()V HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->endObject()V HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->findName(Ljava/lang/String;Lcom/airbnb/lottie/parser/moshi/JsonReader$Options;)I HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->hasNext()Z HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->isLiteral(I)Z HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->nextBoolean()Z -HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->nextDouble()D HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->nextInt()I HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->nextName()Ljava/lang/String; +HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->nextNonWhitespace(Z)I HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->nextQuotedValue(Lokio/ByteString;)Ljava/lang/String; HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->nextString()Ljava/lang/String; HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->peek()Lcom/airbnb/lottie/parser/moshi/JsonReader$Token; HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->peekKeyword()I -HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->peekNumber()I HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->selectName(Lcom/airbnb/lottie/parser/moshi/JsonReader$Options;)I HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->skipName()V HSPLcom/airbnb/lottie/parser/moshi/JsonUtf8Reader;->skipQuotedValue(Lokio/ByteString;)V @@ -6346,6 +6253,8 @@ HSPLcom/annimon/stream/Stream;->sorted()Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->sorted(Ljava/util/Comparator;)Lcom/annimon/stream/Stream; HSPLcom/annimon/stream/Stream;->toList()Ljava/util/List; HSPLcom/annimon/stream/Stream;->withoutNulls()Lcom/annimon/stream/Stream; +HSPLcom/annimon/stream/function/BinaryOperator$Util$2;->(Ljava/util/Comparator;)V +HSPLcom/annimon/stream/function/BinaryOperator$Util;->maxBy(Ljava/util/Comparator;)Lcom/annimon/stream/function/BinaryOperator; HSPLcom/annimon/stream/function/Predicate$Util$4;->(Lcom/annimon/stream/function/Predicate;)V HSPLcom/annimon/stream/function/Predicate$Util$4;->test(Ljava/lang/Object;)Z HSPLcom/annimon/stream/function/Predicate$Util$5;->()V @@ -6372,6 +6281,9 @@ HSPLcom/annimon/stream/iterator/PrimitiveIterator$OfInt;->next()Ljava/lang/Objec HSPLcom/annimon/stream/operator/IntArray;->([I)V HSPLcom/annimon/stream/operator/IntArray;->hasNext()Z HSPLcom/annimon/stream/operator/IntArray;->nextInt()I +HSPLcom/annimon/stream/operator/IntRangeClosed;->(II)V +HSPLcom/annimon/stream/operator/IntRangeClosed;->hasNext()Z +HSPLcom/annimon/stream/operator/IntRangeClosed;->nextInt()I HSPLcom/annimon/stream/operator/ObjArray;->([Ljava/lang/Object;)V HSPLcom/annimon/stream/operator/ObjArray;->hasNext()Z HSPLcom/annimon/stream/operator/ObjArray;->nextIteration()Ljava/lang/Object; @@ -7435,13 +7347,13 @@ HSPLcom/fasterxml/jackson/core/base/GeneratorBase;->isEnabled(Lcom/fasterxml/jac HSPLcom/fasterxml/jackson/core/base/ParserBase;->()V HSPLcom/fasterxml/jackson/core/base/ParserBase;->(Lcom/fasterxml/jackson/core/io/IOContext;I)V HSPLcom/fasterxml/jackson/core/base/ParserBase;->_getSourceReference()Ljava/lang/Object; +HSPLcom/fasterxml/jackson/core/base/ParserBase;->_parseIntValue()I HSPLcom/fasterxml/jackson/core/base/ParserBase;->_parseNumericValue(I)V HSPLcom/fasterxml/jackson/core/base/ParserBase;->_releaseBuffers()V HSPLcom/fasterxml/jackson/core/base/ParserBase;->_validJsonTokenList()Ljava/lang/String; HSPLcom/fasterxml/jackson/core/base/ParserBase;->_validJsonValueList()Ljava/lang/String; HSPLcom/fasterxml/jackson/core/base/ParserBase;->close()V HSPLcom/fasterxml/jackson/core/base/ParserBase;->convertNumberToLong()V -HSPLcom/fasterxml/jackson/core/base/ParserBase;->getCurrentName()Ljava/lang/String; HSPLcom/fasterxml/jackson/core/base/ParserBase;->getIntValue()I HSPLcom/fasterxml/jackson/core/base/ParserBase;->getLongValue()J HSPLcom/fasterxml/jackson/core/base/ParserBase;->getNumberType()Lcom/fasterxml/jackson/core/JsonParser$NumberType; @@ -7450,7 +7362,7 @@ HSPLcom/fasterxml/jackson/core/base/ParserBase;->resetInt(ZI)Lcom/fasterxml/jack HSPLcom/fasterxml/jackson/core/base/ParserBase;->setCurrentValue(Ljava/lang/Object;)V HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->()V HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->(I)V -HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->_reportError(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->_reportError(Ljava/lang/String;)V HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->currentToken()Lcom/fasterxml/jackson/core/JsonToken; HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->currentTokenId()I HSPLcom/fasterxml/jackson/core/base/ParserMinimalBase;->getValueAsString()Ljava/lang/String; @@ -7541,6 +7453,7 @@ HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->()V HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->(Lcom/fasterxml/jackson/core/io/IOContext;ILjava/io/Reader;Lcom/fasterxml/jackson/core/ObjectCodec;Lcom/fasterxml/jackson/core/sym/CharsToNameCanonicalizer;)V HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->(Lcom/fasterxml/jackson/core/io/IOContext;ILjava/io/Reader;Lcom/fasterxml/jackson/core/ObjectCodec;Lcom/fasterxml/jackson/core/sym/CharsToNameCanonicalizer;[CIIZ)V HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_closeInput()V +HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_finishString()V HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_finishString2()V HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_loadMore()Z HSPLcom/fasterxml/jackson/core/json/ReaderBasedJsonParser;->_matchFalse()V @@ -7582,6 +7495,7 @@ HSPLcom/fasterxml/jackson/core/json/UTF8JsonGenerator;->writeString(Ljava/lang/S HSPLcom/fasterxml/jackson/core/json/UTF8JsonGenerator;->writeString([CII)V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->()V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->(Lcom/fasterxml/jackson/core/io/IOContext;ILjava/io/InputStream;Lcom/fasterxml/jackson/core/ObjectCodec;Lcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;[BIIIZ)V +HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_closeArrayScope()V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_closeInput()V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_closeObjectScope()V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_decodeCharForError(I)I @@ -7590,10 +7504,12 @@ HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_handleUnexpectedValu HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_loadMore()Z HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_loadMoreGuaranteed()V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_nextAfterName()Lcom/fasterxml/jackson/core/JsonToken; +HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_nextTokenNotInObject(I)Lcom/fasterxml/jackson/core/JsonToken; HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_padLastQuad(II)I HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_parseName(I)Ljava/lang/String; HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_parsePosNumber(I)Lcom/fasterxml/jackson/core/JsonToken; HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_releaseBuffers()V +HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_reportInvalidOther(I)V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_reportInvalidToken(Ljava/lang/String;Ljava/lang/String;)V HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_skipColon()I HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->_skipWS()I @@ -7607,6 +7523,7 @@ HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->findName(IIII)Ljava/l HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->findName([IIII)Ljava/lang/String; HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->getCurrentLocation()Lcom/fasterxml/jackson/core/JsonLocation; HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->getReadCapabilities()Lcom/fasterxml/jackson/core/util/JacksonFeatureSet; +HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->nextByte()I HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->nextFieldName()Ljava/lang/String; HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->parseEscapedName([IIIII)Ljava/lang/String; HSPLcom/fasterxml/jackson/core/json/UTF8StreamJsonParser;->parseLongName(III)Ljava/lang/String; @@ -7648,7 +7565,6 @@ HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;->_calcTertiaryShift(I HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;->_checkNeedForRehash()Z HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;->_findOffsetForAdd(I)I HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;->_findSecondary(III)Ljava/lang/String; -HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;->_findSecondary(II[II)Ljava/lang/String; HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;->_resizeAndFindOffsetForAdd(I)I HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;->_spilloverStart()I HSPLcom/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer;->_verifyLongName([III)Z @@ -8205,7 +8121,6 @@ HSPLcom/fasterxml/jackson/databind/deser/BeanDeserializer;->_deserializeWithErro HSPLcom/fasterxml/jackson/databind/deser/BeanDeserializer;->deserialize(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;)Ljava/lang/Object; HSPLcom/fasterxml/jackson/databind/deser/BeanDeserializer;->deserialize(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;Ljava/lang/Object;)Ljava/lang/Object; HSPLcom/fasterxml/jackson/databind/deser/BeanDeserializer;->deserializeFromObject(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;)Ljava/lang/Object; -HSPLcom/fasterxml/jackson/databind/deser/BeanDeserializer;->vanillaDeserialize(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;Lcom/fasterxml/jackson/core/JsonToken;)Ljava/lang/Object; HSPLcom/fasterxml/jackson/databind/deser/BeanDeserializerBase;->()V HSPLcom/fasterxml/jackson/databind/deser/BeanDeserializerBase;->(Lcom/fasterxml/jackson/databind/deser/BeanDeserializerBuilder;Lcom/fasterxml/jackson/databind/BeanDescription;Lcom/fasterxml/jackson/databind/deser/impl/BeanPropertyMap;Ljava/util/Map;Ljava/util/Set;ZLjava/util/Set;Z)V HSPLcom/fasterxml/jackson/databind/deser/BeanDeserializerBase;->_delegateDeserializer()Lcom/fasterxml/jackson/databind/JsonDeserializer; @@ -8364,6 +8279,7 @@ HSPLcom/fasterxml/jackson/databind/deser/impl/FailingDeserializer;->(Ljava HSPLcom/fasterxml/jackson/databind/deser/impl/FailingDeserializer;->(Ljava/lang/String;)V HSPLcom/fasterxml/jackson/databind/deser/impl/FieldProperty;->(Lcom/fasterxml/jackson/databind/deser/impl/FieldProperty;Lcom/fasterxml/jackson/databind/JsonDeserializer;Lcom/fasterxml/jackson/databind/deser/NullValueProvider;)V HSPLcom/fasterxml/jackson/databind/deser/impl/FieldProperty;->(Lcom/fasterxml/jackson/databind/introspect/BeanPropertyDefinition;Lcom/fasterxml/jackson/databind/JavaType;Lcom/fasterxml/jackson/databind/jsontype/TypeDeserializer;Lcom/fasterxml/jackson/databind/util/Annotations;Lcom/fasterxml/jackson/databind/introspect/AnnotatedField;)V +HSPLcom/fasterxml/jackson/databind/deser/impl/FieldProperty;->deserializeAndSet(Lcom/fasterxml/jackson/core/JsonParser;Lcom/fasterxml/jackson/databind/DeserializationContext;Ljava/lang/Object;)V HSPLcom/fasterxml/jackson/databind/deser/impl/FieldProperty;->fixAccess(Lcom/fasterxml/jackson/databind/DeserializationConfig;)V HSPLcom/fasterxml/jackson/databind/deser/impl/FieldProperty;->getMember()Lcom/fasterxml/jackson/databind/introspect/AnnotatedMember; HSPLcom/fasterxml/jackson/databind/deser/impl/FieldProperty;->withValueDeserializer(Lcom/fasterxml/jackson/databind/JsonDeserializer;)Lcom/fasterxml/jackson/databind/deser/SettableBeanProperty; @@ -9199,14 +9115,12 @@ HSPLcom/fasterxml/jackson/databind/ser/impl/IndexedListSerializer;->serializeCon HSPLcom/fasterxml/jackson/databind/ser/impl/IndexedListSerializer;->serializeContentsUsing(Ljava/util/List;Lcom/fasterxml/jackson/core/JsonGenerator;Lcom/fasterxml/jackson/databind/SerializerProvider;Lcom/fasterxml/jackson/databind/JsonSerializer;)V HSPLcom/fasterxml/jackson/databind/ser/impl/IndexedListSerializer;->withResolved(Lcom/fasterxml/jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;Ljava/lang/Boolean;)Lcom/fasterxml/jackson/databind/ser/impl/IndexedListSerializer; HSPLcom/fasterxml/jackson/databind/ser/impl/IndexedListSerializer;->withResolved(Lcom/fasterxml/jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;Ljava/lang/Boolean;)Lcom/fasterxml/jackson/databind/ser/std/AsArraySerializerBase; -HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double;->(Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap;Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JsonSerializer;Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JsonSerializer;)V HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty;->()V HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty;->(Z)V HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty;->newWith(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap; HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty;->serializerFor(Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/JsonSerializer; HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult;->(Lcom/fasterxml/jackson/databind/JsonSerializer;Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap;)V HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single;->(Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap;Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JsonSerializer;)V -HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single;->newWith(Ljava/lang/Class;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap; HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single;->serializerFor(Ljava/lang/Class;)Lcom/fasterxml/jackson/databind/JsonSerializer; HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap;->(Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap;)V HSPLcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap;->(Z)V @@ -10884,6 +10798,10 @@ HSPLcom/google/common/collect/RegularImmutableSet;->()V HSPLcom/google/common/collect/RegularImmutableSet;->([Ljava/lang/Object;I[Ljava/lang/Object;II)V HSPLcom/google/common/collect/RegularImmutableSet;->contains(Ljava/lang/Object;)Z HSPLcom/google/common/collect/RegularImmutableSet;->size()I +HSPLcom/google/common/collect/Sets$2;->(Ljava/util/Set;Ljava/util/Set;)V +HSPLcom/google/common/collect/Sets$2;->isEmpty()Z +HSPLcom/google/common/collect/Sets$SetView;->()V +HSPLcom/google/common/collect/Sets$SetView;->(Lcom/google/common/collect/Sets$1;)V HSPLcom/google/common/collect/Sets;->intersection(Ljava/util/Set;Ljava/util/Set;)Lcom/google/common/collect/Sets$SetView; HSPLcom/google/common/collect/Sets;->newIdentityHashSet()Ljava/util/Set; HSPLcom/google/common/collect/SingletonImmutableSet;->(Ljava/lang/Object;)V @@ -11636,7 +11554,6 @@ HSPLcom/squareup/wire/internal/Internal__InternalKt;->checkElementsNotNull(Ljava HSPLcom/squareup/wire/internal/Internal__InternalKt;->countNonNull(Ljava/lang/Object;Ljava/lang/Object;)I HSPLcom/squareup/wire/internal/Internal__InternalKt;->countNonNull(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)I HSPLcom/squareup/wire/internal/Internal__InternalKt;->countNonNull(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)I -HSPLcom/squareup/wire/internal/Internal__InternalKt;->immutableCopyOf(Ljava/lang/String;Ljava/util/List;)Ljava/util/List; HSPLio/reactivex/rxjava3/android/plugins/RxAndroidPlugins;->callRequireNonNull(Ljava/util/concurrent/Callable;)Lio/reactivex/rxjava3/core/Scheduler; HSPLio/reactivex/rxjava3/android/plugins/RxAndroidPlugins;->initMainThreadScheduler(Ljava/util/concurrent/Callable;)Lio/reactivex/rxjava3/core/Scheduler; HSPLio/reactivex/rxjava3/android/plugins/RxAndroidPlugins;->onMainThreadScheduler(Lio/reactivex/rxjava3/core/Scheduler;)Lio/reactivex/rxjava3/core/Scheduler; @@ -11796,6 +11713,7 @@ HSPLio/reactivex/rxjava3/exceptions/Exceptions;->throwIfFatal(Ljava/lang/Throwab HSPLio/reactivex/rxjava3/flowables/ConnectableFlowable;->()V HSPLio/reactivex/rxjava3/flowables/ConnectableFlowable;->refCount()Lio/reactivex/rxjava3/core/Flowable; HSPLio/reactivex/rxjava3/internal/disposables/CancellableDisposable;->(Lio/reactivex/rxjava3/functions/Cancellable;)V +HSPLio/reactivex/rxjava3/internal/disposables/CancellableDisposable;->dispose()V HSPLio/reactivex/rxjava3/internal/disposables/DisposableHelper;->()V HSPLio/reactivex/rxjava3/internal/disposables/DisposableHelper;->(Ljava/lang/String;I)V HSPLio/reactivex/rxjava3/internal/disposables/DisposableHelper;->dispose(Ljava/util/concurrent/atomic/AtomicReference;)Z @@ -12108,6 +12026,7 @@ HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$Conca HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap;->(Lio/reactivex/rxjava3/core/ObservableSource;Lio/reactivex/rxjava3/functions/Function;ILio/reactivex/rxjava3/internal/util/ErrorMode;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap;->subscribeActual(Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->(Lio/reactivex/rxjava3/core/Observer;)V +HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->dispose()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->isDisposed()Z HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->onNext(Ljava/lang/Object;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->setCancellable(Lio/reactivex/rxjava3/functions/Cancellable;)V @@ -12188,7 +12107,9 @@ HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedR HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->getHead()Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node; HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->leaveTransform(Ljava/lang/Object;)Ljava/lang/Object; HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->next(Ljava/lang/Object;)V +HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->removeFirst()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->replay(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;)V +HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->setFirst(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;Lio/reactivex/rxjava3/core/Observer;)V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;->dispose()V HSPLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$InnerDisposable;->index()Ljava/lang/Object; @@ -12687,6 +12608,10 @@ HSPLj$/time/ZoneOffset;->(I)V HSPLj$/time/ZoneOffset;->n()Lj$/time/zone/c; HSPLj$/time/ZoneOffset;->o()I HSPLj$/time/ZoneOffset;->r(I)Lj$/time/ZoneOffset; +HSPLj$/time/ZonedDateTime;->(Lj$/time/LocalDateTime;Lj$/time/ZoneId;Lj$/time/ZoneOffset;)V +HSPLj$/time/ZonedDateTime;->m(JILj$/time/ZoneId;)Lj$/time/ZonedDateTime; +HSPLj$/time/ZonedDateTime;->n(Lj$/time/Instant;Lj$/time/ZoneId;)Lj$/time/ZonedDateTime; +HSPLj$/time/ZonedDateTime;->toLocalDate()Lj$/time/LocalDate; HSPLj$/time/a;->g(JJ)J HSPLj$/time/a;->h(Lsun/misc/Unsafe;Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z HSPLj$/time/a;->i(JJ)J @@ -12865,7 +12790,7 @@ HSPLj$/util/S;->a(Lj$/util/function/Consumer;)V HSPLj$/util/S;->characteristics()I HSPLj$/util/S;->estimateSize()J HSPLj$/util/S;->getExactSizeIfKnown()J -HSPLj$/util/S;->s(Lj$/util/function/Consumer;)Z +HSPLj$/util/S;->p(Lj$/util/function/Consumer;)Z HSPLj$/util/U;->()V HSPLj$/util/V;->()V HSPLj$/util/W;->()V @@ -12875,7 +12800,7 @@ HSPLj$/util/Z;->a(Lj$/util/function/Consumer;)V HSPLj$/util/Z;->characteristics()I HSPLj$/util/Z;->estimateSize()J HSPLj$/util/Z;->getExactSizeIfKnown()J -HSPLj$/util/Z;->s(Lj$/util/function/Consumer;)Z +HSPLj$/util/Z;->p(Lj$/util/function/Consumer;)Z HSPLj$/util/b0;->()V HSPLj$/util/b0;->a(III)V HSPLj$/util/b0;->m([Ljava/lang/Object;II)Lj$/util/Spliterator; @@ -12884,7 +12809,6 @@ HSPLj$/util/c;->()V HSPLj$/util/concurrent/ConcurrentHashMap;->()V HSPLj$/util/concurrent/ConcurrentHashMap;->()V HSPLj$/util/concurrent/ConcurrentHashMap;->(IFI)V -HSPLj$/util/concurrent/ConcurrentHashMap;->addCount(JI)V HSPLj$/util/concurrent/ConcurrentHashMap;->casTabAt([Lj$/util/concurrent/l;ILj$/util/concurrent/l;Lj$/util/concurrent/l;)Z HSPLj$/util/concurrent/ConcurrentHashMap;->clear()V HSPLj$/util/concurrent/ConcurrentHashMap;->comparableClassFor(Ljava/lang/Object;)Ljava/lang/Class; @@ -12944,27 +12868,36 @@ HSPLj$/util/d;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLj$/util/d;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLj$/util/d;->remove(Ljava/lang/Object;)Ljava/lang/Object; HSPLj$/util/d;->values()Ljava/util/Collection; +HSPLj$/util/function/b;->(Ljava/util/Comparator;I)V HSPLj$/util/m;->()V HSPLj$/util/m;->j(Lj$/util/Spliterator;)J HSPLj$/util/m;->y(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLj$/util/stream/A1;->(Lj$/util/stream/V2;Ljava/lang/Object;I)V +HSPLj$/util/stream/A1;->l1()Lj$/util/stream/P1; HSPLj$/util/stream/B2;->(Lj$/util/stream/c;)V HSPLj$/util/stream/B2;->B1(ILj$/util/stream/g2;)Lj$/util/stream/g2; HSPLj$/util/stream/C2;->(Lj$/util/stream/g2;Ljava/util/Comparator;)V -HSPLj$/util/stream/C2;->m()V -HSPLj$/util/stream/C2;->n(J)V +HSPLj$/util/stream/C2;->l()V +HSPLj$/util/stream/C2;->m(J)V HSPLj$/util/stream/Collector$Characteristics;->()V HSPLj$/util/stream/Collector$Characteristics;->(Ljava/lang/String;I)V HSPLj$/util/stream/Collector$Characteristics;->values()[Lj$/util/stream/Collector$Characteristics; HSPLj$/util/stream/Collectors;->()V HSPLj$/util/stream/Collectors;->toList()Lj$/util/stream/Collector; HSPLj$/util/stream/Collectors;->toSet()Lj$/util/stream/Collector; +HSPLj$/util/stream/E1;->(Lj$/util/function/BinaryOperator;)V +HSPLj$/util/stream/E1;->accept(Ljava/lang/Object;)V +HSPLj$/util/stream/E1;->get()Ljava/lang/Object; +HSPLj$/util/stream/E1;->l()V +HSPLj$/util/stream/E1;->m(J)V +HSPLj$/util/stream/E1;->q()Z HSPLj$/util/stream/F1;->(Lj$/util/stream/V2;Lj$/util/function/BinaryOperator;Lj$/util/function/BiConsumer;Lj$/util/function/Supplier;Lj$/util/stream/Collector;)V HSPLj$/util/stream/F1;->l1()Lj$/util/stream/P1; HSPLj$/util/stream/F1;->p()I HSPLj$/util/stream/G1;->(Lj$/util/function/Supplier;Lj$/util/function/BiConsumer;Lj$/util/function/BinaryOperator;)V HSPLj$/util/stream/G1;->accept(Ljava/lang/Object;)V -HSPLj$/util/stream/G1;->m()V -HSPLj$/util/stream/G1;->n(J)V +HSPLj$/util/stream/G1;->l()V +HSPLj$/util/stream/G1;->m(J)V HSPLj$/util/stream/H;->(I)V HSPLj$/util/stream/I;->(ZLj$/util/stream/V2;Ljava/lang/Object;Lj$/util/function/Predicate;Lj$/util/stream/b;)V HSPLj$/util/stream/I;->f0(Lj$/util/stream/w0;Lj$/util/Spliterator;)Ljava/lang/Object; @@ -12975,12 +12908,13 @@ HSPLj$/util/stream/L0;->get()Ljava/lang/Object; HSPLj$/util/stream/M;->()V HSPLj$/util/stream/M;->get()Ljava/lang/Object; HSPLj$/util/stream/N;->()V -HSPLj$/util/stream/N;->m()V -HSPLj$/util/stream/N;->n(J)V +HSPLj$/util/stream/N;->l()V +HSPLj$/util/stream/N;->m(J)V HSPLj$/util/stream/Q1;->()V HSPLj$/util/stream/Q1;->get()Ljava/lang/Object; HSPLj$/util/stream/S1;->(Lj$/util/stream/c;Lj$/util/stream/g2;I)V -HSPLj$/util/stream/S1;->n(J)V +HSPLj$/util/stream/S1;->accept(Ljava/lang/Object;)V +HSPLj$/util/stream/S1;->m(J)V HSPLj$/util/stream/S2;->(Ljava/util/Map;)V HSPLj$/util/stream/S2;->a(Lj$/util/stream/T2;)V HSPLj$/util/stream/T2;->()V @@ -13000,8 +12934,8 @@ HSPLj$/util/stream/U2;->j(Lj$/util/stream/T2;)Lj$/util/stream/S2; HSPLj$/util/stream/U2;->values()[Lj$/util/stream/U2; HSPLj$/util/stream/U;->(Z)V HSPLj$/util/stream/U;->f0(Lj$/util/stream/w0;Lj$/util/Spliterator;)Ljava/lang/Object; -HSPLj$/util/stream/U;->m()V -HSPLj$/util/stream/U;->n(J)V +HSPLj$/util/stream/U;->l()V +HSPLj$/util/stream/U;->m(J)V HSPLj$/util/stream/U;->p()I HSPLj$/util/stream/V0;->()V HSPLj$/util/stream/V1;->(Lj$/util/Spliterator;IZ)V @@ -13032,7 +12966,7 @@ HSPLj$/util/stream/Z0;->()V HSPLj$/util/stream/b;->(I)V HSPLj$/util/stream/b;->get()Ljava/lang/Object; HSPLj$/util/stream/c2;->(Lj$/util/stream/g2;)V -HSPLj$/util/stream/c2;->m()V +HSPLj$/util/stream/c2;->l()V HSPLj$/util/stream/c2;->q()Z HSPLj$/util/stream/c;->()V HSPLj$/util/stream/c;->(Lj$/util/Spliterator;IZ)V @@ -13044,6 +12978,12 @@ HSPLj$/util/stream/c;->isParallel()Z HSPLj$/util/stream/c;->n1(Lj$/util/Spliterator;Lj$/util/stream/g2;)Lj$/util/stream/g2; HSPLj$/util/stream/c;->o1(Lj$/util/stream/g2;)Lj$/util/stream/g2; HSPLj$/util/stream/c;->q1(Lj$/util/stream/F3;)Ljava/lang/Object; +HSPLj$/util/stream/h2;->(Lj$/util/stream/i2;Lj$/util/stream/g2;)V +HSPLj$/util/stream/h2;->accept(Ljava/lang/Object;)V +HSPLj$/util/stream/h2;->m(J)V +HSPLj$/util/stream/h2;->q()Z +HSPLj$/util/stream/i2;->(Lj$/util/stream/c;IJJ)V +HSPLj$/util/stream/i2;->B1(ILj$/util/stream/g2;)Lj$/util/stream/g2; HSPLj$/util/stream/l;->(I)V HSPLj$/util/stream/n;->(Lj$/util/function/Supplier;Lj$/util/function/BiConsumer;Lj$/util/function/BinaryOperator;Lj$/util/function/Function;Ljava/util/Set;)V HSPLj$/util/stream/n;->(Lj$/util/function/Supplier;Lj$/util/function/BiConsumer;Lj$/util/function/BinaryOperator;Ljava/util/Set;)V @@ -13131,14 +13071,12 @@ HSPLkotlin/UnsafeLazyImpl;->(Lkotlin/jvm/functions/Function0;)V HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object; HSPLkotlin/collections/AbstractCollection$toString$1;->(Lkotlin/collections/AbstractCollection;)V HSPLkotlin/collections/AbstractCollection;->()V -HSPLkotlin/collections/AbstractCollection;->contains(Ljava/lang/Object;)Z HSPLkotlin/collections/AbstractCollection;->isEmpty()Z HSPLkotlin/collections/AbstractCollection;->size()I HSPLkotlin/collections/AbstractCollection;->toString()Ljava/lang/String; HSPLkotlin/collections/AbstractList$Companion;->()V HSPLkotlin/collections/AbstractList$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V -HSPLkotlin/collections/AbstractList$IteratorImpl;->(Lkotlin/collections/AbstractList;)V HSPLkotlin/collections/AbstractList;->()V HSPLkotlin/collections/AbstractList;->()V HSPLkotlin/collections/AbstractList;->iterator()Ljava/util/Iterator; @@ -13321,7 +13259,6 @@ HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/It HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinTo$default(Ljava/lang/Iterable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Appendable; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinTo(Ljava/lang/Iterable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/Appendable; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString$default(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/String; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object; @@ -13329,6 +13266,7 @@ HSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/Lis HSPLkotlin/collections/CollectionsKt___CollectionsKt;->maxOrNull(Ljava/lang/Iterable;)Ljava/lang/Comparable; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->minOrNull(Ljava/lang/Iterable;)Ljava/lang/Comparable; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->minus(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;[Ljava/lang/Object;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->reversed(Ljava/lang/Iterable;)Ljava/util/List; @@ -13338,6 +13276,7 @@ HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Ite HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sumOfFloat(Ljava/lang/Iterable;)F HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toCollection(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Collection;)[I +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/lang/Iterable;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List; HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableSet(Ljava/lang/Iterable;)Ljava/util/Set; @@ -13398,7 +13337,6 @@ HSPLkotlin/collections/MapsKt;->mapCapacity(I)I HSPLkotlin/collections/MapsKt;->mapOf(Lkotlin/Pair;)Ljava/util/Map; HSPLkotlin/collections/MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map; HSPLkotlin/collections/MapsKt;->plus(Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; -HSPLkotlin/collections/MapsKt;->plus(Ljava/util/Map;Lkotlin/Pair;)Ljava/util/Map; HSPLkotlin/collections/MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V HSPLkotlin/collections/MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map; HSPLkotlin/collections/MapsKt;->toMap(Ljava/util/Map;)Ljava/util/Map; @@ -13411,7 +13349,6 @@ HSPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->linkedMapOf([Lkotlin/Pair;)Ljava/util/LinkedHashMap; HSPLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->plus(Ljava/util/Map;Ljava/util/Map;)Ljava/util/Map; -HSPLkotlin/collections/MapsKt__MapsKt;->plus(Ljava/util/Map;Lkotlin/Pair;)Ljava/util/Map; HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;Ljava/lang/Iterable;)V HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map; @@ -13527,7 +13464,6 @@ HSPLkotlin/jvm/internal/FunctionReference;->(ILjava/lang/Object;Ljava/lang HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V @@ -13897,8 +13833,6 @@ HSPLkotlin/reflect/jvm/internal/KTypeImpl;->getJavaType()Ljava/lang/reflect/Type HSPLkotlin/reflect/jvm/internal/KTypeImpl;->isMarkedNullable()Z HSPLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;->()V HSPLkotlin/reflect/jvm/internal/ModuleByClassLoaderKt;->getOrCreateModule(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/components/RuntimeModuleData; -HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V -HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->(Lkotlin/jvm/functions/Function0;)V HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->invoke()Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val$1;->()V @@ -15084,6 +15018,7 @@ HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Builder;->merg HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Builder;->mergeFrom(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite$Builder; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Builder;->setId(I)Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation$Builder; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->()V +HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$1;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$Builder;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Annotation;->(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$Builder;Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$1;)V @@ -15276,7 +15211,6 @@ HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1;->parsePartialFrom(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property$1;->parsePartialFrom(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property; HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->()V -HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$1;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->(Z)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;->getContextReceiverTypeCount()I @@ -15367,6 +15301,7 @@ HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$Argument;->initField HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$Argument;->isInitialized()Z HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$Argument;->writeTo(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedOutputStream;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->()V +HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$1;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->(Z)V HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getArgument(I)Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type$Argument; @@ -15379,7 +15314,6 @@ HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getDefaultInstance HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getFlags()I HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getNullable()Z HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getOuterType()Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type; -HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->getSerializedSize()I HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->hasAbbreviatedType()Z HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->hasAbbreviatedTypeId()Z HSPLkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Type;->hasClassName()Z @@ -15688,7 +15622,6 @@ HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmNameResolve HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmNameResolverBase;->()V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmNameResolverBase;->([Ljava/lang/String;Ljava/util/Set;Ljava/util/List;)V HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmNameResolverBase;->getQualifiedClassName(I)Ljava/lang/String; -HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmNameResolverBase;->getString(I)Ljava/lang/String; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmNameResolverBase;->isLocalClassName(I)Z HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmNameResolverKt;->toExpandedRecordsList(Ljava/util/List;)Ljava/util/List; HSPLkotlin/reflect/jvm/internal/impl/metadata/jvm/deserialization/JvmProtoBufUtil;->()V @@ -15866,6 +15799,7 @@ HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readRawVarint64 HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->readSInt64()J HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->recomputeBufferSizeAfterLimit()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->refillBuffer(I)V +HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;->tryRefillBuffer(I)Z HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedOutputStream;->(Ljava/io/OutputStream;[B)V HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedOutputStream;->computeBoolSize(IZ)I HSPLkotlin/reflect/jvm/internal/impl/protobuf/CodedOutputStream;->computeBoolSizeNoTag(Z)I @@ -15916,8 +15850,8 @@ HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->getField(Lkotlin/reflec HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->getSerializedSize()I HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->getWireFormatForFieldType(Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;Z)I HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->hasField(Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet$FieldDescriptorLite;)Z -HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->isInitialized(Ljava/util/Map$Entry;)Z HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->iterator()Ljava/util/Iterator; +HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->makeImmutable()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->newFieldSet()Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet; HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->readPrimitiveField(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/WireFormat$FieldType;Z)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/protobuf/FieldSet;->setField(Lkotlin/reflect/jvm/internal/impl/protobuf/FieldSet$FieldDescriptorLite;Ljava/lang/Object;)V @@ -15938,7 +15872,6 @@ HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMes HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->extensionsSerializedSize()I HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->getExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->hasExtension(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)Z -HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->makeExtensionsImmutable()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->newExtensionWriter()Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage$ExtensionWriter; HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->parseUnknownField(Lkotlin/reflect/jvm/internal/impl/protobuf/CodedInputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/CodedOutputStream;Lkotlin/reflect/jvm/internal/impl/protobuf/ExtensionRegistryLite;I)Z HSPLkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$ExtendableMessage;->verifyExtensionContainingType(Lkotlin/reflect/jvm/internal/impl/protobuf/GeneratedMessageLite$GeneratedExtension;)V @@ -16007,7 +15940,6 @@ HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->binarySearchInArr HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->checkMutable()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->ensureEntryArrayMutable()V HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->entrySet()Ljava/util/Set; -HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->get(Ljava/lang/Object;)Ljava/lang/Object; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getArrayEntryAt(I)Ljava/util/Map$Entry; HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getNumArrayEntries()I HSPLkotlin/reflect/jvm/internal/impl/protobuf/SmallSortedMap;->getOverflowEntries()Ljava/lang/Iterable; @@ -16443,6 +16375,7 @@ HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/Deserializati HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->getSkipMetadataVersionCheck()Z HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->getSkipPrereleaseCheck()Z HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationConfiguration$Default;->getTypeAliasesAllowed()Z +HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationContext;->(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/NameResolver;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/TypeTable;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/VersionRequirementTable;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/descriptors/DeserializedContainerSource;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/TypeDeserializer;Ljava/util/List;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationContext;->childContext$default(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationContext;Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/NameResolver;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/TypeTable;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/VersionRequirementTable;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;ILjava/lang/Object;)Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationContext; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationContext;->childContext(Lkotlin/reflect/jvm/internal/impl/descriptors/DeclarationDescriptor;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/NameResolver;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/TypeTable;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/VersionRequirementTable;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;)Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationContext; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationContext;->getComponents()Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/DeserializationComponents; @@ -16496,9 +16429,10 @@ HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeseria HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeserializer;->getReceiverParameterAnnotations(Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotatedCallableKind;)Lkotlin/reflect/jvm/internal/impl/descriptors/annotations/Annotations; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeserializer;->initializeWithCoroutinesExperimentalityStatus(Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/descriptors/DeserializedSimpleFunctionDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Lkotlin/reflect/jvm/internal/impl/descriptors/ReceiverParameterDescriptor;Ljava/util/List;Ljava/util/List;Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/types/KotlinType;Lkotlin/reflect/jvm/internal/impl/descriptors/Modality;Lkotlin/reflect/jvm/internal/impl/descriptors/DescriptorVisibility;Ljava/util/Map;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeserializer;->loadConstructor(Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Constructor;Z)Lkotlin/reflect/jvm/internal/impl/descriptors/ClassConstructorDescriptor; +HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeserializer;->loadFunction(Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Function;)Lkotlin/reflect/jvm/internal/impl/descriptors/SimpleFunctionDescriptor; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeserializer;->loadOldFlags(I)I +HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeserializer;->loadProperty(Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$Property;)Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/MemberDeserializer;->valueParameters(Ljava/util/List;Lkotlin/reflect/jvm/internal/impl/protobuf/MessageLite;Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/AnnotatedCallableKind;)Ljava/util/List; -HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/NameResolverUtilKt;->getClassId(Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/NameResolver;I)Lkotlin/reflect/jvm/internal/impl/name/ClassId; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/NameResolverUtilKt;->getName(Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/NameResolver;I)Lkotlin/reflect/jvm/internal/impl/name/Name; HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ProtoBasedClassDataFinder;->(Lkotlin/reflect/jvm/internal/impl/metadata/ProtoBuf$PackageFragment;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/NameResolver;Lkotlin/reflect/jvm/internal/impl/metadata/deserialization/BinaryVersion;Lkotlin/jvm/functions/Function1;)V HSPLkotlin/reflect/jvm/internal/impl/serialization/deserialization/ProtoBasedClassDataFinder;->findClassData(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/serialization/deserialization/ClassData; @@ -17241,7 +17175,6 @@ HSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toLongOrNull(Ljava/lang/S HSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toLongOrNull(Ljava/lang/String;I)Ljava/lang/Long; HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z -HSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->regionMatches(Ljava/lang/String;ILjava/lang/String;IIZ)Z HSPLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;CCZILjava/lang/Object;)Ljava/lang/String; HSPLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Ljava/lang/String; @@ -17260,7 +17193,6 @@ HSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence; HSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z HSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;CZ)Z HSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z -HSPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange; HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZILjava/lang/Object;)I @@ -17417,8 +17349,6 @@ HSPLnet/zetetic/database/sqlcipher/CloseGuard;->get()Lnet/zetetic/database/sqlci HSPLnet/zetetic/database/sqlcipher/CloseGuard;->open(Ljava/lang/String;)V HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->()V HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->acquireReference()V -HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->close()V -HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->releaseReference()V HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$Operation;->()V HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$Operation;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection$1;)V HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->()V @@ -17444,10 +17374,6 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->attachCancellationSignal(L HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->bindArguments(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String; HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V -HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V -HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)I -HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZLandroid/os/CancellationSignal;)I -HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForLastInsertedRowId(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)Ljava/lang/String; HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->finalizePreparedStatement(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V @@ -17492,17 +17418,12 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->recycleConnectionWaite HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->releaseConnection(Lnet/zetetic/database/sqlcipher/SQLiteConnection;)V HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->throwIfClosedLocked()V -HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Lnet/zetetic/database/sqlcipher/SQLiteConnection; HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Lnet/zetetic/database/sqlcipher/SQLiteConnection; HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Lnet/zetetic/database/sqlcipher/SQLiteConnection; -HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V HSPLnet/zetetic/database/sqlcipher/SQLiteCursor$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;J)Landroid/database/CursorWindow; HSPLnet/zetetic/database/sqlcipher/SQLiteCursor$$ExternalSyntheticApiModelOutline1;->m()V HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->()V -HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->(Lnet/zetetic/database/sqlcipher/SQLiteCursorDriver;Ljava/lang/String;Lnet/zetetic/database/sqlcipher/SQLiteQuery;)V -HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->awc_clearOrCreateWindow(Ljava/lang/String;)V HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->close()V -HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->fillWindow(I)V HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->finalize()V HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->getColumnIndex(Ljava/lang/String;)I HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->getColumnNames()[Ljava/lang/String; @@ -17529,12 +17450,10 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->executeSql(Ljava/lang/String HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->findEditTable(Ljava/lang/String;)Ljava/lang/String; HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getPath()Ljava/lang/String; HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I -HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getThreadSession()Lnet/zetetic/database/sqlcipher/SQLiteSession; HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getVersion()I HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->hasCodec()Z -HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->inTransaction()Z HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->insert(Ljava/lang/String;ILandroid/content/ContentValues;)J -HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->insert(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;)J HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isMainThread()Z HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isOpen()Z HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isReadOnly()Z @@ -17570,7 +17489,6 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteDebug;->()V HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)V HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->cursorClosed()V HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->query(Lnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;[Ljava/lang/Object;)Landroid/database/Cursor; -HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->query(Lnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;[Ljava/lang/String;)Landroid/database/Cursor; HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->()V HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getJournalSizeLimit()I HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getWALAutoCheckpoint()I @@ -17584,7 +17502,6 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->getReadableDatabase()Lnet/ HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->getWritableDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->onConfigure(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->()V -HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bind(ILjava/lang/Object;)V HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bindAllArgs([Ljava/lang/Object;)V HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V @@ -17595,7 +17512,7 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getColumnNames()[Ljava/lang/S HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getConnectionFlags()I HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getSession()Lnet/zetetic/database/sqlcipher/SQLiteSession; -HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->onAllReferencesReleased()V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getSql()Ljava/lang/String; HSPLnet/zetetic/database/sqlcipher/SQLiteQuery;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;Landroid/os/CancellationSignal;)V HSPLnet/zetetic/database/sqlcipher/SQLiteQueryBuilder;->()V HSPLnet/zetetic/database/sqlcipher/SQLiteQueryBuilder;->appendClause(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)V @@ -17605,7 +17522,6 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;->()V HSPLnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;->(Lnet/zetetic/database/sqlcipher/SQLiteSession$1;)V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->()V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool;)V -HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->beginTransaction(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->beginTransactionUnchecked(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->endTransaction(Landroid/os/CancellationSignal;)V @@ -17617,7 +17533,6 @@ HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeForLong(Ljava/lang/Str HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Z HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->hasTransaction()Z HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->obtainTransaction(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;)Lnet/zetetic/database/sqlcipher/SQLiteSession$Transaction; -HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->prepare(Ljava/lang/String;ILandroid/os/CancellationSignal;Lnet/zetetic/database/sqlcipher/SQLiteStatementInfo;)V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->recycleTransaction(Lnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;)V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->releaseConnection()V HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->setTransactionSuccessful()V @@ -17871,8 +17786,6 @@ HSPLokhttp3/RealCall$AsyncCall;->()V HSPLokhttp3/RealCall$AsyncCall;->(Lokhttp3/RealCall;Lokhttp3/Callback;)V HSPLokhttp3/RealCall$AsyncCall;->execute()V HSPLokhttp3/RealCall$AsyncCall;->executeOn(Ljava/util/concurrent/ExecutorService;)V -HSPLokhttp3/RealCall$AsyncCall;->get()Lokhttp3/RealCall; -HSPLokhttp3/RealCall$AsyncCall;->host()Ljava/lang/String; HSPLokhttp3/RealCall;->(Lokhttp3/OkHttpClient;Lokhttp3/Request;Z)V HSPLokhttp3/RealCall;->captureCallStackTrace()V HSPLokhttp3/RealCall;->enqueue(Lokhttp3/Callback;)V @@ -18199,10 +18112,10 @@ HSPLokio/Buffer$UnsafeCursor;->()V HSPLokio/Buffer;->()V HSPLokio/Buffer;->clear()V HSPLokio/Buffer;->close()V -HSPLokio/Buffer;->completeSegmentByteCount()J HSPLokio/Buffer;->copyTo(Lokio/Buffer;JJ)Lokio/Buffer; HSPLokio/Buffer;->exhausted()Z HSPLokio/Buffer;->indexOf(BJJ)J +HSPLokio/Buffer;->indexOfElement(Lokio/ByteString;J)J HSPLokio/Buffer;->read(Lokio/Buffer;J)J HSPLokio/Buffer;->read([BII)I HSPLokio/Buffer;->readByte()B @@ -18285,7 +18198,6 @@ HSPLokio/InflaterSource;->refill()Z HSPLokio/InflaterSource;->releaseBytesAfterInflate()V HSPLokio/InputStreamSource;->(Ljava/io/InputStream;Lokio/Timeout;)V HSPLokio/InputStreamSource;->close()V -HSPLokio/InputStreamSource;->read(Lokio/Buffer;J)J HSPLokio/Okio;->blackhole()Lokio/Sink; HSPLokio/Okio;->buffer(Lokio/Sink;)Lokio/BufferedSink; HSPLokio/Okio;->buffer(Lokio/Source;)Lokio/BufferedSource; @@ -18339,6 +18251,7 @@ HSPLokio/RealBufferedSource;->peek()Lokio/BufferedSource; HSPLokio/RealBufferedSource;->rangeEquals(JLokio/ByteString;)Z HSPLokio/RealBufferedSource;->rangeEquals(JLokio/ByteString;II)Z HSPLokio/RealBufferedSource;->read(Lokio/Buffer;J)J +HSPLokio/RealBufferedSource;->readAll(Lokio/Sink;)J HSPLokio/RealBufferedSource;->readByte()B HSPLokio/RealBufferedSource;->readHexadecimalUnsignedLong()J HSPLokio/RealBufferedSource;->readIntLe()I @@ -18356,7 +18269,6 @@ HSPLokio/Segment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarke HSPLokio/Segment;->()V HSPLokio/Segment;->()V HSPLokio/Segment;->([BIIZZ)V -HSPLokio/Segment;->compact()V HSPLokio/Segment;->pop()Lokio/Segment; HSPLokio/Segment;->push(Lokio/Segment;)Lokio/Segment; HSPLokio/Segment;->sharedCopy()Lokio/Segment; @@ -18542,7 +18454,6 @@ HSPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->(Lorg/conscrypt/C HSPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->access$100(Lorg/conscrypt/ConscryptEngineSocket$SSLInputStream;[BII)I HSPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->init()V HSPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->isHandshaking(Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;)Z -HSPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->processDataFromSocket([BII)I HSPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->read([BII)I HSPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->readFromSocket()I HSPLorg/conscrypt/ConscryptEngineSocket$SSLInputStream;->readUntilDataAvailable([BII)I @@ -18650,7 +18561,6 @@ HSPLorg/conscrypt/NativeSsl$BioWrapper;->(Lorg/conscrypt/NativeSsl;)V HSPLorg/conscrypt/NativeSsl$BioWrapper;->(Lorg/conscrypt/NativeSsl;Lorg/conscrypt/NativeSsl$1;)V HSPLorg/conscrypt/NativeSsl$BioWrapper;->getPendingWrittenBytes()I HSPLorg/conscrypt/NativeSsl$BioWrapper;->readDirectByteBuffer(JI)I -HSPLorg/conscrypt/NativeSsl$BioWrapper;->writeDirectByteBuffer(JI)I HSPLorg/conscrypt/NativeSsl;->(JLorg/conscrypt/SSLParametersImpl;Lorg/conscrypt/NativeCrypto$SSLHandshakeCallbacks;Lorg/conscrypt/SSLParametersImpl$AliasChooser;Lorg/conscrypt/SSLParametersImpl$PSKCallbacks;)V HSPLorg/conscrypt/NativeSsl;->access$100(Lorg/conscrypt/NativeSsl;)J HSPLorg/conscrypt/NativeSsl;->access$200(Lorg/conscrypt/NativeSsl;)Ljava/util/concurrent/locks/ReadWriteLock; @@ -18816,6 +18726,7 @@ HSPLorg/conscrypt/OpenSSLX509CertPath;->getCertificates()Ljava/util/List; HSPLorg/conscrypt/OpenSSLX509Certificate;->(J)V HSPLorg/conscrypt/OpenSSLX509Certificate;->alternativeNameArrayToList([[Ljava/lang/Object;)Ljava/util/Collection; HSPLorg/conscrypt/OpenSSLX509Certificate;->checkValidity(Ljava/util/Date;)V +HSPLorg/conscrypt/OpenSSLX509Certificate;->equals(Ljava/lang/Object;)Z HSPLorg/conscrypt/OpenSSLX509Certificate;->finalize()V HSPLorg/conscrypt/OpenSSLX509Certificate;->fromX509DerInputStream(Ljava/io/InputStream;)Lorg/conscrypt/OpenSSLX509Certificate; HSPLorg/conscrypt/OpenSSLX509Certificate;->getCriticalExtensionOIDs()Ljava/util/Set; @@ -19061,6 +18972,7 @@ HSPLorg/signal/core/util/CursorExtensionsKt;->requireBoolean(Landroid/database/C HSPLorg/signal/core/util/CursorExtensionsKt;->requireInt(Landroid/database/Cursor;Ljava/lang/String;)I HSPLorg/signal/core/util/CursorExtensionsKt;->requireLong(Landroid/database/Cursor;Ljava/lang/String;)J HSPLorg/signal/core/util/CursorExtensionsKt;->requireNonNullString(Landroid/database/Cursor;Ljava/lang/String;)Ljava/lang/String; +HSPLorg/signal/core/util/CursorExtensionsKt;->requireObject(Landroid/database/Cursor;Ljava/lang/String;Lorg/signal/core/util/IntSerializer;)Ljava/lang/Object; HSPLorg/signal/core/util/CursorExtensionsKt;->requireString(Landroid/database/Cursor;Ljava/lang/String;)Ljava/lang/String; HSPLorg/signal/core/util/CursorExtensionsKt;->toInt(Z)I HSPLorg/signal/core/util/CursorUtil;->getBlob(Landroid/database/Cursor;Ljava/lang/String;)Lj$/util/Optional; @@ -19280,6 +19192,7 @@ HSPLorg/signal/core/util/concurrent/SettableFuture;->notifyAllListeners()V HSPLorg/signal/core/util/concurrent/SettableFuture;->set(Ljava/lang/Object;)Z HSPLorg/signal/core/util/concurrent/SettableFuture;->setException(Ljava/lang/Throwable;)Z HSPLorg/signal/core/util/concurrent/SignalExecutors$$ExternalSyntheticLambda0;->()V +HSPLorg/signal/core/util/concurrent/SignalExecutors$$ExternalSyntheticLambda0;->rejectedExecution(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V HSPLorg/signal/core/util/concurrent/SignalExecutors$$ExternalSyntheticLambda1;->(Ljava/lang/String;I)V HSPLorg/signal/core/util/concurrent/SignalExecutors$$ExternalSyntheticLambda1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; HSPLorg/signal/core/util/concurrent/SignalExecutors$1;->(Ljava/lang/Runnable;Ljava/lang/String;I)V @@ -19292,9 +19205,11 @@ HSPLorg/signal/core/util/concurrent/SignalExecutors$NumberedThreadFactory$1;->ru HSPLorg/signal/core/util/concurrent/SignalExecutors$NumberedThreadFactory;->-$$Nest$fgetpriority(Lorg/signal/core/util/concurrent/SignalExecutors$NumberedThreadFactory;)I HSPLorg/signal/core/util/concurrent/SignalExecutors$NumberedThreadFactory;->(Ljava/lang/String;I)V HSPLorg/signal/core/util/concurrent/SignalExecutors$NumberedThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +HSPLorg/signal/core/util/concurrent/SignalExecutors;->$r8$lambda$0Q0afsv1raKIrq3aP-SuMcT2Ad0(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V HSPLorg/signal/core/util/concurrent/SignalExecutors;->$r8$lambda$QcfzSx3VRxairlCydtFL9hAJp4M(Ljava/lang/String;ILjava/lang/Runnable;)Ljava/lang/Thread; HSPLorg/signal/core/util/concurrent/SignalExecutors;->()V HSPLorg/signal/core/util/concurrent/SignalExecutors;->getAndStartHandlerThread(Ljava/lang/String;I)Landroid/os/HandlerThread; +HSPLorg/signal/core/util/concurrent/SignalExecutors;->lambda$newCachedBoundedExecutor$1(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V HSPLorg/signal/core/util/concurrent/SignalExecutors;->lambda$newCachedSingleThreadExecutor$0(Ljava/lang/String;ILjava/lang/Runnable;)Ljava/lang/Thread; HSPLorg/signal/core/util/concurrent/SignalExecutors;->newCachedBoundedExecutor(Ljava/lang/String;IIII)Ljava/util/concurrent/ExecutorService; HSPLorg/signal/core/util/concurrent/SignalExecutors;->newCachedSingleThreadExecutor(Ljava/lang/String;I)Ljava/util/concurrent/ExecutorService; @@ -19385,6 +19300,7 @@ HSPLorg/signal/core/util/logging/Scrubber;->access$getTOP_100_TLDS$p()Ljava/util HSPLorg/signal/core/util/logging/Scrubber;->access$hash(Lorg/signal/core/util/logging/Scrubber;Ljava/lang/String;)Ljava/lang/String; HSPLorg/signal/core/util/logging/Scrubber;->hash(Ljava/lang/String;)Ljava/lang/String; HSPLorg/signal/core/util/logging/Scrubber;->scrub(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +HSPLorg/signal/core/util/logging/Scrubber;->scrub(Ljava/lang/CharSequence;Ljava/util/regex/Pattern;Lkotlin/jvm/functions/Function2;)Ljava/lang/CharSequence; HSPLorg/signal/core/util/logging/Scrubber;->scrubCallLinkKeys(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; HSPLorg/signal/core/util/logging/Scrubber;->scrubDomains(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; HSPLorg/signal/core/util/logging/Scrubber;->scrubE164(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; @@ -19405,10 +19321,9 @@ HSPLorg/signal/core/util/tracing/DebugAnnotation$Companion$ADAPTER$1;->(Lc HSPLorg/signal/core/util/tracing/DebugAnnotation$Companion;->()V HSPLorg/signal/core/util/tracing/DebugAnnotation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/signal/core/util/tracing/DebugAnnotation;->()V +HSPLorg/signal/core/util/tracing/DebugAnnotation;->(Ljava/lang/Long;Ljava/lang/String;Ljava/lang/Boolean;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Double;Ljava/lang/String;Ljava/lang/Long;Lorg/signal/core/util/tracing/DebugAnnotation$NestedValue;Lokio/ByteString;)V HSPLorg/signal/core/util/tracing/DebugAnnotation;->equals(Ljava/lang/Object;)Z -HSPLorg/signal/core/util/tracing/TracePacket$Builder;->build()Lorg/signal/core/util/tracing/TracePacket; HSPLorg/signal/core/util/tracing/TracePacket$Builder;->synchronization_marker(Lokio/ByteString;)Lorg/signal/core/util/tracing/TracePacket$Builder; -HSPLorg/signal/core/util/tracing/TracePacket$Builder;->timestamp(Ljava/lang/Long;)Lorg/signal/core/util/tracing/TracePacket$Builder; HSPLorg/signal/core/util/tracing/TracePacket$Builder;->track_descriptor(Lorg/signal/core/util/tracing/TrackDescriptor;)Lorg/signal/core/util/tracing/TracePacket$Builder; HSPLorg/signal/core/util/tracing/TracePacket$Builder;->track_event(Lorg/signal/core/util/tracing/TrackEvent;)Lorg/signal/core/util/tracing/TracePacket$Builder; HSPLorg/signal/core/util/tracing/TracePacket$Builder;->trusted_packet_sequence_id(Ljava/lang/Integer;)Lorg/signal/core/util/tracing/TracePacket$Builder; @@ -19422,7 +19337,6 @@ HSPLorg/signal/core/util/tracing/Tracer$$ExternalSyntheticLambda0;->getTimeNanos HSPLorg/signal/core/util/tracing/Tracer;->()V HSPLorg/signal/core/util/tracing/Tracer;->()V HSPLorg/signal/core/util/tracing/Tracer;->addPacket(Lorg/signal/core/util/tracing/TracePacket;)V -HSPLorg/signal/core/util/tracing/Tracer;->debugAnnotation(Ljava/lang/String;Ljava/lang/String;)Lorg/signal/core/util/tracing/DebugAnnotation; HSPLorg/signal/core/util/tracing/Tracer;->end(Ljava/lang/String;J)V HSPLorg/signal/core/util/tracing/Tracer;->forMethodEnd(Ljava/lang/String;JJ)Lorg/signal/core/util/tracing/TracePacket; HSPLorg/signal/core/util/tracing/Tracer;->forSynchronization(J)Lorg/signal/core/util/tracing/TracePacket; @@ -19431,7 +19345,6 @@ HSPLorg/signal/core/util/tracing/Tracer;->forTrackId(J)Lorg/signal/core/util/tra HSPLorg/signal/core/util/tracing/Tracer;->getInstance()Lorg/signal/core/util/tracing/Tracer; HSPLorg/signal/core/util/tracing/Tracer;->start(Ljava/lang/String;)V HSPLorg/signal/core/util/tracing/Tracer;->start(Ljava/lang/String;JLjava/lang/String;Ljava/lang/String;)V -HSPLorg/signal/core/util/tracing/Tracer;->start(Ljava/lang/String;JLjava/util/Map;)V HSPLorg/signal/core/util/tracing/Tracer;->start(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V HSPLorg/signal/core/util/tracing/Tracer;->start(Ljava/lang/String;Ljava/util/Map;)V HSPLorg/signal/core/util/tracing/Tracer;->toByteArray(Ljava/util/UUID;)[B @@ -19445,7 +19358,6 @@ HSPLorg/signal/core/util/tracing/TrackDescriptor$Companion;->(Lkotlin/jvm/ HSPLorg/signal/core/util/tracing/TrackDescriptor;->()V HSPLorg/signal/core/util/tracing/TrackDescriptor;->(Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/String;Lorg/signal/core/util/tracing/ThreadDescriptor;Lorg/signal/core/util/tracing/CounterDescriptor;Lokio/ByteString;)V HSPLorg/signal/core/util/tracing/TrackEvent$Builder;->()V -HSPLorg/signal/core/util/tracing/TrackEvent$Builder;->build()Lorg/signal/core/util/tracing/TrackEvent; HSPLorg/signal/core/util/tracing/TrackEvent$Builder;->debug_annotations(Ljava/util/List;)Lorg/signal/core/util/tracing/TrackEvent$Builder; HSPLorg/signal/core/util/tracing/TrackEvent$Builder;->name(Ljava/lang/String;)Lorg/signal/core/util/tracing/TrackEvent$Builder; HSPLorg/signal/core/util/tracing/TrackEvent$Builder;->track_uuid(Ljava/lang/Long;)Lorg/signal/core/util/tracing/TrackEvent$Builder; @@ -19472,6 +19384,8 @@ HSPLorg/signal/libsignal/internal/FilterExceptions;->filterExceptions(Lorg/signa HSPLorg/signal/libsignal/internal/FilterExceptions;->filterExceptions(Lorg/signal/libsignal/internal/FilterExceptions$ThrowingNativeOperation;)Ljava/lang/Object; HSPLorg/signal/libsignal/internal/Native;->()V HSPLorg/signal/libsignal/internal/Native;->loadLibrary()V +HSPLorg/signal/libsignal/internal/NativeHandleGuard$SimpleOwner;->(J)V +HSPLorg/signal/libsignal/internal/NativeHandleGuard$SimpleOwner;->finalize()V HSPLorg/signal/libsignal/internal/NativeHandleGuard;->(Lorg/signal/libsignal/internal/NativeHandleGuard$Owner;)V HSPLorg/signal/libsignal/internal/NativeHandleGuard;->close()V HSPLorg/signal/libsignal/internal/NativeHandleGuard;->nativeHandle()J @@ -19593,14 +19507,14 @@ HSPLorg/signal/libsignal/protocol/state/KyberPreKeyRecord;->lambda$getTimestamp$ HSPLorg/signal/libsignal/protocol/state/KyberPreKeyRecord;->lambda$serialize$5(Lorg/signal/libsignal/internal/NativeHandleGuard;)[B HSPLorg/signal/libsignal/protocol/state/KyberPreKeyRecord;->serialize()[B HSPLorg/signal/libsignal/protocol/state/KyberPreKeyRecord;->unsafeNativeHandleWithoutGuard()J -HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda1;->(Lorg/signal/libsignal/internal/NativeHandleGuard;)V -HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda1;->run()Ljava/lang/Object; HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda2;->(Lorg/signal/libsignal/internal/NativeHandleGuard;)V -HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda2;->run()I +HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda2;->run()Ljava/lang/Object; HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda3;->(Lorg/signal/libsignal/internal/NativeHandleGuard;)V -HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda3;->run()J +HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda3;->run()I HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda4;->(Lorg/signal/libsignal/internal/NativeHandleGuard;)V -HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda4;->run()Ljava/lang/Object; +HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda4;->run()J +HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda5;->(Lorg/signal/libsignal/internal/NativeHandleGuard;)V +HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda5;->run()Ljava/lang/Object; HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord;->$r8$lambda$CDxhLFeixdJJ3Gbnc7rtYlou6XM(Lorg/signal/libsignal/internal/NativeHandleGuard;)I HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord;->$r8$lambda$NNeXiB4zebY13vEwwB1h5auBUd4(Lorg/signal/libsignal/internal/NativeHandleGuard;)[B HSPLorg/signal/libsignal/protocol/state/SignedPreKeyRecord;->$r8$lambda$jMI4_aTYFD7DBqxBerR9ubPEl0s(Lorg/signal/libsignal/internal/NativeHandleGuard;)Lorg/signal/libsignal/protocol/ecc/ECKeyPair; @@ -19623,10 +19537,11 @@ HSPLorg/signal/libsignal/protocol/util/Pair;->(Ljava/lang/Object;Ljava/lan HSPLorg/signal/libsignal/protocol/util/Pair;->first()Ljava/lang/Object; HSPLorg/signal/libsignal/protocol/util/Pair;->second()Ljava/lang/Object; HSPLorg/signal/libsignal/zkgroup/ServerPublicParams$$ExternalSyntheticLambda0;->([B)V -HSPLorg/signal/libsignal/zkgroup/ServerPublicParams$$ExternalSyntheticLambda0;->run()V -HSPLorg/signal/libsignal/zkgroup/ServerPublicParams;->$r8$lambda$R936UR66SIUnVcbjr9dIro_sBME([B)V +HSPLorg/signal/libsignal/zkgroup/ServerPublicParams$$ExternalSyntheticLambda0;->run()J +HSPLorg/signal/libsignal/zkgroup/ServerPublicParams;->$r8$lambda$seZa-GNqGGj1AGfCKLVPf3_WvAQ([B)J HSPLorg/signal/libsignal/zkgroup/ServerPublicParams;->([B)V -HSPLorg/signal/libsignal/zkgroup/ServerPublicParams;->lambda$new$0([B)V +HSPLorg/signal/libsignal/zkgroup/ServerPublicParams;->lambda$new$0([B)J +HSPLorg/signal/libsignal/zkgroup/ServerPublicParams;->release(J)V HSPLorg/signal/libsignal/zkgroup/auth/ClientZkAuthOperations;->(Lorg/signal/libsignal/zkgroup/ServerPublicParams;)V HSPLorg/signal/libsignal/zkgroup/internal/ByteArray$UncheckedAndUncloned;->$values()[Lorg/signal/libsignal/zkgroup/internal/ByteArray$UncheckedAndUncloned; HSPLorg/signal/libsignal/zkgroup/internal/ByteArray$UncheckedAndUncloned;->()V @@ -19650,14 +19565,19 @@ HSPLorg/signal/libsignal/zkgroup/profiles/ProfileKeyVersion;->serialize()Ljava/l HSPLorg/signal/libsignal/zkgroup/receipts/ClientZkReceiptOperations;->(Lorg/signal/libsignal/zkgroup/ServerPublicParams;)V HSPLorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda1;->(Lorg/signal/paging/BufferedPagingController;I)V HSPLorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda1;->run()V +HSPLorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda2;->(Lorg/signal/paging/BufferedPagingController;Ljava/lang/Object;)V +HSPLorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda2;->run()V HSPLorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda3;->(Lorg/signal/paging/BufferedPagingController;)V HSPLorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda3;->run()V +HSPLorg/signal/paging/BufferedPagingController;->$r8$lambda$GxlLAxjfERBgyqmyvxteAPWaQkA(Lorg/signal/paging/BufferedPagingController;Ljava/lang/Object;)V HSPLorg/signal/paging/BufferedPagingController;->$r8$lambda$LZo0__w5_DH31X-e0IJhSqYlhmM(Lorg/signal/paging/BufferedPagingController;I)V HSPLorg/signal/paging/BufferedPagingController;->$r8$lambda$rEsvvMe_LeaFyq_h5sQ9KWDvIFs(Lorg/signal/paging/BufferedPagingController;)V HSPLorg/signal/paging/BufferedPagingController;->(Lorg/signal/paging/PagedDataSource;Lorg/signal/paging/PagingConfig;Lorg/signal/paging/DataStream;)V HSPLorg/signal/paging/BufferedPagingController;->lambda$onDataInvalidated$1()V +HSPLorg/signal/paging/BufferedPagingController;->lambda$onDataItemChanged$2(Ljava/lang/Object;)V HSPLorg/signal/paging/BufferedPagingController;->lambda$onDataNeededAroundIndex$0(I)V HSPLorg/signal/paging/BufferedPagingController;->onDataInvalidated()V +HSPLorg/signal/paging/BufferedPagingController;->onDataItemChanged(Ljava/lang/Object;)V HSPLorg/signal/paging/BufferedPagingController;->onDataNeededAroundIndex(I)V HSPLorg/signal/paging/CompressedList;->(I)V HSPLorg/signal/paging/CompressedList;->(Ljava/util/List;)V @@ -19668,21 +19588,27 @@ HSPLorg/signal/paging/DataStatus;->()V HSPLorg/signal/paging/DataStatus;->(ILjava/util/BitSet;)V HSPLorg/signal/paging/DataStatus;->getEarliestUnmarkedIndexInRange(II)I HSPLorg/signal/paging/DataStatus;->getLatestUnmarkedIndexInRange(II)I +HSPLorg/signal/paging/DataStatus;->mark(I)V HSPLorg/signal/paging/DataStatus;->markRange(II)V HSPLorg/signal/paging/DataStatus;->obtain(I)Lorg/signal/paging/DataStatus; HSPLorg/signal/paging/DataStatus;->recycle()V HSPLorg/signal/paging/DataStatus;->size()I +HSPLorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda0;->(Lorg/signal/paging/FixedSizePagingController;Ljava/lang/Object;)V +HSPLorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda0;->run()V HSPLorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda2;->(Lorg/signal/paging/FixedSizePagingController;IIII)V HSPLorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda2;->run()V HSPLorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda3;->(Lorg/signal/paging/FixedSizePagingController;)V HSPLorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda3;->isCanceled()Z +HSPLorg/signal/paging/FixedSizePagingController;->$r8$lambda$2jZFFAhs3dG0IThMmzJQSvWvcd0(Lorg/signal/paging/FixedSizePagingController;Ljava/lang/Object;)V HSPLorg/signal/paging/FixedSizePagingController;->$r8$lambda$S1N9oMReIFywjAgkTfXskOOFzyk(Lorg/signal/paging/FixedSizePagingController;)Z HSPLorg/signal/paging/FixedSizePagingController;->$r8$lambda$pQWvrV6w7QQq3SnkCgnHNDTtP_I(Lorg/signal/paging/FixedSizePagingController;IIII)V HSPLorg/signal/paging/FixedSizePagingController;->()V HSPLorg/signal/paging/FixedSizePagingController;->(Lorg/signal/paging/PagedDataSource;Lorg/signal/paging/PagingConfig;Lorg/signal/paging/DataStream;I)V +HSPLorg/signal/paging/FixedSizePagingController;->lambda$onDataItemChanged$2(Ljava/lang/Object;)V HSPLorg/signal/paging/FixedSizePagingController;->lambda$onDataNeededAroundIndex$0()Z HSPLorg/signal/paging/FixedSizePagingController;->lambda$onDataNeededAroundIndex$1(IIII)V HSPLorg/signal/paging/FixedSizePagingController;->onDataInvalidated()V +HSPLorg/signal/paging/FixedSizePagingController;->onDataItemChanged(Ljava/lang/Object;)V HSPLorg/signal/paging/FixedSizePagingController;->onDataNeededAroundIndex(I)V HSPLorg/signal/paging/LivePagedData;->(Landroidx/lifecycle/LiveData;Lorg/signal/paging/PagingController;)V HSPLorg/signal/paging/LivePagedData;->getData()Landroidx/lifecycle/LiveData; @@ -19711,6 +19637,7 @@ HSPLorg/signal/paging/PagingConfig;->pageSize()I HSPLorg/signal/paging/PagingConfig;->startIndex()I HSPLorg/signal/paging/ProxyPagingController;->()V HSPLorg/signal/paging/ProxyPagingController;->onDataInvalidated()V +HSPLorg/signal/paging/ProxyPagingController;->onDataItemChanged(Ljava/lang/Object;)V HSPLorg/signal/paging/ProxyPagingController;->onDataNeededAroundIndex(I)V HSPLorg/signal/paging/ProxyPagingController;->set(Lorg/signal/paging/PagingController;)V HSPLorg/signal/ringrtc/BuildInfo;->()V @@ -20042,7 +19969,7 @@ HSPLorg/thoughtcrime/securesms/animation/AnimationCompleteListener;->onAnimation HSPLorg/thoughtcrime/securesms/attachments/Attachment$Companion;->()V HSPLorg/thoughtcrime/securesms/attachments/Attachment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/attachments/Attachment;->()V -HSPLorg/thoughtcrime/securesms/attachments/Attachment;->(Ljava/lang/String;IJLjava/lang/String;ILjava/lang/String;Ljava/lang/String;[B[BLjava/lang/String;ZZZIIIZJLjava/lang/String;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Lorg/thoughtcrime/securesms/blurhash/BlurHash;Lorg/thoughtcrime/securesms/audio/AudioHash;Lorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;)V +HSPLorg/thoughtcrime/securesms/attachments/Attachment;->(Ljava/lang/String;IJLjava/lang/String;Lorg/thoughtcrime/securesms/attachments/Cdn;Ljava/lang/String;Ljava/lang/String;[B[BLjava/lang/String;ZZZIIIZJLjava/lang/String;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Lorg/thoughtcrime/securesms/blurhash/BlurHash;Lorg/thoughtcrime/securesms/audio/AudioHash;Lorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;)V HSPLorg/thoughtcrime/securesms/attachments/Attachment;->isInProgress()Z HSPLorg/thoughtcrime/securesms/attachments/Attachment;->isPermanentlyFailed()Z HSPLorg/thoughtcrime/securesms/attachments/Attachment;->isSticker()Z @@ -20053,22 +19980,36 @@ HSPLorg/thoughtcrime/securesms/attachments/AttachmentId;->()V HSPLorg/thoughtcrime/securesms/attachments/AttachmentId;->(J)V HSPLorg/thoughtcrime/securesms/attachments/AttachmentId;->hashCode()I HSPLorg/thoughtcrime/securesms/attachments/AttachmentId;->toString()Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/attachments/Cdn$Serializer;->()V +HSPLorg/thoughtcrime/securesms/attachments/Cdn$Serializer;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/attachments/Cdn$Serializer;->deserialize(I)Lorg/thoughtcrime/securesms/attachments/Cdn; +HSPLorg/thoughtcrime/securesms/attachments/Cdn$Serializer;->deserialize(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/attachments/Cdn$Serializer;->fromCdnNumber(I)Lorg/thoughtcrime/securesms/attachments/Cdn; +HSPLorg/thoughtcrime/securesms/attachments/Cdn$Serializer;->serialize(Lorg/thoughtcrime/securesms/attachments/Cdn;)Ljava/lang/Integer; +HSPLorg/thoughtcrime/securesms/attachments/Cdn$WhenMappings;->()V +HSPLorg/thoughtcrime/securesms/attachments/Cdn;->$values()[Lorg/thoughtcrime/securesms/attachments/Cdn; +HSPLorg/thoughtcrime/securesms/attachments/Cdn;->()V +HSPLorg/thoughtcrime/securesms/attachments/Cdn;->(Ljava/lang/String;II)V +HSPLorg/thoughtcrime/securesms/attachments/Cdn;->access$getValue$p(Lorg/thoughtcrime/securesms/attachments/Cdn;)I +HSPLorg/thoughtcrime/securesms/attachments/Cdn;->getCdnNumber()I +HSPLorg/thoughtcrime/securesms/attachments/Cdn;->serialize()I +HSPLorg/thoughtcrime/securesms/attachments/Cdn;->values()[Lorg/thoughtcrime/securesms/attachments/Cdn; HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment$DisplayOrderComparator;->()V HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment$DisplayOrderComparator;->()V HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment$DisplayOrderComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment$DisplayOrderComparator;->compare(Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment;)I HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment;->()V -HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment;->(Lorg/thoughtcrime/securesms/attachments/AttachmentId;JZZLjava/lang/String;IJLjava/lang/String;ILjava/lang/String;Ljava/lang/String;[B[BILjava/lang/String;ZZZIIZLjava/lang/String;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Lorg/thoughtcrime/securesms/blurhash/BlurHash;Lorg/thoughtcrime/securesms/audio/AudioHash;Lorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;IJLjava/lang/String;)V +HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment;->(Lorg/thoughtcrime/securesms/attachments/AttachmentId;JZZLjava/lang/String;IJLjava/lang/String;Lorg/thoughtcrime/securesms/attachments/Cdn;Ljava/lang/String;Ljava/lang/String;[B[BILjava/lang/String;ZZZIIZLjava/lang/String;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Lorg/thoughtcrime/securesms/blurhash/BlurHash;Lorg/thoughtcrime/securesms/audio/AudioHash;Lorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;IJLjava/lang/String;ILjava/lang/String;Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment;->getDisplayOrder()I HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment;->getUri()Landroid/net/Uri; HSPLorg/thoughtcrime/securesms/attachments/DatabaseAttachment;->hashCode()I HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;->()V HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;->forPointer$default(Lorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;Lj$/util/Optional;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Ljava/lang/String;ILjava/lang/Object;)Lj$/util/Optional; -HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;->forPointer(Lj$/util/Optional;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Ljava/lang/String;)Lj$/util/Optional; +HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;->forPointer$default(Lorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;Lj$/util/Optional;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Ljava/lang/String;IILjava/lang/Object;)Lj$/util/Optional; +HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;->forPointer(Lj$/util/Optional;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Ljava/lang/String;I)Lj$/util/Optional; HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion;->forPointers(Lj$/util/Optional;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment;->()V -HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment;->(Ljava/lang/String;IJLjava/lang/String;ILjava/lang/String;Ljava/lang/String;[B[BILjava/lang/String;ZZZIIJLjava/lang/String;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Lorg/thoughtcrime/securesms/blurhash/BlurHash;)V +HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment;->(Ljava/lang/String;IJLjava/lang/String;Lorg/thoughtcrime/securesms/attachments/Cdn;Ljava/lang/String;Ljava/lang/String;[B[BILjava/lang/String;ZZZIIJLjava/lang/String;Lorg/thoughtcrime/securesms/stickers/StickerLocator;Lorg/thoughtcrime/securesms/blurhash/BlurHash;)V HSPLorg/thoughtcrime/securesms/attachments/PointerAttachment;->getUri()Landroid/net/Uri; HSPLorg/thoughtcrime/securesms/avatar/Avatar$Companion;->()V HSPLorg/thoughtcrime/securesms/avatar/Avatar$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -20139,6 +20080,15 @@ HSPLorg/thoughtcrime/securesms/avatar/view/AvatarView;->(Landroid/content/ HSPLorg/thoughtcrime/securesms/avatar/view/AvatarView;->displayChatAvatar(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;Z)V HSPLorg/thoughtcrime/securesms/avatar/view/AvatarView;->hideStoryRing()V HSPLorg/thoughtcrime/securesms/avatar/view/AvatarView;->setStoryRingFromState(Lorg/thoughtcrime/securesms/database/model/StoryViewState;)V +HSPLorg/thoughtcrime/securesms/backup/RestoreState$Companion;->()V +HSPLorg/thoughtcrime/securesms/backup/RestoreState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/backup/RestoreState$Companion;->getSerializer()Lorg/signal/core/util/LongSerializer; +HSPLorg/thoughtcrime/securesms/backup/RestoreState$Serializer;->()V +HSPLorg/thoughtcrime/securesms/backup/RestoreState$Serializer;->()V +HSPLorg/thoughtcrime/securesms/backup/RestoreState;->$values()[Lorg/thoughtcrime/securesms/backup/RestoreState; +HSPLorg/thoughtcrime/securesms/backup/RestoreState;->()V +HSPLorg/thoughtcrime/securesms/backup/RestoreState;->(Ljava/lang/String;IIZ)V +HSPLorg/thoughtcrime/securesms/backup/RestoreState;->access$getSerializer$cp()Lorg/signal/core/util/LongSerializer; HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->()V HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/badges/BadgeImageView;->clearDrawable()V @@ -20169,6 +20119,26 @@ HSPLorg/thoughtcrime/securesms/blurhash/BlurHash;->()V HSPLorg/thoughtcrime/securesms/blurhash/BlurHash;->parseOrNull(Ljava/lang/String;)Lorg/thoughtcrime/securesms/blurhash/BlurHash; HSPLorg/thoughtcrime/securesms/blurhash/BlurHashModelLoader$Factory;->()V HSPLorg/thoughtcrime/securesms/blurhash/BlurHashResourceDecoder;->()V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/AlbumThumbnailView;Ljava/util/List;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/components/AlbumThumbnailView;Ljava/util/List;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/components/AlbumThumbnailView;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/components/AlbumThumbnailView;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->applyCorners()V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->applyCornersForSizeClass2()V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->getCells()[Lorg/thoughtcrime/securesms/components/ThumbnailView; +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->inflateLayout(I)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setCancelTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setCellBackgroundColor(I)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setPlayVideoClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setRadii(IIII)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setRelativeRadii(Lorg/thoughtcrime/securesms/components/ThumbnailView;IIII)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setSlide(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/mms/Slide;IZ)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setSlides(Lcom/bumptech/glide/RequestManager;Ljava/util/List;Z)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->showSlides(Lcom/bumptech/glide/RequestManager;Ljava/util/List;)V +HSPLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->sizeClass(I)I HSPLorg/thoughtcrime/securesms/components/AlertView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/AlertView;->initialize()V HSPLorg/thoughtcrime/securesms/components/AlertView;->setNone()V @@ -20221,16 +20191,19 @@ HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->setAvatarClickHandle HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->setFallbackPhotoProvider(Lorg/thoughtcrime/securesms/recipients/Recipient$FallbackPhotoProvider;)V HSPLorg/thoughtcrime/securesms/components/AvatarImageView;->setOnClickListener(Landroid/view/View$OnClickListener;)V HSPLorg/thoughtcrime/securesms/components/ComposeText$1;->(Lorg/thoughtcrime/securesms/components/ComposeText;)V +HSPLorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener;->()V +HSPLorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener;->(Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener;)V +HSPLorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener;->(Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener;Lorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener-IA;)V HSPLorg/thoughtcrime/securesms/components/ComposeText$QueryStart;->(IZ)V HSPLorg/thoughtcrime/securesms/components/ComposeText;->()V HSPLorg/thoughtcrime/securesms/components/ComposeText;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/ComposeText;->canFilter(Landroid/text/Editable;)Z HSPLorg/thoughtcrime/securesms/components/ComposeText;->changeSelectionForPartialMentions(Landroid/text/Spanned;II)Z HSPLorg/thoughtcrime/securesms/components/ComposeText;->clearInlineQuery()V HSPLorg/thoughtcrime/securesms/components/ComposeText;->doAfterCursorChange(Landroid/text/Editable;)V HSPLorg/thoughtcrime/securesms/components/ComposeText;->ellipsizeToWidth(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; -HSPLorg/thoughtcrime/securesms/components/ComposeText;->enoughToFilter(Landroid/text/Editable;Z)Z +HSPLorg/thoughtcrime/securesms/components/ComposeText;->findQueryStart(Ljava/lang/CharSequence;I)Lorg/thoughtcrime/securesms/components/ComposeText$QueryStart; HSPLorg/thoughtcrime/securesms/components/ComposeText;->findQueryStart(Ljava/lang/CharSequence;IC)I -HSPLorg/thoughtcrime/securesms/components/ComposeText;->findQueryStart(Ljava/lang/CharSequence;IZ)Lorg/thoughtcrime/securesms/components/ComposeText$QueryStart; HSPLorg/thoughtcrime/securesms/components/ComposeText;->initialize()V HSPLorg/thoughtcrime/securesms/components/ComposeText;->isLandscape()Z HSPLorg/thoughtcrime/securesms/components/ComposeText;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; @@ -20269,6 +20242,51 @@ HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setOnlyShowSe HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setPlaybackSpeedListener(Lorg/thoughtcrime/securesms/components/PlaybackSpeedToggleTextView$PlaybackSpeedListener;)V HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setRevealDotColor(I)V HSPLorg/thoughtcrime/securesms/components/ConversationItemFooter;->setTextColor(I)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail$Companion;->()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->dispatchDraw(Landroid/graphics/Canvas;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->getFooter()Lorg/thoughtcrime/securesms/util/views/Stub; +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setBorderless(Z)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setCancelTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setClickable(Z)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setConversationColor(I)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setCorners(IIII)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setFocusable(Z)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setImageResource(Lcom/bumptech/glide/RequestManager;Ljava/util/List;ZZ)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setMaximumThumbnailHeight(I)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setMinimumThumbnailWidth(I)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setOnLongClickListener(Landroid/view/View$OnLongClickListener;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setPlayVideoClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setThumbnailBounds([I)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->showShade(Z)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->showThumbnailView()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState$Creator;->()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->(ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIII)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->(ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState; +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->copy(ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIII)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState; +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$Creator;->()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState$Creator;->()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->(FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIII)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->(FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIIIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIIIILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState; +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->copy(FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIII)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState; +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->()V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->applyState(Lorg/thoughtcrime/securesms/util/views/Stub;Lorg/thoughtcrime/securesms/util/views/Stub;)V +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->copy$default(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;ILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState; +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->copy(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;)Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState; +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->getAlbumViewState()Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState; +HSPLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->getThumbnailViewState()Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState; HSPLorg/thoughtcrime/securesms/components/ConversationScrollToView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/ConversationScrollToView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLorg/thoughtcrime/securesms/components/ConversationScrollToView;->setUnreadCountBackgroundTint(I)V @@ -20297,6 +20315,7 @@ HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcri HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/CharSequence;)V HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)V HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)V +HSPLorg/thoughtcrime/securesms/components/FromTextView;->setText(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZZ)V HSPLorg/thoughtcrime/securesms/components/HidingLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;->()V HSPLorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V @@ -20313,6 +20332,7 @@ HSPLorg/thoughtcrime/securesms/components/InputPanel$RecordTime;->(Landroi HSPLorg/thoughtcrime/securesms/components/InputPanel$SlideToCancel;->(Landroid/view/View;)V HSPLorg/thoughtcrime/securesms/components/InputPanel;->()V HSPLorg/thoughtcrime/securesms/components/InputPanel;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/InputPanel;->getVoiceNoteDraft()Lorg/thoughtcrime/securesms/database/DraftTable$Draft; HSPLorg/thoughtcrime/securesms/components/InputPanel;->onFinishInflate()V HSPLorg/thoughtcrime/securesms/components/InputPanel;->setHideForMessageRequestState(Z)V HSPLorg/thoughtcrime/securesms/components/InputPanel;->setMediaKeyboardToggleMode(Lorg/thoughtcrime/securesms/keyboard/KeyboardPage;)V @@ -20402,9 +20422,17 @@ HSPLorg/thoughtcrime/securesms/components/QuoteView;->setMessageType(Lorg/though HSPLorg/thoughtcrime/securesms/components/QuoteView;->setWallpaperEnabled(Z)V HSPLorg/thoughtcrime/securesms/components/RatingManager;->()V HSPLorg/thoughtcrime/securesms/components/RatingManager;->showRatingDialogIfNecessary(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->()V +HSPLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->(Landroid/view/ViewGroup;Landroid/animation/LayoutTransition;)V +HSPLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->(Landroid/view/ViewGroup;Landroid/animation/LayoutTransition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->findRecyclerParent()Landroidx/recyclerview/widget/RecyclerView; +HSPLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->onScrollStateChanged(Landroidx/recyclerview/widget/RecyclerView;I)V +HSPLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->onViewAttachedToWindow(Landroid/view/View;)V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$2;->()V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$2;->()V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$3;->(Lkotlin/jvm/functions/Function1;)V +HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$3;->test(Ljava/lang/Object;)Z +HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$3;->test(Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;)Z HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$4;->(Lkotlin/jvm/functions/Function1;)V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$5;->(Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;)V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$Companion;->()V @@ -20412,6 +20440,7 @@ HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$Companion;->< HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$DefaultScrollStrategy;->()V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$DefaultScrollStrategy;->()V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;->(IZLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollStrategy;)V +HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;->getPosition()I HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1;->()V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1;->()V HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRequests$1;->apply(JLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;)Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest; @@ -20423,6 +20452,35 @@ HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->(Land HSPLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->notifyListCommitted()V HSPLorg/thoughtcrime/securesms/components/SendButton;->()V HSPLorg/thoughtcrime/securesms/components/SendButton;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport0;->m(Ljava/lang/Object;)Ljava/util/List; +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport1;->m(Ljava/lang/Object;)Ljava/util/List; +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport2;->m([Ljava/lang/Object;)Ljava/util/List; +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$CancelClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$CancelClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;Lorg/thoughtcrime/securesms/components/ThumbnailView$CancelClickDispatcher-IA;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$DownloadClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$DownloadClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;Lorg/thoughtcrime/securesms/components/ThumbnailView$DownloadClickDispatcher-IA;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$ThumbnailClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView$ThumbnailClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;Lorg/thoughtcrime/securesms/components/ThumbnailView$ThumbnailClickDispatcher-IA;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->()V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->dispatchDraw(Landroid/graphics/Canvas;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->fillTargetDimensions([I[I[I)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->getNonZeroCount([I)I +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->hasSameContents(Lorg/thoughtcrime/securesms/mms/Slide;Lorg/thoughtcrime/securesms/mms/Slide;)Z +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->onMeasure(II)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->onSizeChanged(IIII)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setBounds(IIII)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setCancelTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setClickable(Z)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setFocusable(Z)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setImageResource(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/mms/Slide;ZZ)Lorg/signal/core/util/concurrent/ListenableFuture; +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setImageResource(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/mms/Slide;ZZII)Lorg/signal/core/util/concurrent/ListenableFuture; +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setPlayVideoClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setRadii(IIII)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V +HSPLorg/thoughtcrime/securesms/components/ThumbnailView;->showSecondaryText(Z)V HSPLorg/thoughtcrime/securesms/components/TypingIndicatorView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/TypingIndicatorView;->initialize(Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/components/TypingIndicatorView;->setDotTint(I)V @@ -20481,6 +20539,9 @@ HSPLorg/thoughtcrime/securesms/components/emoji/EmojiProvider;->getEmojiDrawable HSPLorg/thoughtcrime/securesms/components/emoji/EmojiSpan;->(Landroid/graphics/drawable/Drawable;Landroid/widget/TextView;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiSpan;->draw(Landroid/graphics/Canvas;Ljava/lang/CharSequence;IIFIIILandroid/graphics/Paint;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiSpan;->getSize(Landroid/graphics/Paint;Ljava/lang/CharSequence;IILandroid/graphics/Paint$FontMetricsInt;)I +HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;)V +HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda1;->()V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda2;->run()V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda3;->(Ljava/lang/Runnable;)V @@ -20509,6 +20570,7 @@ HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->onMeasure(II)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->onSizeChanged(IIII)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setMentionBackgroundTint(I)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setOverflowText(Ljava/lang/CharSequence;)V +HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setTextColor(I)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->setTextSize(IF)V HSPLorg/thoughtcrime/securesms/components/emoji/EmojiTextView;->unchanged(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;)Z @@ -20578,6 +20640,9 @@ HSPLorg/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick;->() HSPLorg/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick;->(Ljava/lang/String;ILjava/lang/String;)V HSPLorg/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick;->fitzpatrickFromUnicode(Ljava/lang/CharSequence;I)Lorg/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick; HSPLorg/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick;->values()[Lorg/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick; +HSPLorg/thoughtcrime/securesms/components/mention/MentionAnnotation$$ExternalSyntheticLambda1;->()V +HSPLorg/thoughtcrime/securesms/components/mention/MentionAnnotation;->getMentionAnnotations(Landroid/text/Spanned;)Ljava/util/List; +HSPLorg/thoughtcrime/securesms/components/mention/MentionAnnotation;->getMentionAnnotations(Landroid/text/Spanned;II)Ljava/util/List; HSPLorg/thoughtcrime/securesms/components/mention/MentionDeleter;->()V HSPLorg/thoughtcrime/securesms/components/mention/MentionRenderer$MultiLineMentionRenderer;->(IILandroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V HSPLorg/thoughtcrime/securesms/components/mention/MentionRenderer$SingleLineMentionRenderer;->(IILandroid/graphics/drawable/Drawable;)V @@ -20692,6 +20757,82 @@ HSPLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;->acce HSPLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;->draw(Landroid/graphics/Canvas;Landroid/text/Spanned;Landroid/text/Layout;)V HSPLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;->stopAnimating()V HSPLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate;->updateFromTextColor()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->containsPlayableSlides(Ljava/util/List;)Z +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->getTransferState(Ljava/util/List;)I +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode;->$values()[Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode;->(Ljava/lang/String;I)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress$Companion;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress;->(JJ)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress;->toString()Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setCancelClickListener$1;->(Landroid/view/View$OnClickListener;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setCancelClickListener$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setCancelClickListener$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->(Z)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->(Z)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setShowSecondaryText$1;->(Z)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setShowSecondaryText$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setShowSecondaryText$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setSlides$2;->(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;Ljava/util/List;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setSlides$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setSlides$2;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setTransferClickListener$1;->(Landroid/view/View$OnClickListener;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setTransferClickListener$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setTransferClickListener$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setVisible$1;->(Z)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setVisible$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setVisible$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->access$isUpdateToExistingSet(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;Ljava/util/List;)Z +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->access$slidesAsListOfTimestamps(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;Ljava/util/List;)Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->access$verboseLog(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;Ljava/lang/String;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->containsPlayableSlides(Ljava/util/List;)Z +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->deriveMode(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->getTransferState(Ljava/util/List;)I +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->isUpdateToExistingSet(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;Ljava/util/List;)Z +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->onAttachedToWindow()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setCancelClickListener(Landroid/view/View$OnClickListener;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setClickable(Z)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setFocusable(Z)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setShowSecondaryText(Z)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setSlides(Ljava/util/List;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setTransferClickListener(Landroid/view/View$OnClickListener;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->setVisible(Z)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->slidesAsListOfTimestamps(Ljava/util/List;)Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->updateState(Lkotlin/jvm/functions/Function1;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->verboseLog(Ljava/lang/String;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->(ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZ)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->(ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->copy$default(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZILjava/lang/Object;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->copy(ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZ)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->equals(Ljava/lang/Object;)Z +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->getNetworkProgress()Ljava/util/Map; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->getSlides()Ljava/util/List; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->toString()Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$Companion;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State;->$values()[Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State;->(Ljava/lang/String;I)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->()V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->(Landroid/content/Context;Landroid/util/AttributeSet;II)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->(Landroid/content/Context;Landroid/util/AttributeSet;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->progressPaint(I)Landroid/graphics/Paint; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->stopIconPaint(I)Landroid/graphics/Paint; +HSPLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->trackPaint(I)Landroid/graphics/Paint; HSPLorg/thoughtcrime/securesms/components/voice/RetryableInitAudioSink$Companion;->()V HSPLorg/thoughtcrime/securesms/components/voice/RetryableInitAudioSink$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/components/voice/RetryableInitAudioSink;->()V @@ -20731,6 +20872,7 @@ HSPLorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaNotificationProvid HSPLorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaNotificationProvider$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaNotificationProvider;->()V HSPLorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaNotificationProvider;->(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService;)V HSPLorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$KeyClearedReceiver$1;->(Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$KeyClearedReceiver;)V HSPLorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$KeyClearedReceiver$1;->onSuccess(Landroidx/media3/session/MediaController;)V HSPLorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$KeyClearedReceiver$1;->onSuccess(Ljava/lang/Object;)V @@ -20964,6 +21106,20 @@ HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->getUnreadCount()I HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->shouldJumpToMessage()Z HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->shouldScrollToLastSeen()Z HSPLorg/thoughtcrime/securesms/conversation/ConversationData;->showUniversalExpireTimerMessage()Z +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView$$ExternalSyntheticLambda3;->(Ljava/lang/Runnable;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView$FallbackPhotoProvider;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView$FallbackPhotoProvider;->(Lorg/thoughtcrime/securesms/conversation/ConversationHeaderView$FallbackPhotoProvider-IA;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->hideButton()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->hideDescription()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->hideSubtitle()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setAbout(Lorg/thoughtcrime/securesms/recipients/Recipient;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setAvatar(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setLinkifyDescription(Z)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setTitle(Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/Runnable;)Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->showBackgroundBubble(Z)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->updateOutlineVisibility()V HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;JLjava/lang/String;Landroid/net/Uri;Ljava/lang/String;Ljava/util/ArrayList;Lorg/thoughtcrime/securesms/stickers/StickerLocator;ZIIZZLorg/thoughtcrime/securesms/badges/models/Badge;JLorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->from(Landroid/os/Bundle;)Lorg/thoughtcrime/securesms/conversation/ConversationIntents$Args; HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getChatColors()Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; @@ -20998,10 +21154,14 @@ HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents;->getIntentData( HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents;->getIntentType(Landroid/os/Bundle;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/conversation/ConversationIntents;->isBubbleIntentUri(Landroid/net/Uri;)Z HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$$ExternalSyntheticLambda4;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$1;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$AttachmentDownloadClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$AttachmentDownloadClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$AttachmentDownloadClickListener-IA;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$ClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Landroid/view/View$OnClickListener;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$DoubleTapEditTouchListener$1;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem$DoubleTapEditTouchListener;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$DoubleTapEditTouchListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$DoubleTapEditTouchListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$DoubleTapEditTouchListener-IA;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$GiftMessageViewCallback;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$GiftMessageViewCallback;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$GiftMessageViewCallback-IA;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$LinkPreviewClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V @@ -21020,12 +21180,15 @@ HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$SharedContactEventL HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$SharedContactEventListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$SharedContactEventListener-IA;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$SlideClickPassthroughListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$SlideClickPassthroughListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/conversation/ConversationItem$SlideClickPassthroughListener-IA;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$ThumbnailClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$ThumbnailClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$ThumbnailClickListener-IA;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$TouchDelegateChangedListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$TouchDelegateChangedListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$TouchDelegateChangedListener-IA;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$UrlClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$UrlClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$UrlClickListener-IA;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$ViewOnceMessageClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem$ViewOnceMessageClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$ViewOnceMessageClickListener-IA;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->-$$Nest$fgetcontext(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)Landroid/content/Context; HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->()V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItem;->bind(Landroidx/lifecycle/LifecycleOwner;Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Lj$/util/Optional;Lj$/util/Optional;Lcom/bumptech/glide/RequestManager;Ljava/util/Locale;Ljava/util/Set;Lorg/thoughtcrime/securesms/recipients/Recipient;Ljava/lang/String;ZZZZLorg/thoughtcrime/securesms/conversation/colors/Colorizer;Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;)V @@ -21109,6 +21272,16 @@ HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setOutl HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setParentScrolling(Z)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setQuoteViewProjection(Lorg/thoughtcrime/securesms/util/Projection;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble;->setVideoPlayerProjection(Lorg/thoughtcrime/securesms/util/Projection;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Detailed;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Detailed;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$EditHistory;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$EditHistory;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Standard;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Standard;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;->()V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;->(Z)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;->(ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;->(ZLkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage$ComputedProperties;->(Lorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage$ConversationMessageFactory;->createWithUnresolvedData(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Ljava/lang/CharSequence;Ljava/util/List;ZLorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/thoughtcrime/securesms/conversation/ConversationMessage; HSPLorg/thoughtcrime/securesms/conversation/ConversationMessage;->()V @@ -21172,6 +21345,9 @@ HSPLorg/thoughtcrime/securesms/conversation/ConversationUpdateItem;->()V HSPLorg/thoughtcrime/securesms/conversation/ConversationUpdateItem;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversation/ConversationUpdateItem;->onFinishInflate()V HSPLorg/thoughtcrime/securesms/conversation/ConversationUpdateItem;->setOnClickListener(Landroid/view/View$OnClickListener;)V +HSPLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda0;->()V +HSPLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda1;->()V +HSPLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/conversation/MarkReadHelper;J)V HSPLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->()V HSPLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;Landroid/content/Context;Landroidx/lifecycle/LifecycleOwner;)V HSPLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->getLatestTimestamp(Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge;Landroidx/recyclerview/widget/LinearLayoutManager;)Lj$/util/Optional; @@ -21216,6 +21392,7 @@ HSPLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->()V HSPLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V HSPLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;->getDraft()Lorg/thoughtcrime/securesms/database/DraftTable$Draft; HSPLorg/thoughtcrime/securesms/conversation/clicklisteners/AttachmentCancelClickListener$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/clicklisteners/AttachmentCancelClickListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/clicklisteners/AttachmentCancelClickListener;->()V @@ -21257,6 +21434,8 @@ HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$BuiltIn;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$NotSet;->()V +HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$NotSet;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id;->()V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id;->(J)V HSPLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -21300,6 +21479,7 @@ HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->acces HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->access$setUseLayer$p(Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;Z)V HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->getLayoutManager()Landroidx/recyclerview/widget/LinearLayoutManager; HSPLorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer;->setChatColors(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)V +HSPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator$$ExternalSyntheticLambda1;->(Landroidx/recyclerview/widget/RecyclerView;)V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->()V @@ -21321,6 +21501,11 @@ HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Sin HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection;->()V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection;->()V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;->$values()[Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference; +HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;->()V +HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;->(Ljava/lang/String;I)V +HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;->values()[Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference; +HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$WhenMappings;->()V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->()V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->(Landroid/content/Context;Lkotlin/jvm/functions/Function0;)V HSPLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->cleanPulseAnimators()V @@ -21436,7 +21621,25 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSy HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda7;->createViewHolder(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/View;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->bindPayloadsIfAvailable()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->canPlayContent()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getBindable()Lorg/thoughtcrime/securesms/BindableConversationItem; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getColorizerProjections(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/ProjectionList; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getDisplayMode()Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getNextMessage()Lj$/util/Optional; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getPreviousMessage()Lj$/util/Optional; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->showProjectionArea()V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$IncomingMediaViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/View;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$IncomingMediaViewHolder;->bind(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$IncomingMediaViewHolder;->bind(Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$OnScrollStateChangedListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Lorg/thoughtcrime/securesms/recipients/Recipient;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/View;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder;->bind(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder;->bind(Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->$r8$lambda$0GW66dll143qhTHiVUdlBHolclI(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->$r8$lambda$u2AJxgyeBquqI1nF9ok3s6g0b5Q(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;->()V @@ -21494,6 +21697,11 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$Conversation HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$InputPanelMediaListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollDateHeaderHelper;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollDateHeaderHelper;->bind(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function1;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$onScrolled$1;->(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$onScrolled$1;->invoke(J)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$onScrolled$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;->$r8$lambda$SqiWUifYWEV36mNfvnPsrkHWoAw(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener;->onScrolled$lambda$0(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V @@ -21564,6 +21772,7 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConve HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3;->apply(Lorg/thoughtcrime/securesms/conversation/v2/ConversationThreadState;)Lio/reactivex/rxjava3/core/ObservableSource; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Ljava/util/List;Lkotlin/jvm/internal/Ref$BooleanRef;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$$ExternalSyntheticLambda0;->run()V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1;->(Landroid/view/View;Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1;->onLayoutChange(Landroid/view/View;IIIIIIII)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4;->$r8$lambda$oOR6vln5-HH0T67uKvvWOaEanvw(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Ljava/util/List;Lkotlin/jvm/internal/Ref$BooleanRef;)V @@ -21682,6 +21891,11 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentSto HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentWallpaper(Lorg/thoughtcrime/securesms/wallpaper/ChatWallpaper;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->registerForResults()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->updateMessageRequestAcceptedState(Z)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;Landroid/view/View;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->bind(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->getHeight()I +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->getItemView()Landroid/view/View; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->updateForWallpaper()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$None;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$None;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState;->()V @@ -21729,10 +21943,10 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;- HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;->(J)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;->getConversationRecipient()Lio/reactivex/rxjava3/core/Observable; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;->getGroupRecord()Lio/reactivex/rxjava3/core/Observable; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda11;->(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda11;->call()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda7;->(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;I)V -HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda7;->call()Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda12;->(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/recipients/Recipient;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda12;->call()Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda8;->(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;I)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda8;->call()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$Companion;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts;->()V @@ -21844,6 +22058,8 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->( HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$6;->invoke(Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$7;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$7;->invoke(Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$8;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$8;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -21865,6 +22081,9 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMember HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$1;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$2;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$setShowScrollButtonsForScrollPosition$1;->(ZZ)V +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$setShowScrollButtonsForScrollPosition$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$setShowScrollButtonsForScrollPosition$1;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$storyRingState$1;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$storyRingState$1;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$storyRingState$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; @@ -21902,6 +22121,7 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->(Lor HSPLorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState;->(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/database/model/GroupRecord;ZLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/database/model/GroupRecord;ZZZ)V +HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->equals(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->getConversationRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->getMessageRequestState()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState; HSPLorg/thoughtcrime/securesms/conversation/v2/InputReadyState;->isActiveGroup()Ljava/lang/Boolean; @@ -21927,9 +22147,15 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->get HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->getSizeInternal()I HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->getThreadRecipient()Lorg/thoughtcrime/securesms/recipients/Recipient; HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->load(IIILorg/signal/paging/PagedDataSource$CancellationSignal;)Ljava/util/List; +HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->load(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->load(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel; HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->loadThreadHeader()Lorg/thoughtcrime/securesms/conversation/v2/data/ThreadHeader; HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->size()I HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->toMappingModel(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel; +HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey$Companion;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey$Companion;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey$Companion;->getThreadHeader()Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey; +HSPLorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V HSPLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; @@ -22027,21 +22253,17 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewM HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->access$getStore$p(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;)Lorg/thoughtcrime/securesms/util/rx/RxStore; HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->getHasOngoingGroupCallSnapshot()Z HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->peekGroupCall()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->test(Lj$/util/Optional;)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->test(Ljava/lang/Object;)Z -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$2;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$3;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$3;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$4;->(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1;->(Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;)V HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->(JLorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$duplicates$1;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$duplicates$1;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$_groupRecord$1;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$_groupRecord$1;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$_groupRecord$1;->test(Lj$/util/Optional;)Z +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$_groupRecord$1;->test(Ljava/lang/Object;)Z +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$_groupRecord$2;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$_groupRecord$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1;->test(Ljava/lang/Object;)Z @@ -22049,8 +22271,8 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$2;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->()V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->(JLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V -HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->(JLorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->(Lorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->(Lorg/thoughtcrime/securesms/groups/v2/GroupManagementRepository;Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository;ILkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->updateGroupStateIfNeeded()V HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData;->(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;Landroid/graphics/drawable/Drawable;)V @@ -22066,6 +22288,17 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColo HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration;->onDraw(Landroid/graphics/Canvas;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$State;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->(Lkotlin/jvm/functions/Function0;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->draw(Landroid/graphics/Canvas;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getChatColors()Lorg/thoughtcrime/securesms/conversation/colors/ChatColors; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getMask()Landroid/graphics/drawable/Drawable; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getOpacity()I +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getOutline(Landroid/graphics/Outline;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->isSolidColor()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->setCorners(Lorg/thoughtcrime/securesms/util/Projection$Corners;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->setCorners([F)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->setLocalChatColors(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)V HSPLorg/thoughtcrime/securesms/conversation/v2/items/ShrinkWrapLinearLayout;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/items/ShrinkWrapLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/conversation/v2/items/ShrinkWrapLinearLayout;->onMeasure(II)V @@ -22076,6 +22309,129 @@ HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;-> HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->onMeasure(II)V HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->removeOnMeasureListener(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout$OnMeasureListener;)V HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;->setOnDispatchTouchEventListener(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout$OnDispatchTouchEventListener;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$Companion;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->$values()[Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->(Ljava/lang/String;IFF)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->getBottomPadding()F +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->getTopPadding()F +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->isEndingShape()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->isStartingShape()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->access$getCollapsedSpacing$cp()F +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->access$getDefaultSpacing$cp()F +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->getCornersLTR()Lorg/thoughtcrime/securesms/util/Projection$Corners; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isEndOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isSingularMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isStartOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isWithinClusteringTime(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->setBodyBubbleCorners(FFFF)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->setMessageShape(Lorg/thoughtcrime/securesms/database/model/MessageRecord;ZI)Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Lorg/thoughtcrime/securesms/components/AvatarImageView;Lorg/thoughtcrime/securesms/badges/BadgeImageView;Landroid/view/ViewGroup;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Lcom/google/android/material/imageview/ShapeableImageView;Lorg/thoughtcrime/securesms/reactions/ReactionsConversationView;Lorg/thoughtcrime/securesms/components/DeliveryStatusView;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/ExpirationTimerView;Landroid/view/View;Landroid/widget/Space;Lorg/thoughtcrime/securesms/components/AlertView;Z)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getAlert()Lorg/thoughtcrime/securesms/components/AlertView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getBody()Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getBodyWrapper()Landroid/view/ViewGroup; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getDeliveryStatus()Lorg/thoughtcrime/securesms/components/DeliveryStatusView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getFooterBackground()Landroid/view/View; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getFooterDate()Landroid/widget/TextView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getFooterExpiry()Lorg/thoughtcrime/securesms/components/ExpirationTimerView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getFooterSpace()Landroid/widget/Space; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getReactions()Lorg/thoughtcrime/securesms/reactions/ReactionsConversationView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getReply()Lcom/google/android/material/imageview/ShapeableImageView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getRoot()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getSenderBadge()Lorg/thoughtcrime/securesms/badges/BadgeImageView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getSenderName()Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getSenderPhoto()Lorg/thoughtcrime/securesms/components/AvatarImageView; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->isIncoming()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridgeKt;->bridge(Lorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding;)Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda0;->onLayoutChange(Landroid/view/View;IIIIIIII)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda4;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda5;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda8;->(Lorg/thoughtcrime/securesms/conversation/ConversationAdapter$ItemClickListener;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$Companion;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$PassthroughClickListener;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$ReactionMeasureListener;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$bodyBubbleDrawable$1;->(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$bodyBubbleDrawable$1;->invoke()Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$bodyBubbleDrawable$1;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$footerDrawable$1;->(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$footerDrawable$1;->invoke()Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$footerDrawable$1;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$gestureDetector$1;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$replyDelegate$1;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$senderDrawable$1;->(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->$r8$lambda$ocilDMoff9b132TfYhzB6ol1qqk(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;Landroid/view/View;IIIIIIII)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;Lorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;Lorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->_init_$lambda$0(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;Landroid/view/View;IIIIIIII)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->bind(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->bind(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->canPlayContent()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->getColorizerProjections(Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/util/ProjectionList; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->getShape()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->invalidateBodyBubbleDrawable(Landroid/view/ViewGroup;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->invalidateChatColorsDrawable(Landroid/view/ViewGroup;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->invalidateFooterDrawable(Landroid/view/ViewGroup;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->isContentCondensed()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->isForcedFooter()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->linkifyMessageBody(Landroid/text/Spannable;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentAlert()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentBody()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentDate()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentDeliveryStatus()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentFooterBackground()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentFooterEndPadding()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentFooterExpiry()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentReactions()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentSender()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentSenderNameBackground()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentSenderNameColor()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->setConversationMessage(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->setShape(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->showProjectionArea()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$1;->(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$2;->(Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$2;->invoke(Landroid/content/Context;Z)Ljava/lang/Integer; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getBodyBubbleColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)I +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getBodyTextColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)I +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)I +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getFooterBubbleColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)I +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getReplyIconBackgroundColor()I +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils;->linkifyUrlLinks(Landroid/text/Spannable;ZLorg/thoughtcrime/securesms/util/UrlClickHandler;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder;->getShapeDelegate()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder;->getThemeDelegate()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState;->$values()[Lorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState; +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState;->(Ljava/lang/String;I)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;Ljava/util/List;Landroid/view/View;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Landroid/widget/Space;Lorg/thoughtcrime/securesms/util/views/Stub;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->displayTuckedIntoBody()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->getFooterWidth()I +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->onPostMeasure()Z +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->onPreMeasure()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener$Companion;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener;->()V +HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;)V HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2Payload;->$values()[Lorg/thoughtcrime/securesms/conversation/v2/items/V2Payload; HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2Payload;->()V HSPLorg/thoughtcrime/securesms/conversation/v2/items/V2Payload;->(Ljava/lang/String;I)V @@ -22641,6 +22997,12 @@ HSPLorg/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore;->storeSigne HSPLorg/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore;->()V HSPLorg/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore;->(Lorg/whispersystems/signalservice/api/push/ServiceId;)V HSPLorg/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore;->archiveAllSessions()V +HSPLorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState$Companion;->()V +HSPLorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState;->$values()[Lorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState; +HSPLorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState;->()V +HSPLorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState;->(Ljava/lang/String;II)V +HSPLorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState;->getValue()I HSPLorg/thoughtcrime/securesms/database/AttachmentTable$Companion;->()V HSPLorg/thoughtcrime/securesms/database/AttachmentTable$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties$Companion;->()V @@ -22649,6 +23011,7 @@ HSPLorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties$Comp HSPLorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties$Companion;->parse(Ljava/lang/String;)Lorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties; HSPLorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties$Creator;->()V HSPLorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;->()V +HSPLorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;->(ZZJJIZ)V HSPLorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties;->access$getDEFAULT_MEDIA_QUALITY$cp()I HSPLorg/thoughtcrime/securesms/database/AttachmentTable$insertUndownloadedAttachment$attachmentId$1;->(JLorg/thoughtcrime/securesms/attachments/Attachment;Z)V HSPLorg/thoughtcrime/securesms/database/AttachmentTable$insertUndownloadedAttachment$attachmentId$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; @@ -22692,6 +23055,10 @@ HSPLorg/thoughtcrime/securesms/database/CallTable$ReadState;->$values()[Lorg/tho HSPLorg/thoughtcrime/securesms/database/CallTable$ReadState;->()V HSPLorg/thoughtcrime/securesms/database/CallTable$ReadState;->(Ljava/lang/String;II)V HSPLorg/thoughtcrime/securesms/database/CallTable$ReadState;->access$getCode$p(Lorg/thoughtcrime/securesms/database/CallTable$ReadState;)I +HSPLorg/thoughtcrime/securesms/database/CallTable$markRingingCallsAsMissed$1;->()V +HSPLorg/thoughtcrime/securesms/database/CallTable$markRingingCallsAsMissed$1;->()V +HSPLorg/thoughtcrime/securesms/database/CallTable$markRingingCallsAsMissed$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/database/CallTable$markRingingCallsAsMissed$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)V HSPLorg/thoughtcrime/securesms/database/CallTable;->()V HSPLorg/thoughtcrime/securesms/database/CallTable;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;)V HSPLorg/thoughtcrime/securesms/database/CallTable;->getCalls(Ljava/util/Collection;)Ljava/util/Map; @@ -22719,8 +23086,12 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambd HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda11;->run()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda17;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda17;->run()V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda1;->run()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda20;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda20;->run()V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda22;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda22;->run()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda23;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda23;->run()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda24;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V @@ -22743,11 +23114,13 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambd HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda4;->run()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda5;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda5;->run()V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$6H_TtixOHSa7Tr30medlqcHry2c(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$6mdIgDDCV4XFVFnyxH8Vj4a6MqU(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$Aq7iz6-OcN5qdEpvMz8WyoOoHtc(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$FLqOSncPM9UHAHmQfH7ITyYgYis(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$P-H8JPj8WgBa8EorlTkjTC0yG1E(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$Q9T3e0x03-9UyovUEacfv32ZkYs(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$Rd4ts_QPgl4yKrcyZyl-dxASD8g(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$XcpL0fyOGdTr1sc4d0z4i8eoe14(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$XpAe1b_YlxfSEkV3hD_v20iDkHw(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$dh6RWMfCAixhY74q-duAcBwIwmU(Lorg/thoughtcrime/securesms/database/DatabaseObserver;)V @@ -22766,6 +23139,7 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyRecipien HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyStickerObservers$26()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyStickerPackObservers$27()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyStoryObservers$35(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerAttachmentObserver$9(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerConversationListObserver$0(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerConversationObserver$1(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerMessageInsertObserver$11(JLorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V @@ -22774,6 +23148,7 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerNotifi HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerStoryObserver$13(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerVerboseConversationObserver$2(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$runPostSuccessfulTransaction$40(Ljava/lang/Runnable;)V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$unregisterObserver$17(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyAttachmentObservers()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyConversationListListeners()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyConversationListeners(J)V @@ -22783,6 +23158,7 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifySet(Ljava/util/ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyStickerObservers()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyStickerPackObservers()V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyStoryObservers(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerAttachmentObserver(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerConversationListObserver(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerConversationObserver(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerMapped(Ljava/util/Map;Ljava/lang/Object;Ljava/lang/Object;)V @@ -22792,6 +23168,8 @@ HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerNotificationP HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerStoryObserver(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerVerboseConversationObserver(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->runPostSuccessfulTransaction(Ljava/lang/String;Ljava/lang/Runnable;)V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->unregisterMapped(Ljava/util/Map;Ljava/lang/Object;)V +HSPLorg/thoughtcrime/securesms/database/DatabaseObserver;->unregisterObserver(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/DatabaseTable;->()V HSPLorg/thoughtcrime/securesms/database/DatabaseTable;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;)V HSPLorg/thoughtcrime/securesms/database/DatabaseTable;->getReadableDatabase()Lorg/thoughtcrime/securesms/database/SQLiteDatabase; @@ -23115,6 +23493,9 @@ HSPLorg/thoughtcrime/securesms/database/MessageTable$QuoteDescriptor;->hashCode( HSPLorg/thoughtcrime/securesms/database/MessageTable$SyncMessageId;->()V HSPLorg/thoughtcrime/securesms/database/MessageTable$SyncMessageId;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;J)V HSPLorg/thoughtcrime/securesms/database/MessageTable$WhenMappings;->()V +HSPLorg/thoughtcrime/securesms/database/MessageTable$clearIsRingingOnLocalDeviceFlag$1;->(Ljava/util/Collection;)V +HSPLorg/thoughtcrime/securesms/database/MessageTable$clearIsRingingOnLocalDeviceFlag$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/database/MessageTable$clearIsRingingOnLocalDeviceFlag$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)V HSPLorg/thoughtcrime/securesms/database/MessageTable$getConversationSnippet$1;->()V HSPLorg/thoughtcrime/securesms/database/MessageTable$getConversationSnippet$1;->()V HSPLorg/thoughtcrime/securesms/database/MessageTable$getConversationSnippet$1;->invoke(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/database/model/MessageRecord; @@ -23130,6 +23511,7 @@ HSPLorg/thoughtcrime/securesms/database/MessageTable;->access$getOutgoingTypeCla HSPLorg/thoughtcrime/securesms/database/MessageTable;->access$getSerializedLinkPreviews(Lorg/thoughtcrime/securesms/database/MessageTable;Ljava/util/Map;Ljava/util/List;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/database/MessageTable;->access$getSerializedSharedContacts(Lorg/thoughtcrime/securesms/database/MessageTable;Ljava/util/Map;Ljava/util/List;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/database/MessageTable;->buildMeaningfulMessagesQuery(J)Lorg/signal/core/util/SqlUtil$Query; +HSPLorg/thoughtcrime/securesms/database/MessageTable;->clearIsRingingOnLocalDeviceFlag(Ljava/util/Collection;)V HSPLorg/thoughtcrime/securesms/database/MessageTable;->getAllRateLimitedMessageIds()Ljava/util/Set; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getAllStoriesFor(Lorg/thoughtcrime/securesms/recipients/RecipientId;I)Lorg/thoughtcrime/securesms/database/MessageTable$Reader; HSPLorg/thoughtcrime/securesms/database/MessageTable;->getConversation(JJJ)Landroid/database/Cursor; @@ -23219,6 +23601,10 @@ HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isStoryReaction(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isThreadMergeType(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes$-CC;->isUnsupportedMessageType(J)Z HSPLorg/thoughtcrime/securesms/database/MessageTypes;->()V +HSPLorg/thoughtcrime/securesms/database/NameCollisionTables$Companion;->()V +HSPLorg/thoughtcrime/securesms/database/NameCollisionTables$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/database/NameCollisionTables;->()V +HSPLorg/thoughtcrime/securesms/database/NameCollisionTables;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;)V HSPLorg/thoughtcrime/securesms/database/NotificationProfileDatabase$Companion;->()V HSPLorg/thoughtcrime/securesms/database/NotificationProfileDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/NotificationProfileDatabase$NotificationProfileAllowedMembersTable;->()V @@ -23396,6 +23782,7 @@ HSPLorg/thoughtcrime/securesms/database/RecipientTable;->markRegistered(Lorg/tho HSPLorg/thoughtcrime/securesms/database/RecipientTable;->markRegisteredOrThrow(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/whispersystems/signalservice/api/push/ServiceId;)V HSPLorg/thoughtcrime/securesms/database/RecipientTable;->processPnpTuple(Ljava/lang/String;Lorg/whispersystems/signalservice/api/push/ServiceId$PNI;Lorg/whispersystems/signalservice/api/push/ServiceId$ACI;ZZ)Lorg/thoughtcrime/securesms/database/RecipientTable$ProcessPnpTupleResult; HSPLorg/thoughtcrime/securesms/database/RecipientTable;->processPnpTupleToChangeSet(Ljava/lang/String;Lorg/whispersystems/signalservice/api/push/ServiceId$PNI;Lorg/whispersystems/signalservice/api/push/ServiceId$ACI;ZZ)Lorg/thoughtcrime/securesms/database/PnpChangeSet; +HSPLorg/thoughtcrime/securesms/database/RecipientTable;->rotateStorageId(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/database/RecipientTable;->setCapabilities(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$Capabilities;)V HSPLorg/thoughtcrime/securesms/database/RecipientTable;->setMuted(Lorg/thoughtcrime/securesms/recipients/RecipientId;J)V HSPLorg/thoughtcrime/securesms/database/RecipientTable;->setProfileAvatar(Lorg/thoughtcrime/securesms/recipients/RecipientId;Ljava/lang/String;)V @@ -23432,7 +23819,6 @@ HSPLorg/thoughtcrime/securesms/database/RecipientTableCursorUtil;->()V HSPLorg/thoughtcrime/securesms/database/RecipientTableCursorUtil;->getExtras(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/recipients/Recipient$Extras; HSPLorg/thoughtcrime/securesms/database/RecipientTableCursorUtil;->getRecipientExtras(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/database/model/databaseprotos/RecipientExtras; HSPLorg/thoughtcrime/securesms/database/RecipientTableCursorUtil;->getRecord(Landroid/content/Context;Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/database/model/RecipientRecord; -HSPLorg/thoughtcrime/securesms/database/RecipientTableCursorUtil;->getRecord(Landroid/content/Context;Landroid/database/Cursor;Ljava/lang/String;)Lorg/thoughtcrime/securesms/database/model/RecipientRecord; HSPLorg/thoughtcrime/securesms/database/RecipientTableCursorUtil;->getSyncExtras$lambda$6(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Boolean; HSPLorg/thoughtcrime/securesms/database/RecipientTableCursorUtil;->getSyncExtras(Landroid/database/Cursor;)Lorg/thoughtcrime/securesms/database/model/RecipientRecord$SyncExtras; HSPLorg/thoughtcrime/securesms/database/RecipientTableCursorUtil;->parseBadgeList([B)Ljava/util/List; @@ -23572,9 +23958,9 @@ HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->replace(Ljava/lang/Stri HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->runPostSuccessfulTransaction(Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->runPostSuccessfulTransaction(Ljava/lang/String;Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->setTransactionSuccessful()V +HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->trace(Ljava/lang/String;Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->traceLockEnd()V HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->traceLockStart()V -HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->traceSql(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLorg/thoughtcrime/securesms/database/SQLiteDatabase$Returnable;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->traceSql(Ljava/lang/String;Ljava/lang/String;ZLjava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->traceSql(Ljava/lang/String;Ljava/lang/String;ZLorg/thoughtcrime/securesms/database/SQLiteDatabase$Returnable;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/database/SQLiteDatabase;->update(Ljava/lang/String;ILandroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/Object;)I @@ -23779,6 +24165,7 @@ HSPLorg/thoughtcrime/securesms/database/ThreadTable$update$1$isPinned$2;-> HSPLorg/thoughtcrime/securesms/database/ThreadTable$update$1$shouldDelete$2;->(ZJLkotlin/Lazy;)V HSPLorg/thoughtcrime/securesms/database/ThreadTable$update$1;->(JLorg/thoughtcrime/securesms/database/ThreadTable;ZZZ)V HSPLorg/thoughtcrime/securesms/database/ThreadTable$update$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/database/ThreadTable$update$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)Ljava/lang/Boolean; HSPLorg/thoughtcrime/securesms/database/ThreadTable;->()V HSPLorg/thoughtcrime/securesms/database/ThreadTable;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/database/SignalDatabase;)V HSPLorg/thoughtcrime/securesms/database/ThreadTable;->access$createThreadForRecipient(Lorg/thoughtcrime/securesms/database/ThreadTable;Lorg/thoughtcrime/securesms/recipients/RecipientId;ZI)J @@ -24104,10 +24491,13 @@ HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$External HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda1;->subscribe(Lio/reactivex/rxjava3/core/ObservableEmitter;)V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda2;->(Lio/reactivex/rxjava3/core/ObservableEmitter;Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V +HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda3;->cancel()V +HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->$r8$lambda$_YM1i9V93JIKhbRirbAeb_98VJw(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->$r8$lambda$qlVsO3gJogFXwiR82wyUg4D6NdU(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lio/reactivex/rxjava3/core/ObservableEmitter;)V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->()V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getForRecipientId(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lio/reactivex/rxjava3/core/Observable; +HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState$lambda$3$lambda$2(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState$lambda$3$refresh(Lio/reactivex/rxjava3/core/ObservableEmitter;Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState$lambda$3(Lorg/thoughtcrime/securesms/recipients/RecipientId;Lio/reactivex/rxjava3/core/ObservableEmitter;)V HSPLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lio/reactivex/rxjava3/core/Observable; @@ -24183,6 +24573,8 @@ HSPLorg/thoughtcrime/securesms/database/model/databaseprotos/PendingOneTimeDonat HSPLorg/thoughtcrime/securesms/database/model/databaseprotos/PendingOneTimeDonation$Companion;->()V HSPLorg/thoughtcrime/securesms/database/model/databaseprotos/PendingOneTimeDonation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/database/model/databaseprotos/PendingOneTimeDonation;->()V +HSPLorg/thoughtcrime/securesms/databinding/ConversationHeaderViewBinding;->(Landroid/view/View;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Lorg/thoughtcrime/securesms/components/AvatarImageView;Landroid/widget/LinearLayout;Lorg/thoughtcrime/securesms/badges/BadgeImageView;Lcom/google/android/material/button/MaterialButton;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Landroid/view/View;Landroidx/constraintlayout/widget/ConstraintLayout;Landroid/view/View;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;)V +HSPLorg/thoughtcrime/securesms/databinding/ConversationHeaderViewBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationHeaderViewBinding; HSPLorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding;->(Lorg/thoughtcrime/securesms/components/InputPanel;Landroid/widget/ImageButton;Landroidx/constraintlayout/widget/Barrier;Lorg/thoughtcrime/securesms/components/InputPanel;Lorg/thoughtcrime/securesms/components/AnimatingToggle;Landroid/view/View;Landroidx/constraintlayout/widget/Barrier;Lcom/google/android/material/imageview/ShapeableImageView;Landroidx/appcompat/widget/AppCompatTextView;Lorg/thoughtcrime/securesms/components/ComposeText;Lorg/thoughtcrime/securesms/components/emoji/EmojiToggle;Landroid/widget/ImageButton;Lorg/thoughtcrime/securesms/components/HidingLinearLayout;Landroidx/appcompat/widget/AppCompatImageButton;Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/components/LinkPreviewView;Lorg/thoughtcrime/securesms/components/HidingLinearLayout;Landroid/widget/ImageButton;Lorg/thoughtcrime/securesms/components/QuoteView;Lorg/thoughtcrime/securesms/components/MicrophoneRecorderView;Lorg/thoughtcrime/securesms/components/SendButton;Landroid/widget/ImageButton;Lorg/thoughtcrime/securesms/conversation/VoiceNoteDraftView;)V HSPLorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding; HSPLorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding;->getRoot()Lorg/thoughtcrime/securesms/components/InputPanel; @@ -24199,10 +24591,17 @@ HSPLorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding;->getRoo HSPLorg/thoughtcrime/securesms/databinding/OnboardingMegaphoneCardBinding;->(Lcom/google/android/material/card/MaterialCardView;Landroid/widget/ImageView;Landroid/widget/ImageView;Landroid/widget/TextView;)V HSPLorg/thoughtcrime/securesms/databinding/OnboardingMegaphoneCardBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/OnboardingMegaphoneCardBinding; HSPLorg/thoughtcrime/securesms/databinding/OnboardingMegaphoneCardBinding;->getRoot()Lcom/google/android/material/card/MaterialCardView; +HSPLorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding;->(Landroid/view/View;Landroidx/constraintlayout/widget/Guideline;Landroidx/appcompat/widget/AppCompatImageView;Landroid/view/View;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;Landroid/view/View;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;Landroidx/constraintlayout/widget/Guideline;)V +HSPLorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding; +HSPLorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding;->inflate(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding; HSPLorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding;->(Lorg/thoughtcrime/securesms/components/InputAwareConstraintLayout;Landroid/view/ViewStub;Landroid/view/View;Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView;Landroid/widget/FrameLayout;Lorg/thoughtcrime/securesms/components/menu/SignalBottomActionBar;Landroidx/constraintlayout/widget/Barrier;Lorg/thoughtcrime/securesms/conversation/v2/DisabledInputView;Lcom/google/android/material/button/MaterialButton;Lorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding;Landroidx/constraintlayout/widget/Barrier;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectRecyclerView;Landroid/widget/FrameLayout;Landroid/view/ViewStub;Lorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding;Lorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding;Landroid/widget/FrameLayout;Landroid/widget/ImageView;Landroid/view/View;Landroidx/fragment/app/FragmentContainerView;Landroidx/fragment/app/FragmentContainerView;Landroidx/fragment/app/FragmentContainerView;Landroid/widget/FrameLayout;Landroid/view/ViewStub;Landroid/view/ViewStub;Landroid/view/ViewStub;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/ConversationScrollToView;Lorg/thoughtcrime/securesms/components/ConversationScrollToView;Lorg/thoughtcrime/securesms/util/views/DarkOverflowToolbar;Landroid/view/View;Landroid/view/ViewStub;Landroid/view/ViewStub;)V HSPLorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding; +HSPLorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;Lorg/thoughtcrime/securesms/badges/BadgeImageView;Lorg/thoughtcrime/securesms/components/AvatarImageView;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Lorg/thoughtcrime/securesms/conversation/v2/items/ShrinkWrapLinearLayout;Lorg/thoughtcrime/securesms/components/ExpirationTimerView;Landroid/view/View;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/reactions/ReactionsConversationView;Lcom/google/android/material/imageview/ShapeableImageView;Landroid/widget/Space;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;)V +HSPLorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding; +HSPLorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding;->getRoot()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies$$ExternalSyntheticLambda0;->()V HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies$$ExternalSyntheticLambda0;->get()Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies$$ExternalSyntheticLambda1;->()V HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->$r8$lambda$TTNxYGZvGlMOp1oidmVJeKiRxZs()Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->()V HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencies;->closeConnections()V @@ -24244,7 +24643,7 @@ HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$$Exter HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$$ExternalSyntheticLambda0;->get()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$$ExternalSyntheticLambda1;->()V HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$$ExternalSyntheticLambda1;->get()Ljava/lang/Object; -HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$1;->(Lorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;Lj$/util/function/Supplier;Lorg/thoughtcrime/securesms/net/SignalWebSocketHealthMonitor;)V +HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$1;->(Lorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;Lj$/util/function/Supplier;Lorg/thoughtcrime/securesms/net/SignalWebSocketHealthMonitor;Lj$/util/function/Supplier;)V HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$1;->createUnidentifiedWebSocket()Lorg/whispersystems/signalservice/internal/websocket/WebSocketConnection; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$1;->createWebSocket()Lorg/whispersystems/signalservice/internal/websocket/WebSocketConnection; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$DynamicCredentialsProvider;->()V @@ -24283,10 +24682,10 @@ HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->prov HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideSignalServiceAccountManager(Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration;Lorg/whispersystems/signalservice/api/groupsv2/GroupsV2Operations;)Lorg/whispersystems/signalservice/api/SignalServiceAccountManager; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideSignalServiceMessageReceiver(Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration;)Lorg/whispersystems/signalservice/api/SignalServiceMessageReceiver; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideSignalServiceNetworkAccess()Lorg/thoughtcrime/securesms/push/SignalServiceNetworkAccess; -HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideSignalWebSocket(Lj$/util/function/Supplier;)Lorg/whispersystems/signalservice/api/SignalWebSocket; +HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideSignalWebSocket(Lj$/util/function/Supplier;Lj$/util/function/Supplier;)Lorg/whispersystems/signalservice/api/SignalWebSocket; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideTypingStatusRepository()Lorg/thoughtcrime/securesms/components/TypingStatusRepository; HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideViewOnceMessageManager()Lorg/thoughtcrime/securesms/revealable/ViewOnceMessageManager; -HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideWebSocketFactory(Lj$/util/function/Supplier;Lorg/thoughtcrime/securesms/net/SignalWebSocketHealthMonitor;)Lorg/whispersystems/signalservice/api/websocket/WebSocketFactory; +HSPLorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider;->provideWebSocketFactory(Lj$/util/function/Supplier;Lorg/thoughtcrime/securesms/net/SignalWebSocketHealthMonitor;Lj$/util/function/Supplier;)Lorg/whispersystems/signalservice/api/websocket/WebSocketFactory; HSPLorg/thoughtcrime/securesms/emoji/EmojiCategory$Companion;->()V HSPLorg/thoughtcrime/securesms/emoji/EmojiCategory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V HSPLorg/thoughtcrime/securesms/emoji/EmojiCategory$Companion;->forKey(Ljava/lang/String;)Lorg/thoughtcrime/securesms/emoji/EmojiCategory; @@ -24406,7 +24805,6 @@ HSPLorg/thoughtcrime/securesms/emoji/EmojiJsonParser;->()V HSPLorg/thoughtcrime/securesms/emoji/EmojiJsonParser;->()V HSPLorg/thoughtcrime/securesms/emoji/EmojiJsonParser;->access$createPage(Lorg/thoughtcrime/securesms/emoji/EmojiJsonParser;Ljava/lang/String;Ljava/lang/String;Lcom/fasterxml/jackson/databind/JsonNode;Lkotlin/jvm/functions/Function2;)Lorg/thoughtcrime/securesms/components/emoji/EmojiPageModel; HSPLorg/thoughtcrime/securesms/emoji/EmojiJsonParser;->buildEmojiSourceFromNode(Lcom/fasterxml/jackson/databind/JsonNode;Lkotlin/jvm/functions/Function2;)Lorg/thoughtcrime/securesms/emoji/ParsedEmojiData; -HSPLorg/thoughtcrime/securesms/emoji/EmojiJsonParser;->createPage(Ljava/lang/String;Ljava/lang/String;Lcom/fasterxml/jackson/databind/JsonNode;Lkotlin/jvm/functions/Function2;)Lorg/thoughtcrime/securesms/components/emoji/EmojiPageModel; HSPLorg/thoughtcrime/securesms/emoji/EmojiJsonParser;->getDataPages$lambda$0(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Ljava/lang/Object;)I HSPLorg/thoughtcrime/securesms/emoji/EmojiJsonParser;->getDataPages(Ljava/lang/String;Lcom/fasterxml/jackson/databind/JsonNode;Lkotlin/jvm/functions/Function2;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/emoji/EmojiJsonParser;->getJumboPages(Lcom/fasterxml/jackson/databind/JsonNode;)Ljava/util/Map; @@ -24432,8 +24830,6 @@ HSPLorg/thoughtcrime/securesms/emoji/EmojiMetrics;->(III)V HSPLorg/thoughtcrime/securesms/emoji/EmojiMetrics;->getPerRow()I HSPLorg/thoughtcrime/securesms/emoji/EmojiMetrics;->getRawHeight()I HSPLorg/thoughtcrime/securesms/emoji/EmojiMetrics;->getRawWidth()I -HSPLorg/thoughtcrime/securesms/emoji/EmojiPage$Asset;->()V -HSPLorg/thoughtcrime/securesms/emoji/EmojiPage$Asset;->(Landroid/net/Uri;)V HSPLorg/thoughtcrime/securesms/emoji/EmojiPage$Disk;->()V HSPLorg/thoughtcrime/securesms/emoji/EmojiPage$Disk;->(Landroid/net/Uri;)V HSPLorg/thoughtcrime/securesms/emoji/EmojiPage$Disk;->equals(Ljava/lang/Object;)Z @@ -24479,8 +24875,6 @@ HSPLorg/thoughtcrime/securesms/emoji/EmojiRemote;->getObject(Lorg/thoughtcrime/s HSPLorg/thoughtcrime/securesms/emoji/EmojiRemote;->getVersion()I HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$Companion$loadAssetBasedEmojis$1$1;->()V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$Companion$loadAssetBasedEmojis$1$1;->()V -HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$Companion$loadAssetBasedEmojis$1$1;->invoke(Landroid/net/Uri;)Lorg/thoughtcrime/securesms/emoji/EmojiPage; -HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$Companion$loadAssetBasedEmojis$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$Companion$loadAssetBasedEmojis$1$parsedData$1;->()V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$Companion$loadAssetBasedEmojis$1$parsedData$1;->()V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$Companion$loadAssetBasedEmojis$1$parsedData$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; @@ -24499,6 +24893,7 @@ HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$Companion;->refresh()V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$canonicalToVariations$2;->(Lorg/thoughtcrime/securesms/emoji/EmojiSource;)V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$emojiTree$2;->(Lorg/thoughtcrime/securesms/emoji/EmojiSource;)V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$emojiTree$2;->invoke()Ljava/lang/Object; +HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$emojiTree$2;->invoke()Lorg/thoughtcrime/securesms/components/emoji/parsing/EmojiTree; HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$maxEmojiLength$2;->(Lorg/thoughtcrime/securesms/emoji/EmojiSource;)V HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$maxEmojiLength$2;->invoke()Ljava/lang/Integer; HSPLorg/thoughtcrime/securesms/emoji/EmojiSource$maxEmojiLength$2;->invoke()Ljava/lang/Object; @@ -24555,7 +24950,6 @@ HSPLorg/thoughtcrime/securesms/fonts/FontFileMap;->()V HSPLorg/thoughtcrime/securesms/fonts/FontFileMap;->(Ljava/util/Map;)V HSPLorg/thoughtcrime/securesms/fonts/FontFileMap;->access$getObjectMapper$cp()Lcom/fasterxml/jackson/databind/ObjectMapper; HSPLorg/thoughtcrime/securesms/fonts/FontFileMap;->access$getTAG$cp()Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/fonts/FontFileMap;->copy(Ljava/util/Map;)Lorg/thoughtcrime/securesms/fonts/FontFileMap; HSPLorg/thoughtcrime/securesms/fonts/FontFileMap;->getMap()Ljava/util/Map; HSPLorg/thoughtcrime/securesms/fonts/FontManifest$Companion;->()V HSPLorg/thoughtcrime/securesms/fonts/FontManifest$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V @@ -24632,6 +25026,24 @@ HSPLorg/thoughtcrime/securesms/fonts/Fonts;->resolveFontScriptFromScriptName(Lor HSPLorg/thoughtcrime/securesms/fonts/ScriptUtil;->()V HSPLorg/thoughtcrime/securesms/fonts/ScriptUtil;->getScript(Ljava/util/Locale;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/fonts/ScriptUtil;->getScriptsMap([Ljava/lang/String;)Ljava/util/Map; +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan;->(Landroid/graphics/Typeface;)V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan;->update(Landroid/text/TextPaint;)V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan;->updateDrawState(Landroid/text/TextPaint;)V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan;->updateMeasureState(Landroid/text/TextPaint;)V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;->$values()[Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph; +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;->()V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;->(Ljava/lang/String;IC)V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;->getUnicode()C +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;->$values()[Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight; +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;->()V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;->(Ljava/lang/String;I)V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;->values()[Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight; +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols$WhenMappings;->()V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols;->()V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols;->()V +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols;->getBoldWeightedFont(Landroid/content/Context;)Landroid/graphics/Typeface; +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols;->getSpannedString(Landroid/content/Context;Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;)Ljava/lang/CharSequence; +HSPLorg/thoughtcrime/securesms/fonts/SignalSymbols;->getTypeface(Landroid/content/Context;Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;)Landroid/graphics/Typeface; HSPLorg/thoughtcrime/securesms/fonts/SupportedScript;->$values()[Lorg/thoughtcrime/securesms/fonts/SupportedScript; HSPLorg/thoughtcrime/securesms/fonts/SupportedScript;->()V HSPLorg/thoughtcrime/securesms/fonts/SupportedScript;->(Ljava/lang/String;I)V @@ -24668,6 +25080,7 @@ HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->findLastVis HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->getPlaybackSet(Ljava/util/Set;II)Ljava/util/Set; HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->getPlaybackSetForMaximumDistance(Ljava/util/Set;[I[I)Ljava/util/Set; HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->onLayoutChange(Landroid/view/View;IIIIIIII)V +HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->onScrolled(Landroidx/recyclerview/widget/RecyclerView;II)V HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->performPlaybackUpdate(Landroidx/recyclerview/widget/RecyclerView;)V HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackPolicy;->maxSimultaneousPlaybackInConversation()I HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->()V @@ -24677,8 +25090,10 @@ HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onCreat HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onResume(Landroidx/lifecycle/LifecycleOwner;)V HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onStart(Landroidx/lifecycle/LifecycleOwner;)V HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->(Ljava/util/List;)V +HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->getCurrentHolder(I)Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder; HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->stopAndReleaseAssignedVideos(Ljava/util/Set;)V HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->update(Landroidx/recyclerview/widget/RecyclerView;Ljava/util/List;Ljava/util/Set;)V +HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionRecycler;->updateVideoDisplayPositionAndSize(Landroidx/recyclerview/widget/RecyclerView;Lorg/thoughtcrime/securesms/giph/mp4/GiphyMp4Playable;)V HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->()V HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4VideoPlayer;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V @@ -25163,13 +25578,21 @@ HSPLorg/thoughtcrime/securesms/jobs/AnalyzeDatabaseJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/AnalyzeDatabaseJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/ApkUpdateJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/ApkUpdateJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/ArchiveAttachmentBackfillJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/ArchiveAttachmentBackfillJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/ArchiveAttachmentJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/ArchiveAttachmentJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/AttachmentCompressionJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/AttachmentCopyJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob$Companion;->()V +HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob$Companion;->constructQueueString(Lorg/thoughtcrime/securesms/attachments/AttachmentId;)Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->()V -HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->(JLorg/thoughtcrime/securesms/attachments/AttachmentId;Z)V -HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;JLorg/thoughtcrime/securesms/attachments/AttachmentId;Z)V -HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->constructQueueString(Lorg/thoughtcrime/securesms/attachments/AttachmentId;)Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->(JLorg/thoughtcrime/securesms/attachments/AttachmentId;ZZ)V +HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->(JLorg/thoughtcrime/securesms/attachments/AttachmentId;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;JLorg/thoughtcrime/securesms/attachments/AttachmentId;ZZ)V HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->getFactoryKey()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->onAdded()V HSPLorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob;->serialize()[B @@ -25181,6 +25604,12 @@ HSPLorg/thoughtcrime/securesms/jobs/AttachmentUploadJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/AutomaticSessionResetJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/BackupMessagesJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/BackupMessagesJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/BackupRestoreJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/BackupRestoreJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/BackupRestoreMediaJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/BackupRestoreMediaJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/BaseJob;->()V HSPLorg/thoughtcrime/securesms/jobs/BaseJob;->(Lorg/thoughtcrime/securesms/jobmanager/Job$Parameters;)V HSPLorg/thoughtcrime/securesms/jobs/BaseJob;->getNextRunAttemptBackoff(ILjava/lang/Exception;)J @@ -25320,6 +25749,7 @@ HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage$deleteJobs$1;->invoke(Lorg/th HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage$getPendingJobsWithNoDependenciesInCreatedOrder$$inlined$sortedBy$1;->()V HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage$getPendingJobsWithNoDependenciesInCreatedOrder$$inlined$sortedBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage$getPendingJobsWithNoDependenciesInCreatedOrder$$inlined$sortedByDescending$1;->()V +HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage$getPendingJobsWithNoDependenciesInCreatedOrder$$inlined$sortedByDescending$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage$getPendingJobsWithNoDependenciesInCreatedOrder$lambda$8$$inlined$sortedBy$1;->()V HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage$getPendingJobsWithNoDependenciesInCreatedOrder$lambda$8$$inlined$sortedBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->$r8$lambda$Xu-rS-eV7EMHJJ0ct-GtD7_wnkc(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Z @@ -25333,6 +25763,7 @@ HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getConstraintSpecs(Ljava/la HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getDependencySpecsThatDependOnJob(Ljava/lang/String;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getJobById(Ljava/lang/String;)Lorg/thoughtcrime/securesms/jobmanager/persistence/JobSpec; HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getJobCountForFactory(Ljava/lang/String;)I +HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getJobCountForFactoryAndQueue(Ljava/lang/String;Ljava/lang/String;)I HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getJobSpec(Ljava/lang/String;)Lorg/thoughtcrime/securesms/jobmanager/persistence/JobSpec; HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getMigrationJob()Lorg/thoughtcrime/securesms/jobmanager/persistence/JobSpec; HSPLorg/thoughtcrime/securesms/jobs/FastJobStorage;->getPendingJobsWithNoDependenciesInCreatedOrder(J)Ljava/util/List; @@ -25552,6 +25983,8 @@ HSPLorg/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob$Factory;-> HSPLorg/thoughtcrime/securesms/jobs/ResendMessageJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/ResetSvrGuessCountJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/ResetSvrGuessCountJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/RestoreAttachmentJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/RestoreAttachmentJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/ResumableUploadSpecJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Companion;->()V @@ -25644,6 +26077,8 @@ HSPLorg/thoughtcrime/securesms/jobs/SubscriptionKeepAliveJob;->serialize()[B HSPLorg/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/Svr2MirrorJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/Svr2MirrorJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/SyncArchivedMediaJob$Factory;->()V +HSPLorg/thoughtcrime/securesms/jobs/SyncArchivedMediaJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/SyncSystemContactLinksJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/SyncSystemContactLinksJob$Factory;->()V HSPLorg/thoughtcrime/securesms/jobs/ThreadUpdateJob$$ExternalSyntheticLambda0;->(J)V @@ -25819,6 +26254,7 @@ HSPLorg/thoughtcrime/securesms/keyvalue/IntValue;->setValue$Signal_Android_playP HSPLorg/thoughtcrime/securesms/keyvalue/IntValue;->setValue$Signal_Android_playProdBenchmark(Lorg/thoughtcrime/securesms/keyvalue/KeyValueStore;Ljava/lang/Object;)V HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->(Lorg/thoughtcrime/securesms/keyvalue/KeyValueStore;)V HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->callingDisableLBRed()Z +HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->enterRestoreV2Flow()Z HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->forceBuiltInEmoji()Z HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->isWebsocketModeForced()Z HSPLorg/thoughtcrime/securesms/keyvalue/InternalValues;->shakeToReport()Z @@ -25845,6 +26281,7 @@ HSPLorg/thoughtcrime/securesms/keyvalue/KeyValueDataSet;->putLong(Ljava/lang/Str HSPLorg/thoughtcrime/securesms/keyvalue/KeyValueDataSet;->putString(Ljava/lang/String;Ljava/lang/String;)V HSPLorg/thoughtcrime/securesms/keyvalue/KeyValueDataSet;->readValueAsType(Ljava/lang/String;Ljava/lang/Class;Z)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/keyvalue/KeyValueDataSet;->removeAll(Ljava/util/Collection;)V +HSPLorg/thoughtcrime/securesms/keyvalue/KeyValueEnumValue;->(Ljava/lang/String;Ljava/lang/Object;Lorg/signal/core/util/LongSerializer;Lorg/thoughtcrime/securesms/keyvalue/KeyValueStore;)V HSPLorg/thoughtcrime/securesms/keyvalue/KeyValueProtoValue;->(Ljava/lang/String;Lcom/squareup/wire/ProtoAdapter;Lorg/thoughtcrime/securesms/keyvalue/KeyValueStore;)V HSPLorg/thoughtcrime/securesms/keyvalue/KeyValueProtoValue;->getValue$Signal_Android_playProdBenchmark(Lorg/thoughtcrime/securesms/keyvalue/KeyValueStore;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/keyvalue/KeyValueStore$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/keyvalue/KeyValueStore;Lorg/thoughtcrime/securesms/keyvalue/KeyValueDataSet;Ljava/util/Collection;)V @@ -25984,6 +26421,7 @@ HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getTheme()Lorg/thoughtc HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getUniversalExpireTimer()I HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->getUseCompactNavigationBar()Z HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isBackupEnabled()Z +HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isEnterKeySends()Z HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isMessageNotificationsEnabled()Z HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isMessageVibrateEnabled()Z HSPLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isPreferSystemContactPhotos()Z @@ -26018,6 +26456,7 @@ HSPLorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegate;->getValue(Ljav HSPLorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegate;->setValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V HSPLorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegatesKt;->blobValue(Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValues;Ljava/lang/String;[B)Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegate; HSPLorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegatesKt;->booleanValue(Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValues;Ljava/lang/String;Z)Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegate; +HSPLorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegatesKt;->enumValue(Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValues;Ljava/lang/String;Ljava/lang/Object;Lorg/signal/core/util/LongSerializer;)Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegate; HSPLorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegatesKt;->integerValue(Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValues;Ljava/lang/String;I)Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegate; HSPLorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegatesKt;->longValue(Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValues;Ljava/lang/String;J)Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegate; HSPLorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegatesKt;->nullableBlobValue(Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValues;Ljava/lang/String;[B)Lorg/thoughtcrime/securesms/keyvalue/SignalStoreValueDelegate; @@ -26098,16 +26537,13 @@ HSPLorg/thoughtcrime/securesms/logging/PersistentLogger$LogRequests;->blockForRe HSPLorg/thoughtcrime/securesms/logging/PersistentLogger$LogRequests;->notifyFlushed()V HSPLorg/thoughtcrime/securesms/logging/PersistentLogger$WriteThread;->(Lorg/thoughtcrime/securesms/logging/PersistentLogger$LogRequests;Lorg/thoughtcrime/securesms/database/LogDatabase;)V HSPLorg/thoughtcrime/securesms/logging/PersistentLogger$WriteThread;->formatBody(Ljava/lang/String;Ljava/util/Date;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -HSPLorg/thoughtcrime/securesms/logging/PersistentLogger$WriteThread;->requestToEntries(Lorg/thoughtcrime/securesms/logging/PersistentLogger$LogRequest;)Ljava/util/List; HSPLorg/thoughtcrime/securesms/logging/PersistentLogger$WriteThread;->run()V HSPLorg/thoughtcrime/securesms/logging/PersistentLogger;->()V HSPLorg/thoughtcrime/securesms/logging/PersistentLogger;->(Landroid/app/Application;)V HSPLorg/thoughtcrime/securesms/logging/PersistentLogger;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Z)V HSPLorg/thoughtcrime/securesms/logging/PersistentLogger;->flush()V -HSPLorg/thoughtcrime/securesms/logging/PersistentLogger;->getThreadString()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/logging/PersistentLogger;->i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Z)V HSPLorg/thoughtcrime/securesms/logging/PersistentLogger;->w(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Z)V -HSPLorg/thoughtcrime/securesms/logging/PersistentLogger;->write(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;Z)V HSPLorg/thoughtcrime/securesms/main/MainActivityListHostFragment$$ExternalSyntheticLambda0;->()V HSPLorg/thoughtcrime/securesms/main/MainActivityListHostFragment$$ExternalSyntheticLambda0;->run()Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/main/MainActivityListHostFragment$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/main/MainActivityListHostFragment;)V @@ -26378,6 +26814,7 @@ HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;->()V HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->(Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;Z)V HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->(Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->equals(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->isAccepted()Z HSPLorg/thoughtcrime/securesms/messages/IncomingMessageObserver$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/messages/IncomingMessageObserver;)V HSPLorg/thoughtcrime/securesms/messages/IncomingMessageObserver$$ExternalSyntheticLambda0;->run()V @@ -26595,6 +27032,8 @@ HSPLorg/thoughtcrime/securesms/mms/Slide;->hashCode()I HSPLorg/thoughtcrime/securesms/mms/Slide;->isInProgress()Z HSPLorg/thoughtcrime/securesms/mms/Slide;->isPendingDownload()Z HSPLorg/thoughtcrime/securesms/mms/Slide;->isVideoGif()Z +HSPLorg/thoughtcrime/securesms/mms/SlideDeck$$ExternalSyntheticLambda0;->()V +HSPLorg/thoughtcrime/securesms/mms/SlideDeck$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->(Ljava/util/List;)V HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->getAudioSlide()Lorg/thoughtcrime/securesms/mms/AudioSlide; HSPLorg/thoughtcrime/securesms/mms/SlideDeck;->getBody()Ljava/lang/String; @@ -26768,6 +27207,7 @@ HSPLorg/thoughtcrime/securesms/profiles/AvatarHelper;->()V HSPLorg/thoughtcrime/securesms/profiles/AvatarHelper;->getAvatar(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/RecipientId;)Ljava/io/InputStream; HSPLorg/thoughtcrime/securesms/profiles/AvatarHelper;->getAvatarDirectory(Landroid/content/Context;)Ljava/io/File; HSPLorg/thoughtcrime/securesms/profiles/AvatarHelper;->getAvatarFile(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/RecipientId;)Ljava/io/File; +HSPLorg/thoughtcrime/securesms/profiles/AvatarHelper;->getAvatarFile(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/RecipientId;Z)Ljava/io/File; HSPLorg/thoughtcrime/securesms/profiles/AvatarHelper;->getAvatarFileDetails(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/database/model/ProfileAvatarFileDetails; HSPLorg/thoughtcrime/securesms/profiles/AvatarHelper;->getOutputStream(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/RecipientId;Z)Ljava/io/OutputStream; HSPLorg/thoughtcrime/securesms/profiles/AvatarHelper;->hasAvatar(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/RecipientId;)Z @@ -26896,6 +27336,7 @@ HSPLorg/thoughtcrime/securesms/reactions/ReactionsConversationView;->()V HSPLorg/thoughtcrime/securesms/reactions/ReactionsConversationView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V HSPLorg/thoughtcrime/securesms/reactions/ReactionsConversationView;->clear()V HSPLorg/thoughtcrime/securesms/reactions/ReactionsConversationView;->init(Landroid/util/AttributeSet;)V +HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;)V HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda3;->()V HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda3;->contentsMatch(Ljava/lang/Object;Ljava/lang/Object;)Z @@ -26913,7 +27354,6 @@ HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->lambda$new$2(Lorg/thou HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->observable()Lio/reactivex/rxjava3/core/Observable; HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->observeForever(Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->refresh()Lorg/thoughtcrime/securesms/recipients/LiveRecipient; -HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->refresh(Lorg/thoughtcrime/securesms/recipients/RecipientId;)V HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->resolve()Lorg/thoughtcrime/securesms/recipients/Recipient; HSPLorg/thoughtcrime/securesms/recipients/LiveRecipient;->set(Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/recipients/LiveRecipientCache$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;)V @@ -27055,7 +27495,6 @@ HSPLorg/thoughtcrime/securesms/recipients/RecipientCreator$create$2;->() HSPLorg/thoughtcrime/securesms/recipients/RecipientCreator$create$2;->()V HSPLorg/thoughtcrime/securesms/recipients/RecipientCreator;->()V HSPLorg/thoughtcrime/securesms/recipients/RecipientCreator;->()V -HSPLorg/thoughtcrime/securesms/recipients/RecipientCreator;->create(ZLjava/lang/String;Ljava/lang/String;ZLorg/thoughtcrime/securesms/database/RecipientTable$RegisteredState;Lorg/thoughtcrime/securesms/database/model/RecipientRecord;Ljava/util/List;ZLorg/thoughtcrime/securesms/conversation/colors/AvatarColor;Lj$/util/Optional;)Lorg/thoughtcrime/securesms/recipients/Recipient; HSPLorg/thoughtcrime/securesms/recipients/RecipientCreator;->forId$default(Lorg/thoughtcrime/securesms/recipients/RecipientId;ZILjava/lang/Object;)Lorg/thoughtcrime/securesms/recipients/Recipient; HSPLorg/thoughtcrime/securesms/recipients/RecipientCreator;->forId(Lorg/thoughtcrime/securesms/recipients/RecipientId;)Lorg/thoughtcrime/securesms/recipients/Recipient; HSPLorg/thoughtcrime/securesms/recipients/RecipientCreator;->forId(Lorg/thoughtcrime/securesms/recipients/RecipientId;Z)Lorg/thoughtcrime/securesms/recipients/Recipient; @@ -27187,6 +27626,11 @@ HSPLorg/thoughtcrime/securesms/service/KeyCachingService;->isLocked(Landroid/con HSPLorg/thoughtcrime/securesms/service/KeyCachingService;->onAppForegrounded(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/service/LocalBackupListener;->()V HSPLorg/thoughtcrime/securesms/service/LocalBackupListener;->schedule(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/service/MessageBackupListener$Companion;->()V +HSPLorg/thoughtcrime/securesms/service/MessageBackupListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/thoughtcrime/securesms/service/MessageBackupListener$Companion;->schedule(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/service/MessageBackupListener;->()V +HSPLorg/thoughtcrime/securesms/service/MessageBackupListener;->schedule(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/service/PendingRetryReceiptManager;->()V HSPLorg/thoughtcrime/securesms/service/PendingRetryReceiptManager;->(Landroid/app/Application;)V HSPLorg/thoughtcrime/securesms/service/PendingRetryReceiptManager;->getNextClosestEvent()Ljava/lang/Object; @@ -27535,10 +27979,13 @@ HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->groupLimits()Lorg/thoughtcrim HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->init()V HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->instantVideoPlayback()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->internalUser()Z +HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->libSignalWebSocketEnabled()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->mapToJson(Ljava/util/Map;)Ljava/lang/String; +HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->messageBackups()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->okHttpAutomaticRetry()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->parseStoredConfig(Ljava/lang/String;)Ljava/util/Map; HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->refreshIfNecessary()V +HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->restoreAfterRegistration()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->retryReceipts()Z HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->retryRespondMaxAge()J HSPLorg/thoughtcrime/securesms/util/FeatureFlags;->triggerFlagChangeListeners(Ljava/util/Map;)V @@ -27625,6 +28072,11 @@ HSPLorg/thoughtcrime/securesms/util/LocalMetrics;->start(Ljava/lang/String;Ljava HSPLorg/thoughtcrime/securesms/util/LocaleUtil;->()V HSPLorg/thoughtcrime/securesms/util/LocaleUtil;->()V HSPLorg/thoughtcrime/securesms/util/LocaleUtil;->getLocaleDefaults()Ljava/util/List; +HSPLorg/thoughtcrime/securesms/util/LongClickMovementMethod$1;->(Lorg/thoughtcrime/securesms/util/LongClickMovementMethod;)V +HSPLorg/thoughtcrime/securesms/util/LongClickMovementMethod;->(Landroid/content/Context;)V +HSPLorg/thoughtcrime/securesms/util/LongClickMovementMethod;->getInstance(Landroid/content/Context;)Lorg/thoughtcrime/securesms/util/LongClickMovementMethod; +HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper;IIII)V +HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$1;->(Landroid/app/Activity;)V HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$1;->invoke(I)V HSPLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; @@ -27705,17 +28157,23 @@ HSPLorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda3;->call HSPLorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda4;->(Lorg/whispersystems/signalservice/api/services/ProfileService;Lj$/util/Optional;Lj$/util/Optional;Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;Lorg/thoughtcrime/securesms/recipients/Recipient;)V HSPLorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda5;->(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->$r8$lambda$64DRPwLhDKidiYVBrJ1oGsaeSVY(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/internal/ServiceResponse;)Lorg/signal/libsignal/protocol/util/Pair; -HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->$r8$lambda$cqO5Ws54dRBOxkD_sPlVLlSYwIg(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/whispersystems/signalservice/api/push/SignalServiceAddress; -HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->$r8$lambda$dDuBqdOM1yCYB_18NZWtjJd7BlA(Lorg/whispersystems/signalservice/api/services/ProfileService;Lj$/util/Optional;Lj$/util/Optional;Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/api/push/SignalServiceAddress;)Lio/reactivex/rxjava3/core/SingleSource; +HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->$r8$lambda$-c-8Rwy6e64peLv2SUk2gjvq7PE(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/whispersystems/signalservice/api/push/SignalServiceAddress; +HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->$r8$lambda$0JB7ay9SNj5m4iSCvT2_N6rKyuM(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/internal/ServiceResponse;)Lorg/signal/libsignal/protocol/util/Pair; +HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->$r8$lambda$Cd53nSsB80_pPTYAR1aj3sUFWaU(Lorg/whispersystems/signalservice/api/services/ProfileService;Lj$/util/Optional;Lj$/util/Optional;Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/api/push/SignalServiceAddress;)Lio/reactivex/rxjava3/core/SingleSource; HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->()V HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->handleSelfProfileKeyChange()V -HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->lambda$retrieveProfile$0(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/whispersystems/signalservice/api/push/SignalServiceAddress; -HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->lambda$retrieveProfile$1(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/internal/ServiceResponse;)Lorg/signal/libsignal/protocol/util/Pair; -HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->lambda$retrieveProfile$2(Lorg/whispersystems/signalservice/api/services/ProfileService;Lj$/util/Optional;Lj$/util/Optional;Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/api/push/SignalServiceAddress;)Lio/reactivex/rxjava3/core/SingleSource; +HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->lambda$retrieveProfile$3(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/whispersystems/signalservice/api/push/SignalServiceAddress; +HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->lambda$retrieveProfile$4(Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/internal/ServiceResponse;)Lorg/signal/libsignal/protocol/util/Pair; +HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->lambda$retrieveProfile$5(Lorg/whispersystems/signalservice/api/services/ProfileService;Lj$/util/Optional;Lj$/util/Optional;Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/api/push/SignalServiceAddress;)Lio/reactivex/rxjava3/core/SingleSource; HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->retrieveProfile(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;Z)Lio/reactivex/rxjava3/core/Single; HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->retrieveProfileSync(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;Lorg/whispersystems/signalservice/api/profiles/SignalServiceProfile$RequestType;Z)Lorg/whispersystems/signalservice/api/profiles/ProfileAndCredential; HSPLorg/thoughtcrime/securesms/util/ProfileUtil;->toSignalServiceAddress(Landroid/content/Context;Lorg/thoughtcrime/securesms/recipients/Recipient;)Lorg/whispersystems/signalservice/api/push/SignalServiceAddress; +HSPLorg/thoughtcrime/securesms/util/Projection$Corners;->()V +HSPLorg/thoughtcrime/securesms/util/Projection$Corners;->(F)V +HSPLorg/thoughtcrime/securesms/util/Projection$Corners;->(FFFF)V +HSPLorg/thoughtcrime/securesms/util/Projection$Corners;->([F)V +HSPLorg/thoughtcrime/securesms/util/Projection$Corners;->toRadii()[F +HSPLorg/thoughtcrime/securesms/util/Projection$Corners;->toRelativeRadii(Z)[F HSPLorg/thoughtcrime/securesms/util/ProjectionList;->()V HSPLorg/thoughtcrime/securesms/util/ProjectionList;->()V HSPLorg/thoughtcrime/securesms/util/ProjectionList;->(I)V @@ -27741,6 +28199,7 @@ HSPLorg/thoughtcrime/securesms/util/ScreenDensity;->get(Landroid/content/Context HSPLorg/thoughtcrime/securesms/util/ScreenDensity;->getBucket()Ljava/lang/String; HSPLorg/thoughtcrime/securesms/util/ScreenDensity;->isKnownDensity()Z HSPLorg/thoughtcrime/securesms/util/ScreenDensity;->xhdpiRelativeDensityScaleFactor(Ljava/lang/String;)F +HSPLorg/thoughtcrime/securesms/util/SearchUtil;->getHighlightedSpan(Ljava/util/Locale;Lorg/thoughtcrime/securesms/util/SearchUtil$StyleFactory;Landroid/text/Spannable;Ljava/lang/String;I)Landroid/text/Spannable; HSPLorg/thoughtcrime/securesms/util/ServiceUtil;->getActivityManager(Landroid/content/Context;)Landroid/app/ActivityManager; HSPLorg/thoughtcrime/securesms/util/ServiceUtil;->getAlarmManager(Landroid/content/Context;)Landroid/app/AlarmManager; HSPLorg/thoughtcrime/securesms/util/ServiceUtil;->getConnectivityManager(Landroid/content/Context;)Landroid/net/ConnectivityManager; @@ -27798,6 +28257,8 @@ HSPLorg/thoughtcrime/securesms/util/SoftHashMap;->get(Ljava/lang/Object;)Ljava/l HSPLorg/thoughtcrime/securesms/util/SoftHashMap;->processQueue()V HSPLorg/thoughtcrime/securesms/util/SoftHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; HSPLorg/thoughtcrime/securesms/util/SoftHashMap;->trimStrongReferencesIfNecessary()V +HSPLorg/thoughtcrime/securesms/util/SpanUtil;->()V +HSPLorg/thoughtcrime/securesms/util/SpanUtil;->ofSize(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; HSPLorg/thoughtcrime/securesms/util/StorageUtil;->getCleanFileName(Ljava/lang/String;)Ljava/lang/String; HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->$values()[Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode;->()V @@ -27839,6 +28300,7 @@ HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->getUnidentifiedAcces HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->hasPromptedPushRegistration(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->hasSeenStickerIntroTooltip(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->isBackupEnabled(Landroid/content/Context;)Z +HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->isEnterSendsEnabled(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->isIncognitoKeyboardEnabled(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->isNotificationVibrateEnabled(Landroid/content/Context;)Z HSPLorg/thoughtcrime/securesms/util/TextSecurePreferences;->isNotificationsEnabled(Landroid/content/Context;)Z @@ -27980,6 +28442,9 @@ HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->registerFac HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->registerFactory(Ljava/lang/Class;Lorg/thoughtcrime/securesms/util/adapter/mapping/Factory;)V HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->()V HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingModelList;->(Ljava/util/Collection;)V +HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->(Landroid/view/View;)V +HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->onAttachedToWindow()V +HSPLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->setPayload(Ljava/util/List;)V HSPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter$$ExternalSyntheticLambda0;->(II)V HSPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->()V HSPLorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter;->(II)V @@ -27999,6 +28464,8 @@ HSPLorg/thoughtcrime/securesms/util/concurrent/SerialExecutor;->execute(Ljava/la HSPLorg/thoughtcrime/securesms/util/concurrent/SerialExecutor;->lambda$execute$0(Ljava/lang/Runnable;)V HSPLorg/thoughtcrime/securesms/util/concurrent/SerialExecutor;->scheduleNext()V HSPLorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLorg/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat;->()V +HSPLorg/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat;->(Landroid/content/Context;)V HSPLorg/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper;->getUsersSelectedLocale(Landroid/content/Context;)Ljava/util/Locale; HSPLorg/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper;->prepareOverrideConfiguration(Landroid/content/Context;Landroid/content/res/Configuration;)V HSPLorg/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper;->updateContext(Landroid/content/Context;)V @@ -28224,9 +28691,15 @@ HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer;->isBorderless()Z HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer;->isGif()Z HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer;->isPointer()Z -HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId;->(Ljava/lang/String;)V -HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId;->from(Ljava/lang/String;)Lorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId; -HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId;->toString()Ljava/lang/String; +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$Companion;->()V +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$Companion;->()V +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$Companion;->from(Ljava/lang/String;)Lorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId; +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$S3;->()V +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$S3;->()V +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$S3;->toString()Ljava/lang/String; +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$V4;->(Ljava/lang/String;)V +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$V4;->toString()Ljava/lang/String; +HSPLorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId;->()V HSPLorg/whispersystems/signalservice/api/payments/Currency$CryptoCurrency;->(Ljava/lang/String;I)V HSPLorg/whispersystems/signalservice/api/payments/Currency;->()V HSPLorg/whispersystems/signalservice/api/payments/Currency;->(Lorg/whispersystems/signalservice/api/payments/Currency-IA;)V @@ -28393,6 +28866,8 @@ HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$EmptyRespon HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$EmptyResponseCodeHandler;->handle(ILokhttp3/ResponseBody;)V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$ServiceConnectionHolder;->(Lokhttp3/OkHttpClient;Lokhttp3/OkHttpClient;Ljava/lang/String;Lj$/util/Optional;)V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$ServiceConnectionHolder;->(Lokhttp3/OkHttpClient;Lokhttp3/OkHttpClient;Ljava/lang/String;Lj$/util/Optional;Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ServiceConnectionHolder-IA;)V +HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$UnopinionatedResponseCodeHandler;->()V +HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket$UnopinionatedResponseCodeHandler;->(Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$UnopinionatedResponseCodeHandler-IA;)V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->-$$Nest$mvalidateServiceResponse(Lorg/whispersystems/signalservice/internal/push/PushServiceSocket;Lokhttp3/Response;)Lokhttp3/Response; HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->()V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->(Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration;Lorg/whispersystems/signalservice/api/util/CredentialsProvider;Ljava/lang/String;Lorg/signal/libsignal/zkgroup/profiles/ClientZkProfileOperations;Z)V @@ -28402,7 +28877,7 @@ HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->createCdn HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->createConnectionClient(Lorg/whispersystems/signalservice/internal/configuration/SignalUrl;Ljava/util/List;Lj$/util/Optional;Lj$/util/Optional;)Lokhttp3/OkHttpClient; HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->createConnectionHolders([Lorg/whispersystems/signalservice/internal/configuration/SignalUrl;Ljava/util/List;Lj$/util/Optional;Lj$/util/Optional;)[Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ConnectionHolder; HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->createServiceConnectionHolders([Lorg/whispersystems/signalservice/internal/configuration/SignalUrl;Ljava/util/List;Lj$/util/Optional;Lj$/util/Optional;)[Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ServiceConnectionHolder; -HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->downloadFromCdn(Ljava/io/OutputStream;JILjava/lang/String;JLorg/whispersystems/signalservice/api/messages/SignalServiceAttachment$ProgressListener;)V +HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->downloadFromCdn(Ljava/io/OutputStream;JILjava/util/Map;Ljava/lang/String;JLorg/whispersystems/signalservice/api/messages/SignalServiceAttachment$ProgressListener;)V HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->getAuthorizationHeader(Lorg/whispersystems/signalservice/api/util/CredentialsProvider;)Ljava/lang/String; HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->getAvailablePreKeys(Lorg/whispersystems/signalservice/api/push/ServiceIdType;)Lorg/whispersystems/signalservice/internal/push/OneTimePreKeyCounts; HSPLorg/whispersystems/signalservice/internal/push/PushServiceSocket;->getDevices()Ljava/util/List; @@ -28454,20 +28929,20 @@ HSPLorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper$Bu HSPLorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper;->(Ljava/lang/Class;Lorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper$CustomResponseMapper;Lorg/whispersystems/signalservice/internal/websocket/ErrorMapper;)V HSPLorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper;->(Ljava/lang/Class;Lorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper$CustomResponseMapper;Lorg/whispersystems/signalservice/internal/websocket/ErrorMapper;Lorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper-IA;)V HSPLorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper;->extend(Ljava/lang/Class;)Lorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper$Builder; -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->()V -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->(Ljava/lang/String;Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration;Lj$/util/Optional;Ljava/lang/String;Lorg/whispersystems/signalservice/api/websocket/HealthMonitor;Ljava/lang/String;Z)V -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->(Ljava/lang/String;Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration;Lj$/util/Optional;Ljava/lang/String;Lorg/whispersystems/signalservice/api/websocket/HealthMonitor;Z)V -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->cleanupAfterShutdown()V -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->connect()Lio/reactivex/rxjava3/core/Observable; -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->createTlsSocketFactory(Lorg/whispersystems/signalservice/api/push/TrustStore;)Lorg/signal/libsignal/protocol/util/Pair; -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->disconnect()V -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->elapsedTime(J)J -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->getConnectionInfo()Lorg/signal/libsignal/protocol/util/Pair; -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->isDead()Z -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->log(Ljava/lang/String;)V -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->onFailure(Lokhttp3/WebSocket;Ljava/lang/Throwable;Lokhttp3/Response;)V -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->readRequest(J)Lorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage; -HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketConnection;->warn(Ljava/lang/String;Ljava/lang/Throwable;)V +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->()V +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->(Ljava/lang/String;Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration;Lj$/util/Optional;Ljava/lang/String;Lorg/whispersystems/signalservice/api/websocket/HealthMonitor;Ljava/lang/String;Z)V +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->(Ljava/lang/String;Lorg/whispersystems/signalservice/internal/configuration/SignalServiceConfiguration;Lj$/util/Optional;Ljava/lang/String;Lorg/whispersystems/signalservice/api/websocket/HealthMonitor;Z)V +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->cleanupAfterShutdown()V +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->connect()Lio/reactivex/rxjava3/core/Observable; +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->createTlsSocketFactory(Lorg/whispersystems/signalservice/api/push/TrustStore;)Lorg/signal/libsignal/protocol/util/Pair; +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->disconnect()V +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->elapsedTime(J)J +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->getConnectionInfo()Lorg/signal/libsignal/protocol/util/Pair; +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->isDead()Z +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->log(Ljava/lang/String;)V +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->onFailure(Lokhttp3/WebSocket;Ljava/lang/Throwable;Lokhttp3/Response;)V +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->readRequest(J)Lorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage; +HSPLorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection;->warn(Ljava/lang/String;Ljava/lang/Throwable;)V HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage$Builder;->()V HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage$Builder;->build()Lorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage; HSPLorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage$Builder;->headers(Ljava/util/List;)Lorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage$Builder; @@ -28724,6 +29199,7 @@ Landroidx/appcompat/widget/AppCompatDrawableManager; Landroidx/appcompat/widget/AppCompatEditText; Landroidx/appcompat/widget/AppCompatEmojiEditTextHelper; Landroidx/appcompat/widget/AppCompatEmojiTextHelper; +Landroidx/appcompat/widget/AppCompatHintHelper; Landroidx/appcompat/widget/AppCompatImageButton; Landroidx/appcompat/widget/AppCompatImageHelper; Landroidx/appcompat/widget/AppCompatImageView; @@ -28851,8 +29327,10 @@ Landroidx/constraintlayout/core/Cache; Landroidx/constraintlayout/core/LinearSystem$Row; Landroidx/constraintlayout/core/LinearSystem$ValuesRow; Landroidx/constraintlayout/core/LinearSystem; +Landroidx/constraintlayout/core/Metrics; Landroidx/constraintlayout/core/Pools$Pool; Landroidx/constraintlayout/core/Pools$SimplePool; +Landroidx/constraintlayout/core/PriorityGoalRow$1; Landroidx/constraintlayout/core/PriorityGoalRow$GoalVariableAccessor; Landroidx/constraintlayout/core/PriorityGoalRow; Landroidx/constraintlayout/core/SolverVariable$Type; @@ -28901,9 +29379,11 @@ Landroidx/constraintlayout/widget/ConstraintSet$Motion; Landroidx/constraintlayout/widget/ConstraintSet$PropertySet; Landroidx/constraintlayout/widget/ConstraintSet$Transform; Landroidx/constraintlayout/widget/ConstraintSet; +Landroidx/constraintlayout/widget/ConstraintsChangedListener; Landroidx/constraintlayout/widget/Guideline; Landroidx/constraintlayout/widget/R$id; Landroidx/constraintlayout/widget/R$styleable; +Landroidx/constraintlayout/widget/SharedValues; Landroidx/constraintlayout/widget/VirtualLayout; Landroidx/coordinatorlayout/R$attr; Landroidx/coordinatorlayout/R$styleable; @@ -28987,6 +29467,8 @@ Landroidx/core/os/TraceCompat; Landroidx/core/os/UserManagerCompat$Api24Impl$$ExternalSyntheticApiModelOutline0; Landroidx/core/os/UserManagerCompat$Api24Impl; Landroidx/core/os/UserManagerCompat; +Landroidx/core/text/util/LinkifyCompat$$ExternalSyntheticLambda0; +Landroidx/core/text/util/LinkifyCompat; Landroidx/core/util/Consumer; Landroidx/core/util/ObjectsCompat$Api19Impl; Landroidx/core/util/ObjectsCompat; @@ -29127,6 +29609,11 @@ Landroidx/core/view/accessibility/AccessibilityViewCommand$SetTextArguments; Landroidx/core/view/accessibility/AccessibilityViewCommand; Landroidx/core/view/animation/PathInterpolatorCompat$Api21Impl; Landroidx/core/view/animation/PathInterpolatorCompat; +Landroidx/core/view/inputmethod/EditorInfoCompat$$ExternalSyntheticApiModelOutline0; +Landroidx/core/view/inputmethod/EditorInfoCompat; +Landroidx/core/view/inputmethod/InputConnectionCompat$1; +Landroidx/core/view/inputmethod/InputConnectionCompat$OnCommitContentListener; +Landroidx/core/view/inputmethod/InputConnectionCompat; Landroidx/core/widget/ImageViewCompat$Api21Impl; Landroidx/core/widget/ImageViewCompat; Landroidx/core/widget/NestedScrollView$OnScrollChangeListener; @@ -29178,6 +29665,8 @@ Landroidx/emoji2/viewsintegration/EmojiEditTextHelper$HelperInternal19; Landroidx/emoji2/viewsintegration/EmojiEditTextHelper$HelperInternal; Landroidx/emoji2/viewsintegration/EmojiEditTextHelper; Landroidx/emoji2/viewsintegration/EmojiEditableFactory; +Landroidx/emoji2/viewsintegration/EmojiInputConnection$EmojiCompatDeleteHelper; +Landroidx/emoji2/viewsintegration/EmojiInputConnection; Landroidx/emoji2/viewsintegration/EmojiInputFilter; Landroidx/emoji2/viewsintegration/EmojiKeyListener$EmojiCompatHandleKeyDownHelper; Landroidx/emoji2/viewsintegration/EmojiKeyListener; @@ -30262,6 +30751,7 @@ Lcom/airbnb/lottie/value/LottieFrameInfo; Lcom/airbnb/lottie/value/LottieValueCallback; Lcom/airbnb/lottie/value/ScaleXY; Lcom/airbnb/lottie/value/SimpleLottieValueCallback; +Lcom/android/tools/r8/RecordTag; Lcom/annimon/stream/Collector; Lcom/annimon/stream/Collectors$10; Lcom/annimon/stream/Collectors$11; @@ -30286,6 +30776,9 @@ Lcom/annimon/stream/Stream$3; Lcom/annimon/stream/Stream; Lcom/annimon/stream/function/BiConsumer; Lcom/annimon/stream/function/BiFunction; +Lcom/annimon/stream/function/BinaryOperator$Util$2; +Lcom/annimon/stream/function/BinaryOperator$Util; +Lcom/annimon/stream/function/BinaryOperator; Lcom/annimon/stream/function/Consumer; Lcom/annimon/stream/function/Function; Lcom/annimon/stream/function/IndexedFunction; @@ -30303,6 +30796,7 @@ Lcom/annimon/stream/iterator/LsaExtIterator; Lcom/annimon/stream/iterator/LsaIterator; Lcom/annimon/stream/iterator/PrimitiveIterator$OfInt; Lcom/annimon/stream/operator/IntArray; +Lcom/annimon/stream/operator/IntRangeClosed; Lcom/annimon/stream/operator/ObjArray; Lcom/annimon/stream/operator/ObjFilter; Lcom/annimon/stream/operator/ObjLimit; @@ -31012,7 +31506,6 @@ Lcom/fasterxml/jackson/databind/ser/Serializers$Base; Lcom/fasterxml/jackson/databind/ser/Serializers; Lcom/fasterxml/jackson/databind/ser/impl/FailingSerializer; Lcom/fasterxml/jackson/databind/ser/impl/IndexedListSerializer; -Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double; Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty; Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult; Lcom/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single; @@ -31412,6 +31905,8 @@ Lcom/google/common/collect/RegularImmutableBiMap; Lcom/google/common/collect/RegularImmutableList; Lcom/google/common/collect/RegularImmutableMap; Lcom/google/common/collect/RegularImmutableSet; +Lcom/google/common/collect/Sets$2; +Lcom/google/common/collect/Sets$SetView; Lcom/google/common/collect/Sets; Lcom/google/common/collect/SingletonImmutableSet; Lcom/google/common/collect/UnmodifiableIterator; @@ -31997,10 +32492,12 @@ Lj$/time/LocalTime; Lj$/time/OffsetDateTime; Lj$/time/ZoneId; Lj$/time/ZoneOffset; +Lj$/time/ZonedDateTime; Lj$/time/a; Lj$/time/b; Lj$/time/c; Lj$/time/chrono/ChronoLocalDateTime; +Lj$/time/chrono/ChronoZonedDateTime; Lj$/time/chrono/a; Lj$/time/chrono/b; Lj$/time/chrono/e; @@ -32113,6 +32610,7 @@ Lj$/util/function/BinaryOperator; Lj$/util/function/Consumer; Lj$/util/function/Function; Lj$/util/function/IntFunction; +Lj$/util/function/LongFunction; Lj$/util/function/N; Lj$/util/function/Predicate; Lj$/util/function/S; @@ -32120,16 +32618,17 @@ Lj$/util/function/Supplier; Lj$/util/function/ToDoubleFunction; Lj$/util/function/ToIntFunction; Lj$/util/function/ToLongFunction; -Lj$/util/function/Z; -Lj$/util/function/g0; +Lj$/util/function/b; +Lj$/util/function/e0; +Lj$/util/function/h0; Lj$/util/function/h; -Lj$/util/function/j0; -Lj$/util/function/m0; +Lj$/util/function/k0; +Lj$/util/function/n0; Lj$/util/function/o; -Lj$/util/function/p0; Lj$/util/function/t; Lj$/util/g; Lj$/util/m; +Lj$/util/stream/A1; Lj$/util/stream/B0; Lj$/util/stream/B2; Lj$/util/stream/C0; @@ -32139,6 +32638,7 @@ Lj$/util/stream/Collector; Lj$/util/stream/Collectors; Lj$/util/stream/D0; Lj$/util/stream/E0; +Lj$/util/stream/E1; Lj$/util/stream/F0; Lj$/util/stream/F1; Lj$/util/stream/F3; @@ -32173,6 +32673,8 @@ Lj$/util/stream/b; Lj$/util/stream/c2; Lj$/util/stream/c; Lj$/util/stream/g2; +Lj$/util/stream/h2; +Lj$/util/stream/i2; Lj$/util/stream/i; Lj$/util/stream/l; Lj$/util/stream/n; @@ -33995,6 +34497,7 @@ Lorg/signal/glide/Log$Provider; Lorg/signal/glide/SignalGlideCodecs; Lorg/signal/glide/apng/decode/APNGDecoder; Lorg/signal/glide/common/decode/FrameSeqDecoder; +Lorg/signal/libsignal/attest/AttestationFailedException; Lorg/signal/libsignal/internal/FilterExceptions$ThrowingNativeIntOperation; Lorg/signal/libsignal/internal/FilterExceptions$ThrowingNativeLongOperation; Lorg/signal/libsignal/internal/FilterExceptions$ThrowingNativeOperation; @@ -34002,10 +34505,21 @@ Lorg/signal/libsignal/internal/FilterExceptions$ThrowingNativeVoidOperation; Lorg/signal/libsignal/internal/FilterExceptions; Lorg/signal/libsignal/internal/Native; Lorg/signal/libsignal/internal/NativeHandleGuard$Owner; +Lorg/signal/libsignal/internal/NativeHandleGuard$SimpleOwner; Lorg/signal/libsignal/internal/NativeHandleGuard; +Lorg/signal/libsignal/net/CdsiInvalidTokenException; Lorg/signal/libsignal/net/CdsiLookupResponse$Entry; Lorg/signal/libsignal/net/CdsiLookupResponse; +Lorg/signal/libsignal/net/CdsiProtocolException; +Lorg/signal/libsignal/net/ChatService$DebugInfo; +Lorg/signal/libsignal/net/ChatService$Response; +Lorg/signal/libsignal/net/ChatService$ResponseAndDebugInfo; +Lorg/signal/libsignal/net/ChatService; +Lorg/signal/libsignal/net/ChatServiceException; +Lorg/signal/libsignal/net/ChatServiceInactiveException; Lorg/signal/libsignal/net/Network$Environment; +Lorg/signal/libsignal/net/NetworkException; +Lorg/signal/libsignal/net/RetryLaterException; Lorg/signal/libsignal/protocol/IdentityKey; Lorg/signal/libsignal/protocol/IdentityKeyPair; Lorg/signal/libsignal/protocol/InvalidKeyException; @@ -34044,16 +34558,20 @@ Lorg/signal/libsignal/protocol/state/KyberPreKeyStore; Lorg/signal/libsignal/protocol/state/PreKeyStore; Lorg/signal/libsignal/protocol/state/SessionStore; Lorg/signal/libsignal/protocol/state/SignalProtocolStore; -Lorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda1; Lorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda2; Lorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda3; Lorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda4; +Lorg/signal/libsignal/protocol/state/SignedPreKeyRecord$$ExternalSyntheticLambda5; Lorg/signal/libsignal/protocol/state/SignedPreKeyRecord; Lorg/signal/libsignal/protocol/state/SignedPreKeyStore; Lorg/signal/libsignal/protocol/util/ByteUtil; Lorg/signal/libsignal/protocol/util/KeyHelper; Lorg/signal/libsignal/protocol/util/Medium; Lorg/signal/libsignal/protocol/util/Pair; +Lorg/signal/libsignal/sgxsession/SgxCommunicationFailureException; +Lorg/signal/libsignal/svr/DataMissingException; +Lorg/signal/libsignal/svr/RestoreFailedException; +Lorg/signal/libsignal/svr/SvrException; Lorg/signal/libsignal/usernames/BaseUsernameException; Lorg/signal/libsignal/zkgroup/InvalidInputException; Lorg/signal/libsignal/zkgroup/ServerPublicParams$$ExternalSyntheticLambda0; @@ -34071,11 +34589,13 @@ Lorg/signal/libsignal/zkgroup/profiles/ProfileKey; Lorg/signal/libsignal/zkgroup/profiles/ProfileKeyVersion; Lorg/signal/libsignal/zkgroup/receipts/ClientZkReceiptOperations; Lorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda1; +Lorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda2; Lorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda3; Lorg/signal/paging/BufferedPagingController; Lorg/signal/paging/CompressedList; Lorg/signal/paging/DataStatus; Lorg/signal/paging/DataStream; +Lorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda0; Lorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda2; Lorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda3; Lorg/signal/paging/FixedSizePagingController; @@ -34188,11 +34708,15 @@ Lorg/thoughtcrime/securesms/PassphraseRequiredActivity; Lorg/thoughtcrime/securesms/R$styleable; Lorg/thoughtcrime/securesms/Unbindable; Lorg/thoughtcrime/securesms/animation/AnimationCompleteListener; +Lorg/thoughtcrime/securesms/attachments/ArchivedAttachment; Lorg/thoughtcrime/securesms/attachments/Attachment$Companion; Lorg/thoughtcrime/securesms/attachments/Attachment; Lorg/thoughtcrime/securesms/attachments/AttachmentCreator; Lorg/thoughtcrime/securesms/attachments/AttachmentId$Creator; Lorg/thoughtcrime/securesms/attachments/AttachmentId; +Lorg/thoughtcrime/securesms/attachments/Cdn$Serializer; +Lorg/thoughtcrime/securesms/attachments/Cdn$WhenMappings; +Lorg/thoughtcrime/securesms/attachments/Cdn; Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment$DisplayOrderComparator; Lorg/thoughtcrime/securesms/attachments/DatabaseAttachment; Lorg/thoughtcrime/securesms/attachments/PointerAttachment$Companion; @@ -34217,6 +34741,9 @@ Lorg/thoughtcrime/securesms/avatar/Avatars; Lorg/thoughtcrime/securesms/avatar/TextAvatarDrawable; Lorg/thoughtcrime/securesms/avatar/view/AvatarView$WhenMappings; Lorg/thoughtcrime/securesms/avatar/view/AvatarView; +Lorg/thoughtcrime/securesms/backup/RestoreState$Companion; +Lorg/thoughtcrime/securesms/backup/RestoreState$Serializer; +Lorg/thoughtcrime/securesms/backup/RestoreState; Lorg/thoughtcrime/securesms/badges/BadgeImageView; Lorg/thoughtcrime/securesms/badges/gifts/GiftMessageView$Callback; Lorg/thoughtcrime/securesms/badges/gifts/OpenableGift; @@ -34233,6 +34760,11 @@ Lorg/thoughtcrime/securesms/blurhash/BlurHashModelLoader$Factory; Lorg/thoughtcrime/securesms/blurhash/BlurHashResourceDecoder; Lorg/thoughtcrime/securesms/calls/log/CallLogFragment$Callback; Lorg/thoughtcrime/securesms/color/MaterialColor$UnknownColorException; +Lorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda1; +Lorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda2; +Lorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda3; +Lorg/thoughtcrime/securesms/components/AlbumThumbnailView; Lorg/thoughtcrime/securesms/components/AlertView; Lorg/thoughtcrime/securesms/components/AnimatingToggle; Lorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda0; @@ -34249,6 +34781,7 @@ Lorg/thoughtcrime/securesms/components/AvatarImageView$RecipientContactPhoto; Lorg/thoughtcrime/securesms/components/AvatarImageView$RedownloadRequestListener; Lorg/thoughtcrime/securesms/components/AvatarImageView; Lorg/thoughtcrime/securesms/components/ComposeText$1; +Lorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener; Lorg/thoughtcrime/securesms/components/ComposeText$CursorPositionChangedListener; Lorg/thoughtcrime/securesms/components/ComposeText$QueryStart; Lorg/thoughtcrime/securesms/components/ComposeText$StylingChangedListener; @@ -34258,6 +34791,14 @@ Lorg/thoughtcrime/securesms/components/ConversationItemFooter$$ExternalSynthetic Lorg/thoughtcrime/securesms/components/ConversationItemFooter$$ExternalSyntheticLambda2; Lorg/thoughtcrime/securesms/components/ConversationItemFooter$OnTouchDelegateChangedListener; Lorg/thoughtcrime/securesms/components/ConversationItemFooter; +Lorg/thoughtcrime/securesms/components/ConversationItemThumbnail$Companion; +Lorg/thoughtcrime/securesms/components/ConversationItemThumbnail; +Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState$Creator; +Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState; +Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$Creator; +Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState$Creator; +Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState; +Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState; Lorg/thoughtcrime/securesms/components/ConversationScrollToView; Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar; Lorg/thoughtcrime/securesms/components/CornerMask; @@ -34308,6 +34849,7 @@ Lorg/thoughtcrime/securesms/components/QuoteView$MessageType; Lorg/thoughtcrime/securesms/components/QuoteView; Lorg/thoughtcrime/securesms/components/RatingManager; Lorg/thoughtcrime/securesms/components/RecyclerViewFastScroller$FastScrollAdapter; +Lorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController; Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$2; Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$3; Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$4; @@ -34320,6 +34862,13 @@ Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$scrollPositionRe Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate; Lorg/thoughtcrime/securesms/components/SendButton; Lorg/thoughtcrime/securesms/components/SharedContactView$EventListener; +Lorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport0; +Lorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport1; +Lorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport2; +Lorg/thoughtcrime/securesms/components/ThumbnailView$CancelClickDispatcher; +Lorg/thoughtcrime/securesms/components/ThumbnailView$DownloadClickDispatcher; +Lorg/thoughtcrime/securesms/components/ThumbnailView$ThumbnailClickDispatcher; +Lorg/thoughtcrime/securesms/components/ThumbnailView; Lorg/thoughtcrime/securesms/components/TypingIndicatorView; Lorg/thoughtcrime/securesms/components/TypingStatusRepository; Lorg/thoughtcrime/securesms/components/ViewBinderDelegate$1; @@ -34340,6 +34889,8 @@ Lorg/thoughtcrime/securesms/components/emoji/EmojiProvider$1; Lorg/thoughtcrime/securesms/components/emoji/EmojiProvider$EmojiDrawable; Lorg/thoughtcrime/securesms/components/emoji/EmojiProvider; Lorg/thoughtcrime/securesms/components/emoji/EmojiSpan; +Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda2; Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView; @@ -34359,6 +34910,8 @@ Lorg/thoughtcrime/securesms/components/emoji/parsing/EmojiTree$EmojiTreeNode; Lorg/thoughtcrime/securesms/components/emoji/parsing/EmojiTree$Matches; Lorg/thoughtcrime/securesms/components/emoji/parsing/EmojiTree; Lorg/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick; +Lorg/thoughtcrime/securesms/components/mention/MentionAnnotation$$ExternalSyntheticLambda1; +Lorg/thoughtcrime/securesms/components/mention/MentionAnnotation; Lorg/thoughtcrime/securesms/components/mention/MentionDeleter; Lorg/thoughtcrime/securesms/components/mention/MentionRenderer$MultiLineMentionRenderer; Lorg/thoughtcrime/securesms/components/mention/MentionRenderer$SingleLineMentionRenderer; @@ -34403,6 +34956,22 @@ Lorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate$$External Lorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate$1$onViewAttachedToWindow$1; Lorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate$1; Lorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress$Companion; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setCancelClickListener$1; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setClickable$1; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setFocusable$1; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setShowSecondaryText$1; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setSlides$2; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setTransferClickListener$1; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setVisible$1; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$Companion; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State; +Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView; Lorg/thoughtcrime/securesms/components/voice/RetryableInitAudioSink$Companion; Lorg/thoughtcrime/securesms/components/voice/RetryableInitAudioSink; Lorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaController$1; @@ -34414,6 +34983,7 @@ Lorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaController; Lorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaControllerOwner; Lorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaNotificationProvider$Companion; Lorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaNotificationProvider; +Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$KeyClearedReceiver$1; Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$KeyClearedReceiver; Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService$MediaSessionServiceListener; @@ -34525,14 +35095,20 @@ Lorg/thoughtcrime/securesms/conversation/ConversationAdapterBridge; Lorg/thoughtcrime/securesms/conversation/ConversationBottomSheetCallback; Lorg/thoughtcrime/securesms/conversation/ConversationData$MessageRequestData; Lorg/thoughtcrime/securesms/conversation/ConversationData; +Lorg/thoughtcrime/securesms/conversation/ConversationHeaderView$$ExternalSyntheticLambda3; +Lorg/thoughtcrime/securesms/conversation/ConversationHeaderView$FallbackPhotoProvider; +Lorg/thoughtcrime/securesms/conversation/ConversationHeaderView; Lorg/thoughtcrime/securesms/conversation/ConversationIntents$Args; Lorg/thoughtcrime/securesms/conversation/ConversationIntents$Builder; Lorg/thoughtcrime/securesms/conversation/ConversationIntents$ConversationScreenType; Lorg/thoughtcrime/securesms/conversation/ConversationIntents; Lorg/thoughtcrime/securesms/conversation/ConversationItem$$ExternalSyntheticLambda4; +Lorg/thoughtcrime/securesms/conversation/ConversationItem$$ExternalSyntheticLambda7; Lorg/thoughtcrime/securesms/conversation/ConversationItem$1; Lorg/thoughtcrime/securesms/conversation/ConversationItem$AttachmentDownloadClickListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$ClickListener; +Lorg/thoughtcrime/securesms/conversation/ConversationItem$DoubleTapEditTouchListener$1; +Lorg/thoughtcrime/securesms/conversation/ConversationItem$DoubleTapEditTouchListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$GiftMessageViewCallback; Lorg/thoughtcrime/securesms/conversation/ConversationItem$LinkPreviewClickListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$PassthroughClickListener; @@ -34542,6 +35118,7 @@ Lorg/thoughtcrime/securesms/conversation/ConversationItem$ScheduledIndicatorClic Lorg/thoughtcrime/securesms/conversation/ConversationItem$SharedContactClickListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$SharedContactEventListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$SlideClickPassthroughListener; +Lorg/thoughtcrime/securesms/conversation/ConversationItem$ThumbnailClickListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$TouchDelegateChangedListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$UrlClickListener; Lorg/thoughtcrime/securesms/conversation/ConversationItem$ViewOnceMessageClickListener; @@ -34549,6 +35126,11 @@ Lorg/thoughtcrime/securesms/conversation/ConversationItem; Lorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble$$ExternalSyntheticBackport0; Lorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble$$ExternalSyntheticLambda2; Lorg/thoughtcrime/securesms/conversation/ConversationItemBodyBubble; +Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Condensed; +Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Detailed; +Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$EditHistory; +Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Standard; +Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode; Lorg/thoughtcrime/securesms/conversation/ConversationMessage$ComputedProperties; Lorg/thoughtcrime/securesms/conversation/ConversationMessage$ConversationMessageFactory; Lorg/thoughtcrime/securesms/conversation/ConversationMessage; @@ -34573,6 +35155,9 @@ Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$PresentOnChange; Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$RecipientObserverManager; Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem$UpdateObserver; Lorg/thoughtcrime/securesms/conversation/ConversationUpdateItem; +Lorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda1; +Lorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/conversation/MarkReadHelper; Lorg/thoughtcrime/securesms/conversation/MessageSendType$Companion; Lorg/thoughtcrime/securesms/conversation/MessageSendType$SignalMessageSendType$Creator; @@ -34603,6 +35188,7 @@ Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$Auto; Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$BuiltIn; Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$Companion$CREATOR$1; Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$Companion; +Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$NotSet; Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id; Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$LinearGradient$Creator; Lorg/thoughtcrime/securesms/conversation/colors/ChatColors$LinearGradient; @@ -34611,18 +35197,22 @@ Lorg/thoughtcrime/securesms/conversation/colors/ChatColorsPalette$Bubbles; Lorg/thoughtcrime/securesms/conversation/colors/Colorizable; Lorg/thoughtcrime/securesms/conversation/colors/Colorizer$onGroupMembershipChanged$$inlined$sortedBy$1; Lorg/thoughtcrime/securesms/conversation/colors/Colorizer; +Lorg/thoughtcrime/securesms/conversation/colors/NameColor; Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$edgeEffectFactory$1; Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$itemDecoration$1; Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer$scrollListener$1; Lorg/thoughtcrime/securesms/conversation/colors/RecyclerViewColorizer; Lorg/thoughtcrime/securesms/conversation/drafts/DraftRepository$ShareOrDraftData; Lorg/thoughtcrime/securesms/conversation/drafts/DraftViewModel; +Lorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator$Companion; Lorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator; Lorg/thoughtcrime/securesms/conversation/mutiselect/Multiselect; Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Companion; Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection$Single; Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectCollection; +Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference; +Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$WhenMappings; Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration; Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Attachments; Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectPart$Text; @@ -34680,7 +35270,13 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSynth Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda6; Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$$ExternalSyntheticLambda7; Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$Companion; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder$$ExternalSyntheticLambda1; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$IncomingMediaViewHolder; Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$OnScrollStateChangedListener; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder; Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$reminderStub$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationBannerView$reviewBannerStub$2; @@ -34702,6 +35298,8 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ConversationOpt Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$DataObserver; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$InputPanelMediaListener; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollDateHeaderHelper; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$onScrolled$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ThreadHeaderMarginDecoration; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ToolbarDependentMarginListener; @@ -34733,6 +35331,7 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversa Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$3; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$onViewCreated$$inlined$createActivityViewModel$1; @@ -34763,6 +35362,7 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$stickerViewMode Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$viewModel$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$voiceNotePlayerListener$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder; Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$CompleteUnreadState; Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$InitialUnreadState; Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$UnreadState$None; @@ -34775,8 +35375,8 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$grou Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository$groupRecord$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationRecipientRepository; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda11; -Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda7; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda12; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda8; Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$Companion; Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$MessageCounts; Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$getMessageCounts$1; @@ -34794,6 +35394,7 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$special$$inline Lorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips$special$$inlined$viewModels$default$5; Lorg/thoughtcrime/securesms/conversation/v2/ConversationTooltips; Lorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$State; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter$ViewHolder; Lorg/thoughtcrime/securesms/conversation/v2/ConversationTypingIndicatorAdapter; Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$10; Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$11; @@ -34824,10 +35425,12 @@ Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsData Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$chatColorsDataObservable$2; Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$2; +Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$setShowScrollButtonsForScrollPosition$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$storyRingState$1; Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel; Lorg/thoughtcrime/securesms/conversation/v2/DisabledInputView$inflater$2; Lorg/thoughtcrime/securesms/conversation/v2/DisabledInputView; +Lorg/thoughtcrime/securesms/conversation/v2/DoubleTapEditEducationSheet$Callback; Lorg/thoughtcrime/securesms/conversation/v2/IdentityRecordsState; Lorg/thoughtcrime/securesms/conversation/v2/InputReadyState; Lorg/thoughtcrime/securesms/conversation/v2/MessageRequestViewModel; @@ -34840,6 +35443,7 @@ Lorg/thoughtcrime/securesms/conversation/v2/computed/FormattedDate; Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$Companion; Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource$threadRecipient$2; Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource; +Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey$Companion; Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey; Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement; Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationUpdate; @@ -34871,11 +35475,9 @@ Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewMode Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel$filteredState$2; Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel; Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$1; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$2; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$3; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$4; Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$Factory; -Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$duplicates$1; +Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$_groupRecord$1; +Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$_groupRecord$2; Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$1; Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel$updateGroupStateIfNeeded$2; Lorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel; @@ -34884,10 +35486,44 @@ Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsD Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$$inlined$filterIsInstance$1; Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration$onDraw$1; Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsItemDecoration; +Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable; Lorg/thoughtcrime/securesms/conversation/v2/items/InteractiveConversationElement; Lorg/thoughtcrime/securesms/conversation/v2/items/ShrinkWrapLinearLayout; Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout$OnDispatchTouchEventListener; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout$OnMeasureListener; Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$Companion; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridgeKt; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda1; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda2; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda3; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda4; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda5; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda8; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$Companion; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$PassthroughClickListener; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$ReactionMeasureListener; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$bodyBubbleDrawable$1; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$footerDrawable$1; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$gestureDetector$1; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$replyDelegate$1; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$senderDrawable$1; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$1; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$2; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener$$ExternalSyntheticLambda1; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener$Companion; +Lorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener; Lorg/thoughtcrime/securesms/conversation/v2/items/V2Payload; Lorg/thoughtcrime/securesms/conversationlist/ClearFilterViewHolder$OnClearFilterClickListener; Lorg/thoughtcrime/securesms/conversationlist/ConversationFilterBehavior$Callback; @@ -35056,6 +35692,8 @@ Lorg/thoughtcrime/securesms/crypto/storage/SignalServiceAccountDataStoreImpl; Lorg/thoughtcrime/securesms/crypto/storage/SignalServiceDataStoreImpl; Lorg/thoughtcrime/securesms/crypto/storage/TextSecurePreKeyStore; Lorg/thoughtcrime/securesms/crypto/storage/TextSecureSessionStore; +Lorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState$Companion; +Lorg/thoughtcrime/securesms/database/AttachmentTable$ArchiveTransferState; Lorg/thoughtcrime/securesms/database/AttachmentTable$Companion; Lorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties$Companion; Lorg/thoughtcrime/securesms/database/AttachmentTable$TransformProperties$Creator; @@ -35072,6 +35710,7 @@ Lorg/thoughtcrime/securesms/database/CallTable$Event$Serializer; Lorg/thoughtcrime/securesms/database/CallTable$Event; Lorg/thoughtcrime/securesms/database/CallTable$ReadState$Serializer; Lorg/thoughtcrime/securesms/database/CallTable$ReadState; +Lorg/thoughtcrime/securesms/database/CallTable$markRingingCallsAsMissed$1; Lorg/thoughtcrime/securesms/database/CallTable; Lorg/thoughtcrime/securesms/database/CdsTable$Companion; Lorg/thoughtcrime/securesms/database/CdsTable; @@ -35081,7 +35720,9 @@ Lorg/thoughtcrime/securesms/database/DatabaseMonitor; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda10; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda11; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda17; +Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda20; +Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda22; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda23; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda24; Lorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda28; @@ -35182,6 +35823,7 @@ Lorg/thoughtcrime/securesms/database/MessageTable$QuoteDescriptor; Lorg/thoughtcrime/securesms/database/MessageTable$Reader; Lorg/thoughtcrime/securesms/database/MessageTable$SyncMessageId; Lorg/thoughtcrime/securesms/database/MessageTable$WhenMappings; +Lorg/thoughtcrime/securesms/database/MessageTable$clearIsRingingOnLocalDeviceFlag$1; Lorg/thoughtcrime/securesms/database/MessageTable$getConversationSnippet$1; Lorg/thoughtcrime/securesms/database/MessageTable$getOldestStorySendTimestamp$1; Lorg/thoughtcrime/securesms/database/MessageTable$insertMediaMessage$3; @@ -35189,6 +35831,8 @@ Lorg/thoughtcrime/securesms/database/MessageTable; Lorg/thoughtcrime/securesms/database/MessageType; Lorg/thoughtcrime/securesms/database/MessageTypes$-CC; Lorg/thoughtcrime/securesms/database/MessageTypes; +Lorg/thoughtcrime/securesms/database/NameCollisionTables$Companion; +Lorg/thoughtcrime/securesms/database/NameCollisionTables; Lorg/thoughtcrime/securesms/database/NoExternalStorageException; Lorg/thoughtcrime/securesms/database/NoSuchMessageException; Lorg/thoughtcrime/securesms/database/NotificationProfileDatabase$Companion; @@ -35406,14 +36050,18 @@ Lorg/thoughtcrime/securesms/database/model/databaseprotos/PendingOneTimeDonation Lorg/thoughtcrime/securesms/database/model/databaseprotos/PendingOneTimeDonation; Lorg/thoughtcrime/securesms/database/model/databaseprotos/RecipientExtras; Lorg/thoughtcrime/securesms/database/model/databaseprotos/Wallpaper; +Lorg/thoughtcrime/securesms/databinding/ConversationHeaderViewBinding; Lorg/thoughtcrime/securesms/databinding/ConversationInputPanelBinding; Lorg/thoughtcrime/securesms/databinding/ConversationListFilterPullViewBinding; Lorg/thoughtcrime/securesms/databinding/ConversationListTabsBinding; Lorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding; Lorg/thoughtcrime/securesms/databinding/ConversationTitleViewBinding; Lorg/thoughtcrime/securesms/databinding/OnboardingMegaphoneCardBinding; +Lorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding; Lorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding; +Lorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding; Lorg/thoughtcrime/securesms/dependencies/ApplicationDependencies$$ExternalSyntheticLambda0; +Lorg/thoughtcrime/securesms/dependencies/ApplicationDependencies$$ExternalSyntheticLambda1; Lorg/thoughtcrime/securesms/dependencies/ApplicationDependencies$Provider; Lorg/thoughtcrime/securesms/dependencies/ApplicationDependencies; Lorg/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider$$ExternalSyntheticLambda0; @@ -35476,7 +36124,6 @@ Lorg/thoughtcrime/securesms/emoji/EmojiSourceKt; Lorg/thoughtcrime/securesms/emoji/JumboEmoji$$ExternalSyntheticLambda4; Lorg/thoughtcrime/securesms/emoji/JumboEmoji$$ExternalSyntheticLambda5; Lorg/thoughtcrime/securesms/emoji/JumboEmoji; -Lorg/thoughtcrime/securesms/emoji/ObsoleteEmoji; Lorg/thoughtcrime/securesms/emoji/ParsedEmojiData; Lorg/thoughtcrime/securesms/events/GroupCallPeekEvent; Lorg/thoughtcrime/securesms/events/PartProgressEvent; @@ -35500,6 +36147,11 @@ Lorg/thoughtcrime/securesms/fonts/Fonts$FontResult; Lorg/thoughtcrime/securesms/fonts/Fonts$WhenMappings; Lorg/thoughtcrime/securesms/fonts/Fonts; Lorg/thoughtcrime/securesms/fonts/ScriptUtil; +Lorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan; +Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph; +Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight; +Lorg/thoughtcrime/securesms/fonts/SignalSymbols$WhenMappings; +Lorg/thoughtcrime/securesms/fonts/SignalSymbols; Lorg/thoughtcrime/securesms/fonts/SupportedScript; Lorg/thoughtcrime/securesms/fonts/TextFont$Companion; Lorg/thoughtcrime/securesms/fonts/TextFont; @@ -35671,8 +36323,11 @@ Lorg/thoughtcrime/securesms/jobs/AccountConsistencyWorkerJob$Factory; Lorg/thoughtcrime/securesms/jobs/AccountConsistencyWorkerJob; Lorg/thoughtcrime/securesms/jobs/AnalyzeDatabaseJob$Factory; Lorg/thoughtcrime/securesms/jobs/ApkUpdateJob$Factory; +Lorg/thoughtcrime/securesms/jobs/ArchiveAttachmentBackfillJob$Factory; +Lorg/thoughtcrime/securesms/jobs/ArchiveAttachmentJob$Factory; Lorg/thoughtcrime/securesms/jobs/AttachmentCompressionJob$Factory; Lorg/thoughtcrime/securesms/jobs/AttachmentCopyJob$Factory; +Lorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob$Companion; Lorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob$Factory; Lorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob$InvalidPartException; Lorg/thoughtcrime/securesms/jobs/AttachmentDownloadJob; @@ -35682,6 +36337,9 @@ Lorg/thoughtcrime/securesms/jobs/AttachmentUploadJob$Factory; Lorg/thoughtcrime/securesms/jobs/AutomaticSessionResetJob$Factory; Lorg/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob$Factory; Lorg/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob$Factory; +Lorg/thoughtcrime/securesms/jobs/BackupMessagesJob$Factory; +Lorg/thoughtcrime/securesms/jobs/BackupRestoreJob$Factory; +Lorg/thoughtcrime/securesms/jobs/BackupRestoreMediaJob$Factory; Lorg/thoughtcrime/securesms/jobs/BaseJob; Lorg/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob$Factory; Lorg/thoughtcrime/securesms/jobs/CallLinkPeekJob$Factory; @@ -35821,6 +36479,7 @@ Lorg/thoughtcrime/securesms/jobs/RequestGroupV2InfoJob$Factory; Lorg/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob$Factory; Lorg/thoughtcrime/securesms/jobs/ResendMessageJob$Factory; Lorg/thoughtcrime/securesms/jobs/ResetSvrGuessCountJob$Factory; +Lorg/thoughtcrime/securesms/jobs/RestoreAttachmentJob$Factory; Lorg/thoughtcrime/securesms/jobs/ResumableUploadSpecJob$Factory; Lorg/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob$Factory; Lorg/thoughtcrime/securesms/jobs/RetrieveProfileJob$Companion; @@ -35856,6 +36515,7 @@ Lorg/thoughtcrime/securesms/jobs/SubscriptionKeepAliveJob$Factory; Lorg/thoughtcrime/securesms/jobs/SubscriptionKeepAliveJob; Lorg/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob$Factory; Lorg/thoughtcrime/securesms/jobs/Svr2MirrorJob$Factory; +Lorg/thoughtcrime/securesms/jobs/SyncArchivedMediaJob$Factory; Lorg/thoughtcrime/securesms/jobs/SyncSystemContactLinksJob$Factory; Lorg/thoughtcrime/securesms/jobs/ThreadUpdateJob$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/jobs/ThreadUpdateJob$Factory; @@ -35905,6 +36565,7 @@ Lorg/thoughtcrime/securesms/keyvalue/IntValue; Lorg/thoughtcrime/securesms/keyvalue/InternalValues; Lorg/thoughtcrime/securesms/keyvalue/KeepMessagesDuration; Lorg/thoughtcrime/securesms/keyvalue/KeyValueDataSet; +Lorg/thoughtcrime/securesms/keyvalue/KeyValueEnumValue; Lorg/thoughtcrime/securesms/keyvalue/KeyValuePersistentStorage; Lorg/thoughtcrime/securesms/keyvalue/KeyValueProtoValue; Lorg/thoughtcrime/securesms/keyvalue/KeyValueReader; @@ -36137,6 +36798,7 @@ Lorg/thoughtcrime/securesms/mms/SignalGlideModule$Companion; Lorg/thoughtcrime/securesms/mms/SignalGlideModule; Lorg/thoughtcrime/securesms/mms/Slide; Lorg/thoughtcrime/securesms/mms/SlideClickListener; +Lorg/thoughtcrime/securesms/mms/SlideDeck$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/mms/SlideDeck; Lorg/thoughtcrime/securesms/mms/SlideFactory$MediaType; Lorg/thoughtcrime/securesms/mms/SlidesClickedListener; @@ -36231,6 +36893,7 @@ Lorg/thoughtcrime/securesms/ratelimit/RecaptchaRequiredEvent; Lorg/thoughtcrime/securesms/reactions/ReactionsBottomSheetDialogFragment$Callback; Lorg/thoughtcrime/securesms/reactions/ReactionsConversationView; Lorg/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiBottomSheetDialogFragment$Callback; +Lorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda2; Lorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda4; @@ -36297,6 +36960,8 @@ Lorg/thoughtcrime/securesms/service/ExpiringStoriesManager$Companion; Lorg/thoughtcrime/securesms/service/ExpiringStoriesManager; Lorg/thoughtcrime/securesms/service/KeyCachingService; Lorg/thoughtcrime/securesms/service/LocalBackupListener; +Lorg/thoughtcrime/securesms/service/MessageBackupListener$Companion; +Lorg/thoughtcrime/securesms/service/MessageBackupListener; Lorg/thoughtcrime/securesms/service/PendingRetryReceiptManager; Lorg/thoughtcrime/securesms/service/PersistentAlarmManagerListener; Lorg/thoughtcrime/securesms/service/RotateSenderCertificateListener; @@ -36435,6 +37100,9 @@ Lorg/thoughtcrime/securesms/util/LocalMetrics$$ExternalSyntheticLambda5; Lorg/thoughtcrime/securesms/util/LocalMetrics$db$2; Lorg/thoughtcrime/securesms/util/LocalMetrics; Lorg/thoughtcrime/securesms/util/LocaleUtil; +Lorg/thoughtcrime/securesms/util/LongClickMovementMethod$1; +Lorg/thoughtcrime/securesms/util/LongClickMovementMethod; +Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$1; Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$2; Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper$3; @@ -36454,6 +37122,7 @@ Lorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda3; Lorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda4; Lorg/thoughtcrime/securesms/util/ProfileUtil$$ExternalSyntheticLambda5; Lorg/thoughtcrime/securesms/util/ProfileUtil; +Lorg/thoughtcrime/securesms/util/Projection$Corners; Lorg/thoughtcrime/securesms/util/Projection; Lorg/thoughtcrime/securesms/util/ProjectionList; Lorg/thoughtcrime/securesms/util/PushCharacterCalculator$1; @@ -36465,6 +37134,7 @@ Lorg/thoughtcrime/securesms/util/SavedStateViewModelFactory; Lorg/thoughtcrime/securesms/util/ScreenDensity$1; Lorg/thoughtcrime/securesms/util/ScreenDensity; Lorg/thoughtcrime/securesms/util/SearchUtil$StyleFactory; +Lorg/thoughtcrime/securesms/util/SearchUtil; Lorg/thoughtcrime/securesms/util/ServiceUtil; Lorg/thoughtcrime/securesms/util/SignalLocalMetrics$ColdStart; Lorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen; @@ -36480,6 +37150,7 @@ Lorg/thoughtcrime/securesms/util/SnapToTopDataObserver$ScrollToTop; Lorg/thoughtcrime/securesms/util/SnapToTopDataObserver; Lorg/thoughtcrime/securesms/util/SoftHashMap$SoftValue; Lorg/thoughtcrime/securesms/util/SoftHashMap; +Lorg/thoughtcrime/securesms/util/SpanUtil; Lorg/thoughtcrime/securesms/util/StorageUtil; Lorg/thoughtcrime/securesms/util/TextSecurePreferences$MediaKeyboardMode; Lorg/thoughtcrime/securesms/util/TextSecurePreferences; @@ -36511,6 +37182,7 @@ Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter; Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback; Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel; Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModelList; +Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder; Lorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter$Placeholder; Lorg/thoughtcrime/securesms/util/adapter/mapping/PagingMappingAdapter; @@ -36520,6 +37192,7 @@ Lorg/thoughtcrime/securesms/util/concurrent/FilteredExecutor; Lorg/thoughtcrime/securesms/util/concurrent/SerialExecutor$$ExternalSyntheticLambda0; Lorg/thoughtcrime/securesms/util/concurrent/SerialExecutor; Lorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor; +Lorg/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat; Lorg/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper; Lorg/thoughtcrime/securesms/util/dynamiclanguage/LanguageString; Lorg/thoughtcrime/securesms/util/dynamiclanguage/LocaleParser; @@ -36602,6 +37275,9 @@ Lorg/whispersystems/signalservice/api/groupsv2/GroupsV2Operations; Lorg/whispersystems/signalservice/api/kbs/MasterKey; Lorg/whispersystems/signalservice/api/messages/SignalServiceAttachment; Lorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer; +Lorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$Companion; +Lorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$S3; +Lorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId$V4; Lorg/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId; Lorg/whispersystems/signalservice/api/payments/Currency$CryptoCurrency; Lorg/whispersystems/signalservice/api/payments/Currency; @@ -36622,6 +37298,7 @@ Lorg/whispersystems/signalservice/api/push/ServiceId; Lorg/whispersystems/signalservice/api/push/ServiceIdType; Lorg/whispersystems/signalservice/api/push/SignalServiceAddress; Lorg/whispersystems/signalservice/api/push/TrustStore; +Lorg/whispersystems/signalservice/api/push/exceptions/AuthorizationFailedException; Lorg/whispersystems/signalservice/api/push/exceptions/ConflictException; Lorg/whispersystems/signalservice/api/push/exceptions/ContactManifestMismatchException; Lorg/whispersystems/signalservice/api/push/exceptions/MalformedResponseException; @@ -36676,6 +37353,7 @@ Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ConnectionHold Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$EmptyResponseCodeHandler; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ResponseCodeHandler; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$ServiceConnectionHolder; +Lorg/whispersystems/signalservice/internal/push/PushServiceSocket$UnopinionatedResponseCodeHandler; Lorg/whispersystems/signalservice/internal/push/PushServiceSocket; Lorg/whispersystems/signalservice/internal/push/VerifyAccountResponse; Lorg/whispersystems/signalservice/internal/push/exceptions/GroupPatchNotAcceptedException; @@ -36691,6 +37369,7 @@ Lorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper$Build Lorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper$CustomResponseMapper; Lorg/whispersystems/signalservice/internal/websocket/DefaultResponseMapper; Lorg/whispersystems/signalservice/internal/websocket/ErrorMapper; +Lorg/whispersystems/signalservice/internal/websocket/OkHttpWebSocketConnection; Lorg/whispersystems/signalservice/internal/websocket/ResponseMapper; Lorg/whispersystems/signalservice/internal/websocket/WebSocketConnection; Lorg/whispersystems/signalservice/internal/websocket/WebSocketRequestMessage$Builder; @@ -36772,7 +37451,6 @@ PLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->(Landroid/cont PLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->initEmojiKeyListener(Landroidx/appcompat/widget/AppCompatEmojiEditTextHelper;)V PLandroidx/appcompat/widget/AppCompatAutoCompleteTextView;->setCompoundDrawables(Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;Landroid/graphics/drawable/Drawable;)V PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintModeForDrawableRes(I)Landroid/graphics/PorterDuff$Mode; -PLandroidx/appcompat/widget/AppCompatHintHelper;->onCreateInputConnection(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Landroid/view/View;)Landroid/view/inputmethod/InputConnection; PLandroidx/appcompat/widget/ForwardingListener;->onViewDetachedFromWindow(Landroid/view/View;)V PLandroidx/appcompat/widget/ResourceManagerInternal;->addTintListToCache(Landroid/content/Context;ILandroid/content/res/ColorStateList;)V PLandroidx/appcompat/widget/ResourceManagerInternal;->getTintMode(I)Landroid/graphics/PorterDuff$Mode; @@ -36848,10 +37526,6 @@ PLandroidx/core/os/BundleKt;->bundleOf([Lkotlin/Pair;)Landroid/os/Bundle; PLandroidx/core/os/HandlerCompat$Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;J)Z PLandroidx/core/os/HandlerCompat$Api28Impl;->postDelayed(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;J)Z PLandroidx/core/os/HandlerCompat;->postDelayed(Landroid/os/Handler;Ljava/lang/Runnable;Ljava/lang/Object;J)Z -PLandroidx/core/text/util/LinkifyCompat$$ExternalSyntheticLambda0;->()V -PLandroidx/core/text/util/LinkifyCompat;->()V -PLandroidx/core/text/util/LinkifyCompat;->addLinks(Landroid/text/Spannable;I)Z -PLandroidx/core/text/util/LinkifyCompat;->shouldAddLinksFallbackToFramework()Z PLandroidx/core/view/NestedScrollingChildHelper;->stopNestedScroll()V PLandroidx/core/view/ViewCompat$Api16Impl;->hasTransientState(Landroid/view/View;)Z PLandroidx/core/view/ViewCompat;->hasTransientState(Landroid/view/View;)Z @@ -36866,12 +37540,9 @@ PLandroidx/core/view/accessibility/AccessibilityEventCompat$Api19Impl;->getConte PLandroidx/core/view/accessibility/AccessibilityEventCompat$Api19Impl;->setContentChangeTypes(Landroid/view/accessibility/AccessibilityEvent;I)V PLandroidx/core/view/accessibility/AccessibilityEventCompat;->getContentChangeTypes(Landroid/view/accessibility/AccessibilityEvent;)I PLandroidx/core/view/accessibility/AccessibilityEventCompat;->setContentChangeTypes(Landroid/view/accessibility/AccessibilityEvent;I)V -PLandroidx/core/view/inputmethod/EditorInfoCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/inputmethod/EditorInfo;[Ljava/lang/String;)V -PLandroidx/core/view/inputmethod/EditorInfoCompat;->()V -PLandroidx/core/view/inputmethod/EditorInfoCompat;->setContentMimeTypes(Landroid/view/inputmethod/EditorInfo;[Ljava/lang/String;)V -PLandroidx/core/view/inputmethod/InputConnectionCompat$1;->(Landroid/view/inputmethod/InputConnection;ZLandroidx/core/view/inputmethod/InputConnectionCompat$OnCommitContentListener;)V -PLandroidx/core/view/inputmethod/InputConnectionCompat;->createWrapper(Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Landroidx/core/view/inputmethod/InputConnectionCompat$OnCommitContentListener;)Landroid/view/inputmethod/InputConnection; PLandroidx/customview/poolingcontainer/PoolingContainer;->callPoolingContainerOnReleaseForChildren(Landroid/view/ViewGroup;)V +PLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; +PLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V PLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->onRelease()V PLandroidx/customview/view/AbsSavedState$1;->()V PLandroidx/customview/view/AbsSavedState$2;->()V @@ -36881,10 +37552,6 @@ PLandroidx/customview/view/AbsSavedState;->(Landroid/os/Parcelable;)V PLandroidx/customview/view/AbsSavedState;->(Landroidx/customview/view/AbsSavedState$1;)V PLandroidx/customview/view/AbsSavedState;->writeToParcel(Landroid/os/Parcel;I)V PLandroidx/emoji2/text/SpannableBuilder;->getSpanEnd(Ljava/lang/Object;)I -PLandroidx/emoji2/viewsintegration/EmojiInputConnection$EmojiCompatDeleteHelper;->()V -PLandroidx/emoji2/viewsintegration/EmojiInputConnection$EmojiCompatDeleteHelper;->updateEditorInfoAttrs(Landroid/view/inputmethod/EditorInfo;)V -PLandroidx/emoji2/viewsintegration/EmojiInputConnection;->(Landroid/widget/TextView;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;)V -PLandroidx/emoji2/viewsintegration/EmojiInputConnection;->(Landroid/widget/TextView;Landroid/view/inputmethod/InputConnection;Landroid/view/inputmethod/EditorInfo;Landroidx/emoji2/viewsintegration/EmojiInputConnection$EmojiCompatDeleteHelper;)V PLandroidx/fragment/app/Fragment$Api19Impl;->cancelPendingInputEvents(Landroid/view/View;)V PLandroidx/fragment/app/Fragment;->getHost()Ljava/lang/Object; PLandroidx/fragment/app/Fragment;->initState()V @@ -36936,6 +37603,7 @@ PLandroidx/fragment/app/FragmentState;->writeToParcel(Landroid/os/Parcel;I)V PLandroidx/fragment/app/FragmentStateManager;->destroy()V PLandroidx/fragment/app/FragmentStateManager;->destroyFragmentView()V PLandroidx/fragment/app/FragmentStateManager;->detach()V +PLandroidx/fragment/app/FragmentStateManager;->saveState()Landroid/os/Bundle; PLandroidx/fragment/app/FragmentStateManager;->saveViewState()V PLandroidx/fragment/app/FragmentStateManager;->stop()V PLandroidx/fragment/app/FragmentStore;->getAllSavedState()Ljava/util/HashMap; @@ -37078,7 +37746,7 @@ PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus; PLandroidx/recyclerview/widget/AdapterListUpdateCallback;->onChanged(IILjava/lang/Object;)V PLandroidx/recyclerview/widget/AsyncDifferConfig;->getDiffCallback()Landroidx/recyclerview/widget/DiffUtil$ItemCallback; -PLandroidx/recyclerview/widget/AsyncListDiffer$1$1;->areContentsTheSame(II)Z +PLandroidx/recyclerview/widget/AsyncListDiffer$1$1;->areItemsTheSame(II)Z PLandroidx/recyclerview/widget/AsyncListDiffer$1$1;->getChangePayload(II)Ljava/lang/Object; PLandroidx/recyclerview/widget/ChildHelper;->removeViewAt(I)V PLandroidx/recyclerview/widget/ConcatAdapter;->onDetachedFromRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V @@ -37095,6 +37763,8 @@ PLandroidx/recyclerview/widget/DiffUtil$Snake;->()V PLandroidx/recyclerview/widget/DiffUtil$Snake;->diagonalSize()I PLandroidx/recyclerview/widget/DiffUtil$Snake;->hasAdditionOrRemoval()Z PLandroidx/recyclerview/widget/DiffUtil$Snake;->toDiagonal()Landroidx/recyclerview/widget/DiffUtil$Diagonal; +PLandroidx/recyclerview/widget/DiffUtil;->backward(Landroidx/recyclerview/widget/DiffUtil$Range;Landroidx/recyclerview/widget/DiffUtil$Callback;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;I)Landroidx/recyclerview/widget/DiffUtil$Snake; +PLandroidx/recyclerview/widget/DiffUtil;->forward(Landroidx/recyclerview/widget/DiffUtil$Range;Landroidx/recyclerview/widget/DiffUtil$Callback;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;Landroidx/recyclerview/widget/DiffUtil$CenteredArray;I)Landroidx/recyclerview/widget/DiffUtil$Snake; PLandroidx/recyclerview/widget/GapWorker$LayoutPrefetchRegistryImpl;->lastPrefetchIncludedPosition(I)Z PLandroidx/recyclerview/widget/GapWorker;->remove(Landroidx/recyclerview/widget/RecyclerView;)V PLandroidx/recyclerview/widget/ItemTouchHelper;->endRecoverAnimation(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Z)V @@ -37109,7 +37779,6 @@ PLandroidx/recyclerview/widget/LinearLayoutManager;->getChildClosestToEnd()Landr PLandroidx/recyclerview/widget/LinearLayoutManager;->getChildClosestToStart()Landroid/view/View; PLandroidx/recyclerview/widget/LinearLayoutManager;->onDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$Recycler;)V PLandroidx/recyclerview/widget/LinearLayoutManager;->onSaveInstanceState()Landroid/os/Parcelable; -PLandroidx/recyclerview/widget/OrientationHelper$1;->getDecoratedStart(Landroid/view/View;)I PLandroidx/recyclerview/widget/OrientationHelper;->getTotalSpaceChange()I PLandroidx/recyclerview/widget/RecyclerView$5;->removeViewAt(I)V PLandroidx/recyclerview/widget/RecyclerView$6;->markViewHoldersUpdated(IILjava/lang/Object;)V @@ -37117,12 +37786,11 @@ PLandroidx/recyclerview/widget/RecyclerView$Adapter;->notifyDataSetChanged()V PLandroidx/recyclerview/widget/RecyclerView$Adapter;->onDetachedFromRecyclerView(Landroidx/recyclerview/widget/RecyclerView;)V PLandroidx/recyclerview/widget/RecyclerView$Adapter;->onViewDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLandroidx/recyclerview/widget/RecyclerView$AdapterDataObservable;->notifyChanged()V +PLandroidx/recyclerview/widget/RecyclerView$ItemAnimator;->buildAdapterChangeFlagsForAnimations(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)I PLandroidx/recyclerview/widget/RecyclerView$ItemAnimator;->canReuseUpdatedViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Z PLandroidx/recyclerview/widget/RecyclerView$ItemAnimator;->canReuseUpdatedViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Ljava/util/List;)Z PLandroidx/recyclerview/widget/RecyclerView$ItemAnimator;->recordPreLayoutInformation(Landroidx/recyclerview/widget/RecyclerView$State;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;ILjava/util/List;)Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo; PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->dispatchDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$Recycler;)V -PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getDecoratedLeft(Landroid/view/View;)I -PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->getLeftDecorationWidth(Landroid/view/View;)I PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView;)V PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$Recycler;)V PLandroidx/recyclerview/widget/RecyclerView$LayoutManager;->onItemsUpdated(Landroidx/recyclerview/widget/RecyclerView;II)V @@ -37152,6 +37820,7 @@ PLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->isRecyclable()Z PLandroidx/recyclerview/widget/RecyclerView$ViewHolder;->resetInternal()V PLandroidx/recyclerview/widget/RecyclerView;->access$300(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V PLandroidx/recyclerview/widget/RecyclerView;->access$400(Landroidx/recyclerview/widget/RecyclerView;Landroid/view/View;)V +PLandroidx/recyclerview/widget/RecyclerView;->animateChange(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;Landroidx/recyclerview/widget/RecyclerView$ItemAnimator$ItemHolderInfo;ZZ)V PLandroidx/recyclerview/widget/RecyclerView;->canReuseUpdatedViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)Z PLandroidx/recyclerview/widget/RecyclerView;->clearNestedRecyclerViewIfNotNested(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLandroidx/recyclerview/widget/RecyclerView;->dispatchChildDetached(Landroid/view/View;)V @@ -37170,6 +37839,7 @@ PLandroidx/recyclerview/widget/ViewInfoStore;->popFromPreLayout(Landroidx/recycl PLandroidx/recyclerview/widget/ViewInfoStore;->removeViewHolder(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLandroidx/savedstate/Recreator$SavedStateProvider;->(Landroidx/savedstate/SavedStateRegistry;)V PLandroidx/savedstate/Recreator$SavedStateProvider;->add(Ljava/lang/String;)V +PLandroidx/savedstate/SavedStateRegistry;->performSave(Landroid/os/Bundle;)V PLandroidx/savedstate/SavedStateRegistry;->runOnNextRecreation(Ljava/lang/Class;)V PLandroidx/savedstate/SavedStateRegistryController;->performSave(Landroid/os/Bundle;)V PLcom/airbnb/lottie/LottieAnimationView$SavedState$1;->()V @@ -37177,19 +37847,11 @@ PLcom/airbnb/lottie/LottieAnimationView$SavedState;->()V PLcom/airbnb/lottie/LottieAnimationView$SavedState;->(Landroid/os/Parcelable;)V PLcom/airbnb/lottie/LottieAnimationView$SavedState;->writeToParcel(Landroid/os/Parcel;I)V PLcom/airbnb/lottie/LottieAnimationView;->onSaveInstanceState()Landroid/os/Parcelable; -PLcom/airbnb/lottie/LottieDrawable$$ExternalSyntheticLambda9;->run(Lcom/airbnb/lottie/LottieComposition;)V -PLcom/airbnb/lottie/LottieDrawable;->$r8$lambda$riFJCWOqfI5iOFlatZRlwc9qv1U(Lcom/airbnb/lottie/LottieDrawable;Lcom/airbnb/lottie/model/KeyPath;Ljava/lang/Object;Lcom/airbnb/lottie/value/LottieValueCallback;Lcom/airbnb/lottie/LottieComposition;)V PLcom/airbnb/lottie/LottieDrawable;->getImageAssetsFolder()Ljava/lang/String; PLcom/airbnb/lottie/LottieDrawable;->getProgress()F PLcom/airbnb/lottie/LottieDrawable;->getRepeatCount()I PLcom/airbnb/lottie/LottieDrawable;->getRepeatMode()I PLcom/airbnb/lottie/LottieDrawable;->isAnimatingOrWillAnimateOnVisible()Z -PLcom/airbnb/lottie/LottieDrawable;->lambda$addValueCallback$14(Lcom/airbnb/lottie/model/KeyPath;Ljava/lang/Object;Lcom/airbnb/lottie/value/LottieValueCallback;Lcom/airbnb/lottie/LottieComposition;)V -PLcom/annimon/stream/function/BinaryOperator$Util$2;->(Ljava/util/Comparator;)V -PLcom/annimon/stream/function/BinaryOperator$Util;->maxBy(Ljava/util/Comparator;)Lcom/annimon/stream/function/BinaryOperator; -PLcom/annimon/stream/operator/IntRangeClosed;->(II)V -PLcom/annimon/stream/operator/IntRangeClosed;->hasNext()Z -PLcom/annimon/stream/operator/IntRangeClosed;->nextInt()I PLcom/bumptech/glide/Glide;->unregisterRequestManager(Lcom/bumptech/glide/RequestManager;)V PLcom/bumptech/glide/RequestManager;->onDestroy()V PLcom/bumptech/glide/load/Options;->equals(Ljava/lang/Object;)Z @@ -37244,10 +37906,6 @@ PLcom/google/android/material/stateful/ExtendableSavedState$1;->()V PLcom/google/android/material/stateful/ExtendableSavedState;->()V PLcom/google/android/material/stateful/ExtendableSavedState;->(Landroid/os/Parcelable;)V PLcom/google/android/material/stateful/ExtendableSavedState;->writeToParcel(Landroid/os/Parcel;I)V -PLcom/google/common/collect/Sets$2;->(Ljava/util/Set;Ljava/util/Set;)V -PLcom/google/common/collect/Sets$2;->isEmpty()Z -PLcom/google/common/collect/Sets$SetView;->()V -PLcom/google/common/collect/Sets$SetView;->(Lcom/google/common/collect/Sets$1;)V PLcom/google/firebase/messaging/FcmLifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V PLcom/pnikosis/materialishprogress/ProgressWheel$WheelSavedState$1;->()V PLcom/pnikosis/materialishprogress/ProgressWheel$WheelSavedState;->()V @@ -37264,7 +37922,6 @@ PLio/reactivex/rxjava3/core/Maybe;->observeOn(Lio/reactivex/rxjava3/core/Schedul PLio/reactivex/rxjava3/core/Observable;->distinctUntilChanged(Lio/reactivex/rxjava3/functions/BiPredicate;)Lio/reactivex/rxjava3/core/Observable; PLio/reactivex/rxjava3/core/Scheduler$PeriodicDirectTask;->dispose()V PLio/reactivex/rxjava3/disposables/CompositeDisposable;->clear()V -PLio/reactivex/rxjava3/internal/disposables/CancellableDisposable;->dispose()V PLio/reactivex/rxjava3/internal/disposables/EmptyDisposable;->complete(Lio/reactivex/rxjava3/core/MaybeObserver;)V PLio/reactivex/rxjava3/internal/disposables/EmptyDisposable;->dispose()V PLio/reactivex/rxjava3/internal/disposables/SequentialDisposable;->dispose()V @@ -37358,7 +38015,6 @@ PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$Lat PLio/reactivex/rxjava3/internal/operators/observable/ObservableCombineLatest$LatestCoordinator;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver$DelayErrorInnerObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableConcatMap$ConcatMapDelayErrorObserver;->dispose()V -PLio/reactivex/rxjava3/internal/operators/observable/ObservableCreate$CreateEmitter;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableDoOnEach$DoOnEachObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver$InnerObserver;->(Lio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableFlatMapMaybe$FlatMapMaybeObserver$InnerObserver;->onSubscribe(Lio/reactivex/rxjava3/disposables/Disposable;)V @@ -37380,7 +38036,6 @@ PLio/reactivex/rxjava3/internal/operators/observable/ObservableMap$MapObserver;- PLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->clear()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableObserveOn$ObserveOnObserver;->isEmpty()Z PLio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount;->timeout(Lio/reactivex/rxjava3/internal/operators/observable/ObservableRefCount$RefConnection;)V -PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$BoundedReplayBuffer;->setFirst(Lio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$Node;)V PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay$ReplayObserver;->dispose()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableReplay;->reset()V PLio/reactivex/rxjava3/internal/operators/observable/ObservableSampleTimed$SampleTimedNoLast;->complete()V @@ -37403,9 +38058,13 @@ PLio/reactivex/rxjava3/internal/subscribers/BasicFuseableConditionalSubscriber;- PLio/reactivex/rxjava3/internal/subscribers/BasicFuseableSubscriber;->cancel()V PLio/reactivex/rxjava3/internal/subscribers/LambdaSubscriber;->cancel()V PLio/reactivex/rxjava3/internal/subscribers/LambdaSubscriber;->dispose()V +PLio/reactivex/rxjava3/internal/util/AppendOnlyLinkedArrayList;->(I)V +PLio/reactivex/rxjava3/internal/util/AppendOnlyLinkedArrayList;->add(Ljava/lang/Object;)V +PLio/reactivex/rxjava3/internal/util/AppendOnlyLinkedArrayList;->forEachWhile(Lio/reactivex/rxjava3/internal/util/AppendOnlyLinkedArrayList$NonThrowingPredicate;)V PLio/reactivex/rxjava3/internal/util/AtomicThrowable;->terminate()Ljava/lang/Throwable; PLio/reactivex/rxjava3/internal/util/AtomicThrowable;->tryTerminateAndReport()V PLio/reactivex/rxjava3/internal/util/ExceptionHelper;->terminate(Ljava/util/concurrent/atomic/AtomicReference;)Ljava/lang/Throwable; +PLio/reactivex/rxjava3/internal/util/NotificationLite;->acceptFull(Ljava/lang/Object;Lio/reactivex/rxjava3/core/Observer;)Z PLio/reactivex/rxjava3/internal/util/NotificationLite;->complete()Ljava/lang/Object; PLio/reactivex/rxjava3/internal/util/OpenHashSet;->rehash()V PLio/reactivex/rxjava3/internal/util/QueueDrainHelper;->checkTerminated(ZZLio/reactivex/rxjava3/core/Observer;ZLio/reactivex/rxjava3/internal/fuseable/SimpleQueue;Lio/reactivex/rxjava3/disposables/Disposable;Lio/reactivex/rxjava3/internal/util/ObservableQueueDrain;)Z @@ -37424,24 +38083,10 @@ PLio/reactivex/rxjava3/subjects/BehaviorSubject;->onComplete()V PLio/reactivex/rxjava3/subjects/BehaviorSubject;->terminate(Ljava/lang/Object;)[Lio/reactivex/rxjava3/subjects/BehaviorSubject$BehaviorDisposable; PLio/reactivex/rxjava3/subjects/PublishSubject$PublishDisposable;->dispose()V PLio/reactivex/rxjava3/subjects/PublishSubject;->remove(Lio/reactivex/rxjava3/subjects/PublishSubject$PublishDisposable;)V +PLio/reactivex/rxjava3/subjects/SerializedSubject;->test(Ljava/lang/Object;)Z PLj$/util/DesugarCollections;->a()Ljava/lang/reflect/Constructor; PLj$/util/d;->a(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; PLj$/util/d;->keySet()Ljava/util/Set; -PLj$/util/function/b;->(Ljava/util/Comparator;I)V -PLj$/util/stream/A1;->(Lj$/util/stream/V2;Ljava/lang/Object;I)V -PLj$/util/stream/A1;->l1()Lj$/util/stream/P1; -PLj$/util/stream/E1;->(Lj$/util/function/BinaryOperator;)V -PLj$/util/stream/E1;->accept(Ljava/lang/Object;)V -PLj$/util/stream/E1;->get()Ljava/lang/Object; -PLj$/util/stream/E1;->m()V -PLj$/util/stream/E1;->n(J)V -PLj$/util/stream/E1;->q()Z -PLj$/util/stream/h2;->(Lj$/util/stream/i2;Lj$/util/stream/g2;)V -PLj$/util/stream/h2;->accept(Ljava/lang/Object;)V -PLj$/util/stream/h2;->n(J)V -PLj$/util/stream/h2;->q()Z -PLj$/util/stream/i2;->(Lj$/util/stream/c;IJJ)V -PLj$/util/stream/i2;->B1(ILj$/util/stream/g2;)Lj$/util/stream/g2; PLkotlin/collections/CollectionsKt;->intersect(Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/Set; PLkotlin/collections/CollectionsKt;->retainAll(Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;)Z PLkotlin/collections/CollectionsKt__MutableCollectionsKt;->filterInPlace$CollectionsKt__MutableCollectionsKt(Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;Z)Z @@ -37453,6 +38098,7 @@ PLkotlin/sequences/SequenceScope;->yieldAll(Lkotlin/sequences/Sequence;Lkotlin/c PLkotlin/sequences/SequencesKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; PLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->(Lkotlin/jvm/functions/Function2;)V PLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; +PLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; PLme/leolin/shortcutbadger/ShortcutBadgeException;->(Ljava/lang/String;)V PLme/leolin/shortcutbadger/ShortcutBadgeException;->(Ljava/lang/String;Ljava/lang/Exception;)V PLme/leolin/shortcutbadger/ShortcutBadger;->()V @@ -37519,24 +38165,12 @@ PLorg/signal/core/util/concurrent/MaybeCompat;->()V PLorg/signal/core/util/concurrent/MaybeCompat;->()V PLorg/signal/core/util/concurrent/MaybeCompat;->fromCallable$lambda$0(Lkotlin/jvm/functions/Function0;Lio/reactivex/rxjava3/core/MaybeEmitter;)V PLorg/signal/core/util/concurrent/MaybeCompat;->fromCallable(Lkotlin/jvm/functions/Function0;)Lio/reactivex/rxjava3/core/Maybe; -PLorg/signal/core/util/concurrent/SignalExecutors;->$r8$lambda$0Q0afsv1raKIrq3aP-SuMcT2Ad0(Ljava/lang/Runnable;Ljava/util/concurrent/ThreadPoolExecutor;)V PLorg/signal/core/util/logging/Log$Logger;->i(Ljava/lang/String;Ljava/lang/String;)V PLorg/signal/core/util/logging/Log$Logger;->i(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V PLorg/signal/core/util/logging/Log;->internal()Lorg/signal/core/util/logging/Log$Logger; PLorg/signal/libsignal/protocol/IdentityKey;->equals(Ljava/lang/Object;)Z PLorg/signal/libsignal/protocol/IdentityKey;->getPublicKey()Lorg/signal/libsignal/protocol/ecc/ECPublicKey; -PLorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda2;->(Lorg/signal/paging/BufferedPagingController;Ljava/lang/Object;)V -PLorg/signal/paging/BufferedPagingController$$ExternalSyntheticLambda2;->run()V -PLorg/signal/paging/BufferedPagingController;->$r8$lambda$GxlLAxjfERBgyqmyvxteAPWaQkA(Lorg/signal/paging/BufferedPagingController;Ljava/lang/Object;)V -PLorg/signal/paging/BufferedPagingController;->lambda$onDataItemChanged$2(Ljava/lang/Object;)V -PLorg/signal/paging/BufferedPagingController;->onDataItemChanged(Ljava/lang/Object;)V -PLorg/signal/paging/DataStatus;->mark(I)V -PLorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda0;->(Lorg/signal/paging/FixedSizePagingController;Ljava/lang/Object;)V -PLorg/signal/paging/FixedSizePagingController$$ExternalSyntheticLambda0;->run()V -PLorg/signal/paging/FixedSizePagingController;->$r8$lambda$2jZFFAhs3dG0IThMmzJQSvWvcd0(Lorg/signal/paging/FixedSizePagingController;Ljava/lang/Object;)V PLorg/signal/paging/FixedSizePagingController;->buildDataNeededLog(ILjava/lang/String;)Ljava/lang/String; -PLorg/signal/paging/FixedSizePagingController;->onDataItemChanged(Ljava/lang/Object;)V -PLorg/signal/paging/ProxyPagingController;->onDataItemChanged(Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/ApplicationContext$$ExternalSyntheticLambda60;->isInternal()Z PLorg/thoughtcrime/securesms/LoggingFragment;->onDestroy()V PLorg/thoughtcrime/securesms/LoggingFragment;->onStop()V @@ -37556,18 +38190,6 @@ PLorg/thoughtcrime/securesms/audio/AudioRecorderFocusManager26;->(Landroid PLorg/thoughtcrime/securesms/audio/AudioRecorderFocusManager;->()V PLorg/thoughtcrime/securesms/audio/AudioRecorderFocusManager;->(Landroid/content/Context;)V PLorg/thoughtcrime/securesms/audio/AudioRecorderFocusManager;->create(Landroid/content/Context;Landroid/media/AudioManager$OnAudioFocusChangeListener;)Lorg/thoughtcrime/securesms/audio/AudioRecorderFocusManager; -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/AlbumThumbnailView;Ljava/util/List;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/components/AlbumThumbnailView;Ljava/util/List;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/components/AlbumThumbnailView;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/components/AlbumThumbnailView;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->inflateLayout(I)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setCancelTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setPlayVideoClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setStartTransferClickListener(Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->setThumbnailClickListener(Lorg/thoughtcrime/securesms/mms/SlideClickListener;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->showSlides(Lcom/bumptech/glide/RequestManager;Ljava/util/List;)V -PLorg/thoughtcrime/securesms/components/AlbumThumbnailView;->sizeClass(I)I PLorg/thoughtcrime/securesms/components/AnimatingToggle;->display(Landroid/view/View;)V PLorg/thoughtcrime/securesms/components/AudioView$$ExternalSyntheticLambda0;->onChanged(Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/components/AudioView;->$r8$lambda$70S_ChWvvHg6uKYhRw5m0jX0OG0(Lorg/thoughtcrime/securesms/components/AudioView;Lorg/thoughtcrime/securesms/components/voice/VoiceNotePlaybackState;)V @@ -37580,30 +38202,11 @@ PLorg/thoughtcrime/securesms/components/AudioView;->onPlaybackState(Lorg/thought PLorg/thoughtcrime/securesms/components/AudioView;->onProgress(Landroid/net/Uri;DJ)V PLorg/thoughtcrime/securesms/components/AudioView;->onSpeedChanged(Landroid/net/Uri;F)V PLorg/thoughtcrime/securesms/components/AudioView;->onStart(Landroid/net/Uri;ZZ)V -PLorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener;->()V -PLorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener;->(Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener;)V -PLorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener;->(Lorg/thoughtcrime/securesms/components/InputPanel$MediaListener;Lorg/thoughtcrime/securesms/components/ComposeText$CommitContentListener-IA;)V PLorg/thoughtcrime/securesms/components/ComposeText;->setCursorPositionChangedListener(Lorg/thoughtcrime/securesms/components/ComposeText$CursorPositionChangedListener;)V PLorg/thoughtcrime/securesms/components/ComposeText;->setInlineQueryChangedListener(Lorg/thoughtcrime/securesms/conversation/ui/inlinequery/InlineQueryChangedListener;)V PLorg/thoughtcrime/securesms/components/ComposeText;->setMentionValidator(Lorg/thoughtcrime/securesms/components/mention/MentionValidatorWatcher$MentionValidator;)V PLorg/thoughtcrime/securesms/components/ComposeText;->setStylingChangedListener(Lorg/thoughtcrime/securesms/components/ComposeText$StylingChangedListener;)V PLorg/thoughtcrime/securesms/components/ConversationItemFooter;->onDetachedFromWindow()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnail$Companion;->()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnail$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->dispatchDraw(Landroid/graphics/Canvas;)V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->getFooter()Lorg/thoughtcrime/securesms/util/views/Stub; -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->setBorderless(Z)V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnail;->showShade(Z)V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState$Creator;->()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;->(ZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIILkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$Creator;->()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState$Creator;->()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;->(FZZLorg/thoughtcrime/securesms/mms/SlideClickListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlidesClickedListener;Lorg/thoughtcrime/securesms/mms/SlideClickListener;Landroid/view/View$OnLongClickListener;IIIIIIIIIILkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->()V -PLorg/thoughtcrime/securesms/components/ConversationItemThumbnailState;->(Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$ThumbnailViewState;Lorg/thoughtcrime/securesms/components/ConversationItemThumbnailState$AlbumViewState;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/components/ConversationScrollToView;->formatUnreadCount(I)Ljava/lang/CharSequence; PLorg/thoughtcrime/securesms/components/ConversationScrollToView;->setOnClickListener(Landroid/view/View$OnClickListener;)V PLorg/thoughtcrime/securesms/components/ConversationScrollToView;->setShown(Z)V @@ -37637,16 +38240,8 @@ PLorg/thoughtcrime/securesms/components/LinkPreviewViewThumbnailState;->getDownl PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->cancelAction(Z)V PLorg/thoughtcrime/securesms/components/MicrophoneRecorderView;->isRecordingLocked()Z PLorg/thoughtcrime/securesms/components/QuoteView;->onDetachedFromWindow()V -PLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->()V -PLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->(Landroid/view/ViewGroup;Landroid/animation/LayoutTransition;)V -PLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->(Landroid/view/ViewGroup;Landroid/animation/LayoutTransition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->findRecyclerParent()Landroidx/recyclerview/widget/RecyclerView; -PLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->onScrollStateChanged(Landroidx/recyclerview/widget/RecyclerView;I)V -PLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->onViewAttachedToWindow(Landroid/view/View;)V PLorg/thoughtcrime/securesms/components/RecyclerViewParentTransitionController;->onViewDetachedFromWindow(Landroid/view/View;)V -PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$3;->test(Ljava/lang/Object;)Z -PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$3;->test(Lorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;)Z -PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate$ScrollToPositionRequest;->getPosition()I +PLorg/thoughtcrime/securesms/components/ScrollToPositionDelegate;->isListCommitted()Z PLorg/thoughtcrime/securesms/components/SearchView;->(Landroid/content/Context;)V PLorg/thoughtcrime/securesms/components/SearchView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V PLorg/thoughtcrime/securesms/components/SearchView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V @@ -37654,23 +38249,6 @@ PLorg/thoughtcrime/securesms/components/SearchView;->appendEmojiFilter(Landroid/ PLorg/thoughtcrime/securesms/components/SearchView;->initEmojiFilter()V PLorg/thoughtcrime/securesms/components/SendButton;->setPopupContainer(Landroid/view/ViewGroup;)V PLorg/thoughtcrime/securesms/components/SendButton;->setScheduledSendListener(Lorg/thoughtcrime/securesms/components/SendButton$ScheduledSendListener;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport0;->m(Ljava/lang/Object;)Ljava/util/List; -PLorg/thoughtcrime/securesms/components/ThumbnailView$$ExternalSyntheticBackport1;->m(Ljava/lang/Object;)Ljava/util/List; -PLorg/thoughtcrime/securesms/components/ThumbnailView$CancelClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView$CancelClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;Lorg/thoughtcrime/securesms/components/ThumbnailView$CancelClickDispatcher-IA;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView$DownloadClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView$DownloadClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;Lorg/thoughtcrime/securesms/components/ThumbnailView$DownloadClickDispatcher-IA;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView$ThumbnailClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView$ThumbnailClickDispatcher;->(Lorg/thoughtcrime/securesms/components/ThumbnailView;Lorg/thoughtcrime/securesms/components/ThumbnailView$ThumbnailClickDispatcher-IA;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView;->()V -PLorg/thoughtcrime/securesms/components/ThumbnailView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView;->dispatchDraw(Landroid/graphics/Canvas;)V -PLorg/thoughtcrime/securesms/components/ThumbnailView;->fillTargetDimensions([I[I[I)V -PLorg/thoughtcrime/securesms/components/ThumbnailView;->getNonZeroCount([I)I -PLorg/thoughtcrime/securesms/components/ThumbnailView;->hasSameContents(Lorg/thoughtcrime/securesms/mms/Slide;Lorg/thoughtcrime/securesms/mms/Slide;)Z -PLorg/thoughtcrime/securesms/components/ThumbnailView;->onSizeChanged(IIII)V -PLorg/thoughtcrime/securesms/components/ThumbnailView;->setImageResource(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/mms/Slide;ZZ)Lorg/signal/core/util/concurrent/ListenableFuture; -PLorg/thoughtcrime/securesms/components/ThumbnailView;->showSecondaryText(Z)V PLorg/thoughtcrime/securesms/components/TypingStatusRepository;->getTypists(J)Landroidx/lifecycle/LiveData; PLorg/thoughtcrime/securesms/components/ViewBinderDelegate$1;->invoke(Landroidx/viewbinding/ViewBinding;)V PLorg/thoughtcrime/securesms/components/ViewBinderDelegate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; @@ -37683,12 +38261,6 @@ PLorg/thoughtcrime/securesms/components/emoji/EmojiProvider$$ExternalSyntheticLa PLorg/thoughtcrime/securesms/components/emoji/EmojiProvider$$ExternalSyntheticLambda0;->run()V PLorg/thoughtcrime/securesms/components/emoji/EmojiProvider;->$r8$lambda$yWqSXcpiMY6E3k4l81kOhV5ANk4(Lorg/thoughtcrime/securesms/components/emoji/EmojiProvider$EmojiDrawable;Lorg/thoughtcrime/securesms/emoji/EmojiPageCache$LoadResult;)V PLorg/thoughtcrime/securesms/components/emoji/EmojiProvider;->lambda$getEmojiDrawable$0(Lorg/thoughtcrime/securesms/components/emoji/EmojiProvider$EmojiDrawable;Lorg/thoughtcrime/securesms/emoji/EmojiPageCache$LoadResult;)V -PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;)V -PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/components/emoji/EmojiTextView$$ExternalSyntheticLambda1;->()V -PLorg/thoughtcrime/securesms/components/mention/MentionAnnotation$$ExternalSyntheticLambda1;->()V -PLorg/thoughtcrime/securesms/components/mention/MentionAnnotation;->getMentionAnnotations(Landroid/text/Spanned;)Ljava/util/List; -PLorg/thoughtcrime/securesms/components/mention/MentionAnnotation;->getMentionAnnotations(Landroid/text/Spanned;II)Ljava/util/List; PLorg/thoughtcrime/securesms/components/mention/MentionValidatorWatcher;->setMentionValidator(Lorg/thoughtcrime/securesms/components/mention/MentionValidatorWatcher$MentionValidator;)V PLorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1$$ExternalSyntheticLambda0;->run()V PLorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1;->$r8$lambda$7zbeUa9i765Aa2G9x9qw8f4qjOo(Lorg/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton$1$1;J)V @@ -37699,59 +38271,9 @@ PLorg/thoughtcrime/securesms/components/settings/app/subscription/completed/Term PLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate$1$onViewAttachedToWindow$1;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate$1$onViewAttachedToWindow$1;->onStop(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/components/spoiler/SpoilerRendererDelegate$1;->onViewDetachedFromWindow(Landroid/view/View;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Companion;->containsPlayableSlides(Ljava/util/List;)Z -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode;->$values()[Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Mode;->(Ljava/lang/String;I)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress$Companion;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress;->(JJ)V PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$Progress;->equals(Ljava/lang/Object;)Z -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setCancelClickListener$1;->(Landroid/view/View$OnClickListener;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setCancelClickListener$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setCancelClickListener$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setShowSecondaryText$1;->(Z)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setShowSecondaryText$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setShowSecondaryText$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setSlides$2;->(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;Ljava/util/List;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setSlides$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setTransferClickListener$1;->(Landroid/view/View$OnClickListener;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setTransferClickListener$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setTransferClickListener$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setVisible$1;->(Z)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setVisible$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView$setVisible$1;->invoke(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;)Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->access$isUpdateToExistingSet(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;Ljava/util/List;)Z -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->access$slidesAsListOfTimestamps(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;Ljava/util/List;)Ljava/lang/String; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->access$verboseLog(Lorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;Ljava/lang/String;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->containsPlayableSlides(Ljava/util/List;)Z -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->getTransferState(Ljava/util/List;)I -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->onAttachedToWindow()V PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->onDetachedFromWindow()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->slidesAsListOfTimestamps(Ljava/util/List;)Ljava/lang/String; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlView;->verboseLog(Ljava/lang/String;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->(ZZZLjava/util/List;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;Landroid/view/View$OnClickListener;ZLjava/util/Map;Ljava/util/Map;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->getCompressionProgress()Ljava/util/Map; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->getNetworkProgress()Ljava/util/Map; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferControlViewState;->getSlides()Ljava/util/List; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$Companion;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State;->$values()[Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView$State;->(Ljava/lang/String;I)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->()V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->(Landroid/content/Context;Landroid/util/AttributeSet;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->progressPaint(I)Landroid/graphics/Paint; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->stopIconPaint(I)Landroid/graphics/Paint; -PLorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;->trackPaint(I)Landroid/graphics/Paint; PLorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaController;->getVoiceNotePlaybackState()Landroidx/lifecycle/MutableLiveData; PLorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaController;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaController;->onStop(Landroidx/lifecycle/LifecycleOwner;)V @@ -37769,18 +38291,6 @@ PLorg/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto;->equals(Ljava PLorg/thoughtcrime/securesms/contacts/paged/ContactSearchMediator$sam$androidx_lifecycle_Observer$0;->equals(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/contacts/paged/ContactSearchMediator$sam$androidx_lifecycle_Observer$0;->getFunctionDelegate()Lkotlin/Function; PLorg/thoughtcrime/securesms/contacts/paged/ContactSearchViewModel;->onCleared()V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView$$ExternalSyntheticLambda3;->(Ljava/lang/Runnable;)V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView$FallbackPhotoProvider;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView$FallbackPhotoProvider;->(Lorg/thoughtcrime/securesms/conversation/ConversationHeaderView$FallbackPhotoProvider-IA;)V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->(Landroid/content/Context;Landroid/util/AttributeSet;)V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->hideButton()V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->hideDescription()V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->hideSubtitle()V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setAbout(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setAvatar(Lcom/bumptech/glide/RequestManager;Lorg/thoughtcrime/securesms/recipients/Recipient;)V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->setLinkifyDescription(Z)V -PLorg/thoughtcrime/securesms/conversation/ConversationHeaderView;->showBackgroundBubble(Z)V PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->canInitializeFromDatabase()Z PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getDraftContentType()Ljava/lang/String; PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getDraftMedia()Landroid/net/Uri; @@ -37790,9 +38300,6 @@ PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getMedia()L PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getShareDataTimestamp()J PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->getStickerLocator()Lorg/thoughtcrime/securesms/stickers/StickerLocator; PLorg/thoughtcrime/securesms/conversation/ConversationIntents$Args;->isBorderless()Z -PLorg/thoughtcrime/securesms/conversation/ConversationItem$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/recipients/RecipientId;)V -PLorg/thoughtcrime/securesms/conversation/ConversationItem$ThumbnailClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;)V -PLorg/thoughtcrime/securesms/conversation/ConversationItem$ThumbnailClickListener;->(Lorg/thoughtcrime/securesms/conversation/ConversationItem;Lorg/thoughtcrime/securesms/conversation/ConversationItem$ThumbnailClickListener-IA;)V PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getBadgeImageView()Landroid/view/View; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getBubbleViews()Ljava/util/List; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getContactPhotoHolderView()Landroid/view/View; @@ -37802,16 +38309,6 @@ PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getReactionsView()L PLorg/thoughtcrime/securesms/conversation/ConversationItem;->getReplyView()Landroid/view/View; PLorg/thoughtcrime/securesms/conversation/ConversationItem;->onDetachedFromWindow()V PLorg/thoughtcrime/securesms/conversation/ConversationItem;->onRecipientChanged(Lorg/thoughtcrime/securesms/recipients/Recipient;)V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Detailed;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Detailed;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$EditHistory;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$EditHistory;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Standard;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode$Standard;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;->(Z)V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;->(ZILkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode;->(ZLkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback;)V PLorg/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback;->()V PLorg/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback;->(Lorg/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback$SwipeAvailabilityProvider;Lorg/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback$OnSwipeListener;)V @@ -37823,9 +38320,6 @@ PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider$onCre PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->applyTitleSpan(Landroid/view/MenuItem;Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->hideMenuItem(Landroid/view/Menu;I)V PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu$Provider;->setAfterFirstRenderMode(Z)V -PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu;->()V -PLorg/thoughtcrime/securesms/conversation/ConversationOptionsMenu;->access$getTAG$p()Ljava/lang/String; PLorg/thoughtcrime/securesms/conversation/ConversationSearchViewModel;->(Ljava/lang/String;)V PLorg/thoughtcrime/securesms/conversation/ConversationSearchViewModel;->getSearchResults()Landroidx/lifecycle/LiveData; PLorg/thoughtcrime/securesms/conversation/ConversationStickerSuggestionAdapter;->setStickers(Ljava/util/List;)V @@ -37858,11 +38352,8 @@ PLorg/thoughtcrime/securesms/conversation/ConversationUpdateTick;->onPause(Landr PLorg/thoughtcrime/securesms/conversation/ConversationUpdateTick;->onResume(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/ConversationUpdateTick;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/ConversationUpdateTick;->onStop(Landroidx/lifecycle/LifecycleOwner;)V -PLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda0;->()V -PLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda1;->()V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/conversation/MarkReadHelper;J)V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda2;->run()V -PLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/conversation/MarkReadHelper;J)V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper$$ExternalSyntheticLambda3;->run()V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->$r8$lambda$gcFI10LhFCaBEmJzQp8t_xBcU8U(Lorg/thoughtcrime/securesms/conversation/MarkReadHelper;J)V PLorg/thoughtcrime/securesms/conversation/MarkReadHelper;->$r8$lambda$h27hRrs_Rwv2sGlsmjqcW0dGIZI(Lorg/thoughtcrime/securesms/conversation/MarkReadHelper;J)V @@ -37894,8 +38385,6 @@ PLorg/thoughtcrime/securesms/conversation/VoiceRecorderWakeLock;->onResume(Landr PLorg/thoughtcrime/securesms/conversation/VoiceRecorderWakeLock;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/VoiceRecorderWakeLock;->onStop(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/VoiceRecorderWakeLock;->release()V -PLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$NotSet;->()V -PLorg/thoughtcrime/securesms/conversation/colors/ChatColors$Id$NotSet;->()V PLorg/thoughtcrime/securesms/conversation/drafts/DraftRepository$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/database/DraftTable$Drafts;Lorg/thoughtcrime/securesms/conversation/drafts/DraftRepository;J)V PLorg/thoughtcrime/securesms/conversation/drafts/DraftRepository$$ExternalSyntheticLambda0;->run()V PLorg/thoughtcrime/securesms/conversation/drafts/DraftRepository$Companion;->()V @@ -37945,17 +38434,11 @@ PLorg/thoughtcrime/securesms/conversation/drafts/DraftViewModel;->getVoiceNoteDr PLorg/thoughtcrime/securesms/conversation/drafts/DraftViewModel;->loadShareOrDraftData(J)Lio/reactivex/rxjava3/core/Maybe; PLorg/thoughtcrime/securesms/conversation/drafts/DraftViewModel;->onCleared()V PLorg/thoughtcrime/securesms/conversation/drafts/DraftViewModel;->saveDrafts(Lorg/thoughtcrime/securesms/conversation/drafts/DraftState;)Lorg/thoughtcrime/securesms/conversation/drafts/DraftState; -PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator$$ExternalSyntheticLambda1;->(Landroidx/recyclerview/widget/RecyclerView;)V PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator$$ExternalSyntheticLambda1;->run()V PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->$r8$lambda$IJ0Uk3eauzGuBkd_D1PotCUrlIQ(Landroidx/recyclerview/widget/RecyclerView;)V PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->endAnimations()V PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->endSlideAnimations()V PLorg/thoughtcrime/securesms/conversation/mutiselect/ConversationItemAnimator;->onAnimationFinished$lambda$4(Landroidx/recyclerview/widget/RecyclerView;)V -PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;->$values()[Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference; -PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;->()V -PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;->(Ljava/lang/String;I)V -PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference;->values()[Lorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$Difference; -PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration$WhenMappings;->()V PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onPause(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/mutiselect/MultiselectItemDecoration;->onStop(Landroidx/lifecycle/LifecycleOwner;)V @@ -37991,17 +38474,6 @@ PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->on PLorg/thoughtcrime/securesms/conversation/v2/BubbleLayoutTransitionListener;->onStop(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->getVoiceNoteMediaController()Lorg/thoughtcrime/securesms/components/voice/VoiceNoteMediaController; PLorg/thoughtcrime/securesms/conversation/v2/ConversationActivity;->onDestroy()V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/View;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->canPlayContent()Z -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->getDisplayMode()Lorg/thoughtcrime/securesms/conversation/ConversationItemDisplayMode; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ConversationViewHolder;->showProjectionArea()V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$IncomingMediaViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/View;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$IncomingMediaViewHolder;->bind(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Lorg/thoughtcrime/securesms/recipients/Recipient;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2;Landroid/view/View;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$ThreadHeaderViewHolder;->bind(Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$onDetachedFromRecyclerView$$inlined$filterIsInstance$1;->()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$onDetachedFromRecyclerView$$inlined$filterIsInstance$1;->()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationAdapterV2$onDetachedFromRecyclerView$$inlined$filterIsInstance$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; @@ -38059,11 +38531,6 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$LastScrolledPo PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$LastScrolledPositionUpdater;->onStart(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$LastScrolledPositionUpdater;->onStop(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$MotionEventRelayDrain;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;Landroidx/lifecycle/LifecycleOwner;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function1;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$onScrolled$1;->(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$onScrolled$1;->invoke(J)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$ScrollListener$onScrolled$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$SearchEventListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$SendButtonListener;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$SwipeAvailabilityProvider;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V @@ -38127,7 +38594,6 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$linkPreviewVie PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$linkPreviewViewModel$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$motionEventRelay$2;->invoke()Landroidx/lifecycle/ViewModelStoreOwner; PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$motionEventRelay$2;->invoke()Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$observeConversationThread$4$invoke$lambda$1$$inlined$doAfterNextLayout$1$1;->run()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentGroupCallJoinButton$2;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment$presentGroupCallJoinButton$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; @@ -38203,19 +38669,14 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentReque PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentScrollButtons(Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->presentTypingIndicator()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationFragment;->updateToggleButtonState()V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations;Landroid/view/View;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->bind(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationMessageElement;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->getHeight()I -PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->getItemView()Landroid/view/View; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationItemDecorations$DateHeaderViewHolder;->updateForWallpaper()V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda12;->(JJ)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda12;->run()V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda15;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda15;->call()Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda20;->(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/recipients/Recipient;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda20;->call()Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda9;->(J)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda9;->run()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda10;->(J)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda10;->run()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda13;->(JJ)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda13;->run()V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda16;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda16;->call()Ljava/lang/Object; +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda21;->(Lorg/thoughtcrime/securesms/database/model/GroupRecord;Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState;Lorg/thoughtcrime/securesms/recipients/Recipient;)V +PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository$$ExternalSyntheticLambda21;->call()Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$-gMXe-w-Xm5jHJapWlyQ6eOUlEE(JJ)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$ATtSNJzojyDhPrLSHCNff4Xrn4s(J)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;->$r8$lambda$KdCOHPNqejWN1AhOnsjSsYWIQ1E(Lorg/thoughtcrime/securesms/conversation/v2/ConversationRepository;Lorg/thoughtcrime/securesms/database/model/GroupRecord;)Lj$/util/Optional; @@ -38240,16 +38701,11 @@ PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$17;->onNext(L PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4$$ExternalSyntheticLambda4;->cancel()V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->$r8$lambda$DeiphTJKC3SI_gAZ1faGZoiWX80(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$4;->apply$lambda$4$lambda$3(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$7;->invoke(Lorg/thoughtcrime/securesms/recipients/Recipient;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$canShowAsBubble$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$getRequestReviewState$1;->(Lorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;)V PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$getRequestReviewState$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$1;->test(Lj$/util/Optional;)Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$groupMemberServiceIds$1;->test(Ljava/lang/Object;)Z -PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$setShowScrollButtonsForScrollPosition$1;->(ZZ)V -PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$setShowScrollButtonsForScrollPosition$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel$setShowScrollButtonsForScrollPosition$1;->invoke(Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState;)Lorg/thoughtcrime/securesms/conversation/v2/ConversationScrollButtonState; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getGroupMemberServiceIds()Lio/reactivex/rxjava3/core/Observable; PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getHasMessageRequestState()Z PLorg/thoughtcrime/securesms/conversation/v2/ConversationViewModel;->getIdentityRecordsObservable()Lio/reactivex/rxjava3/core/Observable; @@ -38273,7 +38729,6 @@ PLorg/thoughtcrime/securesms/conversation/v2/MotionEventRelay;->setDrain(Lorg/th PLorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;->()V PLorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;->(Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState$IndividualReviewState;Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState$GroupReviewState;)V PLorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;->(Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState$IndividualReviewState;Lorg/thoughtcrime/securesms/conversation/v2/RequestReviewState$GroupReviewState;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;->equals(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/conversation/v2/RequestReviewState;->shouldShowReviewBanner()Z PLorg/thoughtcrime/securesms/conversation/v2/ShareDataTimestampViewModel;->()V PLorg/thoughtcrime/securesms/conversation/v2/ShareDataTimestampViewModel;->()V @@ -38290,12 +38745,6 @@ PLorg/thoughtcrime/securesms/conversation/v2/VoiceMessageRecordingDelegate$Compa PLorg/thoughtcrime/securesms/conversation/v2/VoiceMessageRecordingDelegate$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/conversation/v2/VoiceMessageRecordingDelegate;->()V PLorg/thoughtcrime/securesms/conversation/v2/VoiceMessageRecordingDelegate;->(Landroidx/fragment/app/Fragment;Lorg/thoughtcrime/securesms/audio/AudioRecorder;Lorg/thoughtcrime/securesms/conversation/v2/VoiceMessageRecordingDelegate$SessionCallback;)V -PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->load(Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationDataSource;->load(Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey;)Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel; -PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey$Companion;->()V -PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey$Companion;->()V -PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey$Companion;->getThreadHeader()Lorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey; -PLorg/thoughtcrime/securesms/conversation/v2/data/ConversationElementKey;->()V PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->areContentsTheSame(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->areContentsTheSame(Lorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;)Z PLorg/thoughtcrime/securesms/conversation/v2/data/IncomingMedia;->areItemsTheSame(Ljava/lang/Object;)Z @@ -38320,136 +38769,21 @@ PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewMod PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->getState()Lio/reactivex/rxjava3/core/Flowable; PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupCallViewModel;->onCleared()V PLorg/thoughtcrime/securesms/conversation/v2/groups/ConversationGroupViewModel;->onCleared()V -PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->(Lkotlin/jvm/functions/Function0;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getMask()Landroid/graphics/drawable/Drawable; -PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->getOpacity()I -PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->isSolidColor()Z -PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->setCorners(Lorg/thoughtcrime/securesms/util/Projection$Corners;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable;->setLocalChatColors(Lorg/thoughtcrime/securesms/conversation/colors/ChatColors;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$Companion;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->$values()[Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->(Ljava/lang/String;IFF)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->getBottomPadding()F -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->getTopPadding()F -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->isEndingShape()Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;->isStartingShape()Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->access$getCollapsedSpacing$cp()F -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->access$getDefaultSpacing$cp()F -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->getCornersLTR()Lorg/thoughtcrime/securesms/util/Projection$Corners; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isSingularMessage(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isStartOfMessageCluster(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;Z)Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->isWithinClusteringTime(Lorg/thoughtcrime/securesms/database/model/MessageRecord;Lorg/thoughtcrime/securesms/database/model/MessageRecord;)Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape;->setBodyBubbleCorners(FFFF)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Lorg/thoughtcrime/securesms/components/AvatarImageView;Lorg/thoughtcrime/securesms/badges/BadgeImageView;Landroid/view/ViewGroup;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Lcom/google/android/material/imageview/ShapeableImageView;Lorg/thoughtcrime/securesms/reactions/ReactionsConversationView;Lorg/thoughtcrime/securesms/components/DeliveryStatusView;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/ExpirationTimerView;Landroid/view/View;Landroid/widget/Space;Lorg/thoughtcrime/securesms/components/AlertView;Z)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getAlert()Lorg/thoughtcrime/securesms/components/AlertView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getBody()Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getBodyWrapper()Landroid/view/ViewGroup; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getDeliveryStatus()Lorg/thoughtcrime/securesms/components/DeliveryStatusView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getFooterBackground()Landroid/view/View; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getFooterDate()Landroid/widget/TextView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getFooterExpiry()Lorg/thoughtcrime/securesms/components/ExpirationTimerView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getFooterSpace()Landroid/widget/Space; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getReactions()Lorg/thoughtcrime/securesms/reactions/ReactionsConversationView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getReply()Lcom/google/android/material/imageview/ShapeableImageView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getRoot()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getSenderBadge()Lorg/thoughtcrime/securesms/badges/BadgeImageView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getSenderName()Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->getSenderPhoto()Lorg/thoughtcrime/securesms/components/AvatarImageView; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;->isIncoming()Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridgeKt;->bridge(Lorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding;)Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda0;->onLayoutChange(Landroid/view/View;IIIIIIII)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda2;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda3;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda4;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$$ExternalSyntheticLambda7;->(Lorg/thoughtcrime/securesms/conversation/ConversationAdapter$ItemClickListener;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$Companion;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$PassthroughClickListener;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$ReactionMeasureListener;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$bodyBubbleDrawable$1;->(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$bodyBubbleDrawable$1;->invoke()Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$bodyBubbleDrawable$1;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$footerDrawable$1;->(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$footerDrawable$1;->invoke()Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$footerDrawable$1;->invoke()Lorg/thoughtcrime/securesms/conversation/v2/items/ChatColorsDrawable$ChatColorsData; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$replyDelegate$1;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder$senderDrawable$1;->(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->$r8$lambda$ocilDMoff9b132TfYhzB6ol1qqk(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;Landroid/view/View;IIIIIIII)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;Lorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;Lorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;ILkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->_init_$lambda$0(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;Landroid/view/View;IIIIIIII)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->bind(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->canPlayContent()Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->getConversationMessage()Lorg/thoughtcrime/securesms/conversation/ConversationMessage; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->getShape()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->invalidateFooterDrawable(Landroid/view/ViewGroup;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->isContentCondensed()Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->isForcedFooter()Z -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentAlert()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentDate()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentDeliveryStatus()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentFooterBackground()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentFooterEndPadding()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentFooterExpiry()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentReactions()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentSenderNameBackground()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->presentSenderNameColor()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->setConversationMessage(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->setShape(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape$MessageShape;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyViewHolder;->showProjectionArea()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$1;->(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$2;->(Ljava/lang/Object;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$2;->invoke(Landroid/content/Context;Z)Ljava/lang/Integer; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme$getBodyTextColor$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->(Landroid/content/Context;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getBodyBubbleColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)I -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)I -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getFooterBubbleColor(Lorg/thoughtcrime/securesms/conversation/ConversationMessage;)I -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme;->getReplyIconBackgroundColor()I -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemUtils;->linkifyUrlLinks(Landroid/text/Spannable;ZLorg/thoughtcrime/securesms/util/UrlClickHandler;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder;->getShapeDelegate()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemShape; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemViewHolder;->getThemeDelegate()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTheme; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState;->$values()[Lorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState; -PLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate$DisplayState;->(Ljava/lang/String;I)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;Ljava/util/List;Landroid/view/View;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Landroid/widget/Space;Lorg/thoughtcrime/securesms/util/views/Stub;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->displayTuckedIntoBody()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2FooterPositionDelegate;->onPreMeasure()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener$Companion;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener;->()V -PLorg/thoughtcrime/securesms/conversation/v2/items/V2OnDispatchTouchEventListener;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationContext;Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemTextOnlyBindingBridge;)V PLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onDestroyView()V PLorg/thoughtcrime/securesms/conversationlist/ConversationListFragment;->onStop()V PLorg/thoughtcrime/securesms/conversationlist/ConversationListViewModel;->onCleared()V PLorg/thoughtcrime/securesms/conversationlist/chatfilter/ConversationListFilterPullView;->onSaveInstanceState()Landroid/os/Parcelable; +PLorg/thoughtcrime/securesms/database/CallTable$markAllCallEventsWithPeerBeforeTimestampRead$latestCallAsOfTimestamp$1;->(Lorg/thoughtcrime/securesms/recipients/RecipientId;J)V +PLorg/thoughtcrime/securesms/database/CallTable$markAllCallEventsWithPeerBeforeTimestampRead$latestCallAsOfTimestamp$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/database/CallTable$markAllCallEventsWithPeerBeforeTimestampRead$latestCallAsOfTimestamp$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)Lorg/thoughtcrime/securesms/database/CallTable$Call; +PLorg/thoughtcrime/securesms/database/CallTable;->markAllCallEventsWithPeerBeforeTimestampRead(Lorg/thoughtcrime/securesms/recipients/RecipientId;J)Lorg/thoughtcrime/securesms/database/CallTable$Call; PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda13;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda13;->run()V -PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda1;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda1;->run()V PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda26;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda26;->run()V PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda6;->(Lorg/thoughtcrime/securesms/database/DatabaseObserver;J)V PLorg/thoughtcrime/securesms/database/DatabaseObserver$$ExternalSyntheticLambda6;->run()V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$2v1Sb-6JCd9xjyyzfbH5tKTRWy8(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V -PLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$6H_TtixOHSa7Tr30medlqcHry2c(Lorg/thoughtcrime/securesms/database/DatabaseObserver;Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$8PzBCQMLi_6Y7FOR98cRbpXw-Xk(Lorg/thoughtcrime/securesms/database/DatabaseObserver;JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->$r8$lambda$ZjxWKgbWA1SSTmnWoVneQana_Lk(Lorg/thoughtcrime/securesms/database/DatabaseObserver;J)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$notifyVerboseConversationListeners$20(J)V @@ -38457,9 +38791,7 @@ PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$registerSchedule PLorg/thoughtcrime/securesms/database/DatabaseObserver;->lambda$unregisterObserver$18(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->notifyVerboseConversationListeners(Ljava/util/Set;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->registerScheduledMessageObserver(JLorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -PLorg/thoughtcrime/securesms/database/DatabaseObserver;->unregisterMapped(Ljava/util/Map;Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/database/DatabaseObserver;->unregisterObserver(Lorg/thoughtcrime/securesms/database/DatabaseObserver$MessageObserver;)V -PLorg/thoughtcrime/securesms/database/DatabaseObserver;->unregisterObserver(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V PLorg/thoughtcrime/securesms/database/DatabaseTable;->notifyVerboseConversationListeners(Ljava/util/Set;)V PLorg/thoughtcrime/securesms/database/DraftTable$Drafts;->(Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V PLorg/thoughtcrime/securesms/database/DraftTable$Drafts;->addIfNotNull(Lorg/thoughtcrime/securesms/database/DraftTable$Draft;)V @@ -38477,10 +38809,12 @@ PLorg/thoughtcrime/securesms/database/MessageTable;->setReactionsSeen(JJ)V PLorg/thoughtcrime/securesms/database/RxDatabaseObserver$$ExternalSyntheticLambda1;->cancel()V PLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->$r8$lambda$6u1bbd117Cl1h38MfeI7BgZPo1A(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;)V PLorg/thoughtcrime/securesms/database/RxDatabaseObserver;->databaseFlowable$lambda$1$lambda$0(Lorg/thoughtcrime/securesms/database/RxDatabaseObserver$RxObserver;)V +PLorg/thoughtcrime/securesms/database/SignalDatabase;->calls()Lorg/thoughtcrime/securesms/database/CallTable; PLorg/thoughtcrime/securesms/database/ThreadTable$setReadSince$1;->(Ljava/util/Map;Lorg/thoughtcrime/securesms/database/ThreadTable;Ljava/util/List;ZLkotlin/jvm/internal/Ref$BooleanRef;)V PLorg/thoughtcrime/securesms/database/ThreadTable$setReadSince$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/database/ThreadTable$setReadSince$1;->invoke(Lorg/thoughtcrime/securesms/database/SQLiteDatabase;)V PLorg/thoughtcrime/securesms/database/ThreadTable;->createQuery(Ljava/lang/String;J)Ljava/lang/String; +PLorg/thoughtcrime/securesms/database/ThreadTable;->getRecipientIdsForThreadIds(Ljava/util/Collection;)Ljava/util/List; PLorg/thoughtcrime/securesms/database/ThreadTable;->getThreadRecord(Ljava/lang/Long;)Lorg/thoughtcrime/securesms/database/model/ThreadRecord; PLorg/thoughtcrime/securesms/database/ThreadTable;->setLastSeen(J)V PLorg/thoughtcrime/securesms/database/ThreadTable;->setReadSince(JZJ)Ljava/util/List; @@ -38488,40 +38822,12 @@ PLorg/thoughtcrime/securesms/database/ThreadTable;->setReadSince(Ljava/util/Map; PLorg/thoughtcrime/securesms/database/ThreadTable;->setReadSince(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;ZJ)Ljava/util/List; PLorg/thoughtcrime/securesms/database/ThreadTable;->update(JZZ)Z PLorg/thoughtcrime/securesms/database/identity/IdentityRecordList;->equals(Ljava/lang/Object;)Z -PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion$$ExternalSyntheticLambda3;->cancel()V -PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->$r8$lambda$_YM1i9V93JIKhbRirbAeb_98VJw(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V -PLorg/thoughtcrime/securesms/database/model/StoryViewState$Companion;->getState$lambda$3$lambda$2(Lorg/thoughtcrime/securesms/database/DatabaseObserver$Observer;)V PLorg/thoughtcrime/securesms/database/model/ThreadRecord;->isForcedUnread()Z -PLorg/thoughtcrime/securesms/databinding/ConversationHeaderViewBinding;->(Landroid/view/View;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Lorg/thoughtcrime/securesms/components/AvatarImageView;Landroid/widget/LinearLayout;Lorg/thoughtcrime/securesms/badges/BadgeImageView;Lcom/google/android/material/button/MaterialButton;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Landroid/view/View;Landroidx/constraintlayout/widget/ConstraintLayout;Landroid/view/View;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;)V -PLorg/thoughtcrime/securesms/databinding/ConversationHeaderViewBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/ConversationHeaderViewBinding; PLorg/thoughtcrime/securesms/databinding/ConversationSearchNavBinding;->getRoot()Lorg/thoughtcrime/securesms/components/ConversationSearchBottomBar; -PLorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding;->(Landroid/view/View;Landroidx/constraintlayout/widget/Guideline;Landroidx/appcompat/widget/AppCompatImageView;Landroid/view/View;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;Landroid/view/View;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/components/transfercontrols/TransferProgressView;Landroidx/constraintlayout/widget/Guideline;)V -PLorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding; -PLorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding;->inflate(Landroid/view/LayoutInflater;Landroid/view/ViewGroup;)Lorg/thoughtcrime/securesms/databinding/TransferControlsViewBinding; PLorg/thoughtcrime/securesms/databinding/V2ConversationFragmentBinding;->getRoot()Lorg/thoughtcrime/securesms/components/InputAwareConstraintLayout; -PLorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding;->(Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout;Lorg/thoughtcrime/securesms/badges/BadgeImageView;Lorg/thoughtcrime/securesms/components/AvatarImageView;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;Lorg/thoughtcrime/securesms/conversation/v2/items/ShrinkWrapLinearLayout;Lorg/thoughtcrime/securesms/components/ExpirationTimerView;Landroid/view/View;Landroid/widget/TextView;Lorg/thoughtcrime/securesms/reactions/ReactionsConversationView;Lcom/google/android/material/imageview/ShapeableImageView;Landroid/widget/Space;Lorg/thoughtcrime/securesms/components/emoji/EmojiTextView;)V -PLorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding;->bind(Landroid/view/View;)Lorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding; -PLorg/thoughtcrime/securesms/databinding/V2ConversationItemTextOnlyIncomingBinding;->getRoot()Lorg/thoughtcrime/securesms/conversation/v2/items/V2ConversationItemLayout; PLorg/thoughtcrime/securesms/emoji/EmojiPageCache$LoadResult$Immediate;->()V PLorg/thoughtcrime/securesms/emoji/EmojiPageCache$LoadResult$Immediate;->(Landroid/graphics/Bitmap;)V PLorg/thoughtcrime/securesms/emoji/EmojiPageCache$LoadResult$Immediate;->getBitmap()Landroid/graphics/Bitmap; -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan;->(Landroid/graphics/Typeface;)V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan;->updateDrawState(Landroid/text/TextPaint;)V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$CustomTypefaceSpan;->updateMeasureState(Landroid/text/TextPaint;)V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;->$values()[Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph; -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;->()V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;->(Ljava/lang/String;IC)V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$Glyph;->getUnicode()C -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;->$values()[Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight; -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;->()V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;->(Ljava/lang/String;I)V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;->values()[Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight; -PLorg/thoughtcrime/securesms/fonts/SignalSymbols$WhenMappings;->()V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols;->()V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols;->()V -PLorg/thoughtcrime/securesms/fonts/SignalSymbols;->getBoldWeightedFont(Landroid/content/Context;)Landroid/graphics/Typeface; -PLorg/thoughtcrime/securesms/fonts/SignalSymbols;->getTypeface(Landroid/content/Context;Lorg/thoughtcrime/securesms/fonts/SignalSymbols$Weight;)Landroid/graphics/Typeface; -PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4PlaybackController;->onScrolled(Landroidx/recyclerview/widget/RecyclerView;II)V PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onPause(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/giph/mp4/GiphyMp4ProjectionPlayerHolder;->onStop(Landroidx/lifecycle/LifecycleOwner;)V @@ -38534,7 +38840,6 @@ PLorg/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob;->enqueue()V PLorg/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob;->getFactoryKey()Ljava/lang/String; PLorg/thoughtcrime/securesms/jobs/ConversationShortcutUpdateJob;->serialize()[B PLorg/thoughtcrime/securesms/keyvalue/SettingsValues$Theme;->values()[Lorg/thoughtcrime/securesms/keyvalue/SettingsValues$Theme; -PLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isEnterKeySends()Z PLorg/thoughtcrime/securesms/keyvalue/SettingsValues;->isLinkPreviewsEnabled()Z PLorg/thoughtcrime/securesms/linkpreview/LinkPreviewRepository;->()V PLorg/thoughtcrime/securesms/linkpreview/LinkPreviewRepository;->()V @@ -38566,13 +38871,17 @@ PLorg/thoughtcrime/securesms/linkpreview/LinkPreviewViewModelV2;->onCleared()V PLorg/thoughtcrime/securesms/linkpreview/LinkPreviewViewModelV2;->setSavedLinkPreviewState(Lorg/thoughtcrime/securesms/linkpreview/LinkPreviewState;)V PLorg/thoughtcrime/securesms/logsubmit/LogSectionNotifications$$ExternalSyntheticApiModelOutline2;->m(Landroid/app/NotificationChannel;)Z PLorg/thoughtcrime/securesms/main/MainActivityListHostFragment;->onDestroyView()V -PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->equals(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/messagerequests/MessageRequestState;->getState()Lorg/thoughtcrime/securesms/messagerequests/MessageRequestState$State; PLorg/thoughtcrime/securesms/mms/AttachmentManager;->isAttachmentPresent()Z -PLorg/thoughtcrime/securesms/mms/SlideDeck$$ExternalSyntheticLambda0;->()V -PLorg/thoughtcrime/securesms/mms/SlideDeck$$ExternalSyntheticLambda0;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver$$ExternalSyntheticLambda10;->()V +PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver$$ExternalSyntheticLambda10;->test(Ljava/lang/Object;)Z +PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver$$ExternalSyntheticLambda11;->()V +PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver$$ExternalSyntheticLambda11;->apply(Ljava/lang/Object;)Ljava/lang/Object; +PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver;->$r8$lambda$b_EADC0vZU7XQFn_9g4yupsI8u4(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;)Z PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver;->()V +PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver;->lambda$processCallEvents$6(Lorg/thoughtcrime/securesms/notifications/v2/ConversationId;)Z PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver;->process(Ljava/util/List;)V +PLorg/thoughtcrime/securesms/notifications/MarkReadReceiver;->processCallEvents(Ljava/util/List;J)V PLorg/thoughtcrime/securesms/notifications/NotificationCancellationHelper;->()V PLorg/thoughtcrime/securesms/notifications/NotificationCancellationHelper;->cancelAllMessageNotifications(Landroid/content/Context;Ljava/util/Set;)V PLorg/thoughtcrime/securesms/notifications/NotificationCancellationHelper;->cancelLegacy(Landroid/content/Context;I)V @@ -38616,9 +38925,9 @@ PLorg/thoughtcrime/securesms/notifications/v2/NotificationStateProvider;-> PLorg/thoughtcrime/securesms/notifications/v2/NotificationStateProvider;->constructNotificationState(Ljava/util/Map;Lorg/thoughtcrime/securesms/notifications/profiles/NotificationProfile;)Lorg/thoughtcrime/securesms/notifications/v2/NotificationState; PLorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference;->equals(Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference;->isDisplayContact()Z -PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda0;->run()V PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda2;->onChanged(Ljava/lang/Object;)V +PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda6;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda6;->run()V PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda9;->(Lorg/thoughtcrime/securesms/recipients/LiveRecipient;Lorg/thoughtcrime/securesms/recipients/Recipient;)V PLorg/thoughtcrime/securesms/recipients/LiveRecipient$$ExternalSyntheticLambda9;->run()V @@ -38630,6 +38939,7 @@ PLorg/thoughtcrime/securesms/recipients/LiveRecipient;->lambda$new$0(Lorg/though PLorg/thoughtcrime/securesms/recipients/LiveRecipient;->lambda$new$1(Lorg/thoughtcrime/securesms/recipients/Recipient;)V PLorg/thoughtcrime/securesms/recipients/LiveRecipient;->lambda$observeForever$6(Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V PLorg/thoughtcrime/securesms/recipients/LiveRecipient;->lambda$removeForeverObserver$7(Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V +PLorg/thoughtcrime/securesms/recipients/LiveRecipient;->removeForeverObserver(Lorg/thoughtcrime/securesms/recipients/RecipientForeverObserver;)V PLorg/thoughtcrime/securesms/recipients/Recipient;->getContactUri()Landroid/net/Uri; PLorg/thoughtcrime/securesms/recipients/Recipient;->getNotificationChannel()Ljava/lang/String; PLorg/thoughtcrime/securesms/service/ExpiringMessageManager$$ExternalSyntheticLambda0;->()V @@ -38661,21 +38971,12 @@ PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter$$ExternalSyntheticLambda0;- PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter;->$r8$lambda$1L8FIPWGmHakh7u9Krsm8K4DSjQ(Lorg/thoughtcrime/securesms/util/LeakyBucketLimiter;)V PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter;->drip()V PLorg/thoughtcrime/securesms/util/LeakyBucketLimiter;->run(Ljava/lang/Runnable;)V -PLorg/thoughtcrime/securesms/util/LongClickMovementMethod$1;->(Lorg/thoughtcrime/securesms/util/LongClickMovementMethod;)V -PLorg/thoughtcrime/securesms/util/LongClickMovementMethod;->(Landroid/content/Context;)V -PLorg/thoughtcrime/securesms/util/LongClickMovementMethod;->getInstance(Landroid/content/Context;)Lorg/thoughtcrime/securesms/util/LongClickMovementMethod; -PLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper;IIII)V -PLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$$ExternalSyntheticLambda0;->onAnimationUpdate(Landroid/animation/ValueAnimator;)V PLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$3;->onDestroy(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/util/Material3OnScrollHelper$3;->onStop(Landroidx/lifecycle/LifecycleOwner;)V PLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->access$getAnimator$p(Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper;)Landroid/animation/ValueAnimator; PLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->access$getSetStatusBarColor$p(Lorg/thoughtcrime/securesms/util/Material3OnScrollHelper;)Lkotlin/jvm/functions/Function1; PLorg/thoughtcrime/securesms/util/Material3OnScrollHelper;->getPreviousStatusBarColor()I PLorg/thoughtcrime/securesms/util/NullableSavedStateHandleDelegate;->(Landroidx/lifecycle/SavedStateHandle;Ljava/lang/String;)V -PLorg/thoughtcrime/securesms/util/Projection$Corners;->()V -PLorg/thoughtcrime/securesms/util/Projection$Corners;->(F)V -PLorg/thoughtcrime/securesms/util/Projection$Corners;->([F)V -PLorg/thoughtcrime/securesms/util/Projection$Corners;->toRelativeRadii(Z)[F PLorg/thoughtcrime/securesms/util/SavedStateHandleExtensionsKt$delegate$1;->(Ljava/lang/Object;)V PLorg/thoughtcrime/securesms/util/SavedStateHandleExtensionsKt;->delegate(Landroidx/lifecycle/SavedStateHandle;Ljava/lang/String;)Lkotlin/properties/ReadWriteProperty; PLorg/thoughtcrime/securesms/util/SavedStateHandleExtensionsKt;->delegate(Landroidx/lifecycle/SavedStateHandle;Ljava/lang/String;Ljava/lang/Object;)Lkotlin/properties/ReadWriteProperty; @@ -38684,16 +38985,12 @@ PLorg/thoughtcrime/securesms/util/SavedStateViewModelFactory$Companion$factoryPr PLorg/thoughtcrime/securesms/util/SavedStateViewModelFactory$Companion$factoryProducer$1;->invoke()Lorg/thoughtcrime/securesms/util/SavedStateViewModelFactory; PLorg/thoughtcrime/securesms/util/SavedStateViewModelFactory;->(Lkotlin/jvm/functions/Function1;Landroidx/savedstate/SavedStateRegistryOwner;)V PLorg/thoughtcrime/securesms/util/SavedStateViewModelFactory;->create(Ljava/lang/String;Ljava/lang/Class;Landroidx/lifecycle/SavedStateHandle;)Landroidx/lifecycle/ViewModel; -PLorg/thoughtcrime/securesms/util/SearchUtil;->getHighlightedSpan(Ljava/util/Locale;Lorg/thoughtcrime/securesms/util/SearchUtil$StyleFactory;Landroid/text/Spannable;Ljava/lang/String;I)Landroid/text/Spannable; PLorg/thoughtcrime/securesms/util/ServiceUtil;->getAudioManager(Landroid/content/Context;)Landroid/media/AudioManager; PLorg/thoughtcrime/securesms/util/SignalLocalMetrics$ConversationOpen;->onRenderFinished()V -PLorg/thoughtcrime/securesms/util/SpanUtil;->()V -PLorg/thoughtcrime/securesms/util/SpanUtil;->ofSize(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; PLorg/thoughtcrime/securesms/util/SplashScreenUtil$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;)Landroid/window/SplashScreen; PLorg/thoughtcrime/securesms/util/SplashScreenUtil$$ExternalSyntheticApiModelOutline1;->m(Landroid/window/SplashScreen;I)V PLorg/thoughtcrime/securesms/util/SplashScreenUtil$1;->()V PLorg/thoughtcrime/securesms/util/SplashScreenUtil;->setSplashScreenThemeIfNecessary(Landroid/app/Activity;Lorg/thoughtcrime/securesms/keyvalue/SettingsValues$Theme;)V -PLorg/thoughtcrime/securesms/util/TextSecurePreferences;->isEnterSendsEnabled(Landroid/content/Context;)Z PLorg/thoughtcrime/securesms/util/Util;->clamp(FFF)F PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inlined$viewModels$default$1;->invoke()Landroidx/fragment/app/Fragment; PLorg/thoughtcrime/securesms/util/ViewModelFactoryKt$savedStateViewModel$$inlined$viewModels$default$1;->invoke()Ljava/lang/Object; @@ -38711,14 +39008,13 @@ PLorg/thoughtcrime/securesms/util/ViewUtil;->fadeOut(Landroid/view/View;II)Lorg/ PLorg/thoughtcrime/securesms/util/ViewUtil;->getAlphaAnimation(FFI)Landroid/view/animation/Animation; PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onViewDetachedFromWindow(Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter;->onViewDetachedFromWindow(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;)V +PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->areContentsTheSame(Ljava/lang/Object;Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->areContentsTheSame(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;)Z PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->areItemsTheSame(Ljava/lang/Object;Ljava/lang/Object;)Z PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->areItemsTheSame(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;)Z PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->getChangePayload(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingDiffCallback;->getChangePayload(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;)Ljava/lang/Object; PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel$-CC;->$default$getChangePayload(Lorg/thoughtcrime/securesms/util/adapter/mapping/MappingModel;Ljava/lang/Object;)Ljava/lang/Object; -PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->(Landroid/view/View;)V -PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->onAttachedToWindow()V PLorg/thoughtcrime/securesms/util/adapter/mapping/MappingViewHolder;->onDetachedFromWindow()V PLorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor$$ExternalSyntheticLambda0;->(Lorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor;Ljava/lang/Runnable;)V PLorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor$$ExternalSyntheticLambda0;->run()V @@ -38727,8 +39023,6 @@ PLorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor;->enqueue(Lj PLorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor;->execute(Ljava/lang/Runnable;)V PLorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor;->lambda$enqueue$0(Ljava/lang/Runnable;)V PLorg/thoughtcrime/securesms/util/concurrent/SerialMonoLifoExecutor;->scheduleNext()V -PLorg/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat;->()V -PLorg/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat;->(Landroid/content/Context;)V PLorg/thoughtcrime/securesms/util/rx/RxStore;->dispose()V PLorg/thoughtcrime/securesms/util/views/Stub;->getVisibility()I PLorg/thoughtcrime/securesms/util/views/Stub;->isVisible()Z diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index 7d1aa25352..15ef16f2cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -98,9 +98,10 @@ import org.thoughtcrime.securesms.service.DirectoryRefreshListener; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.service.LocalBackupListener; -import org.thoughtcrime.securesms.service.WipeMemoryService; +import org.thoughtcrime.securesms.service.MessageBackupListener; import org.thoughtcrime.securesms.service.RotateSenderCertificateListener; import org.thoughtcrime.securesms.service.RotateSignedPreKeyListener; +import org.thoughtcrime.securesms.service.WipeMemoryService; import org.thoughtcrime.securesms.service.webrtc.ActiveCallManager; import org.thoughtcrime.securesms.service.webrtc.AndroidTelecomUtil; import org.thoughtcrime.securesms.storage.StorageSyncHelper; @@ -551,6 +552,7 @@ private void initializePeriodicTasks() { RotateSignedPreKeyListener.schedule(this); DirectoryRefreshListener.schedule(this); LocalBackupListener.schedule(this); + MessageBackupListener.schedule(this); RotateSenderCertificateListener.schedule(this); RoutineMessageFetchReceiver.startOrUpdateAlarm(this); AnalyzeDatabaseAlarmListener.schedule(this); diff --git a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java index 2049bcebf2..7bfba91dec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms; import android.net.Uri; +import android.view.GestureDetector; import android.view.View; import androidx.annotation.NonNull; @@ -58,6 +59,10 @@ void bind(@NonNull LifecycleOwner lifecycleOwner, void setEventListener(@Nullable EventListener listener); + default void setGestureDetector(@Nullable GestureDetector gestureDetector) { + // Intentionally Blank. + } + default void setParentScrolling(boolean isParentScrolling) { // Intentionally Blank. } @@ -124,5 +129,6 @@ interface EventListener { void onShowSafetyTips(boolean forGroup); void onReportSpamLearnMoreClicked(); void onMessageRequestAcceptOptionsClicked(); + void onItemDoubleClick(MultiselectPart multiselectPart); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java index 5a793e45a2..fe6b6e0812 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActivity.java @@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.crypto.MasterSecretUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.devicetransfer.olddevice.OldDeviceTransferActivity; +import org.thoughtcrime.securesms.keyvalue.InternalValues; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.lock.v2.CreateSvrPinActivity; import org.thoughtcrime.securesms.migrations.ApplicationMigrationActivity; @@ -28,8 +29,11 @@ import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.registration.RegistrationNavigationActivity; +import org.thoughtcrime.securesms.registration.v2.ui.RegistrationV2Activity; +import org.thoughtcrime.securesms.restore.RestoreActivity; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.util.AppStartup; +import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.TextSecurePreferences; import java.util.Locale; @@ -51,6 +55,7 @@ public abstract class PassphraseRequiredActivity extends PassphraseActivity impl private static final int STATE_TRANSFER_ONGOING = 8; private static final int STATE_TRANSFER_LOCKED = 9; private static final int STATE_CHANGE_NUMBER_LOCK = 10; + private static final int STATE_RESTORE_BACKUP = 11; private BroadcastReceiver clearKeyReceiver; @@ -123,10 +128,12 @@ protected T initFragment(@IdRes int target, } private void routeApplicationState(boolean locked) { - Intent intent = getIntentForState(getApplicationState(locked)); + final int applicationState = getApplicationState(locked); + Intent intent = getIntentForState(applicationState); if (intent == null || (intent.getComponent() != null && getLocalClassName().equals(intent.getComponent().getClassName()))) { return; } + Log.d(TAG, "routeApplicationState(), intent: " + intent.getComponent()); startActivity(intent); finish(); } @@ -145,6 +152,7 @@ private Intent getIntentForState(int state) { case STATE_TRANSFER_ONGOING: return getOldDeviceTransferIntent(); case STATE_TRANSFER_LOCKED: return getOldDeviceTransferLockedIntent(); case STATE_CHANGE_NUMBER_LOCK: return getChangeNumberLockIntent(); + case STATE_RESTORE_BACKUP: return getRestoreIntent(); default: return null; } } @@ -158,6 +166,8 @@ private int getApplicationState(boolean locked) { return STATE_UI_BLOCKING_UPGRADE; } else if (!TextSecurePreferences.hasPromptedPushRegistration(this)) { return STATE_WELCOME_PUSH_SCREEN; + } else if (SignalStore.internalValues().enterRestoreV2Flow()) { + return STATE_RESTORE_BACKUP; } else if (SignalStore.storageService().needsAccountRestore()) { return STATE_ENTER_SIGNAL_PIN; } else if (userHasSkippedOrForgottenPin()) { @@ -202,7 +212,11 @@ private Intent getUiBlockingUpgradeIntent() { } private Intent getPushRegistrationIntent() { - return RegistrationNavigationActivity.newIntentForNewRegistration(this, getIntent()); + if (FeatureFlags.registrationV2()) { + return RegistrationV2Activity.newIntentForNewRegistration(this, getIntent()); + } else { + return RegistrationNavigationActivity.newIntentForNewRegistration(this, getIntent()); + } } private Intent getEnterSignalPinIntent() { @@ -221,6 +235,11 @@ private Intent getCreateSignalPinIntent() { return getRoutedIntent(CreateSvrPinActivity.class, intent); } + private Intent getRestoreIntent() { + Intent intent = RestoreActivity.getIntentForRestore(this); + return getRoutedIntent(intent, getIntent()); + } + private Intent getCreateProfileNameIntent() { Intent intent = CreateProfileActivity.getIntentForUserProfile(this); return getRoutedIntent(intent, getIntent()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java b/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java index 83eb8b24ff..1b4adcee97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/WebRtcCallActivity.java @@ -36,6 +36,7 @@ import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.app.PictureInPictureModeChangedInfo; import androidx.core.content.ContextCompat; import androidx.core.util.Consumer; import androidx.lifecycle.LiveDataReactiveStreams; @@ -62,6 +63,7 @@ import org.thoughtcrime.securesms.components.webrtc.CallOverflowPopupWindow; import org.thoughtcrime.securesms.components.webrtc.CallParticipantsListUpdatePopupWindow; import org.thoughtcrime.securesms.components.webrtc.CallParticipantsState; +import org.thoughtcrime.securesms.components.webrtc.CallReactionScrubber; import org.thoughtcrime.securesms.components.webrtc.CallStateUpdatePopupWindow; import org.thoughtcrime.securesms.components.webrtc.CallToastPopupWindow; import org.thoughtcrime.securesms.components.webrtc.GroupCallSafetyNumberChangeNotificationUtil; @@ -225,6 +227,8 @@ public void onCreate(Bundle savedInstanceState) { processIntent(getIntent()); + registerSystemPipChangeListeners(); + windowLayoutInfoConsumer = new WindowLayoutInfoConsumer(); windowInfoTrackerCallbackAdapter = new WindowInfoTrackerCallbackAdapter(WindowInfoTracker.getOrCreate(this)); @@ -237,6 +241,13 @@ public void onCreate(Bundle savedInstanceState) { WindowUtil.setNavigationBarColor(this, ContextCompat.getColor(this, R.color.signal_dark_colorSurface)); } + private void registerSystemPipChangeListeners() { + addOnPictureInPictureModeChangedListener(pictureInPictureModeChangedInfo -> { + CallParticipantsListDialog.dismiss(getSupportFragmentManager()); + CallReactionScrubber.dismissCustomEmojiBottomSheet(getSupportFragmentManager()); + }); + } + @Override protected void onStart() { super.onStart(); @@ -375,8 +386,6 @@ private boolean enterPipModeIfPossible() { return false; } - CallParticipantsListDialog.dismiss(getSupportFragmentManager()); - return true; } if (Build.VERSION.SDK_INT >= 31) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/absbackup/SignalBackupAgent.kt b/app/src/main/java/org/thoughtcrime/securesms/absbackup/SignalBackupAgent.kt index 2b4692b95f..43bb72f15e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/absbackup/SignalBackupAgent.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/absbackup/SignalBackupAgent.kt @@ -54,6 +54,7 @@ class SignalBackupAgent : BackupAgent() { items.find { dataInput.key == it.getKey() }?.restoreData(buffer) } DataOutputStream(FileOutputStream(newState.fileDescriptor)).use { it.writeInt(cumulativeHashCode()) } + Log.i(TAG, "Android Backup Service complete.") } private fun cumulativeHashCode(): Int { diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt new file mode 100644 index 0000000000..bda906d2a8 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/ArchivedAttachment.kt @@ -0,0 +1,90 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.attachments + +import android.net.Uri +import android.os.Parcel +import org.signal.core.util.Base64 +import org.thoughtcrime.securesms.blurhash.BlurHash +import org.thoughtcrime.securesms.database.AttachmentTable + +class ArchivedAttachment : Attachment { + + @JvmField + val archiveCdn: Int + + @JvmField + val archiveMediaName: String + + @JvmField + val archiveMediaId: String + + constructor( + contentType: String?, + size: Long, + cdn: Int, + key: ByteArray, + cdnKey: String?, + archiveCdn: Int?, + archiveMediaName: String, + archiveMediaId: String, + digest: ByteArray, + incrementalMac: ByteArray?, + incrementalMacChunkSize: Int?, + width: Int?, + height: Int?, + caption: String?, + blurHash: String?, + voiceNote: Boolean, + borderless: Boolean, + gif: Boolean, + quote: Boolean + ) : super( + contentType = contentType ?: "", + quote = quote, + transferState = AttachmentTable.TRANSFER_NEEDS_RESTORE, + size = size, + fileName = null, + cdn = Cdn.fromCdnNumber(cdn), + remoteLocation = cdnKey, + remoteKey = Base64.encodeWithoutPadding(key), + remoteDigest = digest, + incrementalDigest = incrementalMac, + fastPreflightId = null, + voiceNote = voiceNote, + borderless = borderless, + videoGif = gif, + width = width ?: 0, + height = height ?: 0, + incrementalMacChunkSize = incrementalMacChunkSize ?: 0, + uploadTimestamp = 0, + caption = caption, + stickerLocator = null, + blurHash = BlurHash.parseOrNull(blurHash), + audioHash = null, + transformProperties = null + ) { + this.archiveCdn = archiveCdn ?: Cdn.CDN_3.cdnNumber + this.archiveMediaName = archiveMediaName + this.archiveMediaId = archiveMediaId + } + + constructor(parcel: Parcel) : super(parcel) { + archiveCdn = parcel.readInt() + archiveMediaName = parcel.readString()!! + archiveMediaId = parcel.readString()!! + } + + override fun writeToParcel(dest: Parcel, flags: Int) { + super.writeToParcel(dest, flags) + dest.writeInt(archiveCdn) + dest.writeString(archiveMediaName) + dest.writeString(archiveMediaId) + } + + override val uri: Uri? = null + override val publicUri: Uri? = null +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.kt index 0330e91e6c..8d88953e76 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.kt @@ -29,7 +29,7 @@ abstract class Attachment( @JvmField val fileName: String?, @JvmField - val cdnNumber: Int, + val cdn: Cdn, @JvmField val remoteLocation: String?, @JvmField @@ -76,7 +76,7 @@ abstract class Attachment( transferState = parcel.readInt(), size = parcel.readLong(), fileName = parcel.readString(), - cdnNumber = parcel.readInt(), + cdn = Cdn.deserialize(parcel.readInt()), remoteLocation = parcel.readString(), remoteKey = parcel.readString(), remoteDigest = ParcelUtil.readByteArray(parcel), @@ -103,7 +103,7 @@ abstract class Attachment( dest.writeInt(transferState) dest.writeLong(size) dest.writeString(fileName) - dest.writeInt(cdnNumber) + dest.writeInt(cdn.serialize()) dest.writeString(remoteLocation) dest.writeString(remoteKey) ParcelUtil.writeByteArray(dest, remoteDigest) diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentCreator.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentCreator.kt index e70b2b61cf..4a9b2ae5cc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentCreator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentCreator.kt @@ -17,7 +17,8 @@ object AttachmentCreator : Parcelable.Creator { DATABASE(DatabaseAttachment::class.java, "database"), POINTER(PointerAttachment::class.java, "pointer"), TOMBSTONE(TombstoneAttachment::class.java, "tombstone"), - URI(UriAttachment::class.java, "uri") + URI(UriAttachment::class.java, "uri"), + ARCHIVED(ArchivedAttachment::class.java, "archived") } @JvmStatic @@ -34,6 +35,7 @@ object AttachmentCreator : Parcelable.Creator { Subclass.POINTER -> PointerAttachment(source) Subclass.TOMBSTONE -> TombstoneAttachment(source) Subclass.URI -> UriAttachment(source) + Subclass.ARCHIVED -> ArchivedAttachment(source) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentUploadUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentUploadUtil.kt new file mode 100644 index 0000000000..3423a8150a --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/AttachmentUploadUtil.kt @@ -0,0 +1,105 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.attachments + +import android.content.Context +import android.graphics.Bitmap +import android.os.Build +import org.signal.core.util.logging.Log +import org.signal.protos.resumableuploads.ResumableUpload +import org.thoughtcrime.securesms.blurhash.BlurHashEncoder +import org.thoughtcrime.securesms.mms.PartAuthority +import org.thoughtcrime.securesms.util.MediaUtil +import org.whispersystems.signalservice.api.messages.SignalServiceAttachment +import org.whispersystems.signalservice.api.messages.SignalServiceAttachment.ProgressListener +import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentStream +import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec +import java.io.IOException +import java.util.Objects + +/** + * A place collect common attachment upload operations to allow for code reuse. + */ +object AttachmentUploadUtil { + + private val TAG = Log.tag(AttachmentUploadUtil::class.java) + + /** + * Builds a [SignalServiceAttachmentStream] from the provided data, which can then be provided to various upload methods. + */ + @Throws(IOException::class) + fun buildSignalServiceAttachmentStream( + context: Context, + attachment: Attachment, + uploadSpec: ResumableUpload, + cancellationSignal: (() -> Boolean)? = null, + progressListener: ProgressListener? = null + ): SignalServiceAttachmentStream { + val inputStream = PartAuthority.getAttachmentStream(context, attachment.uri!!) + val builder = SignalServiceAttachment.newStreamBuilder() + .withStream(inputStream) + .withContentType(attachment.contentType) + .withLength(attachment.size) + .withFileName(attachment.fileName) + .withVoiceNote(attachment.voiceNote) + .withBorderless(attachment.borderless) + .withGif(attachment.videoGif) + .withFaststart(attachment.transformProperties?.mp4FastStart ?: false) + .withWidth(attachment.width) + .withHeight(attachment.height) + .withUploadTimestamp(System.currentTimeMillis()) + .withCaption(attachment.caption) + .withResumableUploadSpec(ResumableUploadSpec.from(uploadSpec)) + .withCancelationSignal(cancellationSignal) + .withListener(progressListener) + + if (MediaUtil.isImageType(attachment.contentType)) { + builder.withBlurHash(getImageBlurHash(context, attachment)) + } else if (MediaUtil.isVideoType(attachment.contentType)) { + builder.withBlurHash(getVideoBlurHash(context, attachment)) + } + + return builder.build() + } + + @Throws(IOException::class) + private fun getImageBlurHash(context: Context, attachment: Attachment): String? { + if (attachment.blurHash != null) { + return attachment.blurHash!!.hash + } + + if (attachment.uri == null) { + return null + } + + return PartAuthority.getAttachmentStream(context, attachment.uri!!).use { inputStream -> + BlurHashEncoder.encode(inputStream) + } + } + + @Throws(IOException::class) + private fun getVideoBlurHash(context: Context, attachment: Attachment): String? { + if (attachment.blurHash != null) { + return attachment.blurHash.hash + } + + if (Build.VERSION.SDK_INT < 23) { + Log.w(TAG, "Video thumbnails not supported...") + return null + } + + return MediaUtil.getVideoThumbnail(context, Objects.requireNonNull(attachment.uri), 1000)?.let { bitmap -> + val thumb = Bitmap.createScaledBitmap(bitmap, 100, 100, false) + bitmap.recycle() + + Log.i(TAG, "Generated video thumbnail...") + val hash = BlurHashEncoder.encode(thumb) + thumb.recycle() + + hash + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/Cdn.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/Cdn.kt new file mode 100644 index 0000000000..9131944d47 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/Cdn.kt @@ -0,0 +1,53 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.attachments + +import org.signal.core.util.IntSerializer + +/** + * Attachments/media can come from and go to multiple CDN locations depending on when and where + * they were uploaded. This class represents the CDNs where attachments/media can live. + */ +enum class Cdn(private val value: Int) { + S3(-1), + CDN_0(0), + CDN_2(2), + CDN_3(3); + + val cdnNumber: Int + get() { + return when (this) { + S3 -> -1 + CDN_0 -> 0 + CDN_2 -> 2 + CDN_3 -> 3 + } + } + + fun serialize(): Int { + return Serializer.serialize(this) + } + + companion object Serializer : IntSerializer { + override fun serialize(data: Cdn): Int { + return data.value + } + + override fun deserialize(data: Int): Cdn { + return values().first { it.value == data } + } + + fun fromCdnNumber(cdnNumber: Int): Cdn { + return when (cdnNumber) { + -1 -> S3 + 0 -> CDN_0 + 2 -> CDN_2 + 3 -> CDN_3 + else -> throw UnsupportedOperationException() + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt index 1fb11a06e2..1c0f4bfc30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/DatabaseAttachment.kt @@ -25,6 +25,15 @@ class DatabaseAttachment : Attachment { @JvmField val dataHash: String? + @JvmField + val archiveCdn: Int + + @JvmField + val archiveMediaName: String? + + @JvmField + val archiveMediaId: String? + private val hasThumbnail: Boolean val displayOrder: Int @@ -37,7 +46,7 @@ class DatabaseAttachment : Attachment { transferProgress: Int, size: Long, fileName: String?, - cdnNumber: Int, + cdn: Cdn, location: String?, key: String?, digest: ByteArray?, @@ -57,13 +66,16 @@ class DatabaseAttachment : Attachment { transformProperties: TransformProperties?, displayOrder: Int, uploadTimestamp: Long, - dataHash: String? + dataHash: String?, + archiveCdn: Int, + archiveMediaName: String?, + archiveMediaId: String? ) : super( contentType = contentType!!, transferState = transferProgress, size = size, fileName = fileName, - cdnNumber = cdnNumber, + cdn = cdn, remoteLocation = location, remoteKey = key, remoteDigest = digest, @@ -88,6 +100,9 @@ class DatabaseAttachment : Attachment { this.dataHash = dataHash this.hasThumbnail = hasThumbnail this.displayOrder = displayOrder + this.archiveCdn = archiveCdn + this.archiveMediaName = archiveMediaName + this.archiveMediaId = archiveMediaId } constructor(parcel: Parcel) : super(parcel) { @@ -97,6 +112,9 @@ class DatabaseAttachment : Attachment { hasThumbnail = ParcelUtil.readBoolean(parcel) mmsId = parcel.readLong() displayOrder = parcel.readInt() + archiveCdn = parcel.readInt() + archiveMediaName = parcel.readString() + archiveMediaId = parcel.readString() } override fun writeToParcel(dest: Parcel, flags: Int) { @@ -107,6 +125,9 @@ class DatabaseAttachment : Attachment { ParcelUtil.writeBoolean(dest, hasThumbnail) dest.writeLong(mmsId) dest.writeInt(displayOrder) + dest.writeInt(archiveCdn) + dest.writeString(archiveMediaName) + dest.writeString(archiveMediaId) } override val uri: Uri? diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.kt index 66175b0a33..6b988cf75f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.kt @@ -9,7 +9,6 @@ import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.stickers.StickerLocator import org.whispersystems.signalservice.api.InvalidMessageStructureException import org.whispersystems.signalservice.api.messages.SignalServiceAttachment -import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage import org.whispersystems.signalservice.api.util.AttachmentPointerUtil import org.whispersystems.signalservice.internal.push.DataMessage import java.util.Optional @@ -21,7 +20,7 @@ class PointerAttachment : Attachment { transferState: Int, size: Long, fileName: String?, - cdnNumber: Int, + cdn: Cdn, location: String, key: String?, digest: ByteArray?, @@ -42,7 +41,7 @@ class PointerAttachment : Attachment { transferState = transferState, size = size, fileName = fileName, - cdnNumber = cdnNumber, + cdn = cdn, remoteLocation = location, remoteKey = key, remoteDigest = digest, @@ -83,7 +82,7 @@ class PointerAttachment : Attachment { @JvmStatic @JvmOverloads - fun forPointer(pointer: Optional, stickerLocator: StickerLocator? = null, fastPreflightId: String? = null): Optional { + fun forPointer(pointer: Optional, stickerLocator: StickerLocator? = null, fastPreflightId: String? = null, transferState: Int = AttachmentTable.TRANSFER_PROGRESS_PENDING): Optional { if (!pointer.isPresent || !pointer.get().isPointer) { return Optional.empty() } @@ -97,10 +96,10 @@ class PointerAttachment : Attachment { return Optional.of( PointerAttachment( contentType = pointer.get().contentType, - transferState = AttachmentTable.TRANSFER_PROGRESS_PENDING, + transferState = transferState, size = pointer.get().asPointer().size.orElse(0).toLong(), fileName = pointer.get().asPointer().fileName.orElse(null), - cdnNumber = pointer.get().asPointer().cdnNumber, + cdn = Cdn.fromCdnNumber(pointer.get().asPointer().cdnNumber), location = pointer.get().asPointer().remoteId.toString(), key = encodedKey, digest = pointer.get().asPointer().digest.orElse(null), @@ -120,35 +119,6 @@ class PointerAttachment : Attachment { ) } - fun forPointer(pointer: SignalServiceDataMessage.Quote.QuotedAttachment): Optional { - val thumbnail = pointer.thumbnail - - return Optional.of( - PointerAttachment( - contentType = pointer.contentType, - transferState = AttachmentTable.TRANSFER_PROGRESS_PENDING, - size = (if (thumbnail != null) thumbnail.asPointer().size.orElse(0) else 0).toLong(), - fileName = pointer.fileName, - cdnNumber = thumbnail?.asPointer()?.cdnNumber ?: 0, - location = thumbnail?.asPointer()?.remoteId?.toString() ?: "0", - key = if (thumbnail != null && thumbnail.asPointer().key != null) encodeWithPadding(thumbnail.asPointer().key) else null, - digest = thumbnail?.asPointer()?.digest?.orElse(null), - incrementalDigest = thumbnail?.asPointer()?.incrementalDigest?.orElse(null), - incrementalMacChunkSize = thumbnail?.asPointer()?.incrementalMacChunkSize ?: 0, - fastPreflightId = null, - voiceNote = false, - borderless = false, - videoGif = false, - width = thumbnail?.asPointer()?.width ?: 0, - height = thumbnail?.asPointer()?.height ?: 0, - uploadTimestamp = thumbnail?.asPointer()?.uploadTimestamp ?: 0, - caption = thumbnail?.asPointer()?.caption?.orElse(null), - stickerLocator = null, - blurHash = null - ) - ) - } - fun forPointer(quotedAttachment: DataMessage.Quote.QuotedAttachment): Optional { val thumbnail: SignalServiceAttachment? = try { if (quotedAttachment.thumbnail != null) { @@ -166,7 +136,7 @@ class PointerAttachment : Attachment { transferState = AttachmentTable.TRANSFER_PROGRESS_PENDING, size = (if (thumbnail != null) thumbnail.asPointer().size.orElse(0) else 0).toLong(), fileName = quotedAttachment.fileName, - cdnNumber = thumbnail?.asPointer()?.cdnNumber ?: 0, + cdn = Cdn.fromCdnNumber(thumbnail?.asPointer()?.cdnNumber ?: 0), location = thumbnail?.asPointer()?.remoteId?.toString() ?: "0", key = if (thumbnail != null && thumbnail.asPointer().key != null) encodeWithPadding(thumbnail.asPointer().key) else null, digest = thumbnail?.asPointer()?.digest?.orElse(null), diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/TombstoneAttachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/TombstoneAttachment.kt index ef7a371ff0..efbf88b404 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/TombstoneAttachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/TombstoneAttachment.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.attachments import android.net.Uri import android.os.Parcel +import org.thoughtcrime.securesms.blurhash.BlurHash import org.thoughtcrime.securesms.database.AttachmentTable /** @@ -17,7 +18,7 @@ class TombstoneAttachment : Attachment { transferState = AttachmentTable.TRANSFER_PROGRESS_DONE, size = 0, fileName = null, - cdnNumber = 0, + cdn = Cdn.CDN_0, remoteLocation = null, remoteKey = null, remoteDigest = null, @@ -37,6 +38,44 @@ class TombstoneAttachment : Attachment { transformProperties = null ) + constructor( + contentType: String?, + incrementalMac: ByteArray?, + incrementalMacChunkSize: Int?, + width: Int?, + height: Int?, + caption: String?, + blurHash: String?, + voiceNote: Boolean = false, + borderless: Boolean = false, + gif: Boolean = false, + quote: Boolean + ) : super( + contentType = contentType ?: "", + quote = quote, + transferState = AttachmentTable.TRANSFER_PROGRESS_PERMANENT_FAILURE, + size = 0, + fileName = null, + cdn = Cdn.CDN_0, + remoteLocation = null, + remoteKey = null, + remoteDigest = null, + incrementalDigest = incrementalMac, + fastPreflightId = null, + voiceNote = voiceNote, + borderless = borderless, + videoGif = gif, + width = width ?: 0, + height = height ?: 0, + incrementalMacChunkSize = incrementalMacChunkSize ?: 0, + uploadTimestamp = 0, + caption = caption, + stickerLocator = null, + blurHash = BlurHash.parseOrNull(blurHash), + audioHash = null, + transformProperties = null + ) + constructor(parcel: Parcel) : super(parcel) override val uri: Uri? = null diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.kt b/app/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.kt index f158bd367a..39e3f02a18 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.kt @@ -69,7 +69,7 @@ class UriAttachment : Attachment { transferState = transferState, size = size, fileName = fileName, - cdnNumber = 0, + cdn = Cdn.CDN_0, remoteLocation = null, remoteKey = null, remoteDigest = null, diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java index 08f8f179c9..54d9e7fe6f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java @@ -36,6 +36,7 @@ import org.thoughtcrime.securesms.database.OneTimePreKeyTable; import org.thoughtcrime.securesms.database.PendingRetryReceiptTable; import org.thoughtcrime.securesms.database.ReactionTable; +import org.thoughtcrime.securesms.database.RemappedRecordTables; import org.thoughtcrime.securesms.database.SearchTable; import org.thoughtcrime.securesms.database.SenderKeyTable; import org.thoughtcrime.securesms.database.SenderKeySharedTable; @@ -91,7 +92,9 @@ public class FullBackupExporter extends FullBackupBase { SenderKeyTable.TABLE_NAME, SenderKeySharedTable.TABLE_NAME, PendingRetryReceiptTable.TABLE_NAME, - AvatarPickerDatabase.TABLE_NAME + AvatarPickerDatabase.TABLE_NAME, + RemappedRecordTables.Recipients.TABLE_NAME, + RemappedRecordTables.Threads.TABLE_NAME ); public static BackupEvent export(@NonNull Context context, diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java index 0afc5e578f..6cb122097e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupImporter.java @@ -39,6 +39,7 @@ import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.BackupUtil; +import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.SecurePreferenceManager; import org.thoughtcrime.securesms.util.Util; diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/RestoreState.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/RestoreState.kt new file mode 100644 index 0000000000..4b7110748b --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/RestoreState.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup + +import org.signal.core.util.LongSerializer + +enum class RestoreState(val id: Int, val inProgress: Boolean) { + FAILED(-1, false), + NONE(0, false), + PENDING(1, true), + RESTORING_DB(2, true), + RESTORING_MEDIA(3, true); + + companion object { + val serializer: LongSerializer = Serializer() + } + + class Serializer : LongSerializer { + override fun serialize(data: RestoreState): Long { + return data.id.toLong() + } + + override fun deserialize(data: Long): RestoreState { + return when (data.toInt()) { + FAILED.id -> FAILED + PENDING.id -> PENDING + RESTORING_DB.id -> RESTORING_DB + RESTORING_MEDIA.id -> RESTORING_MEDIA + else -> NONE + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt index 38680114eb..8193585d4b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRepository.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023 Signal Messenger, LLC + * Copyright 2024 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ @@ -14,6 +14,8 @@ import org.signal.libsignal.messagebackup.MessageBackup.ValidationResult import org.signal.libsignal.messagebackup.MessageBackupKey import org.signal.libsignal.protocol.ServiceId.Aci import org.signal.libsignal.zkgroup.profiles.ProfileKey +import org.thoughtcrime.securesms.attachments.AttachmentId +import org.thoughtcrime.securesms.attachments.Cdn import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.backup.v2.database.ChatItemImportInserter import org.thoughtcrime.securesms.backup.v2.database.clearAllDataForBackupRestore @@ -35,19 +37,24 @@ import org.thoughtcrime.securesms.jobs.RequestGroupV2InfoJob import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.NetworkResult +import org.whispersystems.signalservice.api.StatusCodeErrorAction import org.whispersystems.signalservice.api.archive.ArchiveGetMediaItemsResponse import org.whispersystems.signalservice.api.archive.ArchiveMediaRequest -import org.whispersystems.signalservice.api.archive.ArchiveMediaResponse import org.whispersystems.signalservice.api.archive.ArchiveServiceCredential -import org.whispersystems.signalservice.api.archive.BatchArchiveMediaResponse import org.whispersystems.signalservice.api.archive.DeleteArchivedMediaRequest +import org.whispersystems.signalservice.api.archive.GetArchiveCdnCredentialsResponse import org.whispersystems.signalservice.api.backup.BackupKey +import org.whispersystems.signalservice.api.backup.MediaName import org.whispersystems.signalservice.api.crypto.AttachmentCipherStreamUtil +import org.whispersystems.signalservice.api.messages.SignalServiceAttachment.ProgressListener import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.internal.crypto.PaddingInputStream +import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec import java.io.ByteArrayOutputStream +import java.io.File import java.io.InputStream +import java.io.OutputStream import kotlin.time.Duration.Companion.milliseconds object BackupRepository { @@ -55,10 +62,15 @@ object BackupRepository { private val TAG = Log.tag(BackupRepository::class.java) private const val VERSION = 1L - fun export(plaintext: Boolean = false): ByteArray { - val eventTimer = EventTimer() + private val resetInitializedStateErrorAction: StatusCodeErrorAction = { error -> + if (error.code == 401) { + Log.i(TAG, "Resetting initialized state due to 401.") + SignalStore.backup().backupsInitialized = false + } + } - val outputStream = ByteArrayOutputStream() + fun export(outputStream: OutputStream, append: (ByteArray) -> Unit, plaintext: Boolean = false) { + val eventTimer = EventTimer() val writer: BackupExportWriter = if (plaintext) { PlainTextBackupWriter(outputStream) } else { @@ -66,11 +78,11 @@ object BackupRepository { key = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey(), aci = SignalStore.account().aci!!, outputStream = outputStream, - append = { mac -> outputStream.write(mac) } + append = append ) } - val exportState = ExportState(System.currentTimeMillis()) + val exportState = ExportState(backupTime = System.currentTimeMillis(), allowMediaBackup = true) writer.use { writer.write( @@ -110,7 +122,11 @@ object BackupRepository { } Log.d(TAG, "export() ${eventTimer.stop().summary}") + } + fun export(plaintext: Boolean = false): ByteArray { + val outputStream = ByteArrayOutputStream() + export(outputStream = outputStream, append = { mac -> outputStream.write(mac) }, plaintext = plaintext) return outputStream.toByteArray() } @@ -124,11 +140,13 @@ object BackupRepository { fun import(length: Long, inputStreamFactory: () -> InputStream, selfData: SelfData, plaintext: Boolean = false) { val eventTimer = EventTimer() + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + val frameReader = if (plaintext) { PlainTextBackupReader(inputStreamFactory()) } else { EncryptedBackupReader( - key = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey(), + key = backupKey, aci = selfData.aci, streamLength = length, dataStream = inputStreamFactory @@ -160,7 +178,7 @@ object BackupRepository { SignalDatabase.recipients.setProfileSharing(selfId, true) eventTimer.emit("setup") - val backupState = BackupState() + val backupState = BackupState(backupKey) val chatItemInserter: ChatItemImportInserter = ChatItemBackupProcessor.beginImport(backupState) for (frame in frameReader) { @@ -215,6 +233,16 @@ object BackupRepository { Log.d(TAG, "import() ${eventTimer.stop().summary}") } + fun listRemoteMediaObjects(limit: Int, cursor: String? = null): NetworkResult { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return initBackupAndFetchAuth(backupKey) + .then { credential -> + api.getArchiveMediaItemsPage(backupKey, credential, limit, cursor) + } + } + /** * Returns an object with details about the remote backup state. */ @@ -222,14 +250,7 @@ object BackupRepository { val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() - return api - .triggerBackupIdReservation(backupKey) - .then { getAuthCredential() } - .then { credential -> - api.setPublicKey(backupKey, credential) - .also { Log.i(TAG, "PublicKeyResult: $it") } - .map { credential } - } + return initBackupAndFetchAuth(backupKey) .then { credential -> api.getBackupInfo(backupKey, credential) .map { it to credential } @@ -256,14 +277,7 @@ object BackupRepository { val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() - return api - .triggerBackupIdReservation(backupKey) - .then { getAuthCredential() } - .then { credential -> - api.setPublicKey(backupKey, credential) - .also { Log.i(TAG, "PublicKeyResult: $it") } - .map { credential } - } + return initBackupAndFetchAuth(backupKey) .then { credential -> api.getMessageBackupUploadForm(backupKey, credential) .also { Log.i(TAG, "UploadFormResult: $it") } @@ -281,6 +295,22 @@ object BackupRepository { .also { Log.i(TAG, "OverallResult: $it") } is NetworkResult.Success } + fun downloadBackupFile(destination: File, listener: ProgressListener? = null): Boolean { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return initBackupAndFetchAuth(backupKey) + .then { credential -> + api.getBackupInfo(backupKey, credential) + } + .then { info -> getCdnReadCredentials(info.cdn ?: Cdn.CDN_3.cdnNumber).map { it.headers to info } } + .map { pair -> + val (cdnCredentials, info) = pair + val messageReceiver = ApplicationDependencies.getSignalServiceMessageReceiver() + messageReceiver.retrieveBackup(info.cdn!!, cdnCredentials, "backups/${info.backupDir}/${info.backupName}", destination, listener) + } is NetworkResult.Success + } + /** * Returns an object with details about the remote backup state. */ @@ -288,60 +318,143 @@ object BackupRepository { val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() - return api - .triggerBackupIdReservation(backupKey) - .then { getAuthCredential() } + return initBackupAndFetchAuth(backupKey) .then { credential -> api.debugGetUploadedMediaItemMetadata(backupKey, credential) } } - fun archiveMedia(attachment: DatabaseAttachment): NetworkResult { + /** + * Retrieves an upload spec that can be used to upload attachment media. + */ + fun getMediaUploadSpec(): NetworkResult { val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() - return api - .triggerBackupIdReservation(backupKey) - .then { getAuthCredential() } + return initBackupAndFetchAuth(backupKey) .then { credential -> - api.archiveAttachmentMedia( - backupKey = backupKey, - serviceCredential = credential, - item = attachment.toArchiveMediaRequest(backupKey) - ) + api.getMediaUploadForm(backupKey, credential) + } + .then { form -> + api.getResumableUploadSpec(form) + } + } + + fun archiveMedia(attachment: DatabaseAttachment): NetworkResult { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return initBackupAndFetchAuth(backupKey) + .then { credential -> + api.setPublicKey(backupKey, credential) + .map { credential } } - .also { Log.i(TAG, "backupMediaResult: $it") } + .then { credential -> + val mediaName = attachment.getMediaName() + val request = attachment.toArchiveMediaRequest(mediaName, backupKey) + api + .archiveAttachmentMedia( + backupKey = backupKey, + serviceCredential = credential, + item = request + ) + .map { Triple(mediaName, request.mediaId, it) } + } + .map { (mediaName, mediaId, response) -> + SignalDatabase.attachments.setArchiveData(attachmentId = attachment.attachmentId, archiveCdn = response.cdn, archiveMediaName = mediaName.name, archiveMediaId = mediaId) + } + .also { Log.i(TAG, "archiveMediaResult: $it") } } - fun archiveMedia(attachments: List): NetworkResult { + fun archiveMedia(databaseAttachments: List): NetworkResult { val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() - return api - .triggerBackupIdReservation(backupKey) - .then { getAuthCredential() } + return initBackupAndFetchAuth(backupKey) .then { credential -> - api.archiveAttachmentMedia( + val requests = mutableListOf() + val mediaIdToAttachmentId = mutableMapOf() + val attachmentIdToMediaName = mutableMapOf() + + databaseAttachments.forEach { + val mediaName = it.getMediaName() + val request = it.toArchiveMediaRequest(mediaName, backupKey) + requests += request + mediaIdToAttachmentId[request.mediaId] = it.attachmentId + attachmentIdToMediaName[it.attachmentId] = mediaName.name + } + + api + .archiveAttachmentMedia( + backupKey = backupKey, + serviceCredential = credential, + items = requests + ) + .map { BatchArchiveMediaResult(it, mediaIdToAttachmentId, attachmentIdToMediaName) } + } + .map { result -> + result + .successfulResponses + .forEach { + val attachmentId = result.mediaIdToAttachmentId(it.mediaId) + val mediaName = result.attachmentIdToMediaName(attachmentId) + SignalDatabase.attachments.setArchiveData(attachmentId = attachmentId, archiveCdn = it.cdn!!, archiveMediaName = mediaName, archiveMediaId = it.mediaId) + } + result + } + .also { Log.i(TAG, "archiveMediaResult: $it") } + } + + fun deleteArchivedMedia(attachments: List): NetworkResult { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + val mediaToDelete = attachments + .filter { it.archiveMediaId != null } + .map { + DeleteArchivedMediaRequest.ArchivedMediaObject( + cdn = it.archiveCdn, + mediaId = it.archiveMediaId!! + ) + } + + if (mediaToDelete.isEmpty()) { + Log.i(TAG, "No media to delete, quick success") + return NetworkResult.Success(Unit) + } + + return initBackupAndFetchAuth(backupKey) + .then { credential -> + api.deleteArchivedMedia( backupKey = backupKey, serviceCredential = credential, - items = attachments.map { it.toArchiveMediaRequest(backupKey) } + mediaToDelete = mediaToDelete ) } - .also { Log.i(TAG, "backupMediaResult: $it") } + .map { + SignalDatabase.attachments.clearArchiveData(attachments.map { it.attachmentId }) + } + .also { Log.i(TAG, "deleteArchivedMediaResult: $it") } } - fun deleteArchivedMedia(attachments: List): NetworkResult { + fun deleteAbandonedMediaObjects(mediaObjects: Collection): NetworkResult { val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() - val mediaToDelete = attachments.map { - DeleteArchivedMediaRequest.ArchivedMediaObject( - cdn = 3, // TODO [cody] store and reuse backup cdn returned from copy/move call - mediaId = backupKey.deriveMediaId(Base64.decode(it.dataHash!!)).toString() - ) + val mediaToDelete = mediaObjects + .map { + DeleteArchivedMediaRequest.ArchivedMediaObject( + cdn = it.cdn, + mediaId = it.mediaId + ) + } + + if (mediaToDelete.isEmpty()) { + Log.i(TAG, "No media to delete, quick success") + return NetworkResult.Success(Unit) } - return getAuthCredential() + return initBackupAndFetchAuth(backupKey) .then { credential -> api.deleteArchivedMedia( backupKey = backupKey, @@ -349,7 +462,123 @@ object BackupRepository { mediaToDelete = mediaToDelete ) } - .also { Log.i(TAG, "deleteBackupMediaResult: $it") } + .also { Log.i(TAG, "deleteAbandonedMediaObjectsResult: $it") } + } + + fun debugDeleteAllArchivedMedia(): NetworkResult { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return debugGetArchivedMediaState() + .then { archivedMedia -> + val mediaToDelete = archivedMedia + .map { + DeleteArchivedMediaRequest.ArchivedMediaObject( + cdn = it.cdn, + mediaId = it.mediaId + ) + } + + if (mediaToDelete.isEmpty()) { + Log.i(TAG, "No media to delete, quick success") + NetworkResult.Success(Unit) + } else { + getAuthCredential() + .then { credential -> + api.deleteArchivedMedia( + backupKey = backupKey, + serviceCredential = credential, + mediaToDelete = mediaToDelete + ) + } + } + } + .map { + SignalDatabase.attachments.clearAllArchiveData() + } + .also { Log.i(TAG, "debugDeleteAllArchivedMediaResult: $it") } + } + + /** + * Retrieve credentials for reading from the backup cdn. + */ + fun getCdnReadCredentials(cdnNumber: Int): NetworkResult { + val cached = SignalStore.backup().cdnReadCredentials + if (cached != null) { + return NetworkResult.Success(cached) + } + + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return initBackupAndFetchAuth(backupKey) + .then { credential -> + api.getCdnReadCredentials( + cdnNumber = cdnNumber, + backupKey = backupKey, + serviceCredential = credential + ) + } + .also { + if (it is NetworkResult.Success) { + SignalStore.backup().cdnReadCredentials = it.result + } + } + .also { Log.i(TAG, "getCdnReadCredentialsResult: $it") } + } + + /** + * Retrieves backupDir and mediaDir, preferring cached value if available. + * + * These will only ever change if the backup expires. + */ + fun getCdnBackupDirectories(): NetworkResult { + val cachedBackupDirectory = SignalStore.backup().cachedBackupDirectory + val cachedBackupMediaDirectory = SignalStore.backup().cachedBackupMediaDirectory + + if (cachedBackupDirectory != null && cachedBackupMediaDirectory != null) { + return NetworkResult.Success( + BackupDirectories( + backupDir = cachedBackupDirectory, + mediaDir = cachedBackupMediaDirectory + ) + ) + } + + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + return initBackupAndFetchAuth(backupKey) + .then { credential -> + api.getBackupInfo(backupKey, credential).map { + BackupDirectories(it.backupDir!!, it.mediaDir!!) + } + } + .also { + if (it is NetworkResult.Success) { + SignalStore.backup().cachedBackupDirectory = it.result.backupDir + SignalStore.backup().cachedBackupMediaDirectory = it.result.mediaDir + } + } + } + + /** + * Ensures that the backupId has been reserved and that your public key has been set, while also returning an auth credential. + * Should be the basis of all backup operations. + */ + private fun initBackupAndFetchAuth(backupKey: BackupKey): NetworkResult { + val api = ApplicationDependencies.getSignalServiceAccountManager().archiveApi + + return if (SignalStore.backup().backupsInitialized) { + getAuthCredential().runOnStatusCodeError(resetInitializedStateErrorAction) + } else { + return api + .triggerBackupIdReservation(backupKey) + .then { getAuthCredential() } + .then { credential -> api.setPublicKey(backupKey, credential).map { credential } } + .runIfSuccessful { SignalStore.backup().backupsInitialized = true } + .runOnStatusCodeError(resetInitializedStateErrorAction) + } } /** @@ -380,15 +609,20 @@ object BackupRepository { val profileKey: ProfileKey ) - private fun DatabaseAttachment.toArchiveMediaRequest(backupKey: BackupKey): ArchiveMediaRequest { - val mediaSecrets = backupKey.deriveMediaSecrets(Base64.decode(dataHash!!)) + fun DatabaseAttachment.getMediaName(): MediaName { + return MediaName.fromDigest(remoteDigest!!) + } + + private fun DatabaseAttachment.toArchiveMediaRequest(mediaName: MediaName, backupKey: BackupKey): ArchiveMediaRequest { + val mediaSecrets = backupKey.deriveMediaSecrets(mediaName) + return ArchiveMediaRequest( sourceAttachment = ArchiveMediaRequest.SourceAttachment( - cdn = cdnNumber, + cdn = cdn.cdnNumber, key = remoteLocation!! ), objectLength = AttachmentCipherStreamUtil.getCiphertextLength(PaddingInputStream.getPaddedSize(size)).toInt(), - mediaId = mediaSecrets.id.toString(), + mediaId = mediaSecrets.id.encode(), hmacKey = Base64.encodeWithPadding(mediaSecrets.macKey), encryptionKey = Base64.encodeWithPadding(mediaSecrets.cipherKey), iv = Base64.encodeWithPadding(mediaSecrets.iv) @@ -396,12 +630,16 @@ object BackupRepository { } } -class ExportState(val backupTime: Long) { +data class ArchivedMediaObject(val mediaId: String, val cdn: Int) + +data class BackupDirectories(val backupDir: String, val mediaDir: String) + +class ExportState(val backupTime: Long, val allowMediaBackup: Boolean) { val recipientIds = HashSet() val threadIds = HashSet() } -class BackupState { +class BackupState(val backupKey: BackupKey) { val backupToLocalRecipientId = HashMap() val chatIdToLocalThreadId = HashMap() val chatIdToLocalRecipientId = HashMap() diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRestoreManager.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRestoreManager.kt new file mode 100644 index 0000000000..0a716f3363 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BackupRestoreManager.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2 + +import org.signal.core.util.concurrent.SignalExecutors +import org.thoughtcrime.securesms.attachments.AttachmentId +import org.thoughtcrime.securesms.attachments.DatabaseAttachment +import org.thoughtcrime.securesms.database.AttachmentTable +import org.thoughtcrime.securesms.database.model.MessageRecord +import org.thoughtcrime.securesms.database.model.MmsMessageRecord +import org.thoughtcrime.securesms.jobs.RestoreAttachmentJob + +/** + * Responsible for managing logic around restore prioritization + */ +object BackupRestoreManager { + + private val reprioritizedAttachments: HashSet = HashSet() + + /** + * Raise priority of all attachments for the included message records. + * + * This is so we can make certain attachments get downloaded more quickly + */ + fun prioritizeAttachmentsIfNeeded(messageRecords: List) { + SignalExecutors.BOUNDED.execute { + synchronized(this) { + val restoringAttachments: List = messageRecords + .mapNotNull { (it as? MmsMessageRecord?)?.slideDeck?.slides } + .flatten() + .mapNotNull { it.asAttachment() as? DatabaseAttachment } + .filter { it.transferState == AttachmentTable.TRANSFER_RESTORE_IN_PROGRESS && !reprioritizedAttachments.contains(it.attachmentId) } + .map { it.attachmentId } + + reprioritizedAttachments += restoringAttachments + + if (restoringAttachments.isNotEmpty()) { + RestoreAttachmentJob.modifyPriorities(restoringAttachments.toSet(), 1) + } + } + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BatchArchiveMediaResult.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BatchArchiveMediaResult.kt new file mode 100644 index 0000000000..a8a14b02c9 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/BatchArchiveMediaResult.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2 + +import org.thoughtcrime.securesms.attachments.AttachmentId +import org.whispersystems.signalservice.api.archive.BatchArchiveMediaResponse + +/** + * Result of attempting to batch copy multiple attachments at once with helpers for + * processing the collection of mini-responses. + */ +data class BatchArchiveMediaResult( + private val response: BatchArchiveMediaResponse, + private val mediaIdToAttachmentId: Map, + private val attachmentIdToMediaName: Map +) { + val successfulResponses: Sequence + get() = response + .responses + .asSequence() + .filter { it.status == 200 } + + val sourceNotFoundResponses: Sequence + get() = response + .responses + .asSequence() + .filter { it.status == 410 } + + fun mediaIdToAttachmentId(mediaId: String): AttachmentId { + return mediaIdToAttachmentId[mediaId]!! + } + + fun attachmentIdToMediaName(attachmentId: AttachmentId): String { + return attachmentIdToMediaName[attachmentId]!! + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemExportIterator.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemExportIterator.kt index 6813fce25b..f6646be505 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemExportIterator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemExportIterator.kt @@ -17,7 +17,9 @@ import org.signal.core.util.requireBoolean import org.signal.core.util.requireInt import org.signal.core.util.requireLong import org.signal.core.util.requireString +import org.thoughtcrime.securesms.attachments.Cdn import org.thoughtcrime.securesms.attachments.DatabaseAttachment +import org.thoughtcrime.securesms.backup.v2.BackupRepository.getMediaName import org.thoughtcrime.securesms.backup.v2.proto.CallChatUpdate import org.thoughtcrime.securesms.backup.v2.proto.ChatItem import org.thoughtcrime.securesms.backup.v2.proto.ChatUpdateMessage @@ -36,6 +38,7 @@ import org.thoughtcrime.securesms.backup.v2.proto.SimpleChatUpdate import org.thoughtcrime.securesms.backup.v2.proto.StandardMessage import org.thoughtcrime.securesms.backup.v2.proto.Text import org.thoughtcrime.securesms.backup.v2.proto.ThreadMergeChatUpdate +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.database.GroupReceiptTable import org.thoughtcrime.securesms.database.MessageTable import org.thoughtcrime.securesms.database.MessageTypes @@ -73,7 +76,7 @@ import org.thoughtcrime.securesms.backup.v2.proto.BodyRange as BackupBodyRange * * All of this complexity is hidden from the user -- they just get a normal iterator interface. */ -class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: Int) : Iterator, Closeable { +class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: Int, private val archiveMedia: Boolean) : Iterator, Closeable { companion object { private val TAG = Log.tag(ChatItemExportIterator::class.java) @@ -139,6 +142,7 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: builder.expiresInMs = null } MessageTypes.isProfileChange(record.type) -> { + if (record.body == null) continue builder.updateMessage = ChatUpdateMessage( profileChange = try { val decoded: ByteArray = Base64.decode(record.body!!) @@ -196,6 +200,7 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: } } MessageTypes.isCallLog(record.type) -> { + builder.sms = false val call = calls.getCallByMessageId(record.id) if (call != null) { builder.updateMessage = ChatUpdateMessage(callingMessage = CallChatUpdate(callId = call.callId)) @@ -228,12 +233,23 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: .withoutNulls() .map { obj: UUID? -> ACI.from(obj!!).toByteString() } .toList() + + val localUserJoined: GroupCallChatUpdate.LocalUserJoined = if (groupCallUpdateDetails.localUserJoined) { + GroupCallChatUpdate.LocalUserJoined.JOINED + } else if (groupCallUpdateDetails.endedCallTimestamp == 0L) { + GroupCallChatUpdate.LocalUserJoined.UNKNOWN + } else { + GroupCallChatUpdate.LocalUserJoined.DID_NOT_JOIN + } + builder.updateMessage = ChatUpdateMessage( callingMessage = CallChatUpdate( groupCall = GroupCallChatUpdate( startedCallAci = ACI.from(UuidUtil.parseOrThrow(groupCallUpdateDetails.startedCallUuid)).toByteString(), startedCallTimestamp = groupCallUpdateDetails.startedCallTimestamp, - inCallAcis = joinedMembers + inCallAcis = joinedMembers, + localUserJoined = localUserJoined, + endedCallTimestamp = groupCallUpdateDetails.endedCallTimestamp ) ) ) @@ -354,24 +370,46 @@ class ChatItemExportIterator(private val cursor: Cursor, private val batchSize: } private fun DatabaseAttachment.toBackupAttachment(): MessageAttachment { + val builder = FilePointer.Builder() + builder.contentType = contentType + builder.incrementalMac = incrementalDigest?.toByteString() + builder.incrementalMacChunkSize = incrementalMacChunkSize + builder.fileName = fileName + builder.width = width + builder.height = height + builder.caption = caption + builder.blurHash = blurHash?.hash + + if (remoteKey.isNullOrBlank() || remoteDigest == null || size == 0L) { + builder.invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator() + } else { + if (archiveMedia) { + builder.backupLocator = FilePointer.BackupLocator( + mediaName = archiveMediaName ?: this.getMediaName().toString(), + cdnNumber = if (archiveMediaName != null) archiveCdn else Cdn.CDN_3.cdnNumber, // TODO (clark): Update when new proto with optional cdn is landed + key = decode(remoteKey).toByteString(), + size = this.size.toInt(), + digest = remoteDigest.toByteString() + ) + } else { + if (remoteLocation.isNullOrBlank()) { + builder.invalidAttachmentLocator = FilePointer.InvalidAttachmentLocator() + } else { + builder.attachmentLocator = FilePointer.AttachmentLocator( + cdnKey = this.remoteLocation, + cdnNumber = this.cdn.cdnNumber, + uploadTimestamp = this.uploadTimestamp, + key = decode(remoteKey).toByteString(), + size = this.size.toInt(), + digest = remoteDigest.toByteString() + ) + } + } + } return MessageAttachment( - pointer = FilePointer( - attachmentLocator = FilePointer.AttachmentLocator( - cdnKey = this.remoteLocation ?: "", - cdnNumber = this.cdnNumber, - uploadTimestamp = this.uploadTimestamp - ), - key = if (remoteKey != null) decode(remoteKey).toByteString() else null, - contentType = this.contentType, - size = this.size.toInt(), - incrementalMac = this.incrementalDigest?.toByteString(), - incrementalMacChunkSize = this.incrementalMacChunkSize, - fileName = this.fileName, - width = this.width, - height = this.height, - caption = this.caption, - blurHash = this.blurHash?.hash - ) + pointer = builder.build(), + wasDownloaded = this.transferState == AttachmentTable.TRANSFER_PROGRESS_DONE || this.transferState == AttachmentTable.TRANSFER_NEEDS_RESTORE, + flag = if (voiceNote) MessageAttachment.Flag.VOICE_MESSAGE else if (videoGif) MessageAttachment.Flag.GIF else if (borderless) MessageAttachment.Flag.BORDERLESS else MessageAttachment.Flag.NONE ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt index 8c6df58438..e735f62060 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/ChatItemImportInserter.kt @@ -13,8 +13,11 @@ import org.signal.core.util.logging.Log import org.signal.core.util.orNull import org.signal.core.util.requireLong import org.signal.core.util.toInt +import org.thoughtcrime.securesms.attachments.ArchivedAttachment import org.thoughtcrime.securesms.attachments.Attachment +import org.thoughtcrime.securesms.attachments.Cdn import org.thoughtcrime.securesms.attachments.PointerAttachment +import org.thoughtcrime.securesms.attachments.TombstoneAttachment import org.thoughtcrime.securesms.backup.v2.BackupState import org.thoughtcrime.securesms.backup.v2.proto.BodyRange import org.thoughtcrime.securesms.backup.v2.proto.ChatItem @@ -26,6 +29,7 @@ import org.thoughtcrime.securesms.backup.v2.proto.Reaction import org.thoughtcrime.securesms.backup.v2.proto.SendStatus import org.thoughtcrime.securesms.backup.v2.proto.SimpleChatUpdate import org.thoughtcrime.securesms.backup.v2.proto.StandardMessage +import org.thoughtcrime.securesms.database.AttachmentTable import org.thoughtcrime.securesms.database.CallTable import org.thoughtcrime.securesms.database.GroupReceiptTable import org.thoughtcrime.securesms.database.MessageTable @@ -37,6 +41,7 @@ import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatchSet import org.thoughtcrime.securesms.database.documents.NetworkFailure import org.thoughtcrime.securesms.database.documents.NetworkFailureSet +import org.thoughtcrime.securesms.database.model.GroupCallUpdateDetailsUtil import org.thoughtcrime.securesms.database.model.Mention import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription @@ -48,11 +53,12 @@ import org.thoughtcrime.securesms.mms.QuoteModel import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.JsonUtils +import org.whispersystems.signalservice.api.backup.MediaName import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId -import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.util.UuidUtil +import org.whispersystems.signalservice.internal.push.DataMessage import java.util.Optional /** @@ -96,7 +102,8 @@ class ChatItemImportInserter( MessageTable.SHARED_CONTACTS, MessageTable.LINK_PREVIEWS, MessageTable.MESSAGE_RANGES, - MessageTable.VIEW_ONCE + MessageTable.VIEW_ONCE, + MessageTable.MESSAGE_EXTRAS ) private val REACTION_COLUMNS = arrayOf( @@ -455,6 +462,10 @@ class ChatItemImportInserter( IndividualCallChatUpdate.Type.UNKNOWN -> typeFlags } } + updateMessage.callingMessage.groupCall != null -> { + typeFlags = MessageTypes.GROUP_CALL_TYPE + this.put(MessageTable.BODY, GroupCallUpdateDetailsUtil.createBodyFromBackup(updateMessage.callingMessage.groupCall)) + } } // Calls don't use the incoming/outgoing flags, so we overwrite the flags here this.put(MessageTable.TYPE, typeFlags) @@ -570,12 +581,12 @@ class ChatItemImportInserter( pointer.attachmentLocator.cdnNumber, SignalServiceAttachmentRemoteId.from(pointer.attachmentLocator.cdnKey), contentType, - pointer.key?.toByteArray(), - Optional.ofNullable(pointer.size), + pointer.attachmentLocator.key.toByteArray(), + Optional.ofNullable(pointer.attachmentLocator.size), Optional.empty(), pointer.width ?: 0, pointer.height ?: 0, - Optional.empty(), + Optional.ofNullable(pointer.attachmentLocator.digest.toByteArray()), Optional.ofNullable(pointer.incrementalMac?.toByteArray()), pointer.incrementalMacChunkSize ?: 0, Optional.ofNullable(fileName), @@ -586,14 +597,53 @@ class ChatItemImportInserter( Optional.ofNullable(pointer.blurHash), pointer.attachmentLocator.uploadTimestamp ) - return PointerAttachment.forPointer(Optional.of(signalAttachmentPointer)).orNull() + return PointerAttachment.forPointer( + pointer = Optional.of(signalAttachmentPointer), + transferState = if (wasDownloaded) AttachmentTable.TRANSFER_NEEDS_RESTORE else AttachmentTable.TRANSFER_PROGRESS_PENDING + ).orNull() + } else if (pointer.invalidAttachmentLocator != null) { + return TombstoneAttachment( + contentType = contentType, + incrementalMac = pointer.incrementalMac?.toByteArray(), + incrementalMacChunkSize = pointer.incrementalMacChunkSize, + width = pointer.width, + height = pointer.height, + caption = pointer.caption, + blurHash = pointer.blurHash, + voiceNote = flag == MessageAttachment.Flag.VOICE_MESSAGE, + borderless = flag == MessageAttachment.Flag.BORDERLESS, + gif = flag == MessageAttachment.Flag.GIF, + quote = false + ) + } else if (pointer.backupLocator != null) { + return ArchivedAttachment( + contentType = contentType, + size = pointer.backupLocator.size.toLong(), + cdn = pointer.backupLocator.transitCdnNumber ?: Cdn.CDN_0.cdnNumber, + key = pointer.backupLocator.key.toByteArray(), + cdnKey = pointer.backupLocator.transitCdnKey, + archiveCdn = pointer.backupLocator.cdnNumber, + archiveMediaName = pointer.backupLocator.mediaName, + archiveMediaId = backupState.backupKey.deriveMediaId(MediaName(pointer.backupLocator.mediaName)).encode(), + digest = pointer.backupLocator.digest.toByteArray(), + incrementalMac = pointer.incrementalMac?.toByteArray(), + incrementalMacChunkSize = pointer.incrementalMacChunkSize, + width = pointer.width, + height = pointer.height, + caption = pointer.caption, + blurHash = pointer.blurHash, + voiceNote = flag == MessageAttachment.Flag.VOICE_MESSAGE, + borderless = flag == MessageAttachment.Flag.BORDERLESS, + gif = flag == MessageAttachment.Flag.GIF, + quote = false + ) } return null } private fun Quote.QuotedAttachment.toLocalAttachment(): Attachment? { return thumbnail?.toLocalAttachment(this.contentType, this.fileName) - ?: if (this.contentType == null) null else PointerAttachment.forPointer(SignalServiceDataMessage.Quote.QuotedAttachment(contentType = this.contentType!!, fileName = this.fileName, thumbnail = null)).orNull() + ?: if (this.contentType == null) null else PointerAttachment.forPointer(quotedAttachment = DataMessage.Quote.QuotedAttachment(contentType = this.contentType, fileName = this.fileName, thumbnail = null)).orNull() } private class MessageInsert(val contentValues: ContentValues, val followUp: ((Long) -> Unit)?) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/MessageTableBackupExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/MessageTableBackupExtensions.kt index 775423cdca..f4a6b5cfce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/MessageTableBackupExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/MessageTableBackupExtensions.kt @@ -16,7 +16,7 @@ import java.util.concurrent.TimeUnit private val TAG = Log.tag(MessageTable::class.java) private const val BASE_TYPE = "base_type" -fun MessageTable.getMessagesForBackup(backupTime: Long): ChatItemExportIterator { +fun MessageTable.getMessagesForBackup(backupTime: Long, archiveMedia: Boolean): ChatItemExportIterator { val cursor = readableDatabase .select( MessageTable.ID, @@ -64,7 +64,7 @@ fun MessageTable.getMessagesForBackup(backupTime: Long): ChatItemExportIterator .orderBy("${MessageTable.DATE_RECEIVED} ASC") .run() - return ChatItemExportIterator(cursor, 100) + return ChatItemExportIterator(cursor, 100, archiveMedia) } fun MessageTable.createChatItemInserter(backupState: BackupState): ChatItemImportInserter { diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableBackupExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableBackupExtensions.kt index 9a99d9bb86..3aab49c032 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableBackupExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/database/RecipientTableBackupExtensions.kt @@ -13,6 +13,7 @@ import org.signal.core.util.SqlUtil import org.signal.core.util.deleteAll import org.signal.core.util.logging.Log import org.signal.core.util.nullIfBlank +import org.signal.core.util.requireBlob import org.signal.core.util.requireBoolean import org.signal.core.util.requireInt import org.signal.core.util.requireLong @@ -23,7 +24,16 @@ import org.signal.core.util.toInt import org.signal.core.util.update import org.signal.libsignal.zkgroup.InvalidInputException import org.signal.libsignal.zkgroup.groups.GroupMasterKey +import org.signal.libsignal.zkgroup.groups.GroupSecretParams +import org.signal.storageservice.protos.groups.AccessControl +import org.signal.storageservice.protos.groups.Member +import org.signal.storageservice.protos.groups.local.DecryptedBannedMember import org.signal.storageservice.protos.groups.local.DecryptedGroup +import org.signal.storageservice.protos.groups.local.DecryptedMember +import org.signal.storageservice.protos.groups.local.DecryptedPendingMember +import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember +import org.signal.storageservice.protos.groups.local.DecryptedTimer +import org.signal.storageservice.protos.groups.local.EnabledState import org.thoughtcrime.securesms.backup.v2.BackupState import org.thoughtcrime.securesms.backup.v2.proto.AccountData import org.thoughtcrime.securesms.backup.v2.proto.Contact @@ -37,13 +47,14 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.RecipientExtras import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.groups.GroupId -import org.thoughtcrime.securesms.groups.v2.processing.GroupsV2StateProcessor import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter import org.thoughtcrime.securesms.profiles.ProfileName import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.storage.StorageSyncHelper +import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations +import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.ServiceId.ACI import org.whispersystems.signalservice.api.push.ServiceId.PNI import org.whispersystems.signalservice.api.util.toByteArray @@ -103,7 +114,8 @@ fun RecipientTable.getGroupsForBackup(): BackupGroupIterator { "${RecipientTable.TABLE_NAME}.${RecipientTable.EXTRAS}", "${GroupTable.TABLE_NAME}.${GroupTable.V2_MASTER_KEY}", "${GroupTable.TABLE_NAME}.${GroupTable.SHOW_AS_STORY_STATE}", - "${GroupTable.TABLE_NAME}.${GroupTable.TITLE}" + "${GroupTable.TABLE_NAME}.${GroupTable.TITLE}", + "${GroupTable.TABLE_NAME}.${GroupTable.V2_DECRYPTED_GROUP}" ) .from( """ @@ -219,9 +231,8 @@ private fun RecipientTable.restoreGroupFromBackup(group: Group): RecipientId { val masterKey = GroupMasterKey(group.masterKey.toByteArray()) val groupId = GroupId.v2(masterKey) - val placeholderState = DecryptedGroup.Builder() - .revision(GroupsV2StateProcessor.PLACEHOLDER_REVISION) - .build() + val operations = ApplicationDependencies.getGroupsV2Operations().forGroup(GroupSecretParams.deriveFromMasterKey(masterKey)) + val decryptedState = group.snapshot!!.toDecryptedGroup(operations) val values = ContentValues().apply { put(RecipientTable.GROUP_ID, groupId.toString()) @@ -236,20 +247,148 @@ private fun RecipientTable.restoreGroupFromBackup(group: Group): RecipientId { } val recipientId = writableDatabase.insert(RecipientTable.TABLE_NAME, null, values) - val groupValues = ContentValues().apply { - put(GroupTable.RECIPIENT_ID, recipientId) - put(GroupTable.GROUP_ID, groupId.toString()) - put(GroupTable.TITLE, group.name) - put(GroupTable.V2_MASTER_KEY, masterKey.serialize()) - put(GroupTable.V2_DECRYPTED_GROUP, placeholderState.encode()) - put(GroupTable.V2_REVISION, placeholderState.revision) - put(GroupTable.SHOW_AS_STORY_STATE, group.storySendMode.toGroupShowAsStoryState().code) - } - writableDatabase.insert(GroupTable.TABLE_NAME, null, groupValues) + SignalDatabase.groups.create(masterKey, decryptedState) return RecipientId.from(recipientId) } +private fun Group.AccessControl.AccessRequired.toLocal(): AccessControl.AccessRequired { + return when (this) { + Group.AccessControl.AccessRequired.UNKNOWN -> AccessControl.AccessRequired.UNKNOWN + Group.AccessControl.AccessRequired.ANY -> AccessControl.AccessRequired.ANY + Group.AccessControl.AccessRequired.MEMBER -> AccessControl.AccessRequired.MEMBER + Group.AccessControl.AccessRequired.ADMINISTRATOR -> AccessControl.AccessRequired.ADMINISTRATOR + Group.AccessControl.AccessRequired.UNSATISFIABLE -> AccessControl.AccessRequired.UNSATISFIABLE + } +} + +private fun Group.AccessControl.toLocal(): AccessControl { + return AccessControl(members = this.members.toLocal(), attributes = this.attributes.toLocal(), addFromInviteLink = this.addFromInviteLink.toLocal()) +} + +private fun Group.Member.Role.toLocal(): Member.Role { + return when (this) { + Group.Member.Role.UNKNOWN -> Member.Role.UNKNOWN + Group.Member.Role.DEFAULT -> Member.Role.DEFAULT + Group.Member.Role.ADMINISTRATOR -> Member.Role.ADMINISTRATOR + } +} + +private fun AccessControl.AccessRequired.toSnapshot(): Group.AccessControl.AccessRequired { + return when (this) { + AccessControl.AccessRequired.UNKNOWN -> Group.AccessControl.AccessRequired.UNKNOWN + AccessControl.AccessRequired.ANY -> Group.AccessControl.AccessRequired.ANY + AccessControl.AccessRequired.MEMBER -> Group.AccessControl.AccessRequired.MEMBER + AccessControl.AccessRequired.ADMINISTRATOR -> Group.AccessControl.AccessRequired.ADMINISTRATOR + AccessControl.AccessRequired.UNSATISFIABLE -> Group.AccessControl.AccessRequired.UNSATISFIABLE + } +} + +private fun AccessControl.toSnapshot(): Group.AccessControl { + return Group.AccessControl(members = members.toSnapshot(), attributes = attributes.toSnapshot(), addFromInviteLink = addFromInviteLink.toSnapshot()) +} + +private fun Member.Role.toSnapshot(): Group.Member.Role { + return when (this) { + Member.Role.UNKNOWN -> Group.Member.Role.UNKNOWN + Member.Role.DEFAULT -> Group.Member.Role.DEFAULT + Member.Role.ADMINISTRATOR -> Group.Member.Role.ADMINISTRATOR + } +} + +private fun DecryptedGroup.toSnapshot(): Group.GroupSnapshot { + return Group.GroupSnapshot( + title = title, + avatar = avatar, + disappearingMessagesTimer = disappearingMessagesTimer?.duration ?: 0, + accessControl = accessControl?.toSnapshot(), + version = revision, + members = members.map { it.toSnapshot() }, + membersPendingProfileKey = pendingMembers.map { it.toSnapshot() }, + membersPendingAdminApproval = requestingMembers.map { it.toSnapshot() }, + inviteLinkPassword = inviteLinkPassword, + description = description, + announcements_only = isAnnouncementGroup == EnabledState.ENABLED, + members_banned = bannedMembers.map { it.toSnapshot() } + ) +} + +private fun Group.Member.toLocal(): DecryptedMember { + return DecryptedMember(aciBytes = userId, role = role.toLocal(), profileKey = profileKey, joinedAtRevision = joinedAtVersion) +} + +private fun DecryptedMember.toSnapshot(): Group.Member { + return Group.Member(userId = aciBytes, role = role.toSnapshot(), profileKey = profileKey, joinedAtVersion = joinedAtRevision) +} + +private fun Group.MemberPendingProfileKey.toLocal(operations: GroupsV2Operations.GroupOperations): DecryptedPendingMember { + return DecryptedPendingMember( + serviceIdBytes = member!!.userId, + role = member.role.toLocal(), + addedByAci = addedByUserId, + timestamp = timestamp, + serviceIdCipherText = operations.encryptServiceId(ServiceId.Companion.parseOrNull(member.userId)) + ) +} + +private fun DecryptedPendingMember.toSnapshot(): Group.MemberPendingProfileKey { + return Group.MemberPendingProfileKey( + member = Group.Member( + userId = serviceIdBytes, + role = role.toSnapshot() + ), + addedByUserId = addedByAci, + timestamp = timestamp + ) +} + +private fun Group.MemberPendingAdminApproval.toLocal(): DecryptedRequestingMember { + return DecryptedRequestingMember( + aciBytes = userId, + profileKey = profileKey, + timestamp = timestamp + ) +} + +private fun DecryptedRequestingMember.toSnapshot(): Group.MemberPendingAdminApproval { + return Group.MemberPendingAdminApproval( + userId = aciBytes, + profileKey = profileKey, + timestamp = timestamp + ) +} + +private fun Group.MemberBanned.toLocal(): DecryptedBannedMember { + return DecryptedBannedMember( + serviceIdBytes = userId, + timestamp = timestamp + ) +} + +private fun DecryptedBannedMember.toSnapshot(): Group.MemberBanned { + return Group.MemberBanned( + userId = serviceIdBytes, + timestamp = timestamp + ) +} + +private fun Group.GroupSnapshot.toDecryptedGroup(operations: GroupsV2Operations.GroupOperations): DecryptedGroup { + return DecryptedGroup( + title = title, + avatar = avatar, + disappearingMessagesTimer = DecryptedTimer(duration = disappearingMessagesTimer), + accessControl = accessControl?.toLocal(), + revision = version, + members = members.map { member -> member.toLocal() }, + pendingMembers = membersPendingProfileKey.map { pending -> pending.toLocal(operations) }, + requestingMembers = membersPendingAdminApproval.map { requesting -> requesting.toLocal() }, + inviteLinkPassword = inviteLinkPassword, + description = description, + isAnnouncementGroup = if (announcements_only) EnabledState.ENABLED else EnabledState.DISABLED, + bannedMembers = members_banned.map { it.toLocal() } + ) +} + private fun Contact.toLocalExtras(): RecipientExtras { return RecipientExtras( hideStory = this.hideStory @@ -331,6 +470,8 @@ class BackupGroupIterator(private val cursor: Cursor) : Iterator + SignalDatabase.messages.getMessagesForBackup(exportState.backupTime, exportState.allowMediaBackup).use { chatItems -> for (chatItem in chatItems) { if (exportState.threadIds.contains(chatItem.chatId)) { emitter.emit(Frame(chatItem = chatItem)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupEncryptedOutputStream.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupEncryptedOutputStream.kt deleted file mode 100644 index 5a7c535d13..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/BackupEncryptedOutputStream.kt +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2023 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.thoughtcrime.securesms.backup.v2.stream - -import org.signal.libsignal.protocol.kdf.HKDF -import java.io.FilterOutputStream -import java.io.OutputStream -import javax.crypto.Cipher -import javax.crypto.Mac -import javax.crypto.spec.IvParameterSpec -import javax.crypto.spec.SecretKeySpec - -class BackupEncryptedOutputStream(key: ByteArray, backupId: ByteArray, wrapped: OutputStream) : FilterOutputStream(wrapped) { - - val cipher: Cipher = Cipher.getInstance("AES/CBC/PKCS5Padding") - val mac: Mac = Mac.getInstance("HmacSHA256") - - var finalMac: ByteArray? = null - - init { - if (key.size != 32) { - throw IllegalArgumentException("Key must be 32 bytes!") - } - - if (backupId.size != 16) { - throw IllegalArgumentException("BackupId must be 32 bytes!") - } - - val extendedKey = HKDF.deriveSecrets(key, backupId, "20231003_Signal_Backups_EncryptMessageBackup".toByteArray(), 80) - val macKey = extendedKey.copyOfRange(0, 32) - val cipherKey = extendedKey.copyOfRange(32, 64) - val iv = extendedKey.copyOfRange(64, 80) - - cipher.init(Cipher.ENCRYPT_MODE, SecretKeySpec(cipherKey, "AES"), IvParameterSpec(iv)) - mac.init(SecretKeySpec(macKey, "HmacSHA256")) - } - - override fun write(b: Int) { - throw UnsupportedOperationException() - } - - override fun write(data: ByteArray) { - write(data, 0, data.size) - } - - override fun write(data: ByteArray, off: Int, len: Int) { - cipher.update(data, off, len)?.let { ciphertext -> - mac.update(ciphertext) - super.write(ciphertext) - } - } - - override fun flush() { - cipher.doFinal()?.let { ciphertext -> - mac.update(ciphertext) - super.write(ciphertext) - } - - finalMac = mac.doFinal() - - super.flush() - } - - override fun close() { - flush() - super.close() - } - - fun getMac(): ByteArray { - return finalMac ?: throw IllegalStateException("Mac not yet available! You must call flush() before asking for the mac.") - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReader.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReader.kt index 1c597850b6..7031bca71f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReader.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupReader.kt @@ -41,18 +41,21 @@ class EncryptedBackupReader( val stream: InputStream init { - val keyMaterial = key.deriveSecrets(aci) + val keyMaterial = key.deriveBackupSecrets(aci) + + validateMac(keyMaterial.macKey, streamLength, dataStream()) + + val inputStream = dataStream() + val iv = inputStream.readNBytesOrThrow(16) val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding").apply { - init(Cipher.DECRYPT_MODE, SecretKeySpec(keyMaterial.cipherKey, "AES"), IvParameterSpec(keyMaterial.iv)) + init(Cipher.DECRYPT_MODE, SecretKeySpec(keyMaterial.cipherKey, "AES"), IvParameterSpec(iv)) } - validateMac(keyMaterial.macKey, streamLength, dataStream()) - stream = GZIPInputStream( CipherInputStream( TruncatingInputStream( - wrapped = dataStream(), + wrapped = inputStream, maxBytes = streamLength - MAC_SIZE ), cipher diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupWriter.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupWriter.kt index c8d2ea4de9..fcbb64d904 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupWriter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/EncryptedBackupWriter.kt @@ -9,11 +9,11 @@ import org.signal.core.util.stream.MacOutputStream import org.signal.core.util.writeVarInt32 import org.thoughtcrime.securesms.backup.v2.proto.BackupInfo import org.thoughtcrime.securesms.backup.v2.proto.Frame +import org.thoughtcrime.securesms.util.Util import org.whispersystems.signalservice.api.backup.BackupKey import org.whispersystems.signalservice.api.push.ServiceId.ACI import java.io.IOException import java.io.OutputStream -import java.util.zip.GZIPOutputStream import javax.crypto.Cipher import javax.crypto.CipherOutputStream import javax.crypto.Mac @@ -33,28 +33,29 @@ class EncryptedBackupWriter( private val append: (ByteArray) -> Unit ) : BackupExportWriter { - private val mainStream: GZIPOutputStream + private val mainStream: PaddedGzipOutputStream private val macStream: MacOutputStream init { - val keyMaterial = key.deriveSecrets(aci) + val keyMaterial = key.deriveBackupSecrets(aci) + + val iv: ByteArray = Util.getSecretBytes(16) + outputStream.write(iv) + outputStream.flush() val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding").apply { - init(Cipher.ENCRYPT_MODE, SecretKeySpec(keyMaterial.cipherKey, "AES"), IvParameterSpec(keyMaterial.iv)) + init(Cipher.ENCRYPT_MODE, SecretKeySpec(keyMaterial.cipherKey, "AES"), IvParameterSpec(iv)) } val mac = Mac.getInstance("HmacSHA256").apply { init(SecretKeySpec(keyMaterial.macKey, "HmacSHA256")) + update(iv) } macStream = MacOutputStream(outputStream, mac) + val cipherStream = CipherOutputStream(macStream, cipher) - mainStream = GZIPOutputStream( - CipherOutputStream( - macStream, - cipher - ) - ) + mainStream = PaddedGzipOutputStream(cipherStream) } override fun write(header: BackupInfo) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PaddedGzipOutputStream.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PaddedGzipOutputStream.kt new file mode 100644 index 0000000000..791adc036a --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/stream/PaddedGzipOutputStream.kt @@ -0,0 +1,55 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2.stream + +import org.whispersystems.signalservice.internal.crypto.PaddingInputStream +import java.io.FilterOutputStream +import java.io.OutputStream +import java.util.zip.GZIPOutputStream + +/** + * GZIPs the content of the provided [outputStream], but also adds padding to the end of the stream using the same algorithm as [PaddingInputStream]. + * We do this to fit files into a smaller number of size buckets to avoid fingerprinting. And it turns out that bolting on zeros to the end of a GZIP stream is + * fine, because GZIP is smart enough to ignore it. This means readers of this data don't have to do anything special. + */ +class PaddedGzipOutputStream private constructor(private val outputStream: SizeObservingOutputStream) : GZIPOutputStream(outputStream) { + + constructor(outputStream: OutputStream) : this(SizeObservingOutputStream(outputStream)) + + override fun finish() { + super.finish() + + val totalLength = outputStream.size + val paddedSize: Long = PaddingInputStream.getPaddedSize(totalLength) + val paddingToAdd: Int = (paddedSize - totalLength).toInt() + + outputStream.write(ByteArray(paddingToAdd)) + } + + /** + * We need to know the size of the *compressed* stream to know how much padding to add at the end. + */ + private class SizeObservingOutputStream(val wrapped: OutputStream) : FilterOutputStream(wrapped) { + + var size: Long = 0L + private set + + override fun write(b: Int) { + wrapped.write(b) + size++ + } + + override fun write(b: ByteArray) { + wrapped.write(b) + size += b.size + } + + override fun write(b: ByteArray, off: Int, len: Int) { + wrapped.write(b, off, len) + size += len + } + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertBottomSheet.kt new file mode 100644 index 0000000000..a0bb482a7d --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupAlertBottomSheet.kt @@ -0,0 +1,289 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2.ui + +import android.os.Parcelable +import androidx.annotation.StringRes +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.core.os.BundleCompat +import androidx.core.os.bundleOf +import kotlinx.parcelize.Parcelize +import org.signal.core.ui.BottomSheets +import org.signal.core.ui.Buttons +import org.signal.core.ui.Icons +import org.signal.core.ui.Previews +import org.signal.core.ui.SignalPreview +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment + +/** + * Notifies the user of an issue with their backup. + */ +class BackupAlertBottomSheet : ComposeBottomSheetDialogFragment() { + + companion object { + private const val ARG_ALERT = "alert" + + fun create(backupAlert: BackupAlert): BackupAlertBottomSheet { + return BackupAlertBottomSheet().apply { + arguments = bundleOf(ARG_ALERT to backupAlert) + } + } + } + + private val backupAlert: BackupAlert by lazy(LazyThreadSafetyMode.NONE) { + BundleCompat.getParcelable(requireArguments(), ARG_ALERT, BackupAlert::class.java)!! + } + + @Composable + override fun SheetContent() { + BackupAlertSheetContent( + backupAlert = backupAlert, + onPrimaryActionClick = this::performPrimaryAction, + onSecondaryActionClick = this::performSecondaryAction + ) + } + + @Stable + private fun performPrimaryAction() { + when (backupAlert) { + BackupAlert.GENERIC -> { + // TODO [message-backups] -- Back up now + } + BackupAlert.PAYMENT_PROCESSING -> { + // TODO [message-backups] -- Silence + } + BackupAlert.MEDIA_BACKUPS_ARE_OFF -> { + // TODO [message-backups] -- Download media now + } + BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> { + // TODO [message-backups] -- Download media now + } + } + + dismissAllowingStateLoss() + } + + @Stable + private fun performSecondaryAction() { + when (backupAlert) { + BackupAlert.GENERIC -> { + // TODO [message-backups] - Dismiss and notify later + } + BackupAlert.PAYMENT_PROCESSING -> error("PAYMENT_PROCESSING state does not support a secondary action.") + BackupAlert.MEDIA_BACKUPS_ARE_OFF -> { + // TODO [message-backups] - Silence and remind on last day + } + BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> { + // TODO [message-backups] - Silence forever + } + } + + dismissAllowingStateLoss() + } +} + +@Composable +private fun BackupAlertSheetContent( + backupAlert: BackupAlert, + onPrimaryActionClick: () -> Unit, + onSecondaryActionClick: () -> Unit +) { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter)) + ) { + BottomSheets.Handle() + + Spacer(modifier = Modifier.size(26.dp)) + + val iconColors = rememberBackupsIconColors(backupAlert = backupAlert) + Icons.BrushedForeground( + painter = painterResource(id = R.drawable.symbol_backup_light), // TODO [message-backups] final asset + contentDescription = null, + foregroundBrush = iconColors.foreground, + modifier = Modifier + .size(88.dp) + .background(color = iconColors.background, shape = CircleShape) + .padding(20.dp) + ) + + Text( + text = stringResource(id = rememberTitleResource(backupAlert = backupAlert)), + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(top = 16.dp, bottom = 6.dp) + ) + + when (backupAlert) { + BackupAlert.GENERIC -> GenericBody() + BackupAlert.PAYMENT_PROCESSING -> PaymentProcessingBody() + BackupAlert.MEDIA_BACKUPS_ARE_OFF -> MediaBackupsAreOffBody() + BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> MediaWillBeDeletedTodayBody() + } + + val secondaryActionResource = rememberSecondaryActionResource(backupAlert = backupAlert) + val padBottom = if (secondaryActionResource > 0) 16.dp else 56.dp + + Buttons.LargeTonal( + onClick = onPrimaryActionClick, + modifier = Modifier + .defaultMinSize(minWidth = 220.dp) + .padding(top = 60.dp, bottom = padBottom) + ) { + Text(text = stringResource(id = rememberPrimaryActionResource(backupAlert = backupAlert))) + } + + if (secondaryActionResource > 0) { + TextButton(onClick = onSecondaryActionClick, modifier = Modifier.padding(bottom = 32.dp)) { + Text(text = stringResource(id = secondaryActionResource)) + } + } + } +} + +@Composable +private fun GenericBody() { + Text(text = "TODO") +} + +@Composable +private fun PaymentProcessingBody() { + Text(text = "TODO") +} + +@Composable +private fun MediaBackupsAreOffBody() { + Text(text = "TODO") +} + +@Composable +private fun MediaWillBeDeletedTodayBody() { + Text(text = "TODO") +} + +@Composable +private fun rememberBackupsIconColors(backupAlert: BackupAlert): BackupsIconColors { + return remember(backupAlert) { + when (backupAlert) { + BackupAlert.GENERIC, BackupAlert.PAYMENT_PROCESSING -> BackupsIconColors.Warning + BackupAlert.MEDIA_BACKUPS_ARE_OFF, BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> BackupsIconColors.Error + } + } +} + +@Composable +@StringRes +private fun rememberTitleResource(backupAlert: BackupAlert): Int { + return remember(backupAlert) { + when (backupAlert) { + BackupAlert.GENERIC -> R.string.default_error_msg // TODO [message-backups] -- Finalized copy + BackupAlert.PAYMENT_PROCESSING -> R.string.default_error_msg // TODO [message-backups] -- Finalized copy + BackupAlert.MEDIA_BACKUPS_ARE_OFF -> R.string.default_error_msg // TODO [message-backups] -- Finalized copy + BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> R.string.default_error_msg // TODO [message-backups] -- Finalized copy + } + } +} + +@Composable +private fun rememberPrimaryActionResource(backupAlert: BackupAlert): Int { + return remember(backupAlert) { + when (backupAlert) { + BackupAlert.GENERIC -> android.R.string.ok // TODO [message-backups] -- Finalized copy + BackupAlert.PAYMENT_PROCESSING -> android.R.string.ok // TODO [message-backups] -- Finalized copy + BackupAlert.MEDIA_BACKUPS_ARE_OFF -> android.R.string.ok // TODO [message-backups] -- Finalized copy + BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> android.R.string.ok // TODO [message-backups] -- Finalized copy + } + } +} + +@Composable +private fun rememberSecondaryActionResource(backupAlert: BackupAlert): Int { + return remember(backupAlert) { + when (backupAlert) { + BackupAlert.GENERIC -> android.R.string.cancel // TODO [message-backups] -- Finalized copy + BackupAlert.PAYMENT_PROCESSING -> -1 + BackupAlert.MEDIA_BACKUPS_ARE_OFF -> android.R.string.cancel // TODO [message-backups] -- Finalized copy + BackupAlert.MEDIA_WILL_BE_DELETED_TODAY -> android.R.string.cancel // TODO [message-backups] -- Finalized copy + } + } +} + +@SignalPreview +@Composable +private fun BackupAlertSheetContentPreviewGeneric() { + Previews.BottomSheetPreview { + BackupAlertSheetContent( + backupAlert = BackupAlert.GENERIC, + onPrimaryActionClick = {}, + onSecondaryActionClick = {} + ) + } +} + +@SignalPreview +@Composable +private fun BackupAlertSheetContentPreviewPayment() { + Previews.BottomSheetPreview { + BackupAlertSheetContent( + backupAlert = BackupAlert.PAYMENT_PROCESSING, + onPrimaryActionClick = {}, + onSecondaryActionClick = {} + ) + } +} + +@SignalPreview +@Composable +private fun BackupAlertSheetContentPreviewMedia() { + Previews.BottomSheetPreview { + BackupAlertSheetContent( + backupAlert = BackupAlert.MEDIA_BACKUPS_ARE_OFF, + onPrimaryActionClick = {}, + onSecondaryActionClick = {} + ) + } +} + +@SignalPreview +@Composable +private fun BackupAlertSheetContentPreviewDelete() { + Previews.BottomSheetPreview { + BackupAlertSheetContent( + backupAlert = BackupAlert.MEDIA_WILL_BE_DELETED_TODAY, + onPrimaryActionClick = {}, + onSecondaryActionClick = {} + ) + } +} + +@Parcelize +enum class BackupAlert : Parcelable { + GENERIC, + PAYMENT_PROCESSING, + MEDIA_BACKUPS_ARE_OFF, + MEDIA_WILL_BE_DELETED_TODAY +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupsIconColors.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupsIconColors.kt new file mode 100644 index 0000000000..16e8396066 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/BackupsIconColors.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2.ui + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor + +sealed interface BackupsIconColors { + @get:Composable + val foreground: Brush + + @get:Composable + val background: Color + + object Normal : BackupsIconColors { + override val foreground: Brush + @Composable get() = remember { + Brush.linearGradient( + colors = listOf(Color(0xFF316ED0), Color(0xFF558BE2)), + start = Offset(x = 0f, y = Float.POSITIVE_INFINITY), + end = Offset(x = Float.POSITIVE_INFINITY, y = 0f) + ) + } + + override val background: Color @Composable get() = MaterialTheme.colorScheme.primaryContainer + } + + object Warning : BackupsIconColors { + override val foreground: Brush @Composable get() = SolidColor(Color(0xFFC86600)) + override val background: Color @Composable get() = Color(0xFFF9E4B6) + } + + object Error : BackupsIconColors { + override val foreground: Brush @Composable get() = SolidColor(MaterialTheme.colorScheme.error) + override val background: Color @Composable get() = Color(0xFFFFD9D9) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/restore/RestoreFromBackupFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/restore/RestoreFromBackupFragment.kt index c44e63e45e..f92b2e0b9b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/restore/RestoreFromBackupFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/restore/RestoreFromBackupFragment.kt @@ -32,8 +32,8 @@ import org.signal.core.ui.Buttons import org.signal.core.ui.Previews import org.signal.core.ui.theme.SignalTheme import org.thoughtcrime.securesms.R -import org.thoughtcrime.securesms.backup.v2.ui.MessageBackupsTypeFeature -import org.thoughtcrime.securesms.backup.v2.ui.MessageBackupsTypeFeatureRow +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsTypeFeature +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsTypeFeatureRow import org.thoughtcrime.securesms.compose.ComposeFragment import org.thoughtcrime.securesms.devicetransfer.moreoptions.MoreTransferOrRestoreOptionsMode import org.thoughtcrime.securesms.util.navigation.safeNavigate diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/status/BackupStatus.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/status/BackupStatus.kt new file mode 100644 index 0000000000..023b295a46 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/status/BackupStatus.kt @@ -0,0 +1,217 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2.ui.status + +import android.content.res.Configuration +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.StrokeCap +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import org.signal.core.ui.Buttons +import org.signal.core.ui.Icons +import org.signal.core.ui.Previews +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.backup.v2.ui.BackupsIconColors +import kotlin.math.max +import kotlin.math.min + +private const val NONE = -1 + +/** + * Displays a "heads up" widget containing information about the current + * status of the user's backup. + */ +@Composable +fun BackupStatus( + data: BackupStatusData, + onActionClick: () -> Unit = {} +) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .border(1.dp, color = MaterialTheme.colorScheme.outline.copy(alpha = 0.38f), shape = RoundedCornerShape(12.dp)) + .fillMaxWidth() + .padding(14.dp) + ) { + val foreground: Brush = data.iconColors.foreground + Icons.BrushedForeground( + painter = painterResource(id = data.iconRes), + contentDescription = null, + foregroundBrush = foreground, + modifier = Modifier + .background(color = data.iconColors.background, shape = CircleShape) + .padding(8.dp) + ) + + Column( + modifier = Modifier + .padding(start = 12.dp) + .weight(1f) + ) { + Text( + text = stringResource(id = data.titleRes), + style = MaterialTheme.typography.bodyMedium + ) + + if (data.progress >= 0f) { + LinearProgressIndicator( + progress = data.progress, + strokeCap = StrokeCap.Round, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 6.dp) + ) + } + + if (data.statusRes != NONE) { + Text( + text = stringResource(id = data.statusRes), + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + + if (data.actionRes != NONE) { + Buttons.Small( + onClick = onActionClick, + modifier = Modifier.padding(start = 8.dp) + ) { + Text(text = stringResource(id = data.actionRes)) + } + } + } +} + +@Preview +@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun BackupStatusPreview() { + Previews.Preview { + Column( + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + BackupStatus( + data = BackupStatusData.CouldNotCompleteBackup + ) + + BackupStatus( + data = BackupStatusData.NotEnoughFreeSpace + ) + + BackupStatus( + data = BackupStatusData.RestoringMedia(50, 100) + ) + } + } +} + +/** + * Sealed interface describing status data to display in BackupStatus widget. + * + * TODO [message-requests] - Finalize assets and text + */ +sealed interface BackupStatusData { + + @get:DrawableRes + val iconRes: Int + + @get:StringRes + val titleRes: Int + + val iconColors: BackupsIconColors + + @get:StringRes + val actionRes: Int get() = NONE + + @get:StringRes + val statusRes: Int get() = NONE + + val progress: Float get() = NONE.toFloat() + + /** + * Generic failure + */ + object CouldNotCompleteBackup : BackupStatusData { + override val iconRes: Int = R.drawable.symbol_backup_light + override val titleRes: Int = R.string.default_error_msg + override val iconColors: BackupsIconColors = BackupsIconColors.Warning + } + + /** + * User does not have enough space on their device to complete backup restoration + */ + object NotEnoughFreeSpace : BackupStatusData { + override val iconRes: Int = R.drawable.symbol_backup_light + override val titleRes: Int = R.string.default_error_msg + override val iconColors: BackupsIconColors = BackupsIconColors.Warning + override val actionRes: Int = R.string.registration_activity__skip + } + + /** + * Restoring media, finished, and paused states. + */ + data class RestoringMedia( + val bytesDownloaded: Long, + val bytesTotal: Long, + val status: Status = Status.NONE + ) : BackupStatusData { + override val iconRes: Int = R.drawable.symbol_backup_light + override val iconColors: BackupsIconColors = BackupsIconColors.Normal + + override val titleRes: Int = when (status) { + Status.NONE -> R.string.default_error_msg + Status.LOW_BATTERY -> R.string.default_error_msg + Status.WAITING_FOR_INTERNET -> R.string.default_error_msg + Status.WAITING_FOR_WIFI -> R.string.default_error_msg + Status.FINISHED -> R.string.default_error_msg + } + + override val statusRes: Int = when (status) { + Status.NONE -> R.string.default_error_msg + Status.LOW_BATTERY -> R.string.default_error_msg + Status.WAITING_FOR_INTERNET -> R.string.default_error_msg + Status.WAITING_FOR_WIFI -> R.string.default_error_msg + Status.FINISHED -> R.string.default_error_msg + } + + override val progress: Float = if (bytesTotal > 0) { + min(1f, max(0f, bytesDownloaded.toFloat() / bytesTotal)) + } else { + 0f + } + } + + /** + * Describes the status of an in-progress media download session. + */ + enum class Status { + NONE, + LOW_BATTERY, + WAITING_FOR_INTERNET, + WAITING_FOR_WIFI, + FINISHED + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsCheckoutSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsCheckoutSheet.kt similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsCheckoutSheet.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsCheckoutSheet.kt index 39c1876948..feca2614de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsCheckoutSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsCheckoutSheet.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import android.view.LayoutInflater import android.view.ViewGroup diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsEducationScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsEducationScreen.kt similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsEducationScreen.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsEducationScreen.kt index 53d663150d..66ea3279a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsEducationScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsEducationScreen.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.foundation.Image import androidx.compose.foundation.background diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowActivity.kt similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowActivity.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowActivity.kt index 615dff02a0..9926651d07 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowActivity.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import android.os.Bundle import androidx.activity.compose.setContent diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowRepository.kt similarity index 67% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowRepository.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowRepository.kt index 19e28b439c..791b352f3f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowRepository.kt @@ -3,6 +3,6 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription class MessageBackupsFlowRepository diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowState.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowState.kt similarity index 88% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowState.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowState.kt index 0492cac5d6..369bbe1916 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowState.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.lock.v2.PinKeyboardType diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowViewModel.kt similarity index 96% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowViewModel.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowViewModel.kt index b09ea8299d..7c30d6c560 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsFlowViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFlowViewModel.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFrequency.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFrequency.kt new file mode 100644 index 0000000000..3adb6d9e58 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsFrequency.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.backup.v2.ui.subscription + +/** + * Describes how often a users messages are backed up. + */ +enum class MessageBackupsFrequency { + DAILY, + WEEKLY, + MONTHLY, + NEVER +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsPinConfirmationScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinConfirmationScreen.kt similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsPinConfirmationScreen.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinConfirmationScreen.kt index c0ab92e70d..7468a53880 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsPinConfirmationScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinConfirmationScreen.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsPinEducationScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinEducationScreen.kt similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsPinEducationScreen.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinEducationScreen.kt index c01d280d72..bcf48c5a5d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsPinEducationScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsPinEducationScreen.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Column diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsScreen.kt similarity index 80% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsScreen.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsScreen.kt index 6025778299..994f180ffd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsScreen.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription enum class MessageBackupsScreen { EDUCATION, diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTestRestoreActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTestRestoreActivity.kt similarity index 86% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTestRestoreActivity.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTestRestoreActivity.kt index 853ccb80e7..065af0c3ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTestRestoreActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTestRestoreActivity.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import android.content.Context import android.content.Intent @@ -26,6 +26,7 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -80,6 +81,15 @@ class MessageBackupsTestRestoreActivity : BaseActivity() { .fillMaxSize() .padding(16.dp) ) { + Buttons.LargePrimary( + onClick = this@MessageBackupsTestRestoreActivity::restoreFromServer, + enabled = !state.importState.inProgress + ) { + Text("Restore") + } + + Spacer(modifier = Modifier.height(8.dp)) + Row( verticalAlignment = Alignment.CenterVertically ) { @@ -120,9 +130,20 @@ class MessageBackupsTestRestoreActivity : BaseActivity() { } } } + if (state.importState == MessageBackupsTestRestoreViewModel.ImportState.RESTORED) { + SideEffect { + RegistrationUtil.maybeMarkRegistrationComplete() + ApplicationDependencies.getJobManager().add(ProfileUploadJob()) + startActivity(MainActivity.clearTop(this)) + } + } } } + private fun restoreFromServer() { + viewModel.restore() + } + private fun continueRegistration() { if (Recipient.self().profileName.isEmpty || !AvatarHelper.hasAvatar(this, Recipient.self().id)) { val main = MainActivity.clearTop(this) diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTestRestoreViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTestRestoreViewModel.kt similarity index 67% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTestRestoreViewModel.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTestRestoreViewModel.kt index 5213febed5..66578fea19 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTestRestoreViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTestRestoreViewModel.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.runtime.MutableState import androidx.compose.runtime.State @@ -17,8 +17,13 @@ import io.reactivex.rxjava3.kotlin.subscribeBy import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.libsignal.zkgroup.profiles.ProfileKey import org.thoughtcrime.securesms.backup.v2.BackupRepository +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.jobs.BackupRestoreJob +import org.thoughtcrime.securesms.jobs.BackupRestoreMediaJob +import org.thoughtcrime.securesms.jobs.SyncArchivedMediaJob import org.thoughtcrime.securesms.recipients.Recipient import java.io.InputStream +import kotlin.time.Duration.Companion.seconds class MessageBackupsTestRestoreViewModel : ViewModel() { val disposables = CompositeDisposable() @@ -40,6 +45,23 @@ class MessageBackupsTestRestoreViewModel : ViewModel() { } } + fun restore() { + _state.value = _state.value.copy(importState = ImportState.IN_PROGRESS) + disposables += Single.fromCallable { + ApplicationDependencies + .getJobManager() + .startChain(BackupRestoreJob()) + .then(SyncArchivedMediaJob()) + .then(BackupRestoreMediaJob()) + .enqueueAndBlockUntilCompletion(120.seconds.inWholeMilliseconds) + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeBy { + _state.value = _state.value.copy(importState = ImportState.RESTORED) + } + } + fun onPlaintextToggled() { _state.value = _state.value.copy(plaintext = !_state.value.plaintext) } @@ -54,6 +76,6 @@ class MessageBackupsTestRestoreViewModel : ViewModel() { ) enum class ImportState(val inProgress: Boolean = false) { - NONE, IN_PROGRESS(true) + NONE, IN_PROGRESS(true), RESTORED } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTypeFeature.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTypeFeature.kt similarity index 75% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTypeFeature.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTypeFeature.kt index da608ad624..adf33e4eff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTypeFeature.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTypeFeature.kt @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth @@ -18,6 +18,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp +import org.signal.core.ui.Previews +import org.signal.core.ui.SignalPreview +import org.thoughtcrime.securesms.R /** * Represents a "Feature" included for a specify tier of message backups @@ -53,3 +56,16 @@ fun MessageBackupsTypeFeatureRow( ) } } + +@SignalPreview +@Composable +private fun MessageBackupsTypeFeatureRowPreview() { + Previews.Preview { + MessageBackupsTypeFeatureRow( + messageBackupsTypeFeature = MessageBackupsTypeFeature( + iconResourceId = R.drawable.symbol_edit_24, + label = "Content Label" + ) + ) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTypeSelectionScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTypeSelectionScreen.kt similarity index 98% rename from app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTypeSelectionScreen.kt rename to app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTypeSelectionScreen.kt index 1cee65d231..680b4d048b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/MessageBackupsTypeSelectionScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/v2/ui/subscription/MessageBackupsTypeSelectionScreen.kt @@ -2,7 +2,7 @@ * Copyright 2024 Signal Messenger, LLC * SPDX-License-Identifier: AGPL-3.0-only */ -package org.thoughtcrime.securesms.backup.v2.ui +package org.thoughtcrime.securesms.backup.v2.ui.subscription import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -21,6 +21,7 @@ import androidx.compose.foundation.text.ClickableText import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -269,6 +270,7 @@ private fun formatCostPerMonth(pricePerMonth: FiatMoney): String { } } +@Stable data class MessageBackupsType( val pricePerMonth: FiatMoney, val title: String, diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/links/create/CreateCallLinkBottomSheetDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/links/create/CreateCallLinkBottomSheetDialogFragment.kt index 1be045338f..6d9a9f3a32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/links/create/CreateCallLinkBottomSheetDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/links/create/CreateCallLinkBottomSheetDialogFragment.kt @@ -24,10 +24,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.core.app.ShareCompat @@ -128,19 +127,19 @@ class CreateCallLinkBottomSheetDialogFragment : ComposeBottomSheetDialogFragment Rows.TextRow( text = stringResource(id = R.string.CreateCallLinkBottomSheetDialogFragment__share_link_via_signal), - icon = ImageVector.vectorResource(id = R.drawable.symbol_forward_24), + icon = painterResource(id = R.drawable.symbol_forward_24), onClick = this@CreateCallLinkBottomSheetDialogFragment::onShareViaSignalClicked ) Rows.TextRow( text = stringResource(id = R.string.CreateCallLinkBottomSheetDialogFragment__copy_link), - icon = ImageVector.vectorResource(id = R.drawable.symbol_copy_android_24), + icon = painterResource(id = R.drawable.symbol_copy_android_24), onClick = this@CreateCallLinkBottomSheetDialogFragment::onCopyLinkClicked ) Rows.TextRow( text = stringResource(id = R.string.CreateCallLinkBottomSheetDialogFragment__share_link), - icon = ImageVector.vectorResource(id = R.drawable.symbol_share_android_24), + icon = painterResource(id = R.drawable.symbol_share_android_24), onClick = this@CreateCallLinkBottomSheetDialogFragment::onShareLinkClicked ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/links/create/CreateCallLinkRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/links/create/CreateCallLinkRepository.kt index 1738c944cf..af39062092 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/links/create/CreateCallLinkRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/links/create/CreateCallLinkRepository.kt @@ -10,11 +10,13 @@ import io.reactivex.rxjava3.schedulers.Schedulers import org.thoughtcrime.securesms.database.CallLinkTable import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.jobs.CallLinkUpdateSendJob import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.service.webrtc.links.CallLinkCredentials import org.thoughtcrime.securesms.service.webrtc.links.CreateCallLinkResult import org.thoughtcrime.securesms.service.webrtc.links.SignalCallLinkManager +import org.whispersystems.signalservice.internal.push.SyncMessage /** * Repository for creating new call links. This will delegate to the [SignalCallLinkManager] @@ -44,6 +46,13 @@ class CreateCallLinkRepository( ) ) + ApplicationDependencies.getJobManager().add( + CallLinkUpdateSendJob( + credentials.roomId, + SyncMessage.CallLinkUpdate.Type.UPDATE + ) + ) + EnsureCallLinkCreatedResult.Success( Recipient.resolved( SignalDatabase.recipients.getByCallLinkRoomId(credentials.roomId).get() diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/links/details/CallLinkDetailsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/links/details/CallLinkDetailsFragment.kt index f0689ac88a..023f7b54f8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/links/details/CallLinkDetailsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/links/details/CallLinkDetailsFragment.kt @@ -17,10 +17,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.core.app.ActivityCompat @@ -287,25 +285,25 @@ private fun CallLinkDetails( Rows.TextRow( text = stringResource(id = R.string.CreateCallLinkBottomSheetDialogFragment__share_link_via_signal), - icon = ImageVector.vectorResource(id = R.drawable.symbol_forward_24), + icon = painterResource(id = R.drawable.symbol_forward_24), onClick = callback::onShareLinkViaSignalClicked ) Rows.TextRow( text = stringResource(id = R.string.CreateCallLinkBottomSheetDialogFragment__copy_link), - icon = ImageVector.vectorResource(id = R.drawable.symbol_copy_android_24), + icon = painterResource(id = R.drawable.symbol_copy_android_24), onClick = callback::onCopyClicked ) Rows.TextRow( text = stringResource(id = R.string.CallLinkDetailsFragment__share_link), - icon = ImageVector.vectorResource(id = R.drawable.symbol_link_24), + icon = painterResource(id = R.drawable.symbol_link_24), onClick = callback::onShareClicked ) Rows.TextRow( text = stringResource(id = R.string.CallLinkDetailsFragment__delete_call_link), - icon = ImageVector.vectorResource(id = R.drawable.symbol_trash_24), + icon = painterResource(id = R.drawable.symbol_trash_24), foregroundTint = MaterialTheme.colorScheme.error, onClick = callback::onDeleteClicked ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt index da4557f780..488ce8ed0b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/calls/log/CallLogAdapter.kt @@ -305,7 +305,7 @@ class CallLogAdapter( val color = ContextCompat.getColor( context, - if (call.record.event.isMissedCall()) { + if (call.record.isDisplayedAsMissedCallInUi) { R.color.signal_colorError } else { R.color.signal_colorOnSurfaceVariant @@ -371,11 +371,11 @@ class CallLogAdapter( private fun getCallStateDrawableRes(call: CallTable.Call): Int { return when (call.messageType) { MessageTypes.MISSED_VIDEO_CALL_TYPE, MessageTypes.MISSED_AUDIO_CALL_TYPE -> R.drawable.symbol_missed_incoming_compact_16 - MessageTypes.INCOMING_AUDIO_CALL_TYPE, MessageTypes.INCOMING_VIDEO_CALL_TYPE -> R.drawable.symbol_arrow_downleft_compact_16 + MessageTypes.INCOMING_AUDIO_CALL_TYPE, MessageTypes.INCOMING_VIDEO_CALL_TYPE -> if (call.isDisplayedAsMissedCallInUi) R.drawable.symbol_missed_incoming_compact_16 else R.drawable.symbol_arrow_downleft_compact_16 MessageTypes.OUTGOING_AUDIO_CALL_TYPE, MessageTypes.OUTGOING_VIDEO_CALL_TYPE -> R.drawable.symbol_arrow_upright_compact_16 MessageTypes.GROUP_CALL_TYPE -> when { call.type == CallTable.Type.AD_HOC_CALL -> R.drawable.symbol_link_compact_16 - call.event.isMissedCall() -> R.drawable.symbol_missed_incoming_compact_16 + call.isDisplayedAsMissedCallInUi -> R.drawable.symbol_missed_incoming_compact_16 call.event == CallTable.Event.GENERIC_GROUP_CALL || call.event == CallTable.Event.JOINED -> R.drawable.symbol_group_compact_16 call.direction == CallTable.Direction.INCOMING -> R.drawable.symbol_arrow_downleft_compact_16 call.direction == CallTable.Direction.OUTGOING -> R.drawable.symbol_arrow_upright_compact_16 @@ -389,23 +389,19 @@ class CallLogAdapter( @StringRes private fun getCallStateStringRes(call: CallTable.Call): Int { return when (call.messageType) { - MessageTypes.MISSED_VIDEO_CALL_TYPE, - MessageTypes.MISSED_AUDIO_CALL_TYPE -> if (call.event == CallTable.Event.MISSED) R.string.CallLogAdapter__missed else R.string.CallLogAdapter__missed_notification_profile - MessageTypes.INCOMING_AUDIO_CALL_TYPE -> R.string.CallLogAdapter__incoming - MessageTypes.INCOMING_VIDEO_CALL_TYPE -> R.string.CallLogAdapter__incoming + MessageTypes.MISSED_VIDEO_CALL_TYPE, MessageTypes.MISSED_AUDIO_CALL_TYPE -> if (call.event == CallTable.Event.MISSED) R.string.CallLogAdapter__missed else R.string.CallLogAdapter__missed_notification_profile MessageTypes.OUTGOING_AUDIO_CALL_TYPE -> R.string.CallLogAdapter__outgoing MessageTypes.OUTGOING_VIDEO_CALL_TYPE -> R.string.CallLogAdapter__outgoing MessageTypes.GROUP_CALL_TYPE -> when { call.type == CallTable.Type.AD_HOC_CALL -> R.string.CallLogAdapter__call_link - call.event == CallTable.Event.MISSED -> R.string.CallLogAdapter__missed call.event == CallTable.Event.MISSED_NOTIFICATION_PROFILE -> R.string.CallLogAdapter__missed_notification_profile + call.isDisplayedAsMissedCallInUi -> R.string.CallLogAdapter__missed call.event == CallTable.Event.GENERIC_GROUP_CALL || call.event == CallTable.Event.JOINED -> R.string.CallPreference__group_call call.direction == CallTable.Direction.INCOMING -> R.string.CallLogAdapter__incoming call.direction == CallTable.Direction.OUTGOING -> R.string.CallLogAdapter__outgoing else -> throw AssertionError() } - - else -> error("Unexpected type ${call.messageType}") + else -> if (call.isDisplayedAsMissedCallInUi) R.string.CallLogAdapter__missed else R.string.CallLogAdapter__incoming } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java index 8d73f8eded..80a3ad3e8d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java @@ -57,9 +57,9 @@ public class ComposeText extends EmojiEditText { - private static final char EMOJI_STARTER = ':'; - - private static final Pattern TIME_PATTERN = Pattern.compile("^[0-9]{1,2}:[0-9]{1,2}$"); + private static final char EMOJI_STARTER = ':'; + private static final int MAX_QUERY_LENGTH = 64; + private static final Pattern TIME_PATTERN = Pattern.compile("^[0-9]{1,2}:[0-9]{1,2}$"); private CharSequence hint; private MentionRendererDelegate mentionRendererDelegate; @@ -370,16 +370,16 @@ private boolean changeSelectionForPartialMentions(@NonNull Spanned spanned, int } private void doAfterCursorChange(@NonNull Editable text) { - if (enoughToFilter(text, false)) { - performFiltering(text, false); + if (canFilter(text)) { + performFiltering(text); } else { clearInlineQuery(); } } - private void performFiltering(@NonNull Editable text, boolean keywordEmojiSearch) { + private void performFiltering(@NonNull Editable text) { int end = getSelectionEnd(); - QueryStart queryStart = findQueryStart(text, end, keywordEmojiSearch); + QueryStart queryStart = findQueryStart(text, end); int start = queryStart.index; String query = text.subSequence(start, end).toString(); @@ -387,7 +387,7 @@ private void performFiltering(@NonNull Editable text, boolean keywordEmojiSearch if (queryStart.isMentionQuery) { inlineQueryChangedListener.onQueryChanged(new InlineQuery.Mention(query)); } else { - inlineQueryChangedListener.onQueryChanged(new InlineQuery.Emoji(query, keywordEmojiSearch)); + inlineQueryChangedListener.onQueryChanged(new InlineQuery.Emoji(query)); } } } @@ -398,23 +398,25 @@ private void clearInlineQuery() { } } - private boolean enoughToFilter(@NonNull Editable text, boolean keywordEmojiSearch) { + private boolean canFilter(@NonNull Editable text) { int end = getSelectionEnd(); if (end < 0) { return false; } - return findQueryStart(text, end, keywordEmojiSearch).index != -1; + + QueryStart start = findQueryStart(text, end); + return start.index != -1 && ((end - start.index) <= MAX_QUERY_LENGTH); } public void replaceTextWithMention(@NonNull String displayName, @NonNull RecipientId recipientId) { - replaceText(createReplacementToken(displayName, recipientId), false); + replaceText(createReplacementToken(displayName, recipientId)); } public void replaceText(@NonNull InlineQueryReplacement replacement) { - replaceText(replacement.toCharSequence(getContext()), replacement.isKeywordSearch()); + replaceText(replacement.toCharSequence(getContext())); } - private void replaceText(@NonNull CharSequence replacement, boolean keywordReplacement) { + private void replaceText(@NonNull CharSequence replacement) { Editable text = getText(); if (text == null) { return; @@ -423,7 +425,7 @@ private void replaceText(@NonNull CharSequence replacement, boolean keywordRepla clearComposingText(); int end = getSelectionEnd(); - int start = findQueryStart(text, end, keywordReplacement).index - (keywordReplacement ? 0 : 1); + int start = findQueryStart(text, end).index - 1; text.replace(start, end, ""); text.insert(start, replacement); @@ -444,17 +446,7 @@ private void replaceText(@NonNull CharSequence replacement, boolean keywordRepla return builder; } - private QueryStart findQueryStart(@NonNull CharSequence text, int inputCursorPosition, boolean keywordEmojiSearch) { - if (keywordEmojiSearch) { - int start = findQueryStart(text, inputCursorPosition, ' '); - if (start == -1 && inputCursorPosition != 0) { - start = 0; - } else if (start == inputCursorPosition) { - start = -1; - } - return new QueryStart(start, false); - } - + private QueryStart findQueryStart(@NonNull CharSequence text, int inputCursorPosition) { QueryStart queryStart = new QueryStart(findQueryStart(text, inputCursorPosition, MENTION_STARTER), true); if (queryStart.index < 0) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java index 6202548b5a..b254011987 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java @@ -40,9 +40,15 @@ public void setText(Recipient recipient, @Nullable CharSequence fromString, @Nul } public void setText(Recipient recipient, @Nullable CharSequence fromString, @Nullable CharSequence suffix, boolean asThread) { + setText(recipient, fromString, suffix, asThread, false); + } + + public void setText(Recipient recipient, @Nullable CharSequence fromString, @Nullable CharSequence suffix, boolean asThread, boolean showSelfAsYou) { SpannableStringBuilder builder = new SpannableStringBuilder(); - if (asThread && recipient.isSelf()) { + if (asThread && recipient.isSelf() && showSelfAsYou) { + builder.append(getContext().getString(R.string.Recipient_you)); + } else if (asThread && recipient.isSelf()) { builder.append(getContext().getString(R.string.note_to_self)); } else { builder.append(fromString); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/registration/VerificationCodeView.kt b/app/src/main/java/org/thoughtcrime/securesms/components/registration/VerificationCodeView.kt index 395d2b1a12..9677a38a5c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/registration/VerificationCodeView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/registration/VerificationCodeView.kt @@ -59,7 +59,7 @@ class VerificationCodeView @JvmOverloads constructor(context: Context, attrs: At } } - interface OnCodeEnteredListener { + fun interface OnCodeEnteredListener { fun onCodeComplete(code: String) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt index 27787fdf3e..b5f69d4973 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt @@ -177,7 +177,7 @@ class AppSettingsFragment : DSLSettingsFragment( onClick = { findNavController().safeNavigate(R.id.action_appSettingsFragment_to_chatsSettingsFragment) }, - isEnabled = state.isRegisteredAndUpToDate() + isEnabled = true ) clickPref( diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt index f6fcab0239..f67762179b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsFragment.kt @@ -1,13 +1,16 @@ package org.thoughtcrime.securesms.components.settings.app.chats +import android.content.Intent import androidx.lifecycle.ViewModelProvider import androidx.navigation.Navigation import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsFlowActivity import org.thoughtcrime.securesms.components.settings.DSLConfiguration import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.configure import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.util.FeatureFlags import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter import org.thoughtcrime.securesms.util.navigation.safeNavigate @@ -82,9 +85,23 @@ class ChatsSettingsFragment : DSLSettingsFragment(R.string.preferences_chats__ch sectionHeaderPref(R.string.preferences_chats__backups) + if (FeatureFlags.messageBackups() || state.remoteBackupsEnabled) { + clickPref( + title = DSLSettingsText.from("Signal Backups"), // TODO [message-backups] -- Finalized copy + summary = DSLSettingsText.from(if (state.remoteBackupsEnabled) R.string.arrays__enabled else R.string.arrays__disabled), + onClick = { + if (state.remoteBackupsEnabled) { + Navigation.findNavController(requireView()).safeNavigate(R.id.action_chatsSettingsFragment_to_remoteBackupsSettingsFragment) + } else { + startActivity(Intent(requireContext(), MessageBackupsFlowActivity::class.java)) + } + } + ) + } + clickPref( title = DSLSettingsText.from(R.string.preferences_chats__chat_backups), - summary = DSLSettingsText.from(if (state.chatBackupsEnabled) R.string.arrays__enabled else R.string.arrays__disabled), + summary = DSLSettingsText.from(if (state.localBackupsEnabled) R.string.arrays__enabled else R.string.arrays__disabled), onClick = { Navigation.findNavController(requireView()).safeNavigate(R.id.action_chatsSettingsFragment_to_backupsPreferenceFragment) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt index f47f48d11a..8429a69eb8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsState.kt @@ -6,5 +6,6 @@ data class ChatsSettingsState( val keepMutedChatsArchived: Boolean, val useSystemEmoji: Boolean, val enterKeySends: Boolean, - val chatBackupsEnabled: Boolean + val localBackupsEnabled: Boolean, + val remoteBackupsEnabled: Boolean ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt index d6557edb19..e750449c92 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/ChatsSettingsViewModel.kt @@ -22,7 +22,8 @@ class ChatsSettingsViewModel @JvmOverloads constructor( keepMutedChatsArchived = SignalStore.settings().shouldKeepMutedChatsArchived(), useSystemEmoji = SignalStore.settings().isPreferSystemEmoji, enterKeySends = SignalStore.settings().isEnterKeySends, - chatBackupsEnabled = SignalStore.settings().isBackupEnabled && BackupUtil.canUserAccessBackupDirectory(ApplicationDependencies.getApplication()) + localBackupsEnabled = SignalStore.settings().isBackupEnabled && BackupUtil.canUserAccessBackupDirectory(ApplicationDependencies.getApplication()), + remoteBackupsEnabled = SignalStore.backup().areBackupsEnabled ) ) @@ -62,8 +63,8 @@ class ChatsSettingsViewModel @JvmOverloads constructor( fun refresh() { val backupsEnabled = SignalStore.settings().isBackupEnabled && BackupUtil.canUserAccessBackupDirectory(ApplicationDependencies.getApplication()) - if (store.state.chatBackupsEnabled != backupsEnabled) { - store.update { it.copy(chatBackupsEnabled = backupsEnabled) } + if (store.state.localBackupsEnabled != backupsEnabled) { + store.update { it.copy(localBackupsEnabled = backupsEnabled) } } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsFragment.kt new file mode 100644 index 0000000000..d1c0cd378c --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsFragment.kt @@ -0,0 +1,571 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.chats.backups + +import android.content.Intent +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.AlertDialogDefaults +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.fragment.findNavController +import kotlinx.collections.immutable.persistentListOf +import org.signal.core.ui.Buttons +import org.signal.core.ui.Dialogs +import org.signal.core.ui.Dividers +import org.signal.core.ui.Previews +import org.signal.core.ui.Rows +import org.signal.core.ui.Scaffolds +import org.signal.core.ui.SignalPreview +import org.signal.core.ui.Snackbars +import org.signal.core.ui.Texts +import org.signal.core.util.money.FiatMoney +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsFlowActivity +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsFrequency +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType +import org.thoughtcrime.securesms.compose.ComposeFragment +import org.thoughtcrime.securesms.payments.FiatMoneyUtil +import org.thoughtcrime.securesms.util.DateUtils +import org.thoughtcrime.securesms.util.navigation.safeNavigate +import org.thoughtcrime.securesms.util.viewModel +import java.math.BigDecimal +import java.util.Currency +import java.util.Locale + +/** + * Remote backups settings fragment. + * + * TODO [message-backups] -- All copy in this file is non-final + */ +class RemoteBackupsSettingsFragment : ComposeFragment() { + + private val viewModel by viewModel { + RemoteBackupsSettingsViewModel() + } + + @Composable + override fun FragmentContent() { + val state by viewModel.state + val callbacks = remember { Callbacks() } + + RemoteBackupsSettingsContent( + messageBackupsType = state.messageBackupsType, + lastBackupTimestamp = state.lastBackupTimestamp, + canBackUpUsingCellular = state.canBackUpUsingCellular, + backupsFrequency = state.backupsFrequency, + requestedDialog = state.dialog, + requestedSnackbar = state.snackbar, + contentCallbacks = callbacks + ) + } + + @Stable + private inner class Callbacks : ContentCallbacks { + override fun onNavigationClick() { + findNavController().popBackStack() + } + + override fun onEnableBackupsClick() { + startActivity(Intent(requireContext(), MessageBackupsFlowActivity::class.java)) + } + + override fun onBackUpUsingCellularClick(canUseCellular: Boolean) { + viewModel.setCanBackUpUsingCellular(canUseCellular) + } + + override fun onViewPaymentHistory() { + // TODO [message-backups] Navigate to payment history + } + + override fun onBackupNowClick() { + // TODO [message-backups] Enqueue immediate backup + } + + override fun onTurnOffAndDeleteBackupsClick() { + viewModel.requestDialog(RemoteBackupsSettingsState.Dialog.TURN_OFF_AND_DELETE_BACKUPS) + } + + override fun onChangeBackupFrequencyClick() { + viewModel.requestDialog(RemoteBackupsSettingsState.Dialog.BACKUP_FREQUENCY) + } + + override fun onDialogDismissed() { + viewModel.requestDialog(RemoteBackupsSettingsState.Dialog.NONE) + } + + override fun onSnackbarDismissed() { + viewModel.requestSnackbar(RemoteBackupsSettingsState.Snackbar.NONE) + } + + override fun onSelectBackupsFrequencyChange(newFrequency: MessageBackupsFrequency) { + viewModel.setBackupsFrequency(newFrequency) + } + + override fun onTurnOffAndDeleteBackupsConfirm() { + viewModel.turnOffAndDeleteBackups() + } + + override fun onBackupsTypeClick() { + findNavController().safeNavigate(R.id.action_remoteBackupsSettingsFragment_to_backupsTypeSettingsFragment) + } + } +} + +/** + * Callback interface for RemoteBackupsSettingsContent composable. + */ +private interface ContentCallbacks { + fun onNavigationClick() = Unit + fun onEnableBackupsClick() = Unit + fun onBackupsTypeClick() = Unit + fun onBackUpUsingCellularClick(canUseCellular: Boolean) = Unit + fun onViewPaymentHistory() = Unit + fun onBackupNowClick() = Unit + fun onTurnOffAndDeleteBackupsClick() = Unit + fun onChangeBackupFrequencyClick() = Unit + fun onDialogDismissed() = Unit + fun onSnackbarDismissed() = Unit + fun onSelectBackupsFrequencyChange(newFrequency: MessageBackupsFrequency) = Unit + fun onTurnOffAndDeleteBackupsConfirm() = Unit +} + +@Composable +private fun RemoteBackupsSettingsContent( + messageBackupsType: MessageBackupsType?, + lastBackupTimestamp: Long, + canBackUpUsingCellular: Boolean, + backupsFrequency: MessageBackupsFrequency, + requestedDialog: RemoteBackupsSettingsState.Dialog, + requestedSnackbar: RemoteBackupsSettingsState.Snackbar, + contentCallbacks: ContentCallbacks +) { + val snackbarHostState = remember { + SnackbarHostState() + } + + Scaffolds.Settings( + title = "Signal Backups", + onNavigationClick = contentCallbacks::onNavigationClick, + navigationIconPainter = painterResource(id = R.drawable.symbol_arrow_left_24), + snackbarHost = { + Snackbars.Host(snackbarHostState = snackbarHostState) + } + ) { + LazyColumn( + modifier = Modifier + .padding(it) + ) { + item { + BackupTypeRow( + messageBackupsType = messageBackupsType, + onEnableBackupsClick = contentCallbacks::onEnableBackupsClick, + onChangeBackupsTypeClick = contentCallbacks::onBackupsTypeClick + ) + } + + if (messageBackupsType == null) { + item { + Rows.TextRow( + text = "Payment history", + onClick = contentCallbacks::onViewPaymentHistory + ) + } + } else { + item { + Dividers.Default() + } + + item { + Texts.SectionHeader(text = "Backup Details") + } + + item { + LastBackupRow( + lastBackupTimestamp = lastBackupTimestamp, + onBackupNowClick = {} + ) + } + + item { + Rows.TextRow(text = { + Column { + Text( + text = "Backup size", + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface + ) + Text( + text = "2.3GB", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + }) + } + + item { + Rows.TextRow( + text = { + Column { + Text( + text = "Backup frequency", + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface + ) + Text( + text = getTextForFrequency(backupsFrequency = backupsFrequency), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + }, + onClick = contentCallbacks::onChangeBackupFrequencyClick + ) + } + + item { + Rows.ToggleRow( + checked = canBackUpUsingCellular, + text = "Back up using cellular", + onCheckChanged = contentCallbacks::onBackUpUsingCellularClick + ) + } + + item { + Dividers.Default() + } + + item { + Rows.TextRow( + text = "Turn off and delete backup", + foregroundTint = MaterialTheme.colorScheme.error, + onClick = contentCallbacks::onTurnOffAndDeleteBackupsClick + ) + } + } + } + } + + when (requestedDialog) { + RemoteBackupsSettingsState.Dialog.NONE -> {} + RemoteBackupsSettingsState.Dialog.TURN_OFF_AND_DELETE_BACKUPS -> { + TurnOffAndDeleteBackupsDialog( + onConfirm = contentCallbacks::onTurnOffAndDeleteBackupsConfirm, + onDismiss = contentCallbacks::onDialogDismissed + ) + } + + RemoteBackupsSettingsState.Dialog.BACKUP_FREQUENCY -> { + BackupFrequencyDialog( + selected = backupsFrequency, + onSelected = contentCallbacks::onSelectBackupsFrequencyChange, + onDismiss = contentCallbacks::onDialogDismissed + ) + } + } + + LaunchedEffect(requestedSnackbar) { + when (requestedSnackbar) { + RemoteBackupsSettingsState.Snackbar.NONE -> { + snackbarHostState.currentSnackbarData?.dismiss() + } + + RemoteBackupsSettingsState.Snackbar.BACKUP_DELETED_AND_TURNED_OFF -> { + snackbarHostState.showSnackbar( + "Backup deleted and turned off" + ) + } + + RemoteBackupsSettingsState.Snackbar.BACKUP_TYPE_CHANGED_AND_SUBSCRIPTION_CANCELLED -> { + snackbarHostState.showSnackbar( + "Backup type changed and subscription cancelled" + ) + } + + RemoteBackupsSettingsState.Snackbar.SUBSCRIPTION_CANCELLED -> { + snackbarHostState.showSnackbar( + "Subscription cancelled" + ) + } + + RemoteBackupsSettingsState.Snackbar.DOWNLOAD_COMPLETE -> { + snackbarHostState.showSnackbar( + "Download complete" + ) + } + } + contentCallbacks.onSnackbarDismissed() + } +} + +@Composable +private fun BackupTypeRow( + messageBackupsType: MessageBackupsType?, + onEnableBackupsClick: () -> Unit, + onChangeBackupsTypeClick: () -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable(enabled = messageBackupsType != null, onClick = onChangeBackupsTypeClick) + .padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter)) + .padding(top = 16.dp, bottom = 14.dp) + ) { + Column( + modifier = Modifier.weight(1f) + ) { + Text( + text = "Backup type", + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface + ) + + if (messageBackupsType == null) { + Text( + text = "Backups disabled", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } else { + val localResources = LocalContext.current.resources + val formattedCurrency = remember(messageBackupsType.pricePerMonth) { + FiatMoneyUtil.format(localResources, messageBackupsType.pricePerMonth, FiatMoneyUtil.formatOptions().trimZerosAfterDecimal()) + } + + Text( + text = "${messageBackupsType.title} · $formattedCurrency/month" + ) + } + } + + if (messageBackupsType == null) { + Buttons.Small(onClick = onEnableBackupsClick) { + Text(text = "Enable backups") + } + } + } +} + +@Composable +private fun LastBackupRow( + lastBackupTimestamp: Long, + onBackupNowClick: () -> Unit +) { + Row( + modifier = Modifier + .padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter)) + .padding(top = 16.dp, bottom = 14.dp) + ) { + Column( + modifier = Modifier.weight(1f) + ) { + Text( + text = "Last backup", + style = MaterialTheme.typography.bodyLarge, + color = MaterialTheme.colorScheme.onSurface + ) + + if (lastBackupTimestamp > 0) { + val context = LocalContext.current + + val day = remember(lastBackupTimestamp) { + DateUtils.getDayPrecisionTimeString(context, Locale.getDefault(), lastBackupTimestamp) + } + + val time = remember(lastBackupTimestamp) { + DateUtils.getOnlyTimeString(context, lastBackupTimestamp) + } + + Text( + text = "$day at $time", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } else { + Text( + text = "Never", + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + } + + Buttons.Small(onClick = onBackupNowClick) { + Text(text = "Back up now") + } + } +} + +@Composable +private fun TurnOffAndDeleteBackupsDialog( + onConfirm: () -> Unit, + onDismiss: () -> Unit +) { + Dialogs.SimpleAlertDialog( + title = "Turn off and delete backups?", + body = "You will not be charged again. Your backup will be deleted and no new backups will be created.", + confirm = "Turn off and delete", + dismiss = stringResource(id = android.R.string.cancel), + confirmColor = MaterialTheme.colorScheme.error, + onConfirm = onConfirm, + onDismiss = onDismiss + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun BackupFrequencyDialog( + selected: MessageBackupsFrequency, + onSelected: (MessageBackupsFrequency) -> Unit, + onDismiss: () -> Unit +) { + AlertDialog( + onDismissRequest = onDismiss + ) { + Column( + modifier = Modifier + .background( + color = AlertDialogDefaults.containerColor, + shape = AlertDialogDefaults.shape + ) + .fillMaxWidth() + ) { + Text( + text = "Backup frequency", + style = MaterialTheme.typography.headlineMedium, + modifier = Modifier.padding(24.dp) + ) + + MessageBackupsFrequency.values().forEach { + Rows.RadioRow( + selected = selected == it, + text = getTextForFrequency(backupsFrequency = it), + label = when (it) { + MessageBackupsFrequency.NEVER -> "By tapping \"Back up now\"" + else -> null + }, + modifier = Modifier + .padding(end = 24.dp) + .clickable(onClick = { + onSelected(it) + onDismiss() + }) + ) + } + + Box( + contentAlignment = Alignment.CenterEnd, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 24.dp) + .padding(bottom = 24.dp) + ) { + TextButton(onClick = onDismiss) { + Text(text = stringResource(id = android.R.string.cancel)) + } + } + } + } +} + +@Composable +private fun getTextForFrequency(backupsFrequency: MessageBackupsFrequency): String { + return when (backupsFrequency) { + MessageBackupsFrequency.DAILY -> "Daily" + MessageBackupsFrequency.WEEKLY -> "Weekly" + MessageBackupsFrequency.MONTHLY -> "Monthly" + MessageBackupsFrequency.NEVER -> "Manually back up" + } +} + +@SignalPreview +@Composable +private fun RemoteBackupsSettingsContentPreview() { + Previews.Preview { + RemoteBackupsSettingsContent( + messageBackupsType = null, + lastBackupTimestamp = -1, + canBackUpUsingCellular = false, + backupsFrequency = MessageBackupsFrequency.NEVER, + requestedDialog = RemoteBackupsSettingsState.Dialog.NONE, + requestedSnackbar = RemoteBackupsSettingsState.Snackbar.NONE, + contentCallbacks = object : ContentCallbacks {} + ) + } +} + +@SignalPreview +@Composable +private fun BackupTypeRowPreview() { + Previews.Preview { + BackupTypeRow( + messageBackupsType = MessageBackupsType( + title = "Text + all media", + pricePerMonth = FiatMoney(BigDecimal.valueOf(3L), Currency.getInstance(Locale.US)), + features = persistentListOf() + ), + onChangeBackupsTypeClick = {}, + onEnableBackupsClick = {} + ) + } +} + +@SignalPreview +@Composable +private fun LastBackupRowPreview() { + Previews.Preview { + LastBackupRow( + lastBackupTimestamp = -1, + onBackupNowClick = {} + ) + } +} + +@SignalPreview +@Composable +private fun TurnOffAndDeleteBackupsDialogPreview() { + Previews.Preview { + TurnOffAndDeleteBackupsDialog( + onConfirm = {}, + onDismiss = {} + ) + } +} + +@SignalPreview +@Composable +private fun BackupFrequencyDialogPreview() { + Previews.Preview { + BackupFrequencyDialog( + selected = MessageBackupsFrequency.DAILY, + onSelected = {}, + onDismiss = {} + ) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsState.kt new file mode 100644 index 0000000000..fedf62ab1e --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsState.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.chats.backups + +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsFrequency +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType + +data class RemoteBackupsSettingsState( + val messageBackupsType: MessageBackupsType? = null, + val canBackUpUsingCellular: Boolean = false, + val backupSize: Long = 0, + val backupsFrequency: MessageBackupsFrequency = MessageBackupsFrequency.DAILY, + val lastBackupTimestamp: Long = 0, + val dialog: Dialog = Dialog.NONE, + val snackbar: Snackbar = Snackbar.NONE +) { + enum class Dialog { + NONE, + TURN_OFF_AND_DELETE_BACKUPS, + BACKUP_FREQUENCY + } + + enum class Snackbar { + NONE, + BACKUP_DELETED_AND_TURNED_OFF, + BACKUP_TYPE_CHANGED_AND_SUBSCRIPTION_CANCELLED, + SUBSCRIPTION_CANCELLED, + DOWNLOAD_COMPLETE + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsViewModel.kt new file mode 100644 index 0000000000..d4b6fc4967 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/RemoteBackupsSettingsViewModel.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.chats.backups + +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.ViewModel +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsFrequency + +/** + * ViewModel for state management of RemoteBackupsSettingsFragment + */ +class RemoteBackupsSettingsViewModel : ViewModel() { + private val internalState = mutableStateOf(RemoteBackupsSettingsState()) + + val state: State = internalState + + fun setCanBackUpUsingCellular(canBackUpUsingCellular: Boolean) { + // TODO [message-backups] -- Update via repository? + internalState.value = state.value.copy(canBackUpUsingCellular = canBackUpUsingCellular) + } + + fun setBackupsFrequency(backupsFrequency: MessageBackupsFrequency) { + // TODO [message-backups] -- Update via repository? + internalState.value = state.value.copy(backupsFrequency = backupsFrequency) + } + + fun requestDialog(dialog: RemoteBackupsSettingsState.Dialog) { + internalState.value = state.value.copy(dialog = dialog) + } + + fun requestSnackbar(snackbar: RemoteBackupsSettingsState.Snackbar) { + internalState.value = state.value.copy(snackbar = snackbar) + } + + fun turnOffAndDeleteBackups() { + // TODO [message-backups] -- Delete. + internalState.value = state.value.copy(snackbar = RemoteBackupsSettingsState.Snackbar.BACKUP_DELETED_AND_TURNED_OFF) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsFragment.kt new file mode 100644 index 0000000000..508b7c90d5 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsFragment.kt @@ -0,0 +1,197 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.chats.backups.type + +import android.content.Intent +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.navigation.fragment.findNavController +import kotlinx.collections.immutable.persistentListOf +import org.signal.core.ui.Previews +import org.signal.core.ui.Rows +import org.signal.core.ui.Scaffolds +import org.signal.core.ui.SignalPreview +import org.signal.core.util.money.FiatMoney +//import org.signal.donations.PaymentSourceType +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsFlowActivity +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType +import org.thoughtcrime.securesms.compose.ComposeFragment +import org.thoughtcrime.securesms.payments.FiatMoneyUtil +import org.thoughtcrime.securesms.util.DateUtils +import org.thoughtcrime.securesms.util.viewModel +import java.math.BigDecimal +import java.util.Currency +import java.util.Locale + +/** + * Allows the user to modify their backup plan + */ +class BackupsTypeSettingsFragment : ComposeFragment() { + + private val viewModel: BackupsTypeSettingsViewModel by viewModel { + BackupsTypeSettingsViewModel() + } + + @Composable + override fun FragmentContent() { + val contentCallbacks = remember { + Callbacks() + } + + val state by viewModel.state + + BackupsTypeSettingsContent( + state = state, + contentCallbacks = contentCallbacks + ) + } + + private inner class Callbacks : ContentCallbacks { + override fun onNavigationClick() { + findNavController().popBackStack() + } + + override fun onPaymentHistoryClick() { + // TODO [message-backups] Navigate to payment history + } + + override fun onChangeOrCancelSubscriptionClick() { + startActivity(Intent(requireContext(), MessageBackupsFlowActivity::class.java)) + } + } +} + +private interface ContentCallbacks { + fun onNavigationClick() = Unit + fun onPaymentHistoryClick() = Unit + fun onChangeOrCancelSubscriptionClick() = Unit +} + +@Composable +private fun BackupsTypeSettingsContent( + state: BackupsTypeSettingsState, + contentCallbacks: ContentCallbacks +) { + if (state.backupsType == null) { + return + } + + Scaffolds.Settings( + title = "Backup Type", + onNavigationClick = contentCallbacks::onNavigationClick, + navigationIconPainter = painterResource(id = R.drawable.symbol_arrow_left_24) + ) { + LazyColumn( + modifier = Modifier.padding(it) + ) { + item { + BackupsTypeRow( + backupsType = state.backupsType, + nextRenewalTimestamp = state.nextRenewalTimestamp + ) + } + + item { +// PaymentSourceRow( +// paymentSourceType = state.paymentSourceType +// ) + } + + item { + Rows.TextRow( + text = "Change or cancel subscription", // TODO [message-backups] final copy + onClick = contentCallbacks::onChangeOrCancelSubscriptionClick + ) + } + + item { + Rows.TextRow( + text = "Payment history", // TODO [message-backups] final copy + onClick = contentCallbacks::onPaymentHistoryClick + ) + } + } + } +} + +@Composable +private fun BackupsTypeRow( + backupsType: MessageBackupsType, + nextRenewalTimestamp: Long +) { + val resources = LocalContext.current.resources + val formattedAmount = remember(backupsType.pricePerMonth) { + FiatMoneyUtil.format(resources, backupsType.pricePerMonth, FiatMoneyUtil.formatOptions().trimZerosAfterDecimal()) + } + + val renewal = remember(nextRenewalTimestamp) { + DateUtils.formatDateWithoutDayOfWeek(Locale.getDefault(), nextRenewalTimestamp) + } + + Rows.TextRow(text = { + Column { + Text(text = backupsType.title) + Text( + text = "$formattedAmount/month . Renews $renewal", // TODO [message-backups] final copy + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + }) +} + +//@Composable +//private fun PaymentSourceRow(paymentSourceType: PaymentSourceType) { +// val paymentSourceTextResId = remember(paymentSourceType) { +// when (paymentSourceType) { +// is PaymentSourceType.Stripe.CreditCard -> R.string.BackupsTypeSettingsFragment__credit_or_debit_card +// is PaymentSourceType.Stripe.IDEAL -> R.string.BackupsTypeSettingsFragment__iDEAL +// is PaymentSourceType.Stripe.GooglePay -> R.string.BackupsTypeSettingsFragment__google_pay +// is PaymentSourceType.Stripe.SEPADebit -> R.string.BackupsTypeSettingsFragment__bank_transfer +// is PaymentSourceType.PayPal -> R.string.BackupsTypeSettingsFragment__paypal +// is PaymentSourceType.Unknown -> R.string.BackupsTypeSettingsFragment__unknown +// } +// } +// +// Rows.TextRow(text = { +// Column { +// Text(text = "Payment method") // TOD [message-backups] Final copy +// Text( +// text = stringResource(id = paymentSourceTextResId), +// style = MaterialTheme.typography.bodyMedium, +// color = MaterialTheme.colorScheme.onSurfaceVariant +// ) +// } +// }) +//} + +@SignalPreview +@Composable +private fun BackupsTypeSettingsContentPreview() { + Previews.Preview { + BackupsTypeSettingsContent( + state = BackupsTypeSettingsState( + backupsType = MessageBackupsType( + pricePerMonth = FiatMoney(BigDecimal.valueOf(3), Currency.getInstance("USD")), + title = "Text + all media", + features = persistentListOf() + ) + ), + contentCallbacks = object : ContentCallbacks {} + ) + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsState.kt new file mode 100644 index 0000000000..dbf19f0c67 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsState.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.chats.backups.type + +import androidx.compose.runtime.Stable +//import org.signal.donations.PaymentSourceType +import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType + +@Stable +data class BackupsTypeSettingsState( + val backupsType: MessageBackupsType? = null, +// val paymentSourceType: PaymentSourceType = PaymentSourceType.Unknown, + val nextRenewalTimestamp: Long = 0 +) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsViewModel.kt new file mode 100644 index 0000000000..c8ddcf34ea --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/chats/backups/type/BackupsTypeSettingsViewModel.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.thoughtcrime.securesms.components.settings.app.chats.backups.type + +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.ViewModel + +class BackupsTypeSettingsViewModel : ViewModel() { + private val internalState = mutableStateOf(BackupsTypeSettingsState()) + + val state: State = internalState +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundFragment.kt index b1ece67d5d..78563ed818 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundFragment.kt @@ -29,6 +29,11 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button import androidx.compose.material3.Checkbox import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHostState @@ -37,6 +42,8 @@ import androidx.compose.material3.Switch import androidx.compose.material3.Tab import androidx.compose.material3.TabRow import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -46,10 +53,12 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.fragment.app.viewModels +import androidx.navigation.fragment.findNavController import org.signal.core.ui.Buttons import org.signal.core.ui.Dividers import org.signal.core.ui.Snackbars @@ -57,10 +66,13 @@ import org.signal.core.ui.theme.SignalTheme import org.signal.core.util.bytes import org.signal.core.util.getLength import org.signal.core.util.roundedString +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.components.settings.app.internal.backup.InternalBackupPlaygroundViewModel.BackupState import org.thoughtcrime.securesms.components.settings.app.internal.backup.InternalBackupPlaygroundViewModel.BackupUploadState import org.thoughtcrime.securesms.components.settings.app.internal.backup.InternalBackupPlaygroundViewModel.ScreenState import org.thoughtcrime.securesms.compose.ComposeFragment +import org.thoughtcrime.securesms.keyvalue.SignalStore class InternalBackupPlaygroundFragment : ComposeFragment() { @@ -114,6 +126,8 @@ class InternalBackupPlaygroundFragment : ComposeFragment() { } Tabs( + onBack = { findNavController().popBackStack() }, + onDeleteAllArchivedMedia = { viewModel.deleteAllArchivedMedia() }, mainContent = { Screen( state = state, @@ -149,25 +163,32 @@ class InternalBackupPlaygroundFragment : ComposeFragment() { } validateFileLauncher.launch(intent) - } + }, + onTriggerBackupJobClicked = { viewModel.triggerBackupJob() }, + onRestoreFromRemoteClicked = { viewModel.restoreFromRemote() } ) }, mediaContent = { snackbarHostState -> MediaList( + enabled = SignalStore.backup().canReadWriteToArchiveCdn, state = mediaState, snackbarHostState = snackbarHostState, - backupAttachmentMedia = { viewModel.backupAttachmentMedia(it) }, - deleteBackupAttachmentMedia = { viewModel.deleteBackupAttachmentMedia(it) }, - batchBackupAttachmentMedia = { viewModel.backupAttachmentMedia(it) }, - batchDeleteBackupAttachmentMedia = { viewModel.deleteBackupAttachmentMedia(it) } + archiveAttachmentMedia = { viewModel.archiveAttachmentMedia(it) }, + deleteArchivedMedia = { viewModel.deleteArchivedMedia(it) }, + batchArchiveAttachmentMedia = { viewModel.archiveAttachmentMedia(it) }, + batchDeleteBackupAttachmentMedia = { viewModel.deleteArchivedMedia(it) }, + restoreArchivedMedia = { viewModel.restoreArchivedMedia(it) } ) } ) } } +@OptIn(ExperimentalMaterial3Api::class) @Composable fun Tabs( + onBack: () -> Unit, + onDeleteAllArchivedMedia: () -> Unit, mainContent: @Composable () -> Unit, mediaContent: @Composable (snackbarHostState: SnackbarHostState) -> Unit ) { @@ -179,13 +200,36 @@ fun Tabs( Scaffold( snackbarHost = { Snackbars.Host(snackbarHostState) }, topBar = { - TabRow(selectedTabIndex = tabIndex) { - tabs.forEachIndexed { index, tab -> - Tab( - text = { Text(tab) }, - selected = index == tabIndex, - onClick = { tabIndex = index } - ) + Column { + TopAppBar( + title = { + Text("Backup Playground") + }, + navigationIcon = { + IconButton(onClick = onBack) { + Icon( + painter = painterResource(R.drawable.symbol_arrow_left_24), + tint = MaterialTheme.colorScheme.onSurface, + contentDescription = null + ) + } + }, + actions = { + if (tabIndex == 1 && SignalStore.backup().canReadWriteToArchiveCdn) { + TextButton(onClick = onDeleteAllArchivedMedia) { + Text(text = "Delete All") + } + } + } + ) + TabRow(selectedTabIndex = tabIndex) { + tabs.forEachIndexed { index, tab -> + Tab( + text = { Text(tab) }, + selected = index == tabIndex, + onClick = { tabIndex = index } + ) + } } } } @@ -209,7 +253,9 @@ fun Screen( onSaveToDiskClicked: () -> Unit = {}, onValidateFileClicked: () -> Unit = {}, onUploadToRemoteClicked: () -> Unit = {}, - onCheckRemoteBackupStateClicked: () -> Unit = {} + onCheckRemoteBackupStateClicked: () -> Unit = {}, + onTriggerBackupJobClicked: () -> Unit = {}, + onRestoreFromRemoteClicked: () -> Unit = {} ) { Surface { Column( @@ -239,6 +285,13 @@ fun Screen( Text("Export") } + Buttons.LargePrimary( + onClick = onTriggerBackupJobClicked, + enabled = !state.backupState.inProgress + ) { + Text("Trigger Backup Job") + } + Dividers.Default() Buttons.LargeTonal( @@ -280,6 +333,10 @@ fun Screen( } } + BackupState.BACKUP_JOB_DONE -> { + StateLabel("Backup complete and uploaded") + } + BackupState.IMPORT_IN_PROGRESS -> { StateLabel("Import in progress...") } @@ -324,6 +381,10 @@ fun Screen( Spacer(modifier = Modifier.height(8.dp)) + Buttons.LargePrimary(onClick = onRestoreFromRemoteClicked) { + Text("Restore from remote") + } + when (state.uploadState) { BackupUploadState.NONE -> { StateLabel("") @@ -357,13 +418,24 @@ private fun StateLabel(text: String) { @OptIn(ExperimentalFoundationApi::class) @Composable fun MediaList( + enabled: Boolean, state: InternalBackupPlaygroundViewModel.MediaState, snackbarHostState: SnackbarHostState, - backupAttachmentMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit, - deleteBackupAttachmentMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit, - batchBackupAttachmentMedia: (Set) -> Unit, - batchDeleteBackupAttachmentMedia: (Set) -> Unit + archiveAttachmentMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit, + deleteArchivedMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit, + batchArchiveAttachmentMedia: (Set) -> Unit, + batchDeleteBackupAttachmentMedia: (Set) -> Unit, + restoreArchivedMedia: (InternalBackupPlaygroundViewModel.BackupAttachment) -> Unit ) { + if (!enabled) { + Text( + text = "You do not have read/write to archive cdn enabled via SignalStore.backup()", + modifier = Modifier + .padding(16.dp) + ) + return + } + LaunchedEffect(state.error?.id) { state.error?.let { snackbarHostState.showSnackbar(it.errorText) @@ -384,51 +456,88 @@ fun MediaList( .combinedClickable( onClick = { if (selectionState.selecting) { - selectionState = selectionState.copy(selected = if (selectionState.selected.contains(attachment.mediaId)) selectionState.selected - attachment.mediaId else selectionState.selected + attachment.mediaId) + selectionState = selectionState.copy(selected = if (selectionState.selected.contains(attachment.id)) selectionState.selected - attachment.id else selectionState.selected + attachment.id) } }, onLongClick = { - selectionState = if (selectionState.selecting) MediaMultiSelectState() else MediaMultiSelectState(selecting = true, selected = setOf(attachment.mediaId)) + selectionState = if (selectionState.selecting) MediaMultiSelectState() else MediaMultiSelectState(selecting = true, selected = setOf(attachment.id)) } ) .padding(horizontal = 16.dp, vertical = 8.dp) ) { if (selectionState.selecting) { Checkbox( - checked = selectionState.selected.contains(attachment.mediaId), + checked = selectionState.selected.contains(attachment.id), onCheckedChange = { selected -> - selectionState = selectionState.copy(selected = if (selected) selectionState.selected + attachment.mediaId else selectionState.selected - attachment.mediaId) + selectionState = selectionState.copy(selected = if (selected) selectionState.selected + attachment.id else selectionState.selected - attachment.id) } ) } Column(modifier = Modifier.weight(1f, true)) { - Text(text = "Attachment ${attachment.title}") + Text(text = attachment.title) Text(text = "State: ${attachment.state}") } - if (attachment.state == InternalBackupPlaygroundViewModel.BackupAttachment.State.INIT || - attachment.state == InternalBackupPlaygroundViewModel.BackupAttachment.State.IN_PROGRESS - ) { + if (attachment.state == InternalBackupPlaygroundViewModel.BackupAttachment.State.IN_PROGRESS) { CircularProgressIndicator() } else { Button( enabled = !selectionState.selecting, onClick = { when (attachment.state) { - InternalBackupPlaygroundViewModel.BackupAttachment.State.LOCAL_ONLY -> backupAttachmentMedia(attachment) - InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED -> deleteBackupAttachmentMedia(attachment) + InternalBackupPlaygroundViewModel.BackupAttachment.State.ATTACHMENT_CDN, + InternalBackupPlaygroundViewModel.BackupAttachment.State.LOCAL_ONLY -> archiveAttachmentMedia(attachment) + + InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED_UNDOWNLOADED, + InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED_FINAL -> selectionState = selectionState.copy(expandedOption = attachment.dbAttachment.attachmentId) + else -> throw AssertionError("Unsupported state: ${attachment.state}") } } ) { Text( text = when (attachment.state) { + InternalBackupPlaygroundViewModel.BackupAttachment.State.ATTACHMENT_CDN, InternalBackupPlaygroundViewModel.BackupAttachment.State.LOCAL_ONLY -> "Backup" - InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED -> "Remote Delete" + + InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED_UNDOWNLOADED, + InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED_FINAL -> "Options..." + else -> throw AssertionError("Unsupported state: ${attachment.state}") } ) + + DropdownMenu( + expanded = attachment.dbAttachment.attachmentId == selectionState.expandedOption, + onDismissRequest = { selectionState = selectionState.copy(expandedOption = null) } + ) { + DropdownMenuItem( + text = { Text("Remote Delete") }, + onClick = { + selectionState = selectionState.copy(expandedOption = null) + deleteArchivedMedia(attachment) + } + ) + + DropdownMenuItem( + text = { Text("Pseudo Restore") }, + onClick = { + selectionState = selectionState.copy(expandedOption = null) + restoreArchivedMedia(attachment) + } + ) + + if (attachment.dbAttachment.dataHash != null && attachment.state == InternalBackupPlaygroundViewModel.BackupAttachment.State.UPLOADED_UNDOWNLOADED) { + DropdownMenuItem( + text = { Text("Re-copy with hash") }, + onClick = { + selectionState = selectionState.copy(expandedOption = null) + archiveAttachmentMedia(attachment) + } + ) + } + } } } } @@ -451,7 +560,7 @@ fun MediaList( Text("Cancel") } Button(onClick = { - batchBackupAttachmentMedia(selectionState.selected) + batchArchiveAttachmentMedia(selectionState.selected) selectionState = MediaMultiSelectState() }) { Text("Backup") @@ -469,7 +578,8 @@ fun MediaList( private data class MediaMultiSelectState( val selecting: Boolean = false, - val selected: Set = emptySet() + val selected: Set = emptySet(), + val expandedOption: AttachmentId? = null ) @Preview(name = "Light Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_NO) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt index c785ef55fc..63787909a0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundViewModel.kt @@ -10,30 +10,39 @@ import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.disposables.CompositeDisposable import io.reactivex.rxjava3.kotlin.plusAssign import io.reactivex.rxjava3.kotlin.subscribeBy import io.reactivex.rxjava3.schedulers.Schedulers -import org.signal.core.util.Base64 import org.signal.libsignal.zkgroup.profiles.ProfileKey +import org.thoughtcrime.securesms.attachments.AttachmentId import org.thoughtcrime.securesms.attachments.DatabaseAttachment import org.thoughtcrime.securesms.backup.v2.BackupMetadata import org.thoughtcrime.securesms.backup.v2.BackupRepository +import org.thoughtcrime.securesms.database.MessageType import org.thoughtcrime.securesms.database.SignalDatabase +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.jobs.ArchiveAttachmentJob +import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob +import org.thoughtcrime.securesms.jobs.AttachmentUploadJob +import org.thoughtcrime.securesms.jobs.BackupMessagesJob +import org.thoughtcrime.securesms.jobs.BackupRestoreJob +import org.thoughtcrime.securesms.jobs.BackupRestoreMediaJob +import org.thoughtcrime.securesms.jobs.SyncArchivedMediaJob import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.mms.IncomingMessage import org.thoughtcrime.securesms.recipients.Recipient import org.whispersystems.signalservice.api.NetworkResult -import org.whispersystems.signalservice.api.backup.BackupKey +import org.whispersystems.signalservice.api.backup.MediaName import java.io.ByteArrayInputStream import java.io.InputStream import java.util.UUID -import kotlin.random.Random +import kotlin.time.Duration.Companion.seconds class InternalBackupPlaygroundViewModel : ViewModel() { - private val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() - var backupData: ByteArray? = null val disposables = CompositeDisposable() @@ -57,6 +66,17 @@ class InternalBackupPlaygroundViewModel : ViewModel() { } } + fun triggerBackupJob() { + _state.value = _state.value.copy(backupState = BackupState.EXPORT_IN_PROGRESS) + + disposables += Single.fromCallable { ApplicationDependencies.getJobManager().runSynchronously(BackupMessagesJob(), 120_000) } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeBy { + _state.value = _state.value.copy(backupState = BackupState.BACKUP_JOB_DONE) + } + } + fun import() { backupData?.let { _state.value = _state.value.copy(backupState = BackupState.IMPORT_IN_PROGRESS) @@ -68,7 +88,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() { disposables += Single.fromCallable { BackupRepository.import(it.size.toLong(), { ByteArrayInputStream(it) }, selfData, plaintext = plaintext) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe { nothing -> + .subscribeBy { backupData = null _state.value = _state.value.copy(backupState = BackupState.NONE) } @@ -85,7 +105,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() { disposables += Single.fromCallable { BackupRepository.import(length, inputStreamFactory, selfData, plaintext = plaintext) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe { nothing -> + .subscribeBy { backupData = null _state.value = _state.value.copy(backupState = BackupState.NONE) } @@ -98,7 +118,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() { disposables += Single.fromCallable { BackupRepository.validate(length, inputStreamFactory, selfData) } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe { nothing -> + .subscribeBy { backupData = null _state.value = _state.value.copy(backupState = BackupState.NONE) } @@ -142,47 +162,78 @@ class InternalBackupPlaygroundViewModel : ViewModel() { } } + fun restoreFromRemote() { + _state.value = _state.value.copy(backupState = BackupState.IMPORT_IN_PROGRESS) + + disposables += Single.fromCallable { + ApplicationDependencies + .getJobManager() + .startChain(BackupRestoreJob()) + .then(SyncArchivedMediaJob()) + .then(BackupRestoreMediaJob()) + .enqueueAndBlockUntilCompletion(120.seconds.inWholeMilliseconds) + } + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeBy { + _state.value = _state.value.copy(backupState = BackupState.NONE) + } + } + fun loadMedia() { disposables += Single .fromCallable { SignalDatabase.attachments.debugGetLatestAttachments() } .subscribeOn(Schedulers.io()) .observeOn(Schedulers.single()) .subscribeBy { - _mediaState.set { update(attachments = it.map { a -> BackupAttachment.from(backupKey, a) }) } + _mediaState.set { update(attachments = it.map { a -> BackupAttachment(dbAttachment = a) }) } } + } + fun archiveAttachmentMedia(attachments: Set) { disposables += Single - .fromCallable { BackupRepository.debugGetArchivedMediaState() } + .fromCallable { + val toArchive = mediaState.value + .attachments + .filter { attachments.contains(it.dbAttachment.attachmentId) } + .map { it.dbAttachment } + + BackupRepository.archiveMedia(toArchive) + } .subscribeOn(Schedulers.io()) .observeOn(Schedulers.single()) + .doOnSubscribe { _mediaState.set { update(inProgress = inProgressMediaIds + attachments) } } + .doOnTerminate { _mediaState.set { update(inProgress = inProgressMediaIds - attachments) } } .subscribeBy { result -> when (result) { - is NetworkResult.Success -> _mediaState.set { update(archiveStateLoaded = true, backedUpMediaIds = result.result.map { it.mediaId }.toSet()) } + is NetworkResult.Success -> { + loadMedia() + result + .result + .sourceNotFoundResponses + .forEach { + reUploadAndArchiveMedia(result.result.mediaIdToAttachmentId(it.mediaId)) + } + } else -> _mediaState.set { copy(error = MediaStateError(errorText = "$result")) } } } } - fun backupAttachmentMedia(mediaIds: Set) { - disposables += Single.fromCallable { mediaIds.mapNotNull { mediaState.value.idToAttachment[it]?.dbAttachment }.toList() } - .map { BackupRepository.archiveMedia(it) } + fun archiveAttachmentMedia(attachment: BackupAttachment) { + disposables += Single.fromCallable { BackupRepository.archiveMedia(attachment.dbAttachment) } .subscribeOn(Schedulers.io()) .observeOn(Schedulers.single()) - .doOnSubscribe { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds + mediaIds) } } - .doOnTerminate { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds - mediaIds) } } + .doOnSubscribe { _mediaState.set { update(inProgress = inProgressMediaIds + attachment.dbAttachment.attachmentId) } } + .doOnTerminate { _mediaState.set { update(inProgress = inProgressMediaIds - attachment.dbAttachment.attachmentId) } } .subscribeBy { result -> when (result) { - is NetworkResult.Success -> { - val response = result.result - val successes = response.responses.filter { it.status == 200 } - val failures = response.responses - successes.toSet() - - _mediaState.set { - var updated = update(backedUpMediaIds = backedUpMediaIds + successes.map { it.mediaId }) - if (failures.isNotEmpty()) { - updated = updated.copy(error = MediaStateError(errorText = failures.toString())) - } - updated + is NetworkResult.Success -> loadMedia() + is NetworkResult.StatusCodeError -> { + if (result.code == 410) { + reUploadAndArchiveMedia(attachment.id) + } else { + _mediaState.set { copy(error = MediaStateError(errorText = "$result")) } } } @@ -191,49 +242,107 @@ class InternalBackupPlaygroundViewModel : ViewModel() { } } - fun backupAttachmentMedia(attachment: BackupAttachment) { - disposables += Single.fromCallable { BackupRepository.archiveMedia(attachment.dbAttachment) } + private fun reUploadAndArchiveMedia(attachmentId: AttachmentId) { + disposables += Single + .fromCallable { + ApplicationDependencies + .getJobManager() + .startChain(AttachmentUploadJob(attachmentId)) + .then(ArchiveAttachmentJob(attachmentId)) + .enqueueAndBlockUntilCompletion(15.seconds.inWholeMilliseconds) + } .subscribeOn(Schedulers.io()) .observeOn(Schedulers.single()) - .doOnSubscribe { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds + attachment.mediaId) } } - .doOnTerminate { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds - attachment.mediaId) } } + .doOnSubscribe { _mediaState.set { update(inProgress = inProgressMediaIds + attachmentId) } } + .doOnTerminate { _mediaState.set { update(inProgress = inProgressMediaIds - attachmentId) } } .subscribeBy { - when (it) { - is NetworkResult.Success -> { - _mediaState.set { update(backedUpMediaIds = backedUpMediaIds + attachment.mediaId) } - } - - else -> _mediaState.set { copy(error = MediaStateError(errorText = "$it")) } + if (it.isPresent && it.get().isComplete) { + loadMedia() + } else { + _mediaState.set { copy(error = MediaStateError(errorText = "Reupload slow or failed, try again")) } } } } - fun deleteBackupAttachmentMedia(mediaIds: Set) { - deleteBackupAttachmentMedia(mediaIds.mapNotNull { mediaState.value.idToAttachment[it] }.toList()) + fun deleteArchivedMedia(attachmentIds: Set) { + deleteArchivedMedia(mediaState.value.attachments.filter { attachmentIds.contains(it.dbAttachment.attachmentId) }) } - fun deleteBackupAttachmentMedia(attachment: BackupAttachment) { - deleteBackupAttachmentMedia(listOf(attachment)) + fun deleteArchivedMedia(attachment: BackupAttachment) { + deleteArchivedMedia(listOf(attachment)) } - private fun deleteBackupAttachmentMedia(attachments: List) { - val ids = attachments.map { it.mediaId }.toSet() + private fun deleteArchivedMedia(attachments: List) { + val ids = attachments.map { it.dbAttachment.attachmentId }.toSet() disposables += Single.fromCallable { BackupRepository.deleteArchivedMedia(attachments.map { it.dbAttachment }) } .subscribeOn(Schedulers.io()) .observeOn(Schedulers.single()) - .doOnSubscribe { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds + ids) } } - .doOnTerminate { _mediaState.set { update(inProgressMediaIds = inProgressMediaIds - ids) } } + .doOnSubscribe { _mediaState.set { update(inProgress = inProgressMediaIds + ids) } } + .doOnTerminate { _mediaState.set { update(inProgress = inProgressMediaIds - ids) } } .subscribeBy { when (it) { - is NetworkResult.Success -> { - _mediaState.set { update(backedUpMediaIds = backedUpMediaIds - ids) } - } - + is NetworkResult.Success -> loadMedia() else -> _mediaState.set { copy(error = MediaStateError(errorText = "$it")) } } } } + fun deleteAllArchivedMedia() { + disposables += Single + .fromCallable { BackupRepository.debugDeleteAllArchivedMedia() } + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.single()) + .subscribeBy { result -> + when (result) { + is NetworkResult.Success -> loadMedia() + else -> _mediaState.set { copy(error = MediaStateError(errorText = "$result")) } + } + } + } + + fun restoreArchivedMedia(attachment: BackupAttachment) { + disposables += Completable + .fromCallable { + val recipientId = SignalStore.releaseChannelValues().releaseChannelRecipientId!! + val threadId = SignalDatabase.threads.getOrCreateThreadIdFor(Recipient.resolved(recipientId)) + + val message = IncomingMessage( + type = MessageType.NORMAL, + from = recipientId, + sentTimeMillis = System.currentTimeMillis(), + serverTimeMillis = System.currentTimeMillis(), + receivedTimeMillis = System.currentTimeMillis(), + body = "Restored from Archive!?", + serverGuid = UUID.randomUUID().toString() + ) + + val insertMessage = SignalDatabase.messages.insertMessageInbox(message, threadId).get() + + SignalDatabase.attachments.debugCopyAttachmentForArchiveRestore( + insertMessage.messageId, + attachment.dbAttachment + ) + + val archivedAttachment = SignalDatabase.attachments.getAttachmentsForMessage(insertMessage.messageId).first() + + ApplicationDependencies.getJobManager().add( + AttachmentDownloadJob( + messageId = insertMessage.messageId, + attachmentId = archivedAttachment.attachmentId, + manual = false, + forceArchiveDownload = true + ) + ) + } + .subscribeOn(Schedulers.io()) + .observeOn(Schedulers.single()) + .subscribeBy( + onError = { + _mediaState.set { copy(error = MediaStateError(errorText = "$it")) } + } + ) + } + override fun onCleared() { disposables.clear() } @@ -246,7 +355,7 @@ class InternalBackupPlaygroundViewModel : ViewModel() { ) enum class BackupState(val inProgress: Boolean = false) { - NONE, EXPORT_IN_PROGRESS(true), EXPORT_DONE, IMPORT_IN_PROGRESS(true) + NONE, EXPORT_IN_PROGRESS(true), EXPORT_DONE, BACKUP_JOB_DONE, IMPORT_IN_PROGRESS(true) } enum class BackupUploadState(val inProgress: Boolean = false) { @@ -261,67 +370,59 @@ class InternalBackupPlaygroundViewModel : ViewModel() { } data class MediaState( - val backupStateLoaded: Boolean = false, val attachments: List = emptyList(), - val backedUpMediaIds: Set = emptySet(), - val inProgressMediaIds: Set = emptySet(), + val inProgressMediaIds: Set = emptySet(), val error: MediaStateError? = null ) { - val idToAttachment: Map = attachments.associateBy { it.mediaId } - fun update( - archiveStateLoaded: Boolean = this.backupStateLoaded, attachments: List = this.attachments, - backedUpMediaIds: Set = this.backedUpMediaIds, - inProgressMediaIds: Set = this.inProgressMediaIds + inProgress: Set = this.inProgressMediaIds ): MediaState { - val updatedAttachments = if (archiveStateLoaded) { - attachments.map { - val state = if (inProgressMediaIds.contains(it.mediaId)) { - BackupAttachment.State.IN_PROGRESS - } else if (backedUpMediaIds.contains(it.mediaId)) { - BackupAttachment.State.UPLOADED + val backupKey = SignalStore.svr().getOrCreateMasterKey().deriveBackupKey() + + val updatedAttachments = attachments.map { + val state = if (inProgress.contains(it.dbAttachment.attachmentId)) { + BackupAttachment.State.IN_PROGRESS + } else if (it.dbAttachment.archiveMediaName != null) { + if (it.dbAttachment.remoteDigest != null) { + val mediaId = backupKey.deriveMediaId(MediaName(it.dbAttachment.archiveMediaName)).encode() + if (it.dbAttachment.archiveMediaId == mediaId) { + BackupAttachment.State.UPLOADED_FINAL + } else { + BackupAttachment.State.UPLOADED_UNDOWNLOADED + } } else { - BackupAttachment.State.LOCAL_ONLY + BackupAttachment.State.UPLOADED_UNDOWNLOADED } - - it.copy(state = state) + } else if (it.dbAttachment.dataHash == null) { + BackupAttachment.State.ATTACHMENT_CDN + } else { + BackupAttachment.State.LOCAL_ONLY } - } else { - attachments + + it.copy(state = state) } return copy( - backupStateLoaded = archiveStateLoaded, - attachments = updatedAttachments, - backedUpMediaIds = backedUpMediaIds + attachments = updatedAttachments ) } } data class BackupAttachment( val dbAttachment: DatabaseAttachment, - val state: State = State.INIT, - val mediaId: String = Base64.encodeUrlSafeWithPadding(Random.nextBytes(15)) + val state: State = State.LOCAL_ONLY ) { - val id: Any = dbAttachment.attachmentId + val id: AttachmentId = dbAttachment.attachmentId val title: String = dbAttachment.attachmentId.toString() enum class State { - INIT, + ATTACHMENT_CDN, LOCAL_ONLY, - UPLOADED, + UPLOADED_UNDOWNLOADED, + UPLOADED_FINAL, IN_PROGRESS } - - companion object { - fun from(backupKey: BackupKey, dbAttachment: DatabaseAttachment): BackupAttachment { - return BackupAttachment( - dbAttachment = dbAttachment, - mediaId = backupKey.deriveMediaId(Base64.decode(dbAttachment.dataHash!!)).toString() - ) - } - } } data class MediaStateError( diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt index 877117948b..10b24cfb5b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/PrivacySettingsFragment.kt @@ -185,7 +185,7 @@ class PrivacySettingsFragment : DSLSettingsFragment(R.string.preferences__privac clickPref( title = DSLSettingsText.from(R.string.PrivacySettingsFragment__blocked), - summary = DSLSettingsText.from(getString(R.string.PrivacySettingsFragment__d_contacts, state.blockedCount)), + summary = DSLSettingsText.from(resources.getQuantityString(R.plurals.PrivacySettingsFragment__d_contacts, state.blockedCount, state.blockedCount)), onClick = { Navigation.findNavController(requireView()) .safeNavigate(R.id.action_privacySettingsFragment_to_blockedUsersActivity) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt index 84b7c0540d..4551e398ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsFragment.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.components.settings.conversation +import android.Manifest import android.app.ActivityOptions import android.content.ActivityNotFoundException import android.content.Context @@ -78,6 +79,7 @@ import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity import org.thoughtcrime.securesms.mediapreview.MediaIntentFactory import org.thoughtcrime.securesms.messagerequests.MessageRequestRepository import org.thoughtcrime.securesms.nicknames.NicknameActivity +import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.profiles.edit.CreateProfileActivity import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientExporter @@ -197,6 +199,10 @@ class ConversationSettingsFragment : DSLSettingsFragment( } } + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults) + } + override fun onOptionsItemSelected(item: MenuItem): Boolean { return if (item.itemId == R.id.action_edit) { val args = ConversationSettingsFragmentArgs.fromBundle(requireArguments()) @@ -410,7 +416,14 @@ class ConversationSettingsFragment : DSLSettingsFragment( .setPositiveButton(android.R.string.ok) { d, _ -> d.dismiss() } .show() } else { - addToGroupStoryDelegate.addToStory(state.recipient.id) + Permissions.with(this@ConversationSettingsFragment) + .request(Manifest.permission.CAMERA) + .ifNecessary() + .withRationaleDialog(getString(R.string.ConversationActivity_to_capture_photos_and_video_allow_signal_access_to_the_camera), R.drawable.symbol_camera_24) + .withPermanentDenialDialog(getString(R.string.ConversationActivity_signal_needs_the_camera_permission_to_take_photos_or_video)) + .onAllGranted { addToGroupStoryDelegate.addToStory(state.recipient.id) } + .onAnyDenied { Toast.makeText(requireContext(), R.string.ConversationActivity_signal_needs_camera_permissions_to_take_photos_or_video, Toast.LENGTH_LONG).show() } + .execute() } }, onVideoClick = { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/CallPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/CallPreference.kt index 28df51273f..42159fafdb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/CallPreference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/CallPreference.kt @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.components.settings.conversation.preferences import androidx.annotation.DrawableRes +import androidx.annotation.StringRes import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.database.CallTable import org.thoughtcrime.securesms.database.MessageTypes @@ -46,10 +47,10 @@ object CallPreference { private fun getCallIcon(call: CallTable.Call): Int { return when (call.messageType) { MessageTypes.MISSED_VIDEO_CALL_TYPE, MessageTypes.MISSED_AUDIO_CALL_TYPE -> R.drawable.symbol_missed_incoming_24 - MessageTypes.INCOMING_AUDIO_CALL_TYPE, MessageTypes.INCOMING_VIDEO_CALL_TYPE -> R.drawable.symbol_arrow_downleft_24 + MessageTypes.INCOMING_AUDIO_CALL_TYPE, MessageTypes.INCOMING_VIDEO_CALL_TYPE -> if (call.isDisplayedAsMissedCallInUi) R.drawable.symbol_missed_incoming_24 else R.drawable.symbol_arrow_downleft_24 MessageTypes.OUTGOING_AUDIO_CALL_TYPE, MessageTypes.OUTGOING_VIDEO_CALL_TYPE -> R.drawable.symbol_arrow_upright_24 MessageTypes.GROUP_CALL_TYPE -> when { - call.event.isMissedCall() -> R.drawable.symbol_missed_incoming_24 + call.isDisplayedAsMissedCallInUi -> R.drawable.symbol_missed_incoming_24 call.event == CallTable.Event.GENERIC_GROUP_CALL || call.event == CallTable.Event.JOINED -> R.drawable.symbol_group_24 call.direction == CallTable.Direction.INCOMING -> R.drawable.symbol_arrow_downleft_24 call.direction == CallTable.Direction.OUTGOING -> R.drawable.symbol_arrow_upright_24 @@ -61,15 +62,14 @@ object CallPreference { private fun getCallType(call: CallTable.Call): String { val id = when (call.messageType) { - MessageTypes.MISSED_AUDIO_CALL_TYPE -> if (call.event == CallTable.Event.MISSED) R.string.MessageRecord_missed_voice_call else R.string.MessageRecord_missed_voice_call_notification_profile - MessageTypes.MISSED_VIDEO_CALL_TYPE -> if (call.event == CallTable.Event.MISSED) R.string.MessageRecord_missed_video_call else R.string.MessageRecord_missed_video_call_notification_profile - MessageTypes.INCOMING_AUDIO_CALL_TYPE -> R.string.MessageRecord_incoming_voice_call - MessageTypes.INCOMING_VIDEO_CALL_TYPE -> R.string.MessageRecord_incoming_video_call + MessageTypes.MISSED_AUDIO_CALL_TYPE -> getMissedCallString(false, call.event) + MessageTypes.MISSED_VIDEO_CALL_TYPE -> getMissedCallString(true, call.event) + MessageTypes.INCOMING_AUDIO_CALL_TYPE -> if (call.isDisplayedAsMissedCallInUi) getMissedCallString(false, call.event) else R.string.MessageRecord_incoming_voice_call + MessageTypes.INCOMING_VIDEO_CALL_TYPE -> if (call.isDisplayedAsMissedCallInUi) getMissedCallString(true, call.event) else R.string.MessageRecord_incoming_video_call MessageTypes.OUTGOING_AUDIO_CALL_TYPE -> R.string.MessageRecord_outgoing_voice_call MessageTypes.OUTGOING_VIDEO_CALL_TYPE -> R.string.MessageRecord_outgoing_video_call MessageTypes.GROUP_CALL_TYPE -> when { - call.event == CallTable.Event.MISSED -> R.string.CallPreference__missed_group_call - call.event == CallTable.Event.MISSED_NOTIFICATION_PROFILE -> R.string.CallPreference__missed_group_call_notification_profile + call.isDisplayedAsMissedCallInUi -> if (call.event == CallTable.Event.MISSED_NOTIFICATION_PROFILE) R.string.CallPreference__missed_group_call_notification_profile else R.string.CallPreference__missed_group_call call.event == CallTable.Event.GENERIC_GROUP_CALL || call.event == CallTable.Event.JOINED -> R.string.CallPreference__group_call call.direction == CallTable.Direction.INCOMING -> R.string.CallPreference__incoming_group_call call.direction == CallTable.Direction.OUTGOING -> R.string.CallPreference__outgoing_group_call @@ -81,6 +81,23 @@ object CallPreference { return context.getString(id) } + @StringRes + private fun getMissedCallString(isVideo: Boolean, callEvent: CallTable.Event): Int { + return if (callEvent == CallTable.Event.MISSED_NOTIFICATION_PROFILE) { + if (isVideo) { + R.string.MessageRecord_missed_video_call_notification_profile + } else { + R.string.MessageRecord_missed_voice_call_notification_profile + } + } else { + if (isVideo) { + R.string.MessageRecord_missed_video_call + } else { + R.string.MessageRecord_missed_voice_call + } + } + } + private fun getCallTime(messageRecord: MessageRecord): String { return DateUtils.getOnlyTimeString(context, messageRecord.timestamp) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/transfercontrols/TransferControlView.kt b/app/src/main/java/org/thoughtcrime/securesms/components/transfercontrols/TransferControlView.kt index 5cf6a69700..b6cd842532 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/transfercontrols/TransferControlView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/transfercontrols/TransferControlView.kt @@ -687,7 +687,7 @@ class TransferControlView @JvmOverloads constructor(context: Context, attrs: Att } Mode.DOWNLOADING_GALLERY, Mode.DOWNLOADING_SINGLE_ITEM, Mode.DOWNLOADING_VIDEO_PLAYABLE, Mode.UPLOADING_GALLERY, Mode.UPLOADING_SINGLE_ITEM -> { - if (currentState.networkProgress.sumCompleted() == 0L || isCompressing(currentState)) { + if (currentState.isUpload && (currentState.networkProgress.sumCompleted() == 0L || isCompressing(currentState))) { binding.secondaryDetailsText.updateLayoutParams { width = ViewGroup.LayoutParams.WRAP_CONTENT } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java index a0cea66faa..196b56a578 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackService.java @@ -34,12 +34,16 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; +import org.thoughtcrime.securesms.attachments.AttachmentId; +import org.thoughtcrime.securesms.attachments.DatabaseAttachment; +import org.thoughtcrime.securesms.database.DatabaseObserver; import org.thoughtcrime.securesms.database.MessageTable; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.MultiDeviceViewedUpdateJob; import org.thoughtcrime.securesms.jobs.SendViewedReceiptJob; +import org.thoughtcrime.securesms.mms.PartUriParser; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.service.KeyCachingService; @@ -65,6 +69,8 @@ public class VoiceNotePlaybackService extends MediaSessionService { private KeyClearedReceiver keyClearedReceiver; private VoiceNotePlayerCallback voiceNotePlayerCallback; + private final DatabaseObserver.Observer attachmentDeletionObserver = this::onAttachmentDeleted; + @Override public void onCreate() { super.onCreate(); @@ -85,6 +91,7 @@ public void onCreate() { setMediaNotificationProvider(new VoiceNoteMediaNotificationProvider(this)); setListener(new MediaSessionServiceListener()); + ApplicationDependencies.getDatabaseObserver().registerAttachmentObserver(attachmentDeletionObserver); } @Override @@ -99,6 +106,7 @@ public void onTaskRemoved(Intent rootIntent) { public void onDestroy() { player.removeListener(playerEventListener); if (mediaSession != null) { + ApplicationDependencies.getDatabaseObserver().unregisterObserver(attachmentDeletionObserver); keyClearedReceiver.unregister(); player.release(); mediaSession.release(); @@ -195,6 +203,40 @@ public void onAudioAttributesChanged(AudioAttributes audioAttributes) { } } + private void onAttachmentDeleted() { + Log.d(TAG, "Database attachment observer invoked."); + ContextCompat.getMainExecutor(getApplicationContext()).execute(() -> { + if (player != null) { + final MediaItem currentItem = player.getCurrentMediaItem(); + if (currentItem == null || currentItem.playbackProperties == null) { + Log.d(TAG, "Current item is null or playback properties are null."); + return; + } + + final Uri currentlyPlayingUri = currentItem.playbackProperties.uri; + + if (currentlyPlayingUri == VoiceNoteMediaItemFactory.NEXT_URI || currentlyPlayingUri == VoiceNoteMediaItemFactory.END_URI) { + Log.v(TAG, "Attachment deleted while voice note service was playing a system tone."); + } + + try { + final AttachmentId partId = new PartUriParser(currentlyPlayingUri).getPartId(); + final DatabaseAttachment attachment = SignalDatabase.attachments().getAttachment(partId); + if (attachment == null) { + player.stop(); + int playingIndex = player.getCurrentMediaItemIndex(); + player.removeMediaItem(playingIndex); + Log.d(TAG, "Currently playing item removed."); + } else { + Log.d(TAG, "Attachment was not null, therefore not deleted, therefore no action taken."); + } + } catch (NumberFormatException ex) { + Log.w(TAG, "Could not parse currently playing URI into an attachmentId.", ex); + } + } + }); + } + /** * Some devices, such as the ASUS Zenfone 8, erroneously report multiple broadcast receivers for {@value Intent#ACTION_MEDIA_BUTTON} in the package manager. * This triggers a failure within the {@link MediaSession} initialization and throws an {@link IllegalStateException}. diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallOverflowPopupWindow.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallOverflowPopupWindow.kt index 801438d234..0f5038bd1c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallOverflowPopupWindow.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallOverflowPopupWindow.kt @@ -30,19 +30,15 @@ class CallOverflowPopupWindow(private val activity: FragmentActivity, parentView LayoutInflater.from(activity).inflate(R.layout.call_overflow_holder, parentViewGroup, false), activity.resources.getDimension(R.dimen.calling_reaction_popup_menu_width).toInt(), activity.resources.getDimension(R.dimen.calling_reaction_popup_menu_height).toInt() - ) { private val raiseHandLabel: TextView = (contentView as LinearLayout).findViewById(R.id.raise_hand_label) init { val root = (contentView as LinearLayout) - if (FeatureFlags.groupCallReactions()) { - val reactionScrubber = root.findViewById(R.id.reaction_scrubber) - reactionScrubber.visible = true - reactionScrubber.initialize(activity.supportFragmentManager) { - ApplicationDependencies.getSignalCallManager().react(it) - dismiss() - } + val reactionScrubber = root.findViewById(R.id.reaction_scrubber) + reactionScrubber.initialize(activity.supportFragmentManager) { + ApplicationDependencies.getSignalCallManager().react(it) + dismiss() } if (FeatureFlags.groupCallRaiseHand()) { val raiseHand = root.findViewById(R.id.raise_hand_layout_parent) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsListUpdatePopupWindow.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsListUpdatePopupWindow.java index 7dfd77463a..fdc387cc3d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsListUpdatePopupWindow.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsListUpdatePopupWindow.java @@ -11,6 +11,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.annotation.PluralsRes; import androidx.annotation.StringRes; import org.thoughtcrime.securesms.R; @@ -141,7 +142,7 @@ private void setDescriptionForRecipients(@NonNull Set private var customEmojiIndex = 0 @@ -48,7 +58,7 @@ class CallReactionScrubber @JvmOverloads constructor( view.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_any_emoji_32)) view.setOnClickListener { val bottomSheet = ReactWithAnyEmojiBottomSheetDialogFragment.createForCallingReactions() - bottomSheet.show(fragmentManager, "CallReaction") + bottomSheet.show(fragmentManager, CUSTOM_REACTION_BOTTOM_SHEET_TAG) } } else { val preferredVariation = SignalStore.emojiValues().getPreferredVariation(emojis[i]) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallView.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallView.java index 01565857a6..ea190d0996 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcCallView.java @@ -96,6 +96,7 @@ public class WebRtcCallView extends InsetAwareConstraintLayout { private RecipientId recipientId; private ImageView answer; private TextView answerWithoutVideoLabel; + private ImageView cameraDirectionToggle; private AccessibleToggleButton ringToggle; private PictureInPictureGestureHelper pictureInPictureGestureHelper; private ImageView overflow; @@ -177,6 +178,7 @@ protected void onFinishInflate() { incomingRingStatus = findViewById(R.id.call_screen_incoming_ring_status); answer = findViewById(R.id.call_screen_answer_call); answerWithoutVideoLabel = findViewById(R.id.call_screen_answer_without_video_label); + cameraDirectionToggle = findViewById(R.id.call_screen_camera_direction_toggle); ringToggle = findViewById(R.id.call_screen_audio_ring_toggle); overflow = findViewById(R.id.call_screen_overflow_button); hangup = findViewById(R.id.call_screen_end_call); @@ -271,6 +273,7 @@ public void onPageSelected(int position) { runIfNonNull(controlsListener, listener -> listener.onRingGroupChanged(isOn, ringToggle.isActivated())); }); + cameraDirectionToggle.setOnClickListener(v -> runIfNonNull(controlsListener, ControlsListener::onCameraDirectionChanged)); smallLocalRender.findViewById(R.id.call_participant_switch_camera).setOnClickListener(v -> runIfNonNull(controlsListener, ControlsListener::onCameraDirectionChanged)); overflow.setOnClickListener(v -> { @@ -352,6 +355,7 @@ public void onPageSelected(int position) { rotatableControls.add(audioToggle); rotatableControls.add(micToggle); rotatableControls.add(videoToggle); + rotatableControls.add(cameraDirectionToggle); rotatableControls.add(decline); rotatableControls.add(smallLocalAudioIndicator); rotatableControls.add(ringToggle); @@ -917,6 +921,7 @@ private static void runIfNonNull(@Nullable T listener, @NonNull Consumer } private void updateButtonStateForLargeButtons() { + cameraDirectionToggle.setImageResource(R.drawable.webrtc_call_screen_camera_toggle); hangup.setImageResource(R.drawable.webrtc_call_screen_hangup); overflow.setImageResource(R.drawable.webrtc_call_screen_overflow_menu); micToggle.setBackgroundResource(R.drawable.webrtc_call_screen_mic_toggle); @@ -927,6 +932,7 @@ private void updateButtonStateForLargeButtons() { } private void updateButtonStateForSmallButtons() { + cameraDirectionToggle.setImageResource(R.drawable.webrtc_call_screen_camera_toggle_small); hangup.setImageResource(R.drawable.webrtc_call_screen_hangup_small); overflow.setImageResource(R.drawable.webrtc_call_screen_overflow_menu_small); micToggle.setBackgroundResource(R.drawable.webrtc_call_screen_mic_toggle_small); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcControls.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcControls.java index 7559176cb0..3fce3a64ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcControls.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/WebRtcControls.java @@ -159,7 +159,7 @@ public boolean displayEndCall() { } public boolean displayOverflow() { - return (FeatureFlags.groupCallReactions() || FeatureFlags.groupCallRaiseHand()) && isAtLeastOutgoing() && hasAtLeastOneRemote && isGroupCall(); + return isAtLeastOutgoing() && hasAtLeastOneRemote && isGroupCall(); } public boolean displayMuteAudio() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/CallInfoView.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/CallInfoView.kt index ed924592c6..8b8dfd8f21 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/CallInfoView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/CallInfoView.kt @@ -34,12 +34,11 @@ import androidx.compose.runtime.rxjava3.subscribeAsState import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView @@ -183,7 +182,7 @@ private fun CallInfo( item { Rows.TextRow( text = stringResource(id = R.string.CallLinkDetailsFragment__share_link), - icon = ImageVector.vectorResource(id = R.drawable.symbol_link_24), + icon = painterResource(id = R.drawable.symbol_link_24), iconModifier = Modifier .background( color = MaterialTheme.colorScheme.surfaceVariant, @@ -446,7 +445,7 @@ private fun CallParticipantRow( if (showIcons && showHandRaised) { Icon( - imageVector = ImageVector.vectorResource(id = R.drawable.symbol_raise_hand_24), + painter = painterResource(id = R.drawable.symbol_raise_hand_24), contentDescription = null, modifier = Modifier.align(Alignment.CenterVertically) ) @@ -454,7 +453,7 @@ private fun CallParticipantRow( if (showIcons && !isVideoEnabled) { Icon( - imageVector = ImageVector.vectorResource(id = R.drawable.symbol_video_slash_24), + painter = painterResource(id = R.drawable.symbol_video_slash_24), contentDescription = null, modifier = Modifier.align(Alignment.CenterVertically) ) @@ -466,7 +465,7 @@ private fun CallParticipantRow( } Icon( - imageVector = ImageVector.vectorResource(id = R.drawable.symbol_mic_slash_24), + painter = painterResource(id = R.drawable.symbol_mic_slash_24), contentDescription = null, modifier = Modifier.align(Alignment.CenterVertically) ) @@ -478,7 +477,7 @@ private fun CallParticipantRow( } Icon( - imageVector = ImageVector.vectorResource(id = R.drawable.symbol_minus_circle_24), + painter = painterResource(id = R.drawable.symbol_minus_circle_24), contentDescription = null, modifier = Modifier .clickable(onClick = onBlockClicked) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/ControlsAndInfoController.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/ControlsAndInfoController.kt index 9d64922890..4a3fed6ee7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/ControlsAndInfoController.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/ControlsAndInfoController.kt @@ -209,7 +209,7 @@ class ControlsAndInfoController( } } - private fun onControlTopChanged() { + fun onControlTopChanged() { val guidelineTop = max(frame.top, coordinator.height - behavior.peekHeight) aboveControlsGuideline.setGuidelineBegin(guidelineTop) webRtcCallView.onControlTopChanged() @@ -321,6 +321,7 @@ class ControlsAndInfoController( val margin = if (controlState.displaySmallCallButtons()) 4.dp else 8.dp setControlConstraints(R.id.call_screen_speaker_toggle, controlState.displayAudioToggle(), margin) + setControlConstraints(R.id.call_screen_camera_direction_toggle, controlState.displayCameraToggle(), margin) setControlConstraints(R.id.call_screen_video_toggle, controlState.displayVideoToggle(), margin) setControlConstraints(R.id.call_screen_audio_mic_toggle, controlState.displayMuteAudio(), margin) setControlConstraints(R.id.call_screen_audio_ring_toggle, controlState.displayRingToggle(), margin) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/RaiseHandSnackbar.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/RaiseHandSnackbar.kt index c4648fd7da..9f64fa0f9e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/RaiseHandSnackbar.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/controls/RaiseHandSnackbar.kt @@ -5,7 +5,6 @@ package org.thoughtcrime.securesms.components.webrtc.controls -import android.content.Context import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.animateContentSize import androidx.compose.animation.expandIn @@ -44,7 +43,6 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.google.android.material.dialog.MaterialAlertDialogBuilder import io.reactivex.rxjava3.core.BackpressureStrategy import kotlinx.coroutines.delay import org.signal.core.ui.theme.SignalTheme @@ -160,7 +158,7 @@ private fun RaiseHand( val context = LocalContext.current TextButton( onClick = { - showLowerHandDialog(context) + ApplicationDependencies.getSignalCallManager().raiseHand(false) }, modifier = Modifier.wrapContentWidth(Alignment.End) ) { @@ -182,16 +180,6 @@ private fun RaiseHand( } } -private fun showLowerHandDialog(context: Context) { - MaterialAlertDialogBuilder(context) - .setTitle(R.string.CallOverflowPopupWindow__lower_your_hand) - .setPositiveButton( - R.string.CallOverflowPopupWindow__lower_hand - ) { _, _ -> ApplicationDependencies.getSignalCallManager().raiseHand(false) } - .setNegativeButton(R.string.CallOverflowPopupWindow__cancel, null) - .show() -} - @Composable private fun getSnackbarText(state: RaiseHandState): String { if (state.isEmpty) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/requests/CallLinkIncomingRequestSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/requests/CallLinkIncomingRequestSheet.kt index 5911cacedb..10aea686a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/requests/CallLinkIncomingRequestSheet.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/requests/CallLinkIncomingRequestSheet.kt @@ -23,11 +23,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView @@ -165,7 +164,7 @@ private fun CallLinkIncomingRequestSheetContent( item { Rows.TextRow( text = stringResource(id = R.string.CallLinkIncomingRequestSheet__approve_entry), - icon = ImageVector.vectorResource(R.drawable.symbol_check_circle_24), + icon = painterResource(R.drawable.symbol_check_circle_24), onClick = onApproveEntry ) } @@ -173,7 +172,7 @@ private fun CallLinkIncomingRequestSheetContent( item { Rows.TextRow( text = stringResource(id = R.string.CallLinkIncomingRequestSheet__deny_entry), - icon = ImageVector.vectorResource(R.drawable.symbol_x_circle_24), + icon = painterResource(R.drawable.symbol_x_circle_24), onClick = onDenyEntry ) } @@ -219,7 +218,7 @@ private fun Title( style = MaterialTheme.typography.headlineMedium ) Icon( - imageVector = ImageVector.vectorResource(id = R.drawable.symbol_person_circle_24), + painter = painterResource(id = R.drawable.symbol_person_circle_24), contentDescription = null, modifier = Modifier .padding(start = 6.dp) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index 5560f8735a..a44dbd1395 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -39,6 +39,7 @@ import android.text.style.URLSpan; import android.util.AttributeSet; import android.util.TypedValue; +import android.view.GestureDetector; import android.view.MotionEvent; import android.view.TouchDelegate; import android.view.View; @@ -227,6 +228,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo private Stub